static void update_mru(wxComboBox *cb, const char *mru_name) { cb->Freeze(); cb->Clear(); cb->Append(lagi_MRU_wxAS(mru_name)); if (!cb->IsListEmpty()) cb->SetSelection(0); cb->Thaw(); }
void DialogSearchReplace::UpdateDropDowns() { FindEdit->Freeze(); FindEdit->Clear(); FindEdit->Append(lagi_MRU_wxAS("Find")); if (!FindEdit->IsListEmpty()) FindEdit->SetSelection(0); FindEdit->Thaw(); if (hasReplace) { ReplaceEdit->Freeze(); ReplaceEdit->Clear(); ReplaceEdit->Append(lagi_MRU_wxAS("Replace")); if (!ReplaceEdit->IsListEmpty()) ReplaceEdit->SetSelection(0); ReplaceEdit->Thaw(); } }
DialogSearchReplace::DialogSearchReplace(agi::Context* c, bool replace) : wxDialog(c->parent, -1, replace ? _("Replace") : _("Find")) , c(c) , settings(new SearchReplaceSettings) , has_replace(replace) { auto recent_find(lagi_MRU_wxAS("Find")); auto recent_replace(lagi_MRU_wxAS("Replace")); settings->field = static_cast<SearchReplaceSettings::Field>(OPT_GET("Tool/Search Replace/Field")->GetInt()); settings->limit_to = static_cast<SearchReplaceSettings::Limit>(OPT_GET("Tool/Search Replace/Affect")->GetInt()); settings->find = recent_find.empty() ? std::string() : from_wx(recent_find.front()); settings->replace_with = recent_replace.empty() ? std::string() : from_wx(recent_replace.front()); settings->match_case = OPT_GET("Tool/Search Replace/Match Case")->GetBool(); settings->use_regex = OPT_GET("Tool/Search Replace/RegExp")->GetBool(); settings->ignore_comments = OPT_GET("Tool/Search Replace/Skip Comments")->GetBool(); settings->skip_tags = OPT_GET("Tool/Search Replace/Skip Tags")->GetBool(); settings->exact_match = false; auto find_sizer = new wxFlexGridSizer(2, 2, 5, 15); find_edit = new wxComboBox(this, -1, "", wxDefaultPosition, wxSize(300, -1), recent_find, wxCB_DROPDOWN, StringBinder(&settings->find)); find_sizer->Add(new wxStaticText(this, -1, _("Find what:")), wxSizerFlags().Center().Left()); find_sizer->Add(find_edit); if (has_replace) { replace_edit = new wxComboBox(this, -1, "", wxDefaultPosition, wxSize(300, -1), lagi_MRU_wxAS("Replace"), wxCB_DROPDOWN, StringBinder(&settings->replace_with)); find_sizer->Add(new wxStaticText(this, -1, _("Replace with:")), wxSizerFlags().Center().Left()); find_sizer->Add(replace_edit); } auto options_sizer = new wxBoxSizer(wxVERTICAL); options_sizer->Add(new wxCheckBox(this, -1, _("&Match case"), wxDefaultPosition, wxDefaultSize, 0, wxGenericValidator(&settings->match_case)), wxSizerFlags().Border(wxBOTTOM)); options_sizer->Add(new wxCheckBox(this, -1, _("&Use regular expressions"), wxDefaultPosition, wxDefaultSize, 0, wxGenericValidator(&settings->use_regex)), wxSizerFlags().Border(wxBOTTOM)); options_sizer->Add(new wxCheckBox(this, -1, _("&Skip Comments"), wxDefaultPosition, wxDefaultSize, 0, wxGenericValidator(&settings->ignore_comments)), wxSizerFlags().Border(wxBOTTOM)); options_sizer->Add(new wxCheckBox(this, -1, _("S&kip Override Tags"), wxDefaultPosition, wxDefaultSize, 0, wxGenericValidator(&settings->skip_tags))); auto left_sizer = new wxBoxSizer(wxVERTICAL); left_sizer->Add(find_sizer, wxSizerFlags().DoubleBorder(wxBOTTOM)); left_sizer->Add(options_sizer); wxString field[] = { _("Text"), _("Style"), _("Actor"), _("Effect") }; wxString affect[] = { _("All rows"), _("Selected rows") }; auto limit_sizer = new wxBoxSizer(wxHORIZONTAL); limit_sizer->Add(new wxRadioBox(this, -1, _("In Field"), wxDefaultPosition, wxDefaultSize, countof(field), field, 0, wxRA_SPECIFY_COLS, MakeEnumBinder(&settings->field)), wxSizerFlags().Border(wxRIGHT)); limit_sizer->Add(new wxRadioBox(this, -1, _("Limit to"), wxDefaultPosition, wxDefaultSize, countof(affect), affect, 0, wxRA_SPECIFY_COLS, MakeEnumBinder(&settings->limit_to))); auto find_next = new wxButton(this, -1, _("&Find next")); auto replace_next = new wxButton(this, -1, _("Replace &next")); auto replace_all = new wxButton(this, -1, _("Replace &all")); find_next->SetDefault(); auto button_sizer = new wxBoxSizer(wxVERTICAL); button_sizer->Add(find_next, wxSizerFlags().Border(wxBOTTOM)); button_sizer->Add(replace_next, wxSizerFlags().Border(wxBOTTOM)); button_sizer->Add(replace_all, wxSizerFlags().Border(wxBOTTOM)); button_sizer->Add(new wxButton(this, wxID_CANCEL)); if (!has_replace) { button_sizer->Hide(replace_next); button_sizer->Hide(replace_all); } auto top_sizer = new wxBoxSizer(wxHORIZONTAL); top_sizer->Add(left_sizer, wxSizerFlags().Border()); top_sizer->Add(button_sizer, wxSizerFlags().Border()); auto main_sizer = new wxBoxSizer(wxVERTICAL); main_sizer->Add(top_sizer); main_sizer->Add(limit_sizer, wxSizerFlags().Border()); SetSizerAndFit(main_sizer); CenterOnParent(); find_next->Bind(wxEVT_COMMAND_BUTTON_CLICKED, std::bind(&DialogSearchReplace::FindReplace, this, &SearchReplaceEngine::FindNext)); replace_next->Bind(wxEVT_COMMAND_BUTTON_CLICKED, std::bind(&DialogSearchReplace::FindReplace, this, &SearchReplaceEngine::ReplaceNext)); replace_all->Bind(wxEVT_COMMAND_BUTTON_CLICKED, std::bind(&DialogSearchReplace::FindReplace, this, &SearchReplaceEngine::ReplaceAll)); }
DialogSearchReplace::DialogSearchReplace(agi::Context* c, bool withReplace) : wxDialog(c->parent, -1, withReplace ? _("Replace") : _("Find")) , hasReplace(withReplace) { wxSizer *FindSizer = new wxFlexGridSizer(2,2,5,15); FindEdit = new wxComboBox(this,-1,"",wxDefaultPosition,wxSize(300,-1),lagi_MRU_wxAS("Find"),wxCB_DROPDOWN); if (!FindEdit->IsListEmpty()) FindEdit->SetSelection(0); FindSizer->Add(new wxStaticText(this,-1,_("Find what:")),0,wxRIGHT | wxALIGN_CENTER_VERTICAL,0); FindSizer->Add(FindEdit,0,wxRIGHT,0); if (hasReplace) { ReplaceEdit = new wxComboBox(this,-1,"",wxDefaultPosition,wxSize(300,-1),lagi_MRU_wxAS("Replace"),wxCB_DROPDOWN); FindSizer->Add(new wxStaticText(this,-1,_("Replace with:")),0,wxRIGHT | wxALIGN_CENTER_VERTICAL,0); FindSizer->Add(ReplaceEdit,0,wxRIGHT,0); if (!ReplaceEdit->IsListEmpty()) ReplaceEdit->SetSelection(0); } wxSizer *OptionsSizer = new wxBoxSizer(wxVERTICAL); CheckMatchCase = new wxCheckBox(this,CHECK_MATCH_CASE,_("&Match case")); CheckRegExp = new wxCheckBox(this,CHECK_MATCH_CASE,_("&Use regular expressions")); CheckUpdateVideo = new wxCheckBox(this,CHECK_UPDATE_VIDEO,_("Update &Video")); CheckMatchCase->SetValue(OPT_GET("Tool/Search Replace/Match Case")->GetBool()); CheckRegExp->SetValue(OPT_GET("Tool/Search Replace/RegExp")->GetBool()); CheckUpdateVideo->SetValue(OPT_GET("Tool/Search Replace/Video Update")->GetBool()); CheckUpdateVideo->Enable(c->videoController->IsLoaded()); OptionsSizer->Add(CheckMatchCase,0,wxBOTTOM,5); OptionsSizer->Add(CheckRegExp,0,wxBOTTOM,5); OptionsSizer->Add(CheckUpdateVideo,0,wxBOTTOM,0); // Limits sizer wxArrayString field; field.Add(_("Text")); field.Add(_("Style")); field.Add(_("Actor")); field.Add(_("Effect")); wxArrayString affect; affect.Add(_("All rows")); affect.Add(_("Selected rows")); Field = new wxRadioBox(this,-1,_("In Field"),wxDefaultPosition,wxDefaultSize,field); Affect = new wxRadioBox(this,-1,_("Limit to"),wxDefaultPosition,wxDefaultSize,affect); wxSizer *LimitSizer = new wxBoxSizer(wxHORIZONTAL); LimitSizer->Add(Field,1,wxEXPAND | wxRIGHT,5); LimitSizer->Add(Affect,0,wxEXPAND | wxRIGHT,0); Field->SetSelection(OPT_GET("Tool/Search Replace/Field")->GetInt()); Affect->SetSelection(OPT_GET("Tool/Search Replace/Affect")->GetInt()); // Left sizer wxSizer *LeftSizer = new wxBoxSizer(wxVERTICAL); LeftSizer->Add(FindSizer,0,wxBOTTOM,10); LeftSizer->Add(OptionsSizer,0,wxBOTTOM,5); LeftSizer->Add(LimitSizer,0,wxEXPAND | wxBOTTOM,0); // Buttons wxSizer *ButtonSizer = new wxBoxSizer(wxVERTICAL); wxButton *FindNext = new wxButton(this,BUTTON_FIND_NEXT,_("&Find next")); FindNext->SetDefault(); ButtonSizer->Add(FindNext,0,wxEXPAND | wxBOTTOM,3); if (hasReplace) { ButtonSizer->Add(new wxButton(this,BUTTON_REPLACE_NEXT,_("Replace &next")),0,wxEXPAND | wxBOTTOM,3); ButtonSizer->Add(new wxButton(this,BUTTON_REPLACE_ALL,_("Replace &all")),0,wxEXPAND | wxBOTTOM,3); } ButtonSizer->Add(new wxButton(this,wxID_CANCEL),0,wxEXPAND | wxBOTTOM,20); // Main sizer wxSizer *MainSizer = new wxBoxSizer(wxHORIZONTAL); MainSizer->Add(LeftSizer,0,wxEXPAND | wxALL,5); MainSizer->Add(ButtonSizer,0,wxEXPAND | wxALL,5); SetSizerAndFit(MainSizer); CenterOnParent(); 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); Bind(wxEVT_COMMAND_BUTTON_CLICKED, std::bind(&DialogSearchReplace::FindReplace, this, 2), BUTTON_REPLACE_ALL); Bind(wxEVT_SET_FOCUS, std::bind(&SearchReplaceEngine::SetFocus, &Search, true)); Bind(wxEVT_KILL_FOCUS, std::bind(&SearchReplaceEngine::SetFocus, &Search, false)); }