forked from mia/Aegisub
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:
parent
c3881ea772
commit
51a75cd0fd
5 changed files with 534 additions and 468 deletions
|
@ -1251,6 +1251,18 @@
|
||||||
RelativePath="..\..\src\preferences.cpp"
|
RelativePath="..\..\src\preferences.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\src\preferences.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\src\preferences_base.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\src\preferences_base.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Core"
|
Name="Core"
|
||||||
|
|
|
@ -269,6 +269,7 @@ aegisub_2_2_SOURCES = \
|
||||||
mythes.cxx \
|
mythes.cxx \
|
||||||
plugin_manager.cpp \
|
plugin_manager.cpp \
|
||||||
preferences.cpp \
|
preferences.cpp \
|
||||||
|
preferences_base.cpp \
|
||||||
scintilla_text_ctrl.cpp \
|
scintilla_text_ctrl.cpp \
|
||||||
spellchecker.cpp \
|
spellchecker.cpp \
|
||||||
spline.cpp \
|
spline.cpp \
|
||||||
|
|
|
@ -45,576 +45,314 @@
|
||||||
/// Define make all platform-specific options visible in a single view.
|
/// Define make all platform-specific options visible in a single view.
|
||||||
#define SHOW_ALL 1
|
#define SHOW_ALL 1
|
||||||
|
|
||||||
DEFINE_BASE_EXCEPTION_NOINNER(PreferencesError, agi::Exception)
|
#include "preferences_base.h"
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// General preferences page
|
/// General preferences page
|
||||||
class General: public OptionPage {
|
General::General(wxTreebook *book): OptionPage(book, _("General")) {
|
||||||
public:
|
|
||||||
General(wxTreebook *book): OptionPage(book, _("General")) {
|
|
||||||
|
|
||||||
wxFlexGridSizer *startup = PageSizer(_("Startup"));
|
wxFlexGridSizer *startup = PageSizer(_("Startup"));
|
||||||
OptionAdd(startup, _("Check for updates"), "App/Splash");
|
OptionAdd(startup, _("Check for updates"), "App/Splash");
|
||||||
OptionAdd(startup, _("Show Splash Screen"), "App/Splash");
|
OptionAdd(startup, _("Show Splash Screen"), "App/Splash");
|
||||||
|
|
||||||
wxFlexGridSizer *recent = PageSizer(_("Recently Used Lists"));
|
wxFlexGridSizer *recent = PageSizer(_("Recently Used Lists"));
|
||||||
OptionAdd(recent, _("Files"), "Limits/MRU");
|
OptionAdd(recent, _("Files"), "Limits/MRU");
|
||||||
OptionAdd(recent, _("Find/Replace"), "Limits/Find Replace");
|
OptionAdd(recent, _("Find/Replace"), "Limits/Find Replace");
|
||||||
sizer->AddSpacer(15);
|
sizer->AddSpacer(15);
|
||||||
|
|
||||||
wxFlexGridSizer *undo = PageSizer(_("Undo / Redo Settings"));
|
wxFlexGridSizer *undo = PageSizer(_("Undo / Redo Settings"));
|
||||||
OptionAdd(undo, _("Undo Levels"), "Limits/MRU");
|
OptionAdd(undo, _("Undo Levels"), "Limits/MRU");
|
||||||
|
|
||||||
SetSizerAndFit(sizer);
|
SetSizerAndFit(sizer);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/// Subtitles preferences page
|
/// Subtitles preferences page
|
||||||
class Subtitles: public OptionPage {
|
Subtitles::Subtitles(wxTreebook *book): OptionPage(book, _("Subtitles")) {
|
||||||
public:
|
|
||||||
Subtitles(wxTreebook *book): OptionPage(book, _("Subtitles")) {
|
|
||||||
|
|
||||||
wxFlexGridSizer *general = PageSizer(_("Options"));
|
wxFlexGridSizer *general = PageSizer(_("Options"));
|
||||||
OptionAdd(general, _("Enable call tips"), "App/Call Tips");
|
OptionAdd(general, _("Enable call tips"), "App/Call Tips");
|
||||||
OptionAdd(general, _("Enable syntax highlighting"), "Subtitle/Highlight/Syntax");
|
OptionAdd(general, _("Enable syntax highlighting"), "Subtitle/Highlight/Syntax");
|
||||||
OptionAdd(general, _("Link commiting of times"), "Subtitle/Edit Box/Link Time Boxes Commit");
|
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");
|
OptionAdd(general, _("Overwrite-Insertion in time boxes"), "Subtitle/Time Edit/Insert Mode");
|
||||||
|
|
||||||
wxFlexGridSizer *grid = PageSizer(_("Grid"));
|
wxFlexGridSizer *grid = PageSizer(_("Grid"));
|
||||||
OptionAdd(grid, _("Allow grid to take focus"), "Subtitle/Grid/Focus Allow");
|
OptionAdd(grid, _("Allow grid to take focus"), "Subtitle/Grid/Focus Allow");
|
||||||
OptionAdd(grid, _("Highlight visible subtitles"), "Subtitle/Grid/Highlight Subtitles in Frame");
|
OptionAdd(grid, _("Highlight visible subtitles"), "Subtitle/Grid/Highlight Subtitles in Frame");
|
||||||
|
|
||||||
SetSizerAndFit(sizer);
|
SetSizerAndFit(sizer);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/// Audio preferences page
|
/// Audio preferences page
|
||||||
class Audio: public OptionPage {
|
Audio::Audio(wxTreebook *book): OptionPage(book, _("Audio")) {
|
||||||
public:
|
|
||||||
Audio(wxTreebook *book): OptionPage(book, _("Audio")) {
|
|
||||||
|
|
||||||
wxFlexGridSizer *general = PageSizer(_("Options"));
|
wxFlexGridSizer *general = PageSizer(_("Options"));
|
||||||
OptionAdd(general, _("Grab times from line upon selection"), "Audio/Grab Times on Select");
|
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, _("Default mouse wheel to zoom"), "Audio/Wheel Default to Zoom");
|
||||||
OptionAdd(general, _("Lock scroll on cursor"), "Audio/Lock Scroll on Cursor");
|
OptionAdd(general, _("Lock scroll on cursor"), "Audio/Lock Scroll on Cursor");
|
||||||
OptionAdd(general, _("Snap to keyframes"), "Audio/Display/Snap/Keyframes");
|
OptionAdd(general, _("Snap to keyframes"), "Audio/Display/Snap/Keyframes");
|
||||||
OptionAdd(general, _("Snap to adjacent lines"), "Audio/Display/Snap/Other Lines");
|
OptionAdd(general, _("Snap to adjacent lines"), "Audio/Display/Snap/Other Lines");
|
||||||
OptionAdd(general, _("Auto-focus on mouse over"), "Audio/Auto/Focus");
|
OptionAdd(general, _("Auto-focus on mouse over"), "Audio/Auto/Focus");
|
||||||
OptionAdd(general, _("Play audio when stepping in video"), "Audio/Plays When Stepping Video");
|
OptionAdd(general, _("Play audio when stepping in video"), "Audio/Plays When Stepping Video");
|
||||||
CellSkip(general);
|
CellSkip(general);
|
||||||
OptionAdd(general, _("Default timing length"), "Timing/Default Duration", 0, 36000);
|
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-in length"), "Audio/Lead/IN", 0, 36000);
|
||||||
OptionAdd(general, _("Default lead-out length"), "Audio/Lead/OUT", 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") };
|
const wxString dtl_arr[3] = { _("Don't show"), _("Show previous"), _("Show all") };
|
||||||
wxArrayString choice_dtl(3, dtl_arr);
|
wxArrayString choice_dtl(3, dtl_arr);
|
||||||
OptionChoice(general, _("Show inactive lines"), choice_dtl, "Audio/Inactive Lines Display Mode");
|
OptionChoice(general, _("Show inactive lines"), choice_dtl, "Audio/Inactive Lines Display Mode");
|
||||||
OptionAdd(general, _("Start-marker drag sensitivity"), "Audio/Start Drag Sensitivity", 1, 15);
|
OptionAdd(general, _("Start-marker drag sensitivity"), "Audio/Start Drag Sensitivity", 1, 15);
|
||||||
|
|
||||||
wxFlexGridSizer *display = PageSizer(_("Display Visual Options"));
|
wxFlexGridSizer *display = PageSizer(_("Display Visual Options"));
|
||||||
OptionAdd(display, _("Secondary lines"), "Audio/Display/Draw/Secondary Lines");
|
OptionAdd(display, _("Secondary lines"), "Audio/Display/Draw/Secondary Lines");
|
||||||
OptionAdd(display, _("Selection background"), "Audio/Display/Draw/Selection Background");
|
OptionAdd(display, _("Selection background"), "Audio/Display/Draw/Selection Background");
|
||||||
OptionAdd(display, _("Timeline"), "Audio/Display/Draw/Timeline");
|
OptionAdd(display, _("Timeline"), "Audio/Display/Draw/Timeline");
|
||||||
OptionAdd(display, _("Cursor time"), "Audio/Display/Draw/Cursor Time");
|
OptionAdd(display, _("Cursor time"), "Audio/Display/Draw/Cursor Time");
|
||||||
OptionAdd(display, _("Keyframes"), "Audio/Display/Draw/Keyframes");
|
OptionAdd(display, _("Keyframes"), "Audio/Display/Draw/Keyframes");
|
||||||
OptionAdd(display, _("Video position"), "Audio/Display/Draw/Video Position");
|
OptionAdd(display, _("Video position"), "Audio/Display/Draw/Video Position");
|
||||||
|
|
||||||
SetSizerAndFit(sizer);
|
SetSizerAndFit(sizer);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/// Video preferences page
|
/// Video preferences page
|
||||||
class Video: public OptionPage {
|
Video::Video(wxTreebook *book): OptionPage(book, _("Video")) {
|
||||||
public:
|
|
||||||
Video(wxTreebook *book): OptionPage(book, _("Video")) {
|
|
||||||
|
|
||||||
wxFlexGridSizer *general = PageSizer(_("Options"));
|
wxFlexGridSizer *general = PageSizer(_("Options"));
|
||||||
OptionAdd(general, _("Show keyframes in slider"), "Video/Slider/Show Keyframes");
|
OptionAdd(general, _("Show keyframes in slider"), "Video/Slider/Show Keyframes");
|
||||||
OptionAdd(general, _("Always show visual tools"), "Tool/Visual/Always Show");
|
OptionAdd(general, _("Always show visual tools"), "Tool/Visual/Always Show");
|
||||||
|
|
||||||
const wxString cres_arr[3] = { _("Never"), _("Ask"), _("Always") };
|
const wxString cres_arr[3] = { _("Never"), _("Ask"), _("Always") };
|
||||||
wxArrayString choice_res(3, cres_arr);
|
wxArrayString choice_res(3, cres_arr);
|
||||||
OptionChoice(general, _("Match video resolution on open"), choice_res, "Video/Check Script Res");
|
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%") };
|
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);
|
wxArrayString choice_zoom(24, czoom_arr);
|
||||||
OptionChoice(general, _("Default Zoom"), choice_zoom, "Video/Default Zoom");
|
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"), _(".") };
|
const wxString cscr_arr[3] = { _("?video"), _("?script"), _(".") };
|
||||||
wxArrayString scr_res(3, cscr_arr);
|
wxArrayString scr_res(3, cscr_arr);
|
||||||
OptionChoice(general, _("Screenshot save path"), scr_res, "Path/Screenshot");
|
OptionChoice(general, _("Screenshot save path"), scr_res, "Path/Screenshot");
|
||||||
|
|
||||||
SetSizerAndFit(sizer);
|
SetSizerAndFit(sizer);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/// Interface preferences page
|
/// Interface preferences page
|
||||||
class Interface: public OptionPage {
|
Interface::Interface(wxTreebook *book): OptionPage(book, _("Interface")) {
|
||||||
public:
|
|
||||||
Interface(wxTreebook *book): OptionPage(book, _("Interface")) {
|
|
||||||
|
|
||||||
wxFlexGridSizer *grid = PageSizer(_("Subtitle Grid"));
|
wxFlexGridSizer *grid = PageSizer(_("Subtitle Grid"));
|
||||||
OptionBrowse(grid, _("Font face"), BROWSE_FONT, "Subtitle/Grid/Font Face");
|
OptionBrowse(grid, _("Font face"), BROWSE_FONT, "Subtitle/Grid/Font Face");
|
||||||
OptionAdd(grid, _("Font size"), "Subtitle/Grid/Font Size", 3, 42);
|
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
|
/// Interface Colours preferences subpage
|
||||||
class Interface_Colours: public OptionPage {
|
Interface_Colours::Interface_Colours(wxTreebook *book): OptionPage(book, _("Colours"), PAGE_SCROLL|PAGE_SUB) {
|
||||||
public:
|
|
||||||
Interface_Colours(wxTreebook *book): OptionPage(book, _("Colours"), PAGE_SCROLL|PAGE_SUB) {
|
|
||||||
|
|
||||||
wxFlexGridSizer *general = PageSizer(_("General"));
|
wxFlexGridSizer *general = PageSizer(_("General"));
|
||||||
OptionAdd(general, _("Modified Background"), "Colour/Background/Modified");
|
OptionAdd(general, _("Modified Background"), "Colour/Background/Modified");
|
||||||
|
|
||||||
wxFlexGridSizer *audio = PageSizer(_("Audio Display"));
|
wxFlexGridSizer *audio = PageSizer(_("Audio Display"));
|
||||||
OptionAdd(audio, _("Play cursor"), "Colour/Audio Display/Play Cursor");
|
OptionAdd(audio, _("Play cursor"), "Colour/Audio Display/Play Cursor");
|
||||||
OptionAdd(audio, _("Background"), "Colour/Audio Display/Background/Background");
|
OptionAdd(audio, _("Background"), "Colour/Audio Display/Background/Background");
|
||||||
OptionAdd(audio, _("Selection background"), "Colour/Audio Display/Background/Selection");
|
OptionAdd(audio, _("Selection background"), "Colour/Audio Display/Background/Selection");
|
||||||
OptionAdd(audio, _("Selection background modified"), "Colour/Audio Display/Background/Selection Modified");
|
OptionAdd(audio, _("Selection background modified"), "Colour/Audio Display/Background/Selection Modified");
|
||||||
OptionAdd(audio, _("Seconds boundaries"), "Colour/Audio Display/Seconds Boundaries");
|
OptionAdd(audio, _("Seconds boundaries"), "Colour/Audio Display/Seconds Boundaries");
|
||||||
OptionAdd(audio, _("Waveform"), "Colour/Audio Display/Waveform");
|
OptionAdd(audio, _("Waveform"), "Colour/Audio Display/Waveform");
|
||||||
OptionAdd(audio, _("Waveform selected"), "Colour/Audio Display/Waveform Selected");
|
OptionAdd(audio, _("Waveform selected"), "Colour/Audio Display/Waveform Selected");
|
||||||
OptionAdd(audio, _("Waveform Modified"), "Colour/Audio Display/Waveform Modified");
|
OptionAdd(audio, _("Waveform Modified"), "Colour/Audio Display/Waveform Modified");
|
||||||
OptionAdd(audio, _("Waveform Inactive"), "Colour/Audio Display/Waveform Inactive");
|
OptionAdd(audio, _("Waveform Inactive"), "Colour/Audio Display/Waveform Inactive");
|
||||||
OptionAdd(audio, _("Line boundary start"), "Colour/Audio Display/Line boundary Start");
|
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 end"), "Colour/Audio Display/Line boundary End");
|
||||||
OptionAdd(audio, _("Line boundary inactive line"), "Colour/Audio Display/Line Boundary Inactive Line");
|
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 text"), "Colour/Audio Display/Syllable Text");
|
||||||
OptionAdd(audio, _("Syllable boundaries"), "Colour/Audio Display/Syllable Boundaries");
|
OptionAdd(audio, _("Syllable boundaries"), "Colour/Audio Display/Syllable Boundaries");
|
||||||
|
|
||||||
wxFlexGridSizer *syntax = PageSizer(_("Syntax Highlighting"));
|
wxFlexGridSizer *syntax = PageSizer(_("Syntax Highlighting"));
|
||||||
OptionAdd(syntax, _("Normal"), "Colour/Subtitle/Syntax/Normal");
|
OptionAdd(syntax, _("Normal"), "Colour/Subtitle/Syntax/Normal");
|
||||||
OptionAdd(syntax, _("Brackets"), "Colour/Subtitle/Syntax/Brackets");
|
OptionAdd(syntax, _("Brackets"), "Colour/Subtitle/Syntax/Brackets");
|
||||||
OptionAdd(syntax, _("Slashes and Parentheses"), "Colour/Subtitle/Syntax/Slashes");
|
OptionAdd(syntax, _("Slashes and Parentheses"), "Colour/Subtitle/Syntax/Slashes");
|
||||||
OptionAdd(syntax, _("Tags"), "Colour/Subtitle/Syntax/Highlight Tags");
|
OptionAdd(syntax, _("Tags"), "Colour/Subtitle/Syntax/Highlight Tags");
|
||||||
OptionAdd(syntax, _("Parameters"), "Colour/Subtitle/Syntax/Parameters");
|
OptionAdd(syntax, _("Parameters"), "Colour/Subtitle/Syntax/Parameters");
|
||||||
OptionAdd(syntax, _("Error"), "Colour/Subtitle/Syntax/Error");
|
OptionAdd(syntax, _("Error"), "Colour/Subtitle/Syntax/Error");
|
||||||
OptionAdd(syntax, _("Error Background"), "Colour/Subtitle/Syntax/Background/Error");
|
OptionAdd(syntax, _("Error Background"), "Colour/Subtitle/Syntax/Background/Error");
|
||||||
OptionAdd(syntax, _("Line Break"), "Colour/Subtitle/Syntax/Line Break");
|
OptionAdd(syntax, _("Line Break"), "Colour/Subtitle/Syntax/Line Break");
|
||||||
OptionAdd(syntax, _("Karaoke templates"), "Colour/Subtitle/Syntax/Karaoke Template");
|
OptionAdd(syntax, _("Karaoke templates"), "Colour/Subtitle/Syntax/Karaoke Template");
|
||||||
|
|
||||||
wxFlexGridSizer *grid = PageSizer(_("Subtitle Grid"));
|
wxFlexGridSizer *grid = PageSizer(_("Subtitle Grid"));
|
||||||
OptionAdd(grid, _("Standard foreground"), "Colour/Subtitle Grid/Standard");
|
OptionAdd(grid, _("Standard foreground"), "Colour/Subtitle Grid/Standard");
|
||||||
OptionAdd(grid, _("Standard background"), "Colour/Subtitle Grid/Background/Background");
|
OptionAdd(grid, _("Standard background"), "Colour/Subtitle Grid/Background/Background");
|
||||||
OptionAdd(grid, _("Selection foreground"), "Colour/Subtitle Grid/Selection");
|
OptionAdd(grid, _("Selection foreground"), "Colour/Subtitle Grid/Selection");
|
||||||
OptionAdd(grid, _("Selection background"), "Colour/Subtitle Grid/Background/Selection");
|
OptionAdd(grid, _("Selection background"), "Colour/Subtitle Grid/Background/Selection");
|
||||||
OptionAdd(grid, _("Comment background"), "Colour/Subtitle Grid/Background/Comment");
|
OptionAdd(grid, _("Comment background"), "Colour/Subtitle Grid/Background/Comment");
|
||||||
OptionAdd(grid, _("Selected comment background"), "Colour/Subtitle Grid/Background/Selected Comment");
|
OptionAdd(grid, _("Selected comment background"), "Colour/Subtitle Grid/Background/Selected Comment");
|
||||||
OptionAdd(grid, _("Left Column"), "Colour/Subtitle Grid/Left Column");
|
OptionAdd(grid, _("Left Column"), "Colour/Subtitle Grid/Left Column");
|
||||||
OptionAdd(grid, _("Active Line Border"), "Colour/Subtitle Grid/Active Border");
|
OptionAdd(grid, _("Active Line Border"), "Colour/Subtitle Grid/Active Border");
|
||||||
OptionAdd(grid, _("Lines"), "Colour/Subtitle Grid/Lines");
|
OptionAdd(grid, _("Lines"), "Colour/Subtitle Grid/Lines");
|
||||||
|
|
||||||
SetSizerAndFit(sizer);
|
SetSizerAndFit(sizer);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/// Interface Hotkeys preferences subpage
|
/// Interface Hotkeys preferences subpage
|
||||||
class Interface_Hotkeys: public OptionPage {
|
Interface_Hotkeys::Interface_Hotkeys(wxTreebook *book): OptionPage(book, _("Hotkeys"), PAGE_SUB) {
|
||||||
public:
|
|
||||||
Interface_Hotkeys(wxTreebook *book): OptionPage(book, _("Hotkeys"), PAGE_SUB) {
|
|
||||||
|
|
||||||
wxFlexGridSizer *hotkeys = PageSizer(_("Hotkeys"));
|
wxFlexGridSizer *hotkeys = PageSizer(_("Hotkeys"));
|
||||||
hotkeys->Add(new wxStaticText(this, wxID_ANY, _T("To be added after hotkey rewrite.")), 0, wxALL, 5);
|
hotkeys->Add(new wxStaticText(this, wxID_ANY, _T("To be added after hotkey rewrite.")), 0, wxALL, 5);
|
||||||
SetSizerAndFit(sizer);
|
SetSizerAndFit(sizer);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/// Paths preferences page
|
/// Paths preferences page class Paths: public OptionPage { public:
|
||||||
class Paths: public OptionPage {
|
Paths::Paths(wxTreebook *book): OptionPage(book, _("Paths")) {
|
||||||
public:
|
|
||||||
Paths(wxTreebook *book): OptionPage(book, _("Paths")) {
|
|
||||||
|
|
||||||
wxFlexGridSizer *general = PageSizer(_("General"));
|
wxFlexGridSizer *general = PageSizer(_("General"));
|
||||||
general->Add(new wxStaticText(this, wxID_ANY, _T("TBD..")), 0, wxALL, 5);
|
general->Add(new wxStaticText(this, wxID_ANY, _T("TBD..")), 0, wxALL, 5);
|
||||||
|
|
||||||
SetSizerAndFit(sizer);
|
SetSizerAndFit(sizer);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/// File Associations preferences page
|
/// File Associations preferences page
|
||||||
class File_Associations: public OptionPage {
|
File_Associations::File_Associations(wxTreebook *book): OptionPage(book, _("File Associations")) {
|
||||||
public:
|
|
||||||
File_Associations(wxTreebook *book): OptionPage(book, _("File Associations")) {
|
|
||||||
|
|
||||||
wxFlexGridSizer *assoc = PageSizer(_("General"));
|
wxFlexGridSizer *assoc = PageSizer(_("General"));
|
||||||
assoc->Add(new wxStaticText(this, wxID_ANY, _T("TBD..")), 0, wxALL, 5);
|
assoc->Add(new wxStaticText(this, wxID_ANY, _T("TBD..")), 0, wxALL, 5);
|
||||||
|
|
||||||
SetSizerAndFit(sizer);
|
SetSizerAndFit(sizer);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/// Backup preferences page
|
/// Backup preferences page
|
||||||
class Backup: public OptionPage {
|
Backup::Backup(wxTreebook *book): OptionPage(book, _("Backup")) {
|
||||||
public:
|
wxFlexGridSizer *save = PageSizer(_("Automatic Save"));
|
||||||
Backup(wxTreebook *book): OptionPage(book, _("Backup")) {
|
OptionAdd(save, _("Enable"), "App/Auto/Backup");
|
||||||
wxFlexGridSizer *save = PageSizer(_("Automatic Save"));
|
CellSkip(save);
|
||||||
OptionAdd(save, _("Enable"), "App/Auto/Backup");
|
OptionAdd(save, _("Interval in seconds."), "App/Auto/Save Every Seconds");
|
||||||
CellSkip(save);
|
OptionBrowse(save, _("Path"), BROWSE_FOLDER, "Path/Auto/Save");
|
||||||
OptionAdd(save, _("Interval in seconds."), "App/Auto/Save Every Seconds");
|
|
||||||
OptionBrowse(save, _("Path"), BROWSE_FOLDER, "Path/Auto/Save");
|
|
||||||
|
|
||||||
wxFlexGridSizer *backup = PageSizer(_("Automatic Backup"));
|
wxFlexGridSizer *backup = PageSizer(_("Automatic Backup"));
|
||||||
CellSkip(backup);
|
CellSkip(backup);
|
||||||
OptionAdd(backup, _("Enable"), "App/Auto/Backup");
|
OptionAdd(backup, _("Enable"), "App/Auto/Backup");
|
||||||
OptionBrowse(backup, _("Path"), BROWSE_FOLDER, "Path/Auto/Backup");
|
OptionBrowse(backup, _("Path"), BROWSE_FOLDER, "Path/Auto/Backup");
|
||||||
|
|
||||||
SetSizerAndFit(sizer);
|
SetSizerAndFit(sizer);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Automation preferences page
|
/// Automation preferences page
|
||||||
class Automation: public OptionPage {
|
Automation::Automation(wxTreebook *book): OptionPage(book, _("Automation")) {
|
||||||
public:
|
wxFlexGridSizer *general = PageSizer(_("General"));
|
||||||
Automation(wxTreebook *book): OptionPage(book, _("Automation")) {
|
|
||||||
wxFlexGridSizer *general = PageSizer(_("General"));
|
|
||||||
|
|
||||||
OptionAdd(general, _("Base path"), "Path/Automation/Base");
|
OptionAdd(general, _("Base path"), "Path/Automation/Base");
|
||||||
OptionAdd(general, _("Include path"), "Path/Automation/Include");
|
OptionAdd(general, _("Include path"), "Path/Automation/Include");
|
||||||
OptionAdd(general, _("Auto-load path"), "Path/Automation/Autoload");
|
OptionAdd(general, _("Auto-load path"), "Path/Automation/Autoload");
|
||||||
|
|
||||||
const wxString tl_arr[6] = { _("Fatal"), _("Error"), _("Warning"), _("Hint"), _("Debug"), _("Trace") };
|
const wxString tl_arr[6] = { _("Fatal"), _("Error"), _("Warning"), _("Hint"), _("Debug"), _("Trace") };
|
||||||
wxArrayString tl_choice(6, tl_arr);
|
wxArrayString tl_choice(6, tl_arr);
|
||||||
OptionChoice(general, _("Trace level"), tl_choice, "Automation/Trace Level");
|
OptionChoice(general, _("Trace level"), tl_choice, "Automation/Trace Level");
|
||||||
|
|
||||||
const wxString tp_arr[3] = { _("Normal"), _("Below Normal (recommended)"), _("Lowest") };
|
const wxString tp_arr[3] = { _("Normal"), _("Below Normal (recommended)"), _("Lowest") };
|
||||||
wxArrayString tp_choice(3, tp_arr);
|
wxArrayString tp_choice(3, tp_arr);
|
||||||
OptionChoice(general, _("Thread priority"), tp_choice, "Automation/Lua/Thread Priority");
|
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") };
|
const wxString ar_arr[4] = { _("No scripts"), _("Subtitle-local scripts"), _("Global autoload scripts"), _("All scripts") };
|
||||||
wxArrayString ar_choice(4, ar_arr);
|
wxArrayString ar_choice(4, ar_arr);
|
||||||
OptionChoice(general, _("Autoreload on Export"), ar_choice, "Automation/Autoreload Mode");
|
OptionChoice(general, _("Autoreload on Export"), ar_choice, "Automation/Autoreload Mode");
|
||||||
|
|
||||||
SetSizerAndFit(sizer);
|
SetSizerAndFit(sizer);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/// Advanced preferences page
|
/// Advanced preferences page
|
||||||
class Advanced: public OptionPage {
|
Advanced::Advanced(wxTreebook *book): OptionPage(book, _("Advanced")) {
|
||||||
public:
|
wxFlexGridSizer *general = PageSizer(_("General"));
|
||||||
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."));
|
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));
|
warning->SetFont(wxFont(12, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD));
|
||||||
sizer->Fit(this);
|
sizer->Fit(this);
|
||||||
warning->Wrap(400);
|
warning->Wrap(400);
|
||||||
general->Add(warning, 0, wxALL, 5);
|
general->Add(warning, 0, wxALL, 5);
|
||||||
|
|
||||||
SetSizerAndFit(sizer);
|
SetSizerAndFit(sizer);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/// Advanced Interface preferences subpage
|
/// Advanced Interface preferences subpage
|
||||||
class Advanced_Interface: public OptionPage {
|
Advanced_Interface::Advanced_Interface(wxTreebook *book): OptionPage(book, _("Backup"), PAGE_SUB) {
|
||||||
public:
|
wxFlexGridSizer *interface_ = PageSizer(_("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
|
/// Advanced Audio preferences subpage
|
||||||
class Advanced_Audio: public OptionPage {
|
Advanced_Audio::Advanced_Audio(wxTreebook *book): OptionPage(book, _("Audio"), PAGE_SUB) {
|
||||||
public:
|
wxFlexGridSizer *expert = PageSizer(_("Expert"));
|
||||||
Advanced_Audio(wxTreebook *book): OptionPage(book, _("Audio"), PAGE_SUB) {
|
|
||||||
wxFlexGridSizer *expert = PageSizer(_("Expert"));
|
|
||||||
|
|
||||||
wxArrayString ap_choice = AudioProviderFactoryManager::GetFactoryList();
|
wxArrayString ap_choice = AudioProviderFactoryManager::GetFactoryList();
|
||||||
OptionChoice(expert, _("Audio provider"), ap_choice, "Audio/Provider");
|
OptionChoice(expert, _("Audio provider"), ap_choice, "Audio/Provider");
|
||||||
|
|
||||||
wxArrayString apl_choice = AudioPlayerFactoryManager::GetFactoryList();
|
wxArrayString apl_choice = AudioPlayerFactoryManager::GetFactoryList();
|
||||||
OptionChoice(expert, _("Audio player"), apl_choice, "Audio/Player");
|
OptionChoice(expert, _("Audio player"), apl_choice, "Audio/Player");
|
||||||
|
|
||||||
wxFlexGridSizer *cache = PageSizer(_("Cache"));
|
wxFlexGridSizer *cache = PageSizer(_("Cache"));
|
||||||
const wxString ct_arr[3] = { _("None (NOT RECOMMENDED)"), _("RAM"), _("Hard Disk") };
|
const wxString ct_arr[3] = { _("None (NOT RECOMMENDED)"), _("RAM"), _("Hard Disk") };
|
||||||
wxArrayString ct_choice(3, ct_arr);
|
wxArrayString ct_choice(3, ct_arr);
|
||||||
OptionChoice(cache, _("Cache type"), ct_choice, "Audio/Cache/Type");
|
OptionChoice(cache, _("Cache type"), ct_choice, "Audio/Cache/Type");
|
||||||
|
|
||||||
OptionBrowse(cache, _("Path"), BROWSE_FOLDER, "Audio/Cache/HD/Location");
|
OptionBrowse(cache, _("Path"), BROWSE_FOLDER, "Audio/Cache/HD/Location");
|
||||||
OptionAdd(cache, _("File name"), "Audio/Cache/HD/Name");
|
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") };
|
const wxString sq_arr[4] = { _("Regular quality"), _("Better quality"), _("High quality"), _("Insane quality") };
|
||||||
wxArrayString sq_choice(4, sq_arr);
|
wxArrayString sq_choice(4, sq_arr);
|
||||||
OptionChoice(spectrum, _("Quality"), sq_choice, "Audio/Renderer/Spectrum/Quality");
|
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)
|
#if defined(WIN32) || defined(SHOW_ALL)
|
||||||
wxFlexGridSizer *windows = PageSizer(_("Windows Specific"));
|
wxFlexGridSizer *windows = PageSizer(_("Windows Specific"));
|
||||||
const wxString adm_arr[3] = { _T("ConvertToMono"), _T("GetLeftChannel"), _T("GetRightChannel") };
|
const wxString adm_arr[3] = { _T("ConvertToMono"), _T("GetLeftChannel"), _T("GetRightChannel") };
|
||||||
wxArrayString adm_choice(3, adm_arr);
|
wxArrayString adm_choice(3, adm_arr);
|
||||||
OptionChoice(windows, _("Avisynth down-mixer"), adm_choice, "Audio/Downmixer");
|
OptionChoice(windows, _("Avisynth down-mixer"), adm_choice, "Audio/Downmixer");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SetSizerAndFit(sizer);
|
SetSizerAndFit(sizer);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/// Advanced Video preferences subpage
|
/// Advanced Video preferences subpage
|
||||||
class Advanced_Video: public OptionPage {
|
Advanced_Video::Advanced_Video(wxTreebook *book): OptionPage(book, _("Video")) {
|
||||||
public:
|
wxFlexGridSizer *expert = PageSizer(_("Expert"));
|
||||||
Advanced_Video(wxTreebook *book): OptionPage(book, _("Video")) {
|
|
||||||
wxFlexGridSizer *expert = PageSizer(_("Expert"));
|
|
||||||
|
|
||||||
wxArrayString vp_choice = VideoProviderFactoryManager::GetFactoryList();
|
wxArrayString vp_choice = VideoProviderFactoryManager::GetFactoryList();
|
||||||
OptionChoice(expert, _("Video provider"), vp_choice, "Video/Provider");
|
OptionChoice(expert, _("Video provider"), vp_choice, "Video/Provider");
|
||||||
|
|
||||||
wxArrayString sp_choice = SubtitlesProviderFactoryManager::GetFactoryList();
|
wxArrayString sp_choice = SubtitlesProviderFactoryManager::GetFactoryList();
|
||||||
OptionChoice(expert, _("Subtitle provider"), sp_choice, "Subtitle/Provider");
|
OptionChoice(expert, _("Subtitle provider"), sp_choice, "Subtitle/Provider");
|
||||||
|
|
||||||
|
|
||||||
#if defined(WIN32) || defined(SHOW_ALL)
|
#if defined(WIN32) || defined(SHOW_ALL)
|
||||||
wxFlexGridSizer *windows = PageSizer(_("Windows Specific"));
|
wxFlexGridSizer *windows = PageSizer(_("Windows Specific"));
|
||||||
OptionAdd(windows, _("Allow pre-2.56a Avisynth"), "Provider/Avisynth/Allow Ancient");
|
OptionAdd(windows, _("Allow pre-2.56a Avisynth"), "Provider/Avisynth/Allow Ancient");
|
||||||
CellSkip(windows);
|
CellSkip(windows);
|
||||||
OptionAdd(windows, _("Avisynth memory limit"), "Provider/Avisynth/Memory Max");
|
OptionAdd(windows, _("Avisynth memory limit"), "Provider/Avisynth/Memory Max");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SetSizerAndFit(sizer);
|
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()
|
|
||||||
|
|
253
aegisub/src/preferences_base.cpp
Normal file
253
aegisub/src/preferences_base.cpp
Normal 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()
|
62
aegisub/src/preferences_base.h
Normal file
62
aegisub/src/preferences_base.h
Normal 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)
|
Loading…
Reference in a new issue