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.
This commit is contained in:
Amar Takhar 2010-07-19 17:53:29 +00:00
parent c3881ea772
commit 51a75cd0fd
5 changed files with 534 additions and 468 deletions

View file

@ -1251,6 +1251,18 @@
RelativePath="..\..\src\preferences.cpp"
>
</File>
<File
RelativePath="..\..\src\preferences.h"
>
</File>
<File
RelativePath="..\..\src\preferences_base.cpp"
>
</File>
<File
RelativePath="..\..\src\preferences_base.h"
>
</File>
</Filter>
<Filter
Name="Core"

View file

@ -269,6 +269,7 @@ aegisub_2_2_SOURCES = \
mythes.cxx \
plugin_manager.cpp \
preferences.cpp \
preferences_base.cpp \
scintilla_text_ctrl.cpp \
spellchecker.cpp \
spline.cpp \

View file

@ -45,167 +45,10 @@
/// 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")
class OptionPage: public wxScrolled<wxPanel> {
public:
enum Style {
PAGE_DEFAULT = 0x00000000,
PAGE_SCROLL = 0x00000001,
PAGE_SUB = 0x00000002
};
wxSizer *sizer;
OptionPage(wxTreebook *book, wxString name, int style = PAGE_DEFAULT):
wxScrolled<wxPanel>(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");
@ -220,14 +63,11 @@ public:
OptionAdd(undo, _("Undo Levels"), "Limits/MRU");
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");
@ -240,14 +80,11 @@ public:
OptionAdd(grid, _("Highlight visible subtitles"), "Subtitle/Grid/Highlight Subtitles in Frame");
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");
@ -276,14 +113,11 @@ public:
OptionAdd(display, _("Video position"), "Audio/Display/Draw/Video Position");
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");
@ -304,14 +138,11 @@ public:
OptionChoice(general, _("Screenshot save path"), scr_res, "Path/Screenshot");
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");
@ -320,14 +151,11 @@ public:
OptionAdd(grid, _("Hide overrides symbol"), "Subtitle/Grid/Hide Overrides Char");
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");
@ -371,52 +199,40 @@ public:
OptionAdd(grid, _("Lines"), "Colour/Subtitle Grid/Lines");
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);
}
};
}
/// 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);
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);
SetSizerAndFit(sizer);
}
};
}
/// Backup preferences page
class Backup: public OptionPage {
public:
Backup(wxTreebook *book): OptionPage(book, _("Backup")) {
Backup::Backup(wxTreebook *book): OptionPage(book, _("Backup")) {
wxFlexGridSizer *save = PageSizer(_("Automatic Save"));
OptionAdd(save, _("Enable"), "App/Auto/Backup");
CellSkip(save);
@ -429,15 +245,12 @@ public:
OptionBrowse(backup, _("Path"), BROWSE_FOLDER, "Path/Auto/Backup");
SetSizerAndFit(sizer);
}
};
}
/// Automation preferences page
class Automation: public OptionPage {
public:
Automation(wxTreebook *book): OptionPage(book, _("Automation")) {
Automation::Automation(wxTreebook *book): OptionPage(book, _("Automation")) {
wxFlexGridSizer *general = PageSizer(_("General"));
OptionAdd(general, _("Base path"), "Path/Automation/Base");
@ -457,14 +270,11 @@ public:
OptionChoice(general, _("Autoreload on Export"), ar_choice, "Automation/Autoreload Mode");
SetSizerAndFit(sizer);
}
};
}
/// Advanced preferences page
class Advanced: public OptionPage {
public:
Advanced(wxTreebook *book): OptionPage(book, _("Advanced")) {
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."));
@ -474,27 +284,21 @@ public:
general->Add(warning, 0, wxALL, 5);
SetSizerAndFit(sizer);
}
};
}
/// Advanced Interface preferences subpage
class Advanced_Interface: public OptionPage {
public:
Advanced_Interface(wxTreebook *book): OptionPage(book, _("Backup"), PAGE_SUB) {
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);
SetSizerAndFit(sizer);
}
};
}
/// Advanced Audio preferences subpage
class Advanced_Audio: public OptionPage {
public:
Advanced_Audio(wxTreebook *book): OptionPage(book, _("Audio"), PAGE_SUB) {
Advanced_Audio::Advanced_Audio(wxTreebook *book): OptionPage(book, _("Audio"), PAGE_SUB) {
wxFlexGridSizer *expert = PageSizer(_("Expert"));
wxArrayString ap_choice = AudioProviderFactoryManager::GetFactoryList();
@ -529,14 +333,11 @@ public:
#endif
SetSizerAndFit(sizer);
}
};
}
/// Advanced Video preferences subpage
class Advanced_Video: public OptionPage {
public:
Advanced_Video(wxTreebook *book): OptionPage(book, _("Video")) {
Advanced_Video::Advanced_Video(wxTreebook *book): OptionPage(book, _("Video")) {
wxFlexGridSizer *expert = PageSizer(_("Expert"));
wxArrayString vp_choice = VideoProviderFactoryManager::GetFactoryList();
@ -554,67 +355,4 @@ public:
#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();
}
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()

View file

@ -0,0 +1,253 @@
// Copyright (c) 2010, Amar Takhar <verm@aegisub.org>
//
// 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 <wx/checkbox.h>
#include <wx/combobox.h>
#include <wx/filefn.h>
#include <wx/sizer.h>
#include <wx/spinctrl.h>
#include <wx/stattext.h>
#include <wx/stdpaths.h>
#include <wx/treebook.h>
#endif
#include <libaegisub/exception.h>
#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<wxPanel>(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()

View file

@ -0,0 +1,62 @@
// Copyright (c) 2010, Amar Takhar <verm@aegisub.org>
//
// 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<wxPanel> {
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)