Some refactoring of options dialog code... not complete, but already an improvement.

Originally committed to SVN as r1149.
This commit is contained in:
Rodrigo Braz Monteiro 2007-04-27 04:53:44 +00:00
parent d244277ac9
commit a59ee116a7
2 changed files with 76 additions and 111 deletions

View File

@ -78,11 +78,6 @@ DialogOptions::DialogOptions(wxWindow *parent)
book = new wxTreebook(this,-1,wxDefaultPosition,wxSize(400,300)); book = new wxTreebook(this,-1,wxDefaultPosition,wxSize(400,300));
needsRestart = false; needsRestart = false;
// Image list
//wxImageList *imgList = new wxImageList(16,15);
//imgList->Add(wxBITMAP(resample_toolbutton));
//book->AssignImageList(imgList);
// Panels // Panels
wxPanel *generalPage = new wxPanel(book,-1); wxPanel *generalPage = new wxPanel(book,-1);
wxPanel *filePage = new wxPanel(book,-1); wxPanel *filePage = new wxPanel(book,-1);
@ -438,50 +433,23 @@ DialogOptions::DialogOptions(wxWindow *parent)
wxSizer *audioSizer1 = new wxStaticBoxSizer(wxVERTICAL,audioPage,_("Options")); wxSizer *audioSizer1 = new wxStaticBoxSizer(wxVERTICAL,audioPage,_("Options"));
wxFlexGridSizer *audioSizer3 = new wxFlexGridSizer(4,2,5,5); wxFlexGridSizer *audioSizer3 = new wxFlexGridSizer(4,2,5,5);
wxFlexGridSizer *audioSizer4 = new wxFlexGridSizer(4,2,5,5); wxFlexGridSizer *audioSizer4 = new wxFlexGridSizer(4,2,5,5);
wxControl *control;
// First sizer // First sizer
control = new wxCheckBox(audioPage,-1,_("Next line on commit")); AddCheckBox(audioPage,audioSizer3,_("Next line on commit"),_T("Audio Next Line on Commit"));
Bind(control,_T("Audio Next Line on Commit")); AddCheckBox(audioPage,audioSizer3,_("Grab times from line upon selection"),_T("Audio grab times on select"));
audioSizer3->Add(control,1,wxEXPAND,0); AddCheckBox(audioPage,audioSizer3,_("Default mouse wheel to zoom"),_T("Audio Wheel Default To Zoom"));
control = new wxCheckBox(audioPage,-1,_("Grab times from line upon selection")); AddCheckBox(audioPage,audioSizer3,_("Lock scroll on Cursor"),_T("Audio lock scroll on cursor"));
Bind(control,_T("Audio grab times on select")); AddCheckBox(audioPage,audioSizer3,_("Snap to keyframes"),_T("Audio snap to keyframes"));
audioSizer3->Add(control,1,wxEXPAND,0); AddCheckBox(audioPage,audioSizer3,_("Snap to adjascent lines"),_T("Audio snap to other lines"));
control = new wxCheckBox(audioPage,-1,_("Default mouse wheel to zoom")); AddCheckBox(audioPage,audioSizer3,_("Auto-focus on mouse over"),_T("Audio Autofocus"));
Bind(control,_T("Audio Wheel Default To Zoom"));
audioSizer3->Add(control,1,wxEXPAND,0);
control = new wxCheckBox(audioPage,-1,_("Lock scroll on Cursor"));
Bind(control,_T("Audio lock scroll on cursor"));
audioSizer3->Add(control,1,wxEXPAND,0);
control = new wxCheckBox(audioPage,-1,_("Snap to keyframes"));
Bind(control,_T("Audio snap to keyframes"));
audioSizer3->Add(control,1,wxEXPAND,0);
control = new wxCheckBox(audioPage,-1,_("Snap to adjascent lines"));
Bind(control,_T("Audio snap to other lines"));
audioSizer3->Add(control,1,wxEXPAND,0);
control = new wxCheckBox(audioPage,-1,_("Auto-focus on mouse over"));
Bind(control,_T("Audio Autofocus"));
audioSizer3->Add(control,1,wxEXPAND,0);
audioSizer3->AddGrowableCol(0,1); audioSizer3->AddGrowableCol(0,1);
// Second sizer // Second sizer
control = new wxTextCtrl(audioPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,0,NumValidator());
Bind(control,_T("Timing Default Duration"));
audioSizer4->Add(new wxStaticText(audioPage,-1,_("Default timing length: ")),0,wxRIGHT | wxALIGN_CENTER_VERTICAL,5);
audioSizer4->Add(control,1,wxEXPAND,0);
control = new wxTextCtrl(audioPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,0,NumValidator());
Bind(control,_T("Audio lead in"));
audioSizer4->Add(new wxStaticText(audioPage,-1,_("Default lead-in length: ")),0,wxRIGHT | wxALIGN_CENTER_VERTICAL,5);
audioSizer4->Add(control,1,wxEXPAND,0);
control = new wxTextCtrl(audioPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,0,NumValidator());
Bind(control,_T("Audio lead out"));
audioSizer4->Add(new wxStaticText(audioPage,-1,_("Default lead-out length: ")),0,wxRIGHT | wxALIGN_CENTER_VERTICAL,5);
audioSizer4->Add(control,1,wxEXPAND,0);
wxString choices1[3] = { _("Don't show"), _("Show previous"), _("Show all") }; wxString choices1[3] = { _("Don't show"), _("Show previous"), _("Show all") };
control = new wxComboBox(audioPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,3,choices1,wxCB_READONLY | wxCB_DROPDOWN); AddTextControl(audioPage,audioSizer4,_("Default timing length"),_T("Timing Default Duration"),TEXT_TYPE_NUMBER);
Bind(control,_T("Audio Inactive Lines Display Mode")); AddTextControl(audioPage,audioSizer4,_("Default lead-in length"),_T("Audio lead in"),TEXT_TYPE_NUMBER);
audioSizer4->Add(new wxStaticText(audioPage,-1,_("Show inactive lines: ")),0,wxRIGHT,5); AddTextControl(audioPage,audioSizer4,_("Default lead-out length"),_T("Audio lead out"),TEXT_TYPE_NUMBER);
audioSizer4->Add(control,1,wxEXPAND,0); AddComboControl(audioPage,audioSizer4,_("Show inactive lines"),_T("Audio Inactive Lines Display Mode"),wxArrayString(3,choices1));
audioSizer4->AddGrowableCol(0,1); audioSizer4->AddGrowableCol(0,1);
// Sizers // Sizers
@ -553,48 +521,16 @@ DialogOptions::DialogOptions(wxWindow *parent)
wxSizer *audioAdvSizer3 = new wxBoxSizer(wxVERTICAL); wxSizer *audioAdvSizer3 = new wxBoxSizer(wxVERTICAL);
// Controls // Controls
wxControl *control;
audioAdvSizer1->Add(new wxStaticText(audioAdvPage,-1,_("Audio provider: ")),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10);
control = new wxComboBox(audioAdvPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,AudioProviderFactory::GetFactoryList(),wxCB_DROPDOWN | wxCB_READONLY);
Bind(control,_T("Audio provider"),1);
audioAdvSizer1->Add(control,1,wxEXPAND);
audioAdvSizer1->Add(new wxStaticText(audioAdvPage,-1,_("Audio player: ")),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10);
control = new wxComboBox(audioAdvPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,AudioPlayerFactory::GetFactoryList(),wxCB_DROPDOWN | wxCB_READONLY);
Bind(control,_T("Audio player"),1);
audioAdvSizer1->Add(control,1,wxEXPAND);
wxString choices2[3] = { _("None (NOT RECOMMENDED)"), _("RAM"), _("Hard Disk") }; wxString choices2[3] = { _("None (NOT RECOMMENDED)"), _("RAM"), _("Hard Disk") };
control = new wxComboBox(audioAdvPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,3,choices2,wxCB_READONLY | wxCB_DROPDOWN);
Bind(control,_T("Audio Cache"));
audioAdvSizer1->Add(new wxStaticText(audioAdvPage,-1,_("Cache type: ")),0,wxRIGHT | wxALIGN_CENTER_VERTICAL,5);
audioAdvSizer1->Add(control,1,wxEXPAND,0);
wxString choices3[3] = { _T("ConvertToMono"), _T("GetLeftChannel"), _T("GetRightChannel") }; wxString choices3[3] = { _T("ConvertToMono"), _T("GetLeftChannel"), _T("GetRightChannel") };
control = new wxComboBox(audioAdvPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,3,choices3,wxCB_DROPDOWN); AddComboControl(audioAdvPage,audioAdvSizer1,_("Audio provider"),_T("Audio Provider"),AudioProviderFactory::GetFactoryList(),true,1);
Bind(control,_T("Audio Downmixer")); AddComboControl(audioAdvPage,audioAdvSizer1,_("Audio player"),_T("Audio Player"),AudioPlayerFactory::GetFactoryList(),true,1);
audioAdvSizer1->Add(new wxStaticText(audioAdvPage,-1,_("Avisynth down-mixer: ")),0,wxRIGHT | wxALIGN_CENTER_VERTICAL,5); AddComboControl(audioAdvPage,audioAdvSizer1,_("Cache type"),_T("Audio Cache"),wxArrayString(3,choices2),true);
audioAdvSizer1->Add(control,1,wxEXPAND,0); AddComboControl(audioAdvPage,audioAdvSizer1,_("Avisynth down-mixer"),_T("Audio Downmixer"),wxArrayString(3,choices3),false);
AddTextControl(audioAdvPage,audioAdvSizer1,_("HD cache path"),_T("Audio HD Cache Location"),TEXT_TYPE_FOLDER);
control = new wxTextCtrl(audioAdvPage,-1); AddTextControl(audioAdvPage,audioAdvSizer1,_("HD cache name"),_T("Audio HD CAche Name"));
Bind(control,_T("Audio HD Cache Location")); AddTextControl(audioAdvPage,audioAdvSizer1,_("Spectrum cutoff"),_T("Audio spectrum cutoff"),TEXT_TYPE_NUMBER);
audioAdvSizer1->Add(new wxStaticText(audioAdvPage,-1,_("HD cache path: ")),0,wxRIGHT | wxALIGN_CENTER_VERTICAL,5); AddTextControl(audioAdvPage,audioAdvSizer1,_("Spectrum FFT window exponent"),_T("Audio spectrum window"),TEXT_TYPE_NUMBER);
audioAdvSizer1->Add(control,1,wxEXPAND,0);
control = new wxTextCtrl(audioAdvPage,-1);
Bind(control,_T("Audio HD Cache Name"));
audioAdvSizer1->Add(new wxStaticText(audioAdvPage,-1,_("HD cache name: ")),0,wxRIGHT | wxALIGN_CENTER_VERTICAL,5);
audioAdvSizer1->Add(control,1,wxEXPAND,0);
control = new wxTextCtrl(audioAdvPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,0,NumValidator());
Bind(control,_T("Audio Spectrum Cutoff"));
audioAdvSizer1->Add(new wxStaticText(audioAdvPage,-1,_("Spectrum cutoff: ")),0,wxRIGHT | wxALIGN_CENTER_VERTICAL,5);
audioAdvSizer1->Add(control,1,wxEXPAND,0);
control = new wxTextCtrl(audioAdvPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,0,NumValidator());
Bind(control,_T("Audio Spectrum Window"));
audioAdvSizer1->Add(new wxStaticText(audioAdvPage,-1,_("Spectrum FFT window exponent: ")),0,wxRIGHT | wxALIGN_CENTER_VERTICAL,5);
audioAdvSizer1->Add(control,1,wxEXPAND,0);
audioAdvSizer1->AddGrowableCol(0,1); audioAdvSizer1->AddGrowableCol(0,1);
// Main sizer // Main sizer
@ -612,37 +548,18 @@ DialogOptions::DialogOptions(wxWindow *parent)
wxSizer *autoMainSizer = new wxBoxSizer(wxVERTICAL); wxSizer *autoMainSizer = new wxBoxSizer(wxVERTICAL);
wxSizer *autoSizer1 = new wxStaticBoxSizer(wxVERTICAL,autoPage,_("Options")); wxSizer *autoSizer1 = new wxStaticBoxSizer(wxVERTICAL,autoPage,_("Options"));
wxFlexGridSizer *autoSizer2 = new wxFlexGridSizer(4,2,5,5); wxFlexGridSizer *autoSizer2 = new wxFlexGridSizer(4,2,5,5);
wxControl *control;
// First sizer // First sizer
autoSizer2->Add(new wxStaticText(autoPage,-1,_("Base path: ")),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10); AddTextControl(autoPage,autoSizer2,_("Base path"),_T("Automation Base Path"));
control = new wxTextCtrl(autoPage,-1); AddTextControl(autoPage,autoSizer2,_("Include path"),_T("Automation Include Path"));
Bind(control,_T("Automation Base Path")); AddTextControl(autoPage,autoSizer2,_("Auto-load path"),_T("Automation Autoload Path"));
autoSizer2->Add(control,1,wxEXPAND); wxString trace_choices[] = { _("0: Fatal"), _("1: Error"), _("2: Warning"), _("3: Hint"), _("4: Debug"), _("5: Trace") };
autoSizer2->Add(new wxStaticText(autoPage,-1,_("Include path: ")),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10); wxString prio_choices[] = { _("Normal"), _("Below Normal (recommended)"), _("Lowest") };
control = new wxTextCtrl(autoPage,-1); wxString reload_choices[] = { _("No scripts"), _("Subtitle-local scripts"), _("Global autoload scripts"), _("All scripts") };
Bind(control,_T("Automation Include Path")); AddComboControl(autoPage,autoSizer2,_("Trace level"),_T("Automation Trace Level"),wxArrayString(6,trace_choices));
autoSizer2->Add(control,1,wxEXPAND); AddComboControl(autoPage,autoSizer2,_("Thread priority"),_T("Automation Thread Priority"),wxArrayString(3,prio_choices));
autoSizer2->Add(new wxStaticText(autoPage,-1,_("Auto-load path: ")),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10); AddComboControl(autoPage,autoSizer2,_("Autoreload on Export"),_T("Automation Autoreload Mode"),wxArrayString(4,reload_choices));
control = new wxTextCtrl(autoPage,-1);
Bind(control,_T("Automation Autoload Path"));
autoSizer2->Add(control,1,wxEXPAND);
autoSizer2->Add(new wxStaticText(autoPage,-1,_("Trace level: ")),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10);
wxString trace_choices[6] = { _("0: Fatal"), _("1: Error"), _("2: Warning"), _("3: Hint"), _("4: Debug"), _("5: Trace") };
control = new wxComboBox(autoPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,6,trace_choices,wxCB_READONLY | wxCB_DROPDOWN);
Bind(control,_T("Automation Trace Level"));
autoSizer2->Add(control,1,wxEXPAND);
autoSizer2->AddGrowableCol(1,1); autoSizer2->AddGrowableCol(1,1);
autoSizer2->Add(new wxStaticText(autoPage,-1,_("Thread priority: ")),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10);
wxString prio_choices[3] = { _("Normal"), _("Below Normal (recommended)"), _("Lowest") };
control = new wxComboBox(autoPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,3,prio_choices,wxCB_READONLY|wxCB_DROPDOWN);
Bind(control, _T("Automation Thread Priority"));
autoSizer2->Add(control, 1, wxEXPAND);
autoSizer2->Add(new wxStaticText(autoPage,-1,_("Autoreload on Export: ")),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10);
wxString reload_choices[4] = { _("No scripts"), _("Subtitle-local scripts"), _("Global autoload scripts"), _("All scripts") };
control = new wxComboBox(autoPage,-1,_T(""),wxDefaultPosition,wxDefaultSize,4,reload_choices,wxCB_READONLY|wxCB_DROPDOWN);
Bind(control, _T("Automation Autoreload Mode"));
autoSizer2->Add(control, 1, wxEXPAND);
// Sizers // Sizers
autoSizer1->Add(autoSizer2,1,wxEXPAND | wxALL,5); autoSizer1->Add(autoSizer2,1,wxEXPAND | wxALL,5);
@ -737,6 +654,39 @@ void DialogOptions::Bind(wxControl *ctrl, wxString option,int param) {
} }
////////////////////
// Add a wxTextCtrl
void DialogOptions::AddTextControl(wxWindow *parent,wxSizer *sizer,wxString label,wxString option,TextType type) {
sizer->Add(new wxStaticText(parent,-1,label + wxString(_T(": "))),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10);
wxTextCtrl *control;
if (type == TEXT_TYPE_NUMBER) control = new wxTextCtrl(parent,-1,_T(""),wxDefaultPosition,wxDefaultSize,0,NumValidator());
else control = new wxTextCtrl(parent,-1);
Bind(control,option);
sizer->Add(control,1,wxEXPAND);
}
////////////////////
// Add a wxComboBox
void DialogOptions::AddComboControl(wxWindow *parent,wxSizer *sizer,wxString label,wxString option,wxArrayString choices,bool readOnly,int bindParam) {
sizer->Add(new wxStaticText(parent,-1,label + wxString(_T(": "))),0,wxALIGN_CENTER_VERTICAL | wxRIGHT,10);
int flags = wxCB_DROPDOWN;
if (readOnly) flags |= wxCB_READONLY;
wxComboBox *control = new wxComboBox(parent,-1,_T(""),wxDefaultPosition,wxDefaultSize,choices,flags);
Bind(control,option,bindParam);
sizer->Add(control,1,wxEXPAND);
}
//////////////////
// Add a checkbox
void DialogOptions::AddCheckBox(wxWindow *parent,wxSizer *sizer,wxString label,wxString option) {
wxControl *control = new wxCheckBox(parent,-1,label);
Bind(control,option);
sizer->Add(control,1,wxEXPAND,0);
}
/////////////// ///////////////
// Event table // Event table
BEGIN_EVENT_TABLE(DialogOptions,wxDialog) BEGIN_EVENT_TABLE(DialogOptions,wxDialog)

