diff --git a/aegisub/dialog_options.cpp b/aegisub/dialog_options.cpp index 93ddf7a8d..91af392f5 100644 --- a/aegisub/dialog_options.cpp +++ b/aegisub/dialog_options.cpp @@ -46,6 +46,8 @@ #include "main.h" #include "validators.h" #include "colour_button.h" +#include "subs_edit_box.h" +#include "subs_edit_ctrl.h" /////////////// @@ -56,6 +58,7 @@ DialogOptions::DialogOptions(wxWindow *parent) #ifdef wxUSE_TREEBOOK // Create book book = new wxTreebook(this,-1,wxDefaultPosition,wxSize(100,100)); + needsRestart = false; // Image list //wxImageList *imgList = new wxImageList(16,15); @@ -193,7 +196,7 @@ DialogOptions::DialogOptions(wxWindow *parent) // Second static box wxControl *control; - wxString labels2[9] = { _("Normal"), _("Brackets"), _("Slashes"), _("Tags"), _("Parameters") , _("Error"), _("Error Background"), _("Line Break"), _("Modified Background") }; + wxString labels2[9] = { _("Normal"), _("Brackets"), _("Slashes and Parentheses"), _("Tags"), _("Parameters") , _("Error"), _("Error Background"), _("Line Break"), _("Modified Background") }; wxString options2[11] = { _T("Normal"), _T("Brackets"), _T("Slashes"), _T("Tags"), _T("Parameters") , _T("Error"), _T("Error Background"), _T("Line Break"), _T("Edit box need enter background"), _T("Font Face"), _T("Font Size") }; for (int i=0;i<9;i++) { wxString caption = labels2[i]+_T(": "); @@ -243,6 +246,7 @@ DialogOptions::DialogOptions(wxWindow *parent) buttonSizer->AddStretchSpacer(1); buttonSizer->Add(new wxButton(this,wxID_OK),0,wxRIGHT,5); buttonSizer->Add(new wxButton(this,wxID_CANCEL),0,wxRIGHT,5); + buttonSizer->Add(new wxButton(this,wxID_APPLY),0,wxRIGHT,5); // Main Sizer wxSizer *mainSizer = new wxBoxSizer(wxVERTICAL); @@ -278,16 +282,33 @@ void DialogOptions::Bind(wxControl *ctrl, wxString option) { BEGIN_EVENT_TABLE(DialogOptions,wxDialog) EVT_BUTTON(wxID_OK,DialogOptions::OnOK) EVT_BUTTON(wxID_CANCEL,DialogOptions::OnCancel) + EVT_BUTTON(wxID_APPLY,DialogOptions::OnApply) END_EVENT_TABLE() ////// // OK void DialogOptions::OnOK(wxCommandEvent &event) { - WriteToOptions(); Options.SetInt(_T("Options page"),book->GetSelection()); - Options.Save(); + WriteToOptions(); EndModal(0); + + // Restart + if (needsRestart) { + int answer = wxMessageBox(_("Aegisub must restart for the changes to take effect. Restart now?"),_("Restart Aegisub"),wxYES_NO); + if (answer == wxYES) { + FrameMain *frame = (FrameMain*) GetParent(); + if (frame->Close()) wxExecute(AegisubApp::fullPath); + } + } +} + + +///////// +// Apply +void DialogOptions::OnApply(wxCommandEvent &event) { + Options.SetInt(_T("Options page"),book->GetSelection()); + WriteToOptions(true); } @@ -297,15 +318,25 @@ void DialogOptions::OnCancel(wxCommandEvent &event) { Options.SetInt(_T("Options page"),book->GetSelection()); Options.Save(); EndModal(0); + + // Restart + if (needsRestart) { + int answer = wxMessageBox(_("Aegisub must restart for the changes to take effect. Restart now?"),_("Restart Aegisub"),wxYES_NO); + if (answer == wxYES) { + FrameMain *frame = (FrameMain*) GetParent(); + if (frame->Close()) wxExecute(AegisubApp::fullPath); + } + } } //////////////////// // Write to options -void DialogOptions::WriteToOptions() { +void DialogOptions::WriteToOptions(bool justApply) { // Flags bool mustRestart = false; + bool editBox = false; // For each bound item for (unsigned int i=0;iClose()) wxExecute(AegisubApp::fullPath); + } + } + } + + // Other modifications + if (!mustRestart || justApply) { + if (editBox) { FrameMain *frame = (FrameMain*) GetParent(); - if (frame->Close()) wxExecute(AegisubApp::fullPath); + frame->EditBox->TextEdit->SetStyles(); + frame->EditBox->TextEdit->UpdateStyle(); } } } diff --git a/aegisub/dialog_options.h b/aegisub/dialog_options.h index 654060fba..6a30efb62 100644 --- a/aegisub/dialog_options.h +++ b/aegisub/dialog_options.h @@ -66,15 +66,18 @@ public: // Options screen class class DialogOptions: public wxDialog { private: + bool needsRestart; + wxTreebook *book; std::vector binds; void Bind(wxControl *ctrl,wxString option); - void WriteToOptions(); + void WriteToOptions(bool justApply=false); void ReadFromOptions(); void OnOK(wxCommandEvent &event); void OnCancel(wxCommandEvent &event); + void OnApply(wxCommandEvent &event); public: DialogOptions(wxWindow *parent); diff --git a/aegisub/options.cpp b/aegisub/options.cpp index 2c3e0d093..e465603bd 100644 --- a/aegisub/options.cpp +++ b/aegisub/options.cpp @@ -100,6 +100,7 @@ void OptionsManager::LoadDefaults() { // Edit Box SetText(_T("Dictionaries path"),_T("dictionaries")); SetBool(_T("Link Time Boxes Commit"),true); + SetModificationType(MOD_EDIT_BOX); SetBool(_T("Call Tips Enabled"),true); SetBool(_T("Syntax Highlight Enabled"),true); @@ -121,6 +122,7 @@ void OptionsManager::LoadDefaults() { SetText(_T("Font Face"),_T("")); // Video Options + SetModificationType(MOD_AUTOMATIC); SetInt(_T("Video Check Script Res"), 0); SetInt(_T("Video Default Zoom"), 7); SetInt(_T("Video Fast Jump Step"), 10); diff --git a/aegisub/options.h b/aegisub/options.h index 4e7f873d6..a7c269564 100644 --- a/aegisub/options.h +++ b/aegisub/options.h @@ -49,7 +49,8 @@ enum ModType { MOD_OFF = -1, MOD_AUTOMATIC, - MOD_RESTART + MOD_RESTART, + MOD_EDIT_BOX }; diff --git a/aegisub/subs_edit_ctrl.cpp b/aegisub/subs_edit_ctrl.cpp index a29571462..4ded25411 100644 --- a/aegisub/subs_edit_ctrl.cpp +++ b/aegisub/subs_edit_ctrl.cpp @@ -54,6 +54,7 @@ SubsTextEditCtrl::SubsTextEditCtrl(wxWindow* parent, wxWindowID id, const wxStri SetWrapMode(wxSCI_WRAP_WORD); SetMarginWidth(1,0); UsePopUp(false); + SetStyles(); // Set hotkeys CmdKeyClear(wxSCI_KEY_RETURN,wxSCI_SCMOD_CTRL); @@ -67,54 +68,6 @@ SubsTextEditCtrl::SubsTextEditCtrl(wxWindow* parent, wxWindowID id, const wxStri CmdKeyClear('T',wxSCI_SCMOD_CTRL | wxSCI_SCMOD_SHIFT); CmdKeyClear('U',wxSCI_SCMOD_CTRL); - // Styles - wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); - wxString fontname = Options.AsText(_T("Font Face")); - if (fontname != _T("")) font.SetFaceName(fontname); - int size = Options.AsInt(_T("Font Size")); - - // Normal style - StyleSetFont(0,font); - StyleSetSize(0,size); - StyleSetForeground(0,Options.AsColour(_T("Syntax Highlight Normal"))); - - // Brackets style - StyleSetFont(1,font); - StyleSetSize(1,size); - StyleSetForeground(1,Options.AsColour(_T("Syntax Highlight Brackets"))); - - // Slashes/Parenthesis/Comma style - StyleSetFont(2,font); - StyleSetSize(2,size); - StyleSetForeground(2,Options.AsColour(_T("Syntax Highlight Slashes"))); - - // Tags style - StyleSetFont(3,font); - StyleSetSize(3,size); - StyleSetBold(3,true); - StyleSetForeground(3,Options.AsColour(_T("Syntax Highlight Tags"))); - - // Error style - StyleSetFont(4,font); - StyleSetSize(4,size); - StyleSetForeground(4,Options.AsColour(_T("Syntax Highlight Error"))); - StyleSetBackground(4,Options.AsColour(_T("Syntax Highlight Error Background"))); - - // Tag Parameters style - StyleSetFont(5,font); - StyleSetSize(5,size); - StyleSetForeground(5,Options.AsColour(_T("Syntax Highlight Parameters"))); - - // Line breaks style - StyleSetFont(6,font); - StyleSetSize(6,size); - StyleSetBold(6,true); - StyleSetForeground(6,Options.AsColour(_T("Syntax Highlight Line Break"))); - - // Misspelling indicator - IndicatorSetStyle(0,wxSCI_INDIC_SQUIGGLE); - IndicatorSetForeground(0,wxColour(255,0,0)); - // Set spellchecker spellchecker = SpellChecker::GetSpellChecker(); @@ -208,6 +161,59 @@ BEGIN_EVENT_TABLE(SubsTextEditCtrl,wxScintilla) END_EVENT_TABLE() +////////////// +// Set styles +void SubsTextEditCtrl::SetStyles() { + // Styles + wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + wxString fontname = Options.AsText(_T("Font Face")); + if (fontname != _T("")) font.SetFaceName(fontname); + int size = Options.AsInt(_T("Font Size")); + + // Normal style + StyleSetFont(0,font); + StyleSetSize(0,size); + StyleSetForeground(0,Options.AsColour(_T("Syntax Highlight Normal"))); + + // Brackets style + StyleSetFont(1,font); + StyleSetSize(1,size); + StyleSetForeground(1,Options.AsColour(_T("Syntax Highlight Brackets"))); + + // Slashes/Parenthesis/Comma style + StyleSetFont(2,font); + StyleSetSize(2,size); + StyleSetForeground(2,Options.AsColour(_T("Syntax Highlight Slashes"))); + + // Tags style + StyleSetFont(3,font); + StyleSetSize(3,size); + StyleSetBold(3,true); + StyleSetForeground(3,Options.AsColour(_T("Syntax Highlight Tags"))); + + // Error style + StyleSetFont(4,font); + StyleSetSize(4,size); + StyleSetForeground(4,Options.AsColour(_T("Syntax Highlight Error"))); + StyleSetBackground(4,Options.AsColour(_T("Syntax Highlight Error Background"))); + + // Tag Parameters style + StyleSetFont(5,font); + StyleSetSize(5,size); + StyleSetForeground(5,Options.AsColour(_T("Syntax Highlight Parameters"))); + + // Line breaks style + StyleSetFont(6,font); + StyleSetSize(6,size); + StyleSetBold(6,true); + StyleSetForeground(6,Options.AsColour(_T("Syntax Highlight Line Break"))); + + // Misspelling indicator + IndicatorSetStyle(0,wxSCI_INDIC_SQUIGGLE); + IndicatorSetForeground(0,wxColour(255,0,0)); +} + + ///////////////// // Style a range void SubsTextEditCtrl::UpdateStyle(int start, int _length) { diff --git a/aegisub/subs_edit_ctrl.h b/aegisub/subs_edit_ctrl.h index ecfcec498..5030365dc 100644 --- a/aegisub/subs_edit_ctrl.h +++ b/aegisub/subs_edit_ctrl.h @@ -99,6 +99,7 @@ public: void UpdateStyle(int start=0,int length=-1); void StyleSpellCheck(int start=0,int length=-1); void UpdateCallTip(); + void SetStyles(); DECLARE_EVENT_TABLE() };