From 51a75cd0fd12a13de9fbf0897c3076d8f207948d Mon Sep 17 00:00:00 2001 From: Amar Takhar Date: Mon, 19 Jul 2010 17:53:29 +0000 Subject: [PATCH] Split the preferences to make managing the base code from the actual options. I should have done this yesterday however I completely underestimated how annoying it would be having it all in the same file. Originally committed to SVN as r4698. --- .../aegisub_vs2008/aegisub_vs2008.vcproj | 12 + aegisub/src/Makefile.am | 1 + aegisub/src/preferences.cpp | 674 ++++++------------ aegisub/src/preferences_base.cpp | 253 +++++++ aegisub/src/preferences_base.h | 62 ++ 5 files changed, 534 insertions(+), 468 deletions(-) create mode 100644 aegisub/src/preferences_base.cpp create mode 100644 aegisub/src/preferences_base.h diff --git a/aegisub/build/aegisub_vs2008/aegisub_vs2008.vcproj b/aegisub/build/aegisub_vs2008/aegisub_vs2008.vcproj index 0a84db7a5..12868ea65 100644 --- a/aegisub/build/aegisub_vs2008/aegisub_vs2008.vcproj +++ b/aegisub/build/aegisub_vs2008/aegisub_vs2008.vcproj @@ -1251,6 +1251,18 @@ RelativePath="..\..\src\preferences.cpp" > + + + + + + { -public: - - enum Style { - PAGE_DEFAULT = 0x00000000, - PAGE_SCROLL = 0x00000001, - PAGE_SUB = 0x00000002 - }; - - wxSizer *sizer; - - OptionPage(wxTreebook *book, wxString name, int style = PAGE_DEFAULT): - wxScrolled(book, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL) { - - if (style & PAGE_SUB) { - book->AddSubPage(this, name, true); - } else { - book->AddPage(this, name, true); - } - - if (style & PAGE_SCROLL) { - SetScrollbars(0, 20, 0, 50); - } else { - SetScrollbars(0, 0, 0, 0); - } - - sizer = new wxBoxSizer(wxVERTICAL); - } - - ~OptionPage() {} - - void CellSkip(wxFlexGridSizer *&flex) { - flex->Add(new wxStaticText(this, wxID_ANY , wxEmptyString), 0, wxALL, 5); - } - - void OptionAdd(wxFlexGridSizer *&flex, const wxString &name, const char *opt_name, double min=0, double max=100, double inc=1) { - - agi::OptionValue *opt = OPT_GET(opt_name); - - int type = opt->GetType(); - - switch (type) { - - case agi::OptionValue::Type_Bool: { - wxCheckBox *cb = new wxCheckBox(this, wxID_ANY, name); - flex->Add(cb, 1, wxEXPAND, 0); - cb->SetValue(opt->GetBool()); - break; - } - - case agi::OptionValue::Type_Int: - case agi::OptionValue::Type_Double: { - flex->Add(new wxStaticText(this, wxID_ANY, name), 1, wxALIGN_CENTRE_VERTICAL); - wxSpinCtrlDouble *scd = new wxSpinCtrlDouble(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, min, max, opt->GetInt(), inc); - flex->Add(scd); - - break; - } - - case agi::OptionValue::Type_String: { - flex->Add(new wxStaticText(this, wxID_ANY, name), 1, wxALIGN_CENTRE_VERTICAL); - wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY , lagi_wxString(opt->GetString()), wxDefaultPosition, wxDefaultSize); - flex->Add(text, 1, wxEXPAND); - break; - } - - case agi::OptionValue::Type_Colour: { - flex->Add(new wxStaticText(this, wxID_ANY, name), 1, wxALIGN_CENTRE_VERTICAL); - flex->Add(new ColourButton(this, wxID_ANY, wxSize(40,10), lagi_wxColour(opt->GetColour()))); - break; - } - - default: - throw PreferenceNotSupported("Unsupported type"); - } - } - - - void OptionChoice(wxFlexGridSizer *&flex, const wxString &name, const wxArrayString &choices, const char *opt_name) { - agi::OptionValue *opt = OPT_GET(opt_name); - - int type = opt->GetType(); - wxString selection; - - switch (type) { - case agi::OptionValue::Type_Int: { - selection = choices.Item(opt->GetInt()); - break; - } - case agi::OptionValue::Type_String: { - selection.assign(opt->GetString()); - break; - } - default: - throw PreferenceNotSupported("Unsupported type"); - } - - flex->Add(new wxStaticText(this, wxID_ANY, name), 1, wxALIGN_CENTRE_VERTICAL); - wxComboBox *cb = new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, choices, wxCB_READONLY | wxCB_DROPDOWN); - cb->SetValue(selection); - flex->Add(cb, 1, wxEXPAND, 0); - } - - - wxFlexGridSizer* PageSizer(wxString name) { - wxSizer *tmp_sizer = new wxStaticBoxSizer(wxHORIZONTAL, this, name); - sizer->Add(tmp_sizer, 0,wxEXPAND, 5); - wxFlexGridSizer *flex = new wxFlexGridSizer(2,5,5); - flex->AddGrowableCol(0,1); - tmp_sizer->Add(flex, 1, wxEXPAND, 5); - sizer->AddSpacer(8); - return flex; - } - - - void OptionBrowse(wxFlexGridSizer *&flex, const wxString &name, BrowseType browse_type, const char *opt_name) { - - agi::OptionValue *opt = OPT_GET(opt_name); - - if (opt->GetType() != agi::OptionValue::Type_String) - throw PreferenceIncorrectType("Option must be agi::OptionValue::Type_String for BrowseButton."); - - flex->Add(new wxStaticText(this, wxID_ANY, name), 1, wxALIGN_CENTRE_VERTICAL); - - wxFlexGridSizer *button_flex = new wxFlexGridSizer(2,5,5); - button_flex->AddGrowableCol(0,1); - flex->Add(button_flex, 1, wxEXPAND, 5); - - wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY , opt->GetString(), wxDefaultPosition, wxDefaultSize); - button_flex->Add(text, 1, wxEXPAND); - BrowseButton *browse = new BrowseButton(this, wxID_ANY, wxEmptyString, browse_type); - browse->Bind(text); - button_flex->Add(browse, 1, wxEXPAND); - } -}; - - -void Preferences::OnOK(wxCommandEvent &event) { - EndModal(0); -} - - -void Preferences::OnApply(wxCommandEvent &event) { -} - - -void Preferences::OnCancel(wxCommandEvent &event) { - EndModal(0); -} - +#include "preferences_base.h" /// General preferences page -class General: public OptionPage { -public: - General(wxTreebook *book): OptionPage(book, _("General")) { +General::General(wxTreebook *book): OptionPage(book, _("General")) { - wxFlexGridSizer *startup = PageSizer(_("Startup")); - OptionAdd(startup, _("Check for updates"), "App/Splash"); - OptionAdd(startup, _("Show Splash Screen"), "App/Splash"); + wxFlexGridSizer *startup = PageSizer(_("Startup")); + OptionAdd(startup, _("Check for updates"), "App/Splash"); + OptionAdd(startup, _("Show Splash Screen"), "App/Splash"); - wxFlexGridSizer *recent = PageSizer(_("Recently Used Lists")); - OptionAdd(recent, _("Files"), "Limits/MRU"); - OptionAdd(recent, _("Find/Replace"), "Limits/Find Replace"); - sizer->AddSpacer(15); + wxFlexGridSizer *recent = PageSizer(_("Recently Used Lists")); + OptionAdd(recent, _("Files"), "Limits/MRU"); + OptionAdd(recent, _("Find/Replace"), "Limits/Find Replace"); + sizer->AddSpacer(15); - wxFlexGridSizer *undo = PageSizer(_("Undo / Redo Settings")); - OptionAdd(undo, _("Undo Levels"), "Limits/MRU"); + wxFlexGridSizer *undo = PageSizer(_("Undo / Redo Settings")); + OptionAdd(undo, _("Undo Levels"), "Limits/MRU"); - SetSizerAndFit(sizer); - } -}; + SetSizerAndFit(sizer); +} /// Subtitles preferences page -class Subtitles: public OptionPage { -public: - Subtitles(wxTreebook *book): OptionPage(book, _("Subtitles")) { +Subtitles::Subtitles(wxTreebook *book): OptionPage(book, _("Subtitles")) { - wxFlexGridSizer *general = PageSizer(_("Options")); - OptionAdd(general, _("Enable call tips"), "App/Call Tips"); - OptionAdd(general, _("Enable syntax highlighting"), "Subtitle/Highlight/Syntax"); - OptionAdd(general, _("Link commiting of times"), "Subtitle/Edit Box/Link Time Boxes Commit"); - OptionAdd(general, _("Overwrite-Insertion in time boxes"), "Subtitle/Time Edit/Insert Mode"); + wxFlexGridSizer *general = PageSizer(_("Options")); + OptionAdd(general, _("Enable call tips"), "App/Call Tips"); + OptionAdd(general, _("Enable syntax highlighting"), "Subtitle/Highlight/Syntax"); + OptionAdd(general, _("Link commiting of times"), "Subtitle/Edit Box/Link Time Boxes Commit"); + OptionAdd(general, _("Overwrite-Insertion in time boxes"), "Subtitle/Time Edit/Insert Mode"); - wxFlexGridSizer *grid = PageSizer(_("Grid")); - OptionAdd(grid, _("Allow grid to take focus"), "Subtitle/Grid/Focus Allow"); - OptionAdd(grid, _("Highlight visible subtitles"), "Subtitle/Grid/Highlight Subtitles in Frame"); + wxFlexGridSizer *grid = PageSizer(_("Grid")); + OptionAdd(grid, _("Allow grid to take focus"), "Subtitle/Grid/Focus Allow"); + OptionAdd(grid, _("Highlight visible subtitles"), "Subtitle/Grid/Highlight Subtitles in Frame"); - SetSizerAndFit(sizer); - } -}; + SetSizerAndFit(sizer); +} /// Audio preferences page -class Audio: public OptionPage { -public: - Audio(wxTreebook *book): OptionPage(book, _("Audio")) { +Audio::Audio(wxTreebook *book): OptionPage(book, _("Audio")) { - wxFlexGridSizer *general = PageSizer(_("Options")); - OptionAdd(general, _("Grab times from line upon selection"), "Audio/Grab Times on Select"); - OptionAdd(general, _("Default mouse wheel to zoom"), "Audio/Wheel Default to Zoom"); - OptionAdd(general, _("Lock scroll on cursor"), "Audio/Lock Scroll on Cursor"); - OptionAdd(general, _("Snap to keyframes"), "Audio/Display/Snap/Keyframes"); - OptionAdd(general, _("Snap to adjacent lines"), "Audio/Display/Snap/Other Lines"); - OptionAdd(general, _("Auto-focus on mouse over"), "Audio/Auto/Focus"); - OptionAdd(general, _("Play audio when stepping in video"), "Audio/Plays When Stepping Video"); - CellSkip(general); - OptionAdd(general, _("Default timing length"), "Timing/Default Duration", 0, 36000); - OptionAdd(general, _("Default lead-in length"), "Audio/Lead/IN", 0, 36000); - OptionAdd(general, _("Default lead-out length"), "Audio/Lead/OUT", 0, 36000); + wxFlexGridSizer *general = PageSizer(_("Options")); + OptionAdd(general, _("Grab times from line upon selection"), "Audio/Grab Times on Select"); + OptionAdd(general, _("Default mouse wheel to zoom"), "Audio/Wheel Default to Zoom"); + OptionAdd(general, _("Lock scroll on cursor"), "Audio/Lock Scroll on Cursor"); + OptionAdd(general, _("Snap to keyframes"), "Audio/Display/Snap/Keyframes"); + OptionAdd(general, _("Snap to adjacent lines"), "Audio/Display/Snap/Other Lines"); + OptionAdd(general, _("Auto-focus on mouse over"), "Audio/Auto/Focus"); + OptionAdd(general, _("Play audio when stepping in video"), "Audio/Plays When Stepping Video"); + CellSkip(general); + OptionAdd(general, _("Default timing length"), "Timing/Default Duration", 0, 36000); + OptionAdd(general, _("Default lead-in length"), "Audio/Lead/IN", 0, 36000); + OptionAdd(general, _("Default lead-out length"), "Audio/Lead/OUT", 0, 36000); - const wxString dtl_arr[3] = { _("Don't show"), _("Show previous"), _("Show all") }; - wxArrayString choice_dtl(3, dtl_arr); - OptionChoice(general, _("Show inactive lines"), choice_dtl, "Audio/Inactive Lines Display Mode"); - OptionAdd(general, _("Start-marker drag sensitivity"), "Audio/Start Drag Sensitivity", 1, 15); + const wxString dtl_arr[3] = { _("Don't show"), _("Show previous"), _("Show all") }; + wxArrayString choice_dtl(3, dtl_arr); + OptionChoice(general, _("Show inactive lines"), choice_dtl, "Audio/Inactive Lines Display Mode"); + OptionAdd(general, _("Start-marker drag sensitivity"), "Audio/Start Drag Sensitivity", 1, 15); - wxFlexGridSizer *display = PageSizer(_("Display Visual Options")); - OptionAdd(display, _("Secondary lines"), "Audio/Display/Draw/Secondary Lines"); - OptionAdd(display, _("Selection background"), "Audio/Display/Draw/Selection Background"); - OptionAdd(display, _("Timeline"), "Audio/Display/Draw/Timeline"); - OptionAdd(display, _("Cursor time"), "Audio/Display/Draw/Cursor Time"); - OptionAdd(display, _("Keyframes"), "Audio/Display/Draw/Keyframes"); - OptionAdd(display, _("Video position"), "Audio/Display/Draw/Video Position"); + wxFlexGridSizer *display = PageSizer(_("Display Visual Options")); + OptionAdd(display, _("Secondary lines"), "Audio/Display/Draw/Secondary Lines"); + OptionAdd(display, _("Selection background"), "Audio/Display/Draw/Selection Background"); + OptionAdd(display, _("Timeline"), "Audio/Display/Draw/Timeline"); + OptionAdd(display, _("Cursor time"), "Audio/Display/Draw/Cursor Time"); + OptionAdd(display, _("Keyframes"), "Audio/Display/Draw/Keyframes"); + OptionAdd(display, _("Video position"), "Audio/Display/Draw/Video Position"); - SetSizerAndFit(sizer); - } -}; + SetSizerAndFit(sizer); +} /// Video preferences page -class Video: public OptionPage { -public: - Video(wxTreebook *book): OptionPage(book, _("Video")) { +Video::Video(wxTreebook *book): OptionPage(book, _("Video")) { - wxFlexGridSizer *general = PageSizer(_("Options")); - OptionAdd(general, _("Show keyframes in slider"), "Video/Slider/Show Keyframes"); - OptionAdd(general, _("Always show visual tools"), "Tool/Visual/Always Show"); + wxFlexGridSizer *general = PageSizer(_("Options")); + OptionAdd(general, _("Show keyframes in slider"), "Video/Slider/Show Keyframes"); + OptionAdd(general, _("Always show visual tools"), "Tool/Visual/Always Show"); - const wxString cres_arr[3] = { _("Never"), _("Ask"), _("Always") }; - wxArrayString choice_res(3, cres_arr); - OptionChoice(general, _("Match video resolution on open"), choice_res, "Video/Check Script Res"); + const wxString cres_arr[3] = { _("Never"), _("Ask"), _("Always") }; + wxArrayString choice_res(3, cres_arr); + OptionChoice(general, _("Match video resolution on open"), choice_res, "Video/Check Script Res"); - const wxString czoom_arr[24] = { _T("12.5%"), _T("25%"), _T("37.5%"), _T("50%"), _T("62.5%"), _T("75%"), _T("87.5%"), _T("100%"), _T("112.5%"), _T("125%"), _T("137.5%"), _T("150%"), _T("162.5%"), _T("175%"), _T("187.5%"), _T("200%"), _T("212.5%"), _T("225%"), _T("237.5%"), _T("250%"), _T("262.5%"), _T("275%"), _T("287.5%"), _T("300%") }; - wxArrayString choice_zoom(24, czoom_arr); - OptionChoice(general, _("Default Zoom"), choice_zoom, "Video/Default Zoom"); + const wxString czoom_arr[24] = { _T("12.5%"), _T("25%"), _T("37.5%"), _T("50%"), _T("62.5%"), _T("75%"), _T("87.5%"), _T("100%"), _T("112.5%"), _T("125%"), _T("137.5%"), _T("150%"), _T("162.5%"), _T("175%"), _T("187.5%"), _T("200%"), _T("212.5%"), _T("225%"), _T("237.5%"), _T("250%"), _T("262.5%"), _T("275%"), _T("287.5%"), _T("300%") }; + wxArrayString choice_zoom(24, czoom_arr); + OptionChoice(general, _("Default Zoom"), choice_zoom, "Video/Default Zoom"); - OptionAdd(general, _("Fast jump step in frames"), "Video/Slider/Fast Jump Step"); + OptionAdd(general, _("Fast jump step in frames"), "Video/Slider/Fast Jump Step"); - const wxString cscr_arr[3] = { _("?video"), _("?script"), _(".") }; - wxArrayString scr_res(3, cscr_arr); - OptionChoice(general, _("Screenshot save path"), scr_res, "Path/Screenshot"); + const wxString cscr_arr[3] = { _("?video"), _("?script"), _(".") }; + wxArrayString scr_res(3, cscr_arr); + OptionChoice(general, _("Screenshot save path"), scr_res, "Path/Screenshot"); - SetSizerAndFit(sizer); - } -}; + SetSizerAndFit(sizer); +} /// Interface preferences page -class Interface: public OptionPage { -public: - Interface(wxTreebook *book): OptionPage(book, _("Interface")) { +Interface::Interface(wxTreebook *book): OptionPage(book, _("Interface")) { - wxFlexGridSizer *grid = PageSizer(_("Subtitle Grid")); - OptionBrowse(grid, _("Font face"), BROWSE_FONT, "Subtitle/Grid/Font Face"); - OptionAdd(grid, _("Font size"), "Subtitle/Grid/Font Size", 3, 42); + wxFlexGridSizer *grid = PageSizer(_("Subtitle Grid")); + OptionBrowse(grid, _("Font face"), BROWSE_FONT, "Subtitle/Grid/Font Face"); + OptionAdd(grid, _("Font size"), "Subtitle/Grid/Font Size", 3, 42); - OptionAdd(grid, _("Hide overrides symbol"), "Subtitle/Grid/Hide Overrides Char"); + OptionAdd(grid, _("Hide overrides symbol"), "Subtitle/Grid/Hide Overrides Char"); - SetSizerAndFit(sizer); - } -}; + SetSizerAndFit(sizer); +} /// Interface Colours preferences subpage -class Interface_Colours: public OptionPage { -public: - Interface_Colours(wxTreebook *book): OptionPage(book, _("Colours"), PAGE_SCROLL|PAGE_SUB) { +Interface_Colours::Interface_Colours(wxTreebook *book): OptionPage(book, _("Colours"), PAGE_SCROLL|PAGE_SUB) { - wxFlexGridSizer *general = PageSizer(_("General")); - OptionAdd(general, _("Modified Background"), "Colour/Background/Modified"); + wxFlexGridSizer *general = PageSizer(_("General")); + OptionAdd(general, _("Modified Background"), "Colour/Background/Modified"); - wxFlexGridSizer *audio = PageSizer(_("Audio Display")); - OptionAdd(audio, _("Play cursor"), "Colour/Audio Display/Play Cursor"); - OptionAdd(audio, _("Background"), "Colour/Audio Display/Background/Background"); - OptionAdd(audio, _("Selection background"), "Colour/Audio Display/Background/Selection"); - OptionAdd(audio, _("Selection background modified"), "Colour/Audio Display/Background/Selection Modified"); - OptionAdd(audio, _("Seconds boundaries"), "Colour/Audio Display/Seconds Boundaries"); - OptionAdd(audio, _("Waveform"), "Colour/Audio Display/Waveform"); - OptionAdd(audio, _("Waveform selected"), "Colour/Audio Display/Waveform Selected"); - OptionAdd(audio, _("Waveform Modified"), "Colour/Audio Display/Waveform Modified"); - OptionAdd(audio, _("Waveform Inactive"), "Colour/Audio Display/Waveform Inactive"); - OptionAdd(audio, _("Line boundary start"), "Colour/Audio Display/Line boundary Start"); - OptionAdd(audio, _("Line boundary end"), "Colour/Audio Display/Line boundary End"); - OptionAdd(audio, _("Line boundary inactive line"), "Colour/Audio Display/Line Boundary Inactive Line"); - OptionAdd(audio, _("Syllable text"), "Colour/Audio Display/Syllable Text"); - OptionAdd(audio, _("Syllable boundaries"), "Colour/Audio Display/Syllable Boundaries"); + wxFlexGridSizer *audio = PageSizer(_("Audio Display")); + OptionAdd(audio, _("Play cursor"), "Colour/Audio Display/Play Cursor"); + OptionAdd(audio, _("Background"), "Colour/Audio Display/Background/Background"); + OptionAdd(audio, _("Selection background"), "Colour/Audio Display/Background/Selection"); + OptionAdd(audio, _("Selection background modified"), "Colour/Audio Display/Background/Selection Modified"); + OptionAdd(audio, _("Seconds boundaries"), "Colour/Audio Display/Seconds Boundaries"); + OptionAdd(audio, _("Waveform"), "Colour/Audio Display/Waveform"); + OptionAdd(audio, _("Waveform selected"), "Colour/Audio Display/Waveform Selected"); + OptionAdd(audio, _("Waveform Modified"), "Colour/Audio Display/Waveform Modified"); + OptionAdd(audio, _("Waveform Inactive"), "Colour/Audio Display/Waveform Inactive"); + OptionAdd(audio, _("Line boundary start"), "Colour/Audio Display/Line boundary Start"); + OptionAdd(audio, _("Line boundary end"), "Colour/Audio Display/Line boundary End"); + OptionAdd(audio, _("Line boundary inactive line"), "Colour/Audio Display/Line Boundary Inactive Line"); + OptionAdd(audio, _("Syllable text"), "Colour/Audio Display/Syllable Text"); + OptionAdd(audio, _("Syllable boundaries"), "Colour/Audio Display/Syllable Boundaries"); - wxFlexGridSizer *syntax = PageSizer(_("Syntax Highlighting")); - OptionAdd(syntax, _("Normal"), "Colour/Subtitle/Syntax/Normal"); - OptionAdd(syntax, _("Brackets"), "Colour/Subtitle/Syntax/Brackets"); - OptionAdd(syntax, _("Slashes and Parentheses"), "Colour/Subtitle/Syntax/Slashes"); - OptionAdd(syntax, _("Tags"), "Colour/Subtitle/Syntax/Highlight Tags"); - OptionAdd(syntax, _("Parameters"), "Colour/Subtitle/Syntax/Parameters"); - OptionAdd(syntax, _("Error"), "Colour/Subtitle/Syntax/Error"); - OptionAdd(syntax, _("Error Background"), "Colour/Subtitle/Syntax/Background/Error"); - OptionAdd(syntax, _("Line Break"), "Colour/Subtitle/Syntax/Line Break"); - OptionAdd(syntax, _("Karaoke templates"), "Colour/Subtitle/Syntax/Karaoke Template"); + wxFlexGridSizer *syntax = PageSizer(_("Syntax Highlighting")); + OptionAdd(syntax, _("Normal"), "Colour/Subtitle/Syntax/Normal"); + OptionAdd(syntax, _("Brackets"), "Colour/Subtitle/Syntax/Brackets"); + OptionAdd(syntax, _("Slashes and Parentheses"), "Colour/Subtitle/Syntax/Slashes"); + OptionAdd(syntax, _("Tags"), "Colour/Subtitle/Syntax/Highlight Tags"); + OptionAdd(syntax, _("Parameters"), "Colour/Subtitle/Syntax/Parameters"); + OptionAdd(syntax, _("Error"), "Colour/Subtitle/Syntax/Error"); + OptionAdd(syntax, _("Error Background"), "Colour/Subtitle/Syntax/Background/Error"); + OptionAdd(syntax, _("Line Break"), "Colour/Subtitle/Syntax/Line Break"); + OptionAdd(syntax, _("Karaoke templates"), "Colour/Subtitle/Syntax/Karaoke Template"); - wxFlexGridSizer *grid = PageSizer(_("Subtitle Grid")); - OptionAdd(grid, _("Standard foreground"), "Colour/Subtitle Grid/Standard"); - OptionAdd(grid, _("Standard background"), "Colour/Subtitle Grid/Background/Background"); - OptionAdd(grid, _("Selection foreground"), "Colour/Subtitle Grid/Selection"); - OptionAdd(grid, _("Selection background"), "Colour/Subtitle Grid/Background/Selection"); - OptionAdd(grid, _("Comment background"), "Colour/Subtitle Grid/Background/Comment"); - OptionAdd(grid, _("Selected comment background"), "Colour/Subtitle Grid/Background/Selected Comment"); - OptionAdd(grid, _("Left Column"), "Colour/Subtitle Grid/Left Column"); - OptionAdd(grid, _("Active Line Border"), "Colour/Subtitle Grid/Active Border"); - OptionAdd(grid, _("Lines"), "Colour/Subtitle Grid/Lines"); + wxFlexGridSizer *grid = PageSizer(_("Subtitle Grid")); + OptionAdd(grid, _("Standard foreground"), "Colour/Subtitle Grid/Standard"); + OptionAdd(grid, _("Standard background"), "Colour/Subtitle Grid/Background/Background"); + OptionAdd(grid, _("Selection foreground"), "Colour/Subtitle Grid/Selection"); + OptionAdd(grid, _("Selection background"), "Colour/Subtitle Grid/Background/Selection"); + OptionAdd(grid, _("Comment background"), "Colour/Subtitle Grid/Background/Comment"); + OptionAdd(grid, _("Selected comment background"), "Colour/Subtitle Grid/Background/Selected Comment"); + OptionAdd(grid, _("Left Column"), "Colour/Subtitle Grid/Left Column"); + OptionAdd(grid, _("Active Line Border"), "Colour/Subtitle Grid/Active Border"); + OptionAdd(grid, _("Lines"), "Colour/Subtitle Grid/Lines"); - SetSizerAndFit(sizer); - } -}; + SetSizerAndFit(sizer); +} /// Interface Hotkeys preferences subpage -class Interface_Hotkeys: public OptionPage { -public: - Interface_Hotkeys(wxTreebook *book): OptionPage(book, _("Hotkeys"), PAGE_SUB) { +Interface_Hotkeys::Interface_Hotkeys(wxTreebook *book): OptionPage(book, _("Hotkeys"), PAGE_SUB) { - wxFlexGridSizer *hotkeys = PageSizer(_("Hotkeys")); - hotkeys->Add(new wxStaticText(this, wxID_ANY, _T("To be added after hotkey rewrite.")), 0, wxALL, 5); - SetSizerAndFit(sizer); - } -}; + wxFlexGridSizer *hotkeys = PageSizer(_("Hotkeys")); + hotkeys->Add(new wxStaticText(this, wxID_ANY, _T("To be added after hotkey rewrite.")), 0, wxALL, 5); + SetSizerAndFit(sizer); +} -/// Paths preferences page -class Paths: public OptionPage { -public: - Paths(wxTreebook *book): OptionPage(book, _("Paths")) { +/// Paths preferences page class Paths: public OptionPage { public: +Paths::Paths(wxTreebook *book): OptionPage(book, _("Paths")) { - wxFlexGridSizer *general = PageSizer(_("General")); - general->Add(new wxStaticText(this, wxID_ANY, _T("TBD..")), 0, wxALL, 5); + wxFlexGridSizer *general = PageSizer(_("General")); + general->Add(new wxStaticText(this, wxID_ANY, _T("TBD..")), 0, wxALL, 5); - SetSizerAndFit(sizer); - } -}; + SetSizerAndFit(sizer); +} /// File Associations preferences page -class File_Associations: public OptionPage { -public: - File_Associations(wxTreebook *book): OptionPage(book, _("File Associations")) { +File_Associations::File_Associations(wxTreebook *book): OptionPage(book, _("File Associations")) { - wxFlexGridSizer *assoc = PageSizer(_("General")); - assoc->Add(new wxStaticText(this, wxID_ANY, _T("TBD..")), 0, wxALL, 5); + wxFlexGridSizer *assoc = PageSizer(_("General")); + assoc->Add(new wxStaticText(this, wxID_ANY, _T("TBD..")), 0, wxALL, 5); - SetSizerAndFit(sizer); - } -}; + SetSizerAndFit(sizer); +} /// Backup preferences page -class Backup: public OptionPage { -public: - Backup(wxTreebook *book): OptionPage(book, _("Backup")) { - wxFlexGridSizer *save = PageSizer(_("Automatic Save")); - OptionAdd(save, _("Enable"), "App/Auto/Backup"); - CellSkip(save); - OptionAdd(save, _("Interval in seconds."), "App/Auto/Save Every Seconds"); - OptionBrowse(save, _("Path"), BROWSE_FOLDER, "Path/Auto/Save"); +Backup::Backup(wxTreebook *book): OptionPage(book, _("Backup")) { + wxFlexGridSizer *save = PageSizer(_("Automatic Save")); + OptionAdd(save, _("Enable"), "App/Auto/Backup"); + CellSkip(save); + OptionAdd(save, _("Interval in seconds."), "App/Auto/Save Every Seconds"); + OptionBrowse(save, _("Path"), BROWSE_FOLDER, "Path/Auto/Save"); - wxFlexGridSizer *backup = PageSizer(_("Automatic Backup")); - CellSkip(backup); - OptionAdd(backup, _("Enable"), "App/Auto/Backup"); - OptionBrowse(backup, _("Path"), BROWSE_FOLDER, "Path/Auto/Backup"); + wxFlexGridSizer *backup = PageSizer(_("Automatic Backup")); + CellSkip(backup); + OptionAdd(backup, _("Enable"), "App/Auto/Backup"); + OptionBrowse(backup, _("Path"), BROWSE_FOLDER, "Path/Auto/Backup"); - SetSizerAndFit(sizer); - } -}; + SetSizerAndFit(sizer); +} /// Automation preferences page -class Automation: public OptionPage { -public: - Automation(wxTreebook *book): OptionPage(book, _("Automation")) { - wxFlexGridSizer *general = PageSizer(_("General")); +Automation::Automation(wxTreebook *book): OptionPage(book, _("Automation")) { + wxFlexGridSizer *general = PageSizer(_("General")); - OptionAdd(general, _("Base path"), "Path/Automation/Base"); - OptionAdd(general, _("Include path"), "Path/Automation/Include"); - OptionAdd(general, _("Auto-load path"), "Path/Automation/Autoload"); + OptionAdd(general, _("Base path"), "Path/Automation/Base"); + OptionAdd(general, _("Include path"), "Path/Automation/Include"); + OptionAdd(general, _("Auto-load path"), "Path/Automation/Autoload"); - const wxString tl_arr[6] = { _("Fatal"), _("Error"), _("Warning"), _("Hint"), _("Debug"), _("Trace") }; - wxArrayString tl_choice(6, tl_arr); - OptionChoice(general, _("Trace level"), tl_choice, "Automation/Trace Level"); + const wxString tl_arr[6] = { _("Fatal"), _("Error"), _("Warning"), _("Hint"), _("Debug"), _("Trace") }; + wxArrayString tl_choice(6, tl_arr); + OptionChoice(general, _("Trace level"), tl_choice, "Automation/Trace Level"); - const wxString tp_arr[3] = { _("Normal"), _("Below Normal (recommended)"), _("Lowest") }; - wxArrayString tp_choice(3, tp_arr); - OptionChoice(general, _("Thread priority"), tp_choice, "Automation/Lua/Thread Priority"); + const wxString tp_arr[3] = { _("Normal"), _("Below Normal (recommended)"), _("Lowest") }; + wxArrayString tp_choice(3, tp_arr); + OptionChoice(general, _("Thread priority"), tp_choice, "Automation/Lua/Thread Priority"); - const wxString ar_arr[4] = { _("No scripts"), _("Subtitle-local scripts"), _("Global autoload scripts"), _("All scripts") }; - wxArrayString ar_choice(4, ar_arr); - OptionChoice(general, _("Autoreload on Export"), ar_choice, "Automation/Autoreload Mode"); + const wxString ar_arr[4] = { _("No scripts"), _("Subtitle-local scripts"), _("Global autoload scripts"), _("All scripts") }; + wxArrayString ar_choice(4, ar_arr); + OptionChoice(general, _("Autoreload on Export"), ar_choice, "Automation/Autoreload Mode"); - SetSizerAndFit(sizer); - } -}; + SetSizerAndFit(sizer); +} /// Advanced preferences page -class Advanced: public OptionPage { -public: - Advanced(wxTreebook *book): OptionPage(book, _("Advanced")) { - wxFlexGridSizer *general = PageSizer(_("General")); +Advanced::Advanced(wxTreebook *book): OptionPage(book, _("Advanced")) { + wxFlexGridSizer *general = PageSizer(_("General")); - wxStaticText *warning = new wxStaticText(this, wxID_ANY ,_("Changing these settings might result in bugs and/or crashes. Do not touch these unless you know what you're doing.")); - warning->SetFont(wxFont(12, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD)); - sizer->Fit(this); - warning->Wrap(400); - general->Add(warning, 0, wxALL, 5); + wxStaticText *warning = new wxStaticText(this, wxID_ANY ,_("Changing these settings might result in bugs and/or crashes. Do not touch these unless you know what you're doing.")); + warning->SetFont(wxFont(12, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD)); + sizer->Fit(this); + warning->Wrap(400); + general->Add(warning, 0, wxALL, 5); - SetSizerAndFit(sizer); - } -}; + SetSizerAndFit(sizer); +} /// Advanced Interface preferences subpage -class Advanced_Interface: public OptionPage { -public: - Advanced_Interface(wxTreebook *book): OptionPage(book, _("Backup"), PAGE_SUB) { - wxFlexGridSizer *interface_ = PageSizer(_("Interface")); +Advanced_Interface::Advanced_Interface(wxTreebook *book): OptionPage(book, _("Backup"), PAGE_SUB) { + wxFlexGridSizer *interface_ = PageSizer(_("Interface")); - interface_->Add(new wxStaticText(this, wxID_ANY, _T("TBD..")), 0, wxALL, 5); + interface_->Add(new wxStaticText(this, wxID_ANY, _T("TBD..")), 0, wxALL, 5); - SetSizerAndFit(sizer); - } -}; + SetSizerAndFit(sizer); +} /// Advanced Audio preferences subpage -class Advanced_Audio: public OptionPage { -public: - Advanced_Audio(wxTreebook *book): OptionPage(book, _("Audio"), PAGE_SUB) { - wxFlexGridSizer *expert = PageSizer(_("Expert")); +Advanced_Audio::Advanced_Audio(wxTreebook *book): OptionPage(book, _("Audio"), PAGE_SUB) { + wxFlexGridSizer *expert = PageSizer(_("Expert")); - wxArrayString ap_choice = AudioProviderFactoryManager::GetFactoryList(); - OptionChoice(expert, _("Audio provider"), ap_choice, "Audio/Provider"); + wxArrayString ap_choice = AudioProviderFactoryManager::GetFactoryList(); + OptionChoice(expert, _("Audio provider"), ap_choice, "Audio/Provider"); - wxArrayString apl_choice = AudioPlayerFactoryManager::GetFactoryList(); - OptionChoice(expert, _("Audio player"), apl_choice, "Audio/Player"); + wxArrayString apl_choice = AudioPlayerFactoryManager::GetFactoryList(); + OptionChoice(expert, _("Audio player"), apl_choice, "Audio/Player"); - wxFlexGridSizer *cache = PageSizer(_("Cache")); - const wxString ct_arr[3] = { _("None (NOT RECOMMENDED)"), _("RAM"), _("Hard Disk") }; - wxArrayString ct_choice(3, ct_arr); - OptionChoice(cache, _("Cache type"), ct_choice, "Audio/Cache/Type"); + wxFlexGridSizer *cache = PageSizer(_("Cache")); + const wxString ct_arr[3] = { _("None (NOT RECOMMENDED)"), _("RAM"), _("Hard Disk") }; + wxArrayString ct_choice(3, ct_arr); + OptionChoice(cache, _("Cache type"), ct_choice, "Audio/Cache/Type"); - OptionBrowse(cache, _("Path"), BROWSE_FOLDER, "Audio/Cache/HD/Location"); - OptionAdd(cache, _("File name"), "Audio/Cache/HD/Name"); + OptionBrowse(cache, _("Path"), BROWSE_FOLDER, "Audio/Cache/HD/Location"); + OptionAdd(cache, _("File name"), "Audio/Cache/HD/Name"); - wxFlexGridSizer *spectrum = PageSizer(_("Spectrum")); + wxFlexGridSizer *spectrum = PageSizer(_("Spectrum")); - OptionAdd(spectrum, _("Cutoff"), "Audio/Renderer/Spectrum/Cutoff"); + OptionAdd(spectrum, _("Cutoff"), "Audio/Renderer/Spectrum/Cutoff"); - const wxString sq_arr[4] = { _("Regular quality"), _("Better quality"), _("High quality"), _("Insane quality") }; - wxArrayString sq_choice(4, sq_arr); - OptionChoice(spectrum, _("Quality"), sq_choice, "Audio/Renderer/Spectrum/Quality"); + const wxString sq_arr[4] = { _("Regular quality"), _("Better quality"), _("High quality"), _("Insane quality") }; + wxArrayString sq_choice(4, sq_arr); + OptionChoice(spectrum, _("Quality"), sq_choice, "Audio/Renderer/Spectrum/Quality"); - OptionAdd(spectrum, _("Cache memory max (MB)"), "Audio/Renderer/Spectrum/Memory Max", 2, 1024); + OptionAdd(spectrum, _("Cache memory max (MB)"), "Audio/Renderer/Spectrum/Memory Max", 2, 1024); #if defined(WIN32) || defined(SHOW_ALL) - wxFlexGridSizer *windows = PageSizer(_("Windows Specific")); - const wxString adm_arr[3] = { _T("ConvertToMono"), _T("GetLeftChannel"), _T("GetRightChannel") }; - wxArrayString adm_choice(3, adm_arr); - OptionChoice(windows, _("Avisynth down-mixer"), adm_choice, "Audio/Downmixer"); + wxFlexGridSizer *windows = PageSizer(_("Windows Specific")); + const wxString adm_arr[3] = { _T("ConvertToMono"), _T("GetLeftChannel"), _T("GetRightChannel") }; + wxArrayString adm_choice(3, adm_arr); + OptionChoice(windows, _("Avisynth down-mixer"), adm_choice, "Audio/Downmixer"); #endif - SetSizerAndFit(sizer); - } -}; + SetSizerAndFit(sizer); +} /// Advanced Video preferences subpage -class Advanced_Video: public OptionPage { -public: - Advanced_Video(wxTreebook *book): OptionPage(book, _("Video")) { - wxFlexGridSizer *expert = PageSizer(_("Expert")); +Advanced_Video::Advanced_Video(wxTreebook *book): OptionPage(book, _("Video")) { + wxFlexGridSizer *expert = PageSizer(_("Expert")); - wxArrayString vp_choice = VideoProviderFactoryManager::GetFactoryList(); - OptionChoice(expert, _("Video provider"), vp_choice, "Video/Provider"); + wxArrayString vp_choice = VideoProviderFactoryManager::GetFactoryList(); + OptionChoice(expert, _("Video provider"), vp_choice, "Video/Provider"); - wxArrayString sp_choice = SubtitlesProviderFactoryManager::GetFactoryList(); - OptionChoice(expert, _("Subtitle provider"), sp_choice, "Subtitle/Provider"); + wxArrayString sp_choice = SubtitlesProviderFactoryManager::GetFactoryList(); + OptionChoice(expert, _("Subtitle provider"), sp_choice, "Subtitle/Provider"); #if defined(WIN32) || defined(SHOW_ALL) - wxFlexGridSizer *windows = PageSizer(_("Windows Specific")); - OptionAdd(windows, _("Allow pre-2.56a Avisynth"), "Provider/Avisynth/Allow Ancient"); - CellSkip(windows); - OptionAdd(windows, _("Avisynth memory limit"), "Provider/Avisynth/Memory Max"); + wxFlexGridSizer *windows = PageSizer(_("Windows Specific")); + OptionAdd(windows, _("Allow pre-2.56a Avisynth"), "Provider/Avisynth/Allow Ancient"); + CellSkip(windows); + OptionAdd(windows, _("Avisynth memory limit"), "Provider/Avisynth/Memory Max"); #endif - SetSizerAndFit(sizer); - } -}; - - -Preferences::Preferences(wxWindow *parent): wxDialog(parent, -1, _("Preferences"), wxDefaultPosition, wxSize(-1, 500)) { -// SetIcon(BitmapToIcon(GETIMAGE(options_button_24))); - - book = new wxTreebook(this, -1, wxDefaultPosition, wxDefaultSize); - general = new General(book); - subtitles = new Subtitles(book); - audio = new Audio(book); - video = new Video(book); - interface_ = new Interface(book); - interface_colours = new Interface_Colours(book); - interface_hotkeys = new Interface_Hotkeys(book); - paths = new Paths(book); - file_associations = new File_Associations(book); - backup = new Backup(book); - automation = new Automation(book); - advanced = new Advanced(book); - advanced_interface = new Advanced_Interface(book); - advanced_audio = new Advanced_Audio(book); - advanced_video = new Advanced_Video(book); - - book->Fit(); - - /// @todo Save the last page and start with that page on next launch. - book->ChangeSelection(0); - - // Bottom Buttons - wxStdDialogButtonSizer *stdButtonSizer = new wxStdDialogButtonSizer(); - stdButtonSizer->AddButton(new wxButton(this,wxID_OK)); - stdButtonSizer->AddButton(new wxButton(this,wxID_CANCEL)); - stdButtonSizer->AddButton(new wxButton(this,wxID_APPLY)); - stdButtonSizer->Realize(); - wxSizer *buttonSizer = new wxBoxSizer(wxHORIZONTAL); - wxButton *defaultButton = new wxButton(this,2342,_("Restore Defaults")); - buttonSizer->Add(defaultButton,0,wxEXPAND); - buttonSizer->AddStretchSpacer(1); - buttonSizer->Add(stdButtonSizer,0,wxEXPAND); - - - // Main Sizer - wxSizer *mainSizer = new wxBoxSizer(wxVERTICAL); - mainSizer->Add(book, 1 ,wxEXPAND | wxALL, 5); - mainSizer->Add(buttonSizer,0,wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM,5); - SetSizerAndFit(mainSizer); - this->SetMinSize(wxSize(-1, 500)); - this->SetMaxSize(wxSize(-1, 500)); - CenterOnParent(); - - - + SetSizerAndFit(sizer); } - -Preferences::~Preferences() { -} - - -BEGIN_EVENT_TABLE(Preferences, wxDialog) - EVT_BUTTON(wxID_OK, Preferences::OnOK) - EVT_BUTTON(wxID_CANCEL, Preferences::OnCancel) - EVT_BUTTON(wxID_APPLY, Preferences::OnApply) -END_EVENT_TABLE() diff --git a/aegisub/src/preferences_base.cpp b/aegisub/src/preferences_base.cpp new file mode 100644 index 000000000..7b3094bdc --- /dev/null +++ b/aegisub/src/preferences_base.cpp @@ -0,0 +1,253 @@ +// Copyright (c) 2010, Amar Takhar +// +// Permission to use, copy, modify, and distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// +// $Id$ + +/// @file preferences_base.cpp +/// @brief Base preferences dialogue classes +/// @ingroup configuration_ui + + +#ifndef AGI_PRE +#include +#include +#include +#include +#include +#include +#include +#include +#endif + +#include + +#include "colour_button.h" +#include "compat.h" +#include "libresrc/libresrc.h" +#include "preferences.h" +#include "main.h" +#include "subtitles_provider_manager.h" +#include "video_provider_manager.h" +#include "audio_player_manager.h" +#include "audio_provider_manager.h" + +#include "preferences_base.h" + +/// Define make all platform-specific options visible in a single view. +#define SHOW_ALL 1 + +DEFINE_BASE_EXCEPTION_NOINNER(PreferencesError, agi::Exception) +DEFINE_SIMPLE_EXCEPTION_NOINNER(PreferenceIncorrectType, PreferencesError, "preferences/incorrect_type") +DEFINE_SIMPLE_EXCEPTION_NOINNER(PreferenceNotSupported, PreferencesError, "preferences/not_supported") + + + +OptionPage::OptionPage(wxTreebook *book, wxString name, int style): + wxScrolled(book, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL) { + + if (style & PAGE_SUB) { + book->AddSubPage(this, name, true); + } else { + book->AddPage(this, name, true); + } + + if (style & PAGE_SCROLL) { + SetScrollbars(0, 20, 0, 50); + } else { + SetScrollbars(0, 0, 0, 0); + } + + sizer = new wxBoxSizer(wxVERTICAL); +} + +OptionPage::~OptionPage() {} + +void OptionPage::CellSkip(wxFlexGridSizer *&flex) { + flex->Add(new wxStaticText(this, wxID_ANY , wxEmptyString), 0, wxALL, 5); +} + +void OptionPage::OptionAdd(wxFlexGridSizer *&flex, const wxString &name, const char *opt_name, double min, double max, double inc) { + + agi::OptionValue *opt = OPT_GET(opt_name); + + int type = opt->GetType(); + + switch (type) { + + case agi::OptionValue::Type_Bool: { + wxCheckBox *cb = new wxCheckBox(this, wxID_ANY, name); + flex->Add(cb, 1, wxEXPAND, 0); + cb->SetValue(opt->GetBool()); + break; + } + + case agi::OptionValue::Type_Int: + case agi::OptionValue::Type_Double: { + flex->Add(new wxStaticText(this, wxID_ANY, name), 1, wxALIGN_CENTRE_VERTICAL); + wxSpinCtrlDouble *scd = new wxSpinCtrlDouble(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, min, max, opt->GetInt(), inc); + flex->Add(scd); + + break; + } + + case agi::OptionValue::Type_String: { + flex->Add(new wxStaticText(this, wxID_ANY, name), 1, wxALIGN_CENTRE_VERTICAL); + wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY , lagi_wxString(opt->GetString()), wxDefaultPosition, wxDefaultSize); + flex->Add(text, 1, wxEXPAND); + break; + } + + case agi::OptionValue::Type_Colour: { + flex->Add(new wxStaticText(this, wxID_ANY, name), 1, wxALIGN_CENTRE_VERTICAL); + flex->Add(new ColourButton(this, wxID_ANY, wxSize(40,10), lagi_wxColour(opt->GetColour()))); + break; + } + + default: + throw PreferenceNotSupported("Unsupported type"); + } +} + + +void OptionPage::OptionChoice(wxFlexGridSizer *&flex, const wxString &name, const wxArrayString &choices, const char *opt_name) { + agi::OptionValue *opt = OPT_GET(opt_name); + + int type = opt->GetType(); + wxString selection; + + switch (type) { + case agi::OptionValue::Type_Int: { + selection = choices.Item(opt->GetInt()); + break; + } + case agi::OptionValue::Type_String: { + selection.assign(opt->GetString()); + break; + } + default: + throw PreferenceNotSupported("Unsupported type"); + } + + flex->Add(new wxStaticText(this, wxID_ANY, name), 1, wxALIGN_CENTRE_VERTICAL); + wxComboBox *cb = new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, choices, wxCB_READONLY | wxCB_DROPDOWN); + cb->SetValue(selection); + flex->Add(cb, 1, wxEXPAND, 0); +} + + +wxFlexGridSizer* OptionPage::PageSizer(wxString name) { + wxSizer *tmp_sizer = new wxStaticBoxSizer(wxHORIZONTAL, this, name); + sizer->Add(tmp_sizer, 0,wxEXPAND, 5); + wxFlexGridSizer *flex = new wxFlexGridSizer(2,5,5); + flex->AddGrowableCol(0,1); + tmp_sizer->Add(flex, 1, wxEXPAND, 5); + sizer->AddSpacer(8); + return flex; +} + + +void OptionPage::OptionBrowse(wxFlexGridSizer *&flex, const wxString &name, BrowseType browse_type, const char *opt_name) { + + agi::OptionValue *opt = OPT_GET(opt_name); + + if (opt->GetType() != agi::OptionValue::Type_String) + throw PreferenceIncorrectType("Option must be agi::OptionValue::Type_String for BrowseButton."); + + flex->Add(new wxStaticText(this, wxID_ANY, name), 1, wxALIGN_CENTRE_VERTICAL); + + wxFlexGridSizer *button_flex = new wxFlexGridSizer(2,5,5); + button_flex->AddGrowableCol(0,1); + flex->Add(button_flex, 1, wxEXPAND, 5); + + wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY , opt->GetString(), wxDefaultPosition, wxDefaultSize); + button_flex->Add(text, 1, wxEXPAND); + BrowseButton *browse = new BrowseButton(this, wxID_ANY, wxEmptyString, browse_type); + browse->Bind(text); + button_flex->Add(browse, 1, wxEXPAND); +} + + +void Preferences::OnOK(wxCommandEvent &event) { + EndModal(0); +} + + +void Preferences::OnApply(wxCommandEvent &event) { +} + + +void Preferences::OnCancel(wxCommandEvent &event) { + EndModal(0); +} + +Preferences::Preferences(wxWindow *parent): wxDialog(parent, -1, _("Preferences"), wxDefaultPosition, wxSize(-1, 500)) { +// SetIcon(BitmapToIcon(GETIMAGE(options_button_24))); + + book = new wxTreebook(this, -1, wxDefaultPosition, wxDefaultSize); + general = new General(book); + subtitles = new Subtitles(book); + audio = new Audio(book); + video = new Video(book); + interface_ = new Interface(book); + interface_colours = new Interface_Colours(book); + interface_hotkeys = new Interface_Hotkeys(book); + paths = new Paths(book); + file_associations = new File_Associations(book); + backup = new Backup(book); + automation = new Automation(book); + advanced = new Advanced(book); + advanced_interface = new Advanced_Interface(book); + advanced_audio = new Advanced_Audio(book); + advanced_video = new Advanced_Video(book); + + book->Fit(); + + /// @todo Save the last page and start with that page on next launch. + book->ChangeSelection(0); + + // Bottom Buttons + wxStdDialogButtonSizer *stdButtonSizer = new wxStdDialogButtonSizer(); + stdButtonSizer->AddButton(new wxButton(this,wxID_OK)); + stdButtonSizer->AddButton(new wxButton(this,wxID_CANCEL)); + stdButtonSizer->AddButton(new wxButton(this,wxID_APPLY)); + stdButtonSizer->Realize(); + wxSizer *buttonSizer = new wxBoxSizer(wxHORIZONTAL); + wxButton *defaultButton = new wxButton(this,2342,_("Restore Defaults")); + buttonSizer->Add(defaultButton,0,wxEXPAND); + buttonSizer->AddStretchSpacer(1); + buttonSizer->Add(stdButtonSizer,0,wxEXPAND); + + + // Main Sizer + wxSizer *mainSizer = new wxBoxSizer(wxVERTICAL); + mainSizer->Add(book, 1 ,wxEXPAND | wxALL, 5); + mainSizer->Add(buttonSizer,0,wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM,5); + SetSizerAndFit(mainSizer); + this->SetMinSize(wxSize(-1, 500)); + this->SetMaxSize(wxSize(-1, 500)); + CenterOnParent(); + + + +} + +Preferences::~Preferences() { +} + + +BEGIN_EVENT_TABLE(Preferences, wxDialog) + EVT_BUTTON(wxID_OK, Preferences::OnOK) + EVT_BUTTON(wxID_CANCEL, Preferences::OnCancel) + EVT_BUTTON(wxID_APPLY, Preferences::OnApply) +END_EVENT_TABLE() diff --git a/aegisub/src/preferences_base.h b/aegisub/src/preferences_base.h new file mode 100644 index 000000000..98a89a3a6 --- /dev/null +++ b/aegisub/src/preferences_base.h @@ -0,0 +1,62 @@ +// Copyright (c) 2010, Amar Takhar +// +// Permission to use, copy, modify, and distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// +// $Id$ + +/// @file preferences_base.h +/// @brief Base preferences dialogue classes +/// @see preferences_base.cpp +/// @ingroup configuration_ui + +class OptionPage: public wxScrolled { +public: + enum Style { + PAGE_DEFAULT = 0x00000000, + PAGE_SCROLL = 0x00000001, + PAGE_SUB = 0x00000002 + }; + + wxSizer *sizer; + + OptionPage(wxTreebook *book, wxString name, int style = PAGE_DEFAULT); + ~OptionPage(); + + wxFlexGridSizer* PageSizer(wxString name); + void CellSkip(wxFlexGridSizer *&flex); + void OptionAdd(wxFlexGridSizer *&flex, const wxString &name, const char *opt_name, double min=0, double max=100, double inc=1); + void OptionChoice(wxFlexGridSizer *&flex, const wxString &name, const wxArrayString &choices, const char *opt_name); + void OptionBrowse(wxFlexGridSizer *&flex, const wxString &name, BrowseType browse_type, const char *opt_name); +}; + +#define CLASS_PAGE(name) \ + class name: public OptionPage { \ + public: \ + name(wxTreebook *book); \ + }; + +CLASS_PAGE(General) +CLASS_PAGE(Subtitles) +CLASS_PAGE(Audio) +CLASS_PAGE(Video) +CLASS_PAGE(Interface) +CLASS_PAGE(Interface_Colours) +CLASS_PAGE(Interface_Hotkeys) +CLASS_PAGE(Paths) +CLASS_PAGE(File_Associations) +CLASS_PAGE(Backup) +CLASS_PAGE(Automation) +CLASS_PAGE(Advanced) +CLASS_PAGE(Advanced_Interface) +CLASS_PAGE(Advanced_Audio) +CLASS_PAGE(Advanced_Video)