diff --git a/aegisub/src/command/edit.cpp b/aegisub/src/command/edit.cpp index 8268b20b7..bcb173d63 100644 --- a/aegisub/src/command/edit.cpp +++ b/aegisub/src/command/edit.cpp @@ -462,7 +462,7 @@ struct edit_find_replace : public Command { void operator()(agi::Context *c) { c->videoController->Stop(); - Search.OpenDialog(true); + c->search->OpenDialog(true); } }; diff --git a/aegisub/src/command/subtitle.cpp b/aegisub/src/command/subtitle.cpp index 78a3482c6..a82146339 100644 --- a/aegisub/src/command/subtitle.cpp +++ b/aegisub/src/command/subtitle.cpp @@ -105,7 +105,7 @@ struct subtitle_find : public Command { void operator()(agi::Context *c) { c->videoController->Stop(); - Search.OpenDialog(false); + c->search->OpenDialog(false); } }; @@ -119,7 +119,7 @@ struct subtitle_find_next : public Command { void operator()(agi::Context *c) { c->videoController->Stop(); - Search.FindNext(); + c->search->FindNext(); } }; diff --git a/aegisub/src/dialog_search_replace.cpp b/aegisub/src/dialog_search_replace.cpp index ec861984d..4d56bb4f7 100644 --- a/aegisub/src/dialog_search_replace.cpp +++ b/aegisub/src/dialog_search_replace.cpp @@ -80,6 +80,7 @@ enum { DialogSearchReplace::DialogSearchReplace(agi::Context* c, bool withReplace) : wxDialog(c->parent, -1, withReplace ? _("Replace") : _("Find")) +, c(c) , hasReplace(withReplace) { wxSizer *FindSizer = new wxFlexGridSizer(2, 2, 5, 15); @@ -142,7 +143,7 @@ DialogSearchReplace::DialogSearchReplace(agi::Context* c, bool withReplace) SetSizerAndFit(MainSizer); CenterOnParent(); - Search.OnDialogOpen(); + c->search->OnDialogOpen(); Bind(wxEVT_COMMAND_BUTTON_CLICKED, std::bind(&DialogSearchReplace::FindReplace, this, 0), BUTTON_FIND_NEXT); Bind(wxEVT_COMMAND_BUTTON_CLICKED, std::bind(&DialogSearchReplace::FindReplace, this, 1), BUTTON_REPLACE_NEXT); @@ -150,8 +151,8 @@ DialogSearchReplace::DialogSearchReplace(agi::Context* c, bool withReplace) } DialogSearchReplace::~DialogSearchReplace() { - Search.isReg = CheckRegExp->IsChecked() && CheckRegExp->IsEnabled(); - Search.matchCase = CheckMatchCase->IsChecked(); + c->search->isReg = CheckRegExp->IsChecked() && CheckRegExp->IsEnabled(); + c->search->matchCase = CheckMatchCase->IsChecked(); OPT_SET("Tool/Search Replace/Match Case")->SetBool(CheckMatchCase->IsChecked()); OPT_SET("Tool/Search Replace/RegExp")->SetBool(CheckRegExp->IsChecked()); OPT_SET("Tool/Search Replace/Field")->SetInt(Field->GetSelection()); @@ -164,25 +165,25 @@ void DialogSearchReplace::FindReplace(int mode) { wxString LookFor = FindEdit->GetValue(); if (!LookFor) return; - Search.isReg = CheckRegExp->IsChecked() && CheckRegExp->IsEnabled(); - Search.matchCase = CheckMatchCase->IsChecked(); - Search.LookFor = LookFor; - Search.initialized = true; - Search.affect = Affect->GetSelection(); - Search.field = Field->GetSelection(); + c->search->isReg = CheckRegExp->IsChecked() && CheckRegExp->IsEnabled(); + c->search->matchCase = CheckMatchCase->IsChecked(); + c->search->LookFor = LookFor; + c->search->initialized = true; + c->search->affect = Affect->GetSelection(); + c->search->field = Field->GetSelection(); if (hasReplace) { wxString ReplaceWith = ReplaceEdit->GetValue(); - Search.ReplaceWith = ReplaceWith; + c->search->ReplaceWith = ReplaceWith; config::mru->Add("Replace", from_wx(ReplaceWith)); } if (mode == 0) - Search.FindNext(); + c->search->FindNext(); else if (mode == 1) - Search.ReplaceNext(); + c->search->ReplaceNext(); else - Search.ReplaceAll(); + c->search->ReplaceAll(); config::mru->Add("Find", from_wx(LookFor)); UpdateDropDowns(); @@ -204,8 +205,9 @@ void DialogSearchReplace::UpdateDropDowns() { update_mru(ReplaceEdit, "Replace"); } -SearchReplaceEngine::SearchReplaceEngine() -: curLine(0) +SearchReplaceEngine::SearchReplaceEngine(agi::Context *c) +: context(c) +, curLine(0) , pos(0) , matchLen(0) , replaceLen(0) @@ -216,7 +218,6 @@ SearchReplaceEngine::SearchReplaceEngine() , initialized(false) , field(FIELD_TEXT) , affect(LIMIT_ALL) -, context(nullptr) { } @@ -373,7 +374,7 @@ void SearchReplaceEngine::ReplaceAll() { } } else { - if (!Search.matchCase) { + if (!matchCase) { bool replaced = false; wxString Left, Right = *Text; size_t pos = 0; @@ -439,5 +440,3 @@ void SearchReplaceEngine::OpenDialog(bool replace) { diag->Show(); hasReplace = replace; } - -SearchReplaceEngine Search; diff --git a/aegisub/src/dialog_search_replace.h b/aegisub/src/dialog_search_replace.h index 50badfb14..639f3c1bd 100644 --- a/aegisub/src/dialog_search_replace.h +++ b/aegisub/src/dialog_search_replace.h @@ -41,6 +41,8 @@ class wxComboBox; class wxRadioBox; class SearchReplaceEngine { + agi::Context *context; + int curLine; size_t pos; size_t matchLen; @@ -56,24 +58,21 @@ class SearchReplaceEngine { wxString ReplaceWith; public: - agi::Context *context; - void FindNext() { ReplaceNext(false); } void ReplaceNext(bool DoReplace=true); void ReplaceAll(); void OpenDialog(bool HasReplace); void OnDialogOpen(); - SearchReplaceEngine(); + SearchReplaceEngine(agi::Context *c); friend class DialogSearchReplace; }; -// Instance -extern SearchReplaceEngine Search; - class DialogSearchReplace : public wxDialog { friend class SearchReplaceEngine; + agi::Context *c; + bool hasReplace; wxComboBox *FindEdit; diff --git a/aegisub/src/frame_main.cpp b/aegisub/src/frame_main.cpp index a5bcf8680..fb63df657 100644 --- a/aegisub/src/frame_main.cpp +++ b/aegisub/src/frame_main.cpp @@ -376,7 +376,7 @@ void FrameMain::InitContents() { StartupLog("Create subtitles grid"); context->subsGrid = SubsGrid = new SubtitlesGrid(Panel, context.get()); context->selectionController = context->subsGrid; - Search.context = context.get(); + context->search = new SearchReplaceEngine(context.get()); StartupLog("Create video box"); videoBox = new VideoBox(Panel, false, context.get()); diff --git a/aegisub/src/include/aegisub/context.h b/aegisub/src/include/aegisub/context.h index e38957a8e..794203f51 100644 --- a/aegisub/src/include/aegisub/context.h +++ b/aegisub/src/include/aegisub/context.h @@ -4,6 +4,7 @@ class AudioController; class AssDialogue; class AudioKaraoke; class DialogManager; +class SearchReplaceEngine; template class SelectionController; class SubsTextEditCtrl; class SubtitlesGrid; @@ -26,6 +27,8 @@ struct Context { TextSelectionController *textSelectionController; VideoContext *videoController; + SearchReplaceEngine *search; + // Things that should probably be in some sort of UI-context-model wxWindow *parent; wxWindow *previousFocus;