View File

@ -69,6 +69,17 @@ public:
}; };
//////////////////
// TextCtrl types
enum TextType {
TEXT_TYPE_PLAIN,
TEXT_TYPE_NUMBER,
TEXT_TYPE_FILE,
TEXT_TYPE_FOLDER,
TEXT_TYPE_FONT
};
//////////////////////// ////////////////////////
// Options screen class // Options screen class
class DialogOptions: public wxDialog { class DialogOptions: public wxDialog {
@ -87,6 +98,10 @@ private:
void WriteToOptions(bool justApply=false); void WriteToOptions(bool justApply=false);
void ReadFromOptions(); void ReadFromOptions();
void AddTextControl(wxWindow *parent,wxSizer *sizer,wxString label,wxString option,TextType type=TEXT_TYPE_PLAIN);
void AddComboControl(wxWindow *parent,wxSizer *sizer,wxString label,wxString option,wxArrayString choices,bool readOnly=true,int bindParam=0);
void AddCheckBox(wxWindow *parent,wxSizer *sizer,wxString label,wxString option);
void OnOK(wxCommandEvent &event); void OnOK(wxCommandEvent &event);
void OnCancel(wxCommandEvent &event); void OnCancel(wxCommandEvent &event);
void OnApply(wxCommandEvent &event); void OnApply(wxCommandEvent &event);