Skip to content

Commit

Permalink
Merge branch 'misc' into feature
Browse files Browse the repository at this point in the history
  • Loading branch information
arch1t3cht committed Oct 31, 2024
2 parents d8c5416 + 0510ced commit b9ba4ea
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 31 deletions.
2 changes: 1 addition & 1 deletion src/command/edit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -544,7 +544,7 @@ struct edit_find_replace final : public Command {

void operator()(agi::Context *c) override {
c->videoController->Stop();
DialogSearchReplace::Show(c, true);
ShowSearchReplaceDialog(c, true);
}
};

Expand Down
4 changes: 2 additions & 2 deletions src/command/subtitle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ struct subtitle_find final : public Command {

void operator()(agi::Context *c) override {
c->videoController->Stop();
DialogSearchReplace::Show(c, false);
ShowSearchReplaceDialog(c, false);
}
};

Expand All @@ -110,7 +110,7 @@ struct subtitle_find_next final : public Command {
void operator()(agi::Context *c) override {
c->videoController->Stop();
if (!c->search->FindNext())
DialogSearchReplace::Show(c, false);
ShowSearchReplaceDialog(c, false);
}
};

Expand Down
1 change: 1 addition & 0 deletions src/dialog_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ class DialogManager {
if (*diag.first == typeid(DialogType)) {
diag.second->Show();
diag.second->SetFocus();
return;
}
}

Expand Down
49 changes: 27 additions & 22 deletions src/dialog_search_replace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "dialog_search_replace.h"

#include "compat.h"
#include "dialog_manager.h"
#include "include/aegisub/context.h"
#include "options.h"
#include "search_replace_engine.h"
Expand All @@ -42,11 +43,11 @@
#include <wx/textctrl.h>
#include <wx/valgen.h>

DialogSearchReplace::DialogSearchReplace(agi::Context* c, bool replace)
: wxDialog(c->parent, -1, replace ? _("Replace") : _("Find"))
template<bool has_replace>
DialogSearchReplace<has_replace>::DialogSearchReplace(agi::Context* c)
: wxDialog(c->parent, -1, has_replace ? _("Replace") : _("Find"))
, c(c)
, settings(agi::make_unique<SearchReplaceSettings>())
, has_replace(replace)
{
auto recent_find(lagi_MRU_wxAS("Find"));
auto recent_replace(lagi_MRU_wxAS("Replace"));
Expand Down Expand Up @@ -128,10 +129,8 @@ DialogSearchReplace::DialogSearchReplace(agi::Context* c, bool replace)
replace_all->Bind(wxEVT_BUTTON, std::bind(&DialogSearchReplace::FindReplace, this, &SearchReplaceEngine::ReplaceAll));
}

DialogSearchReplace::~DialogSearchReplace() {
}

void DialogSearchReplace::FindReplace(bool (SearchReplaceEngine::*func)()) {
template<bool has_replace>
void DialogSearchReplace<has_replace>::FindReplace(bool (SearchReplaceEngine::*func)()) {
TransferDataFromWindow();

if (settings->find.empty())
Expand Down Expand Up @@ -160,7 +159,7 @@ void DialogSearchReplace::FindReplace(bool (SearchReplaceEngine::*func)()) {
UpdateDropDowns();
}

static void update_mru(wxComboBox *cb, const char *mru_name) {
void update_mru(wxComboBox *cb, const char *mru_name) {
cb->Freeze();
cb->Clear();
cb->Append(lagi_MRU_wxAS(mru_name));
Expand All @@ -169,27 +168,33 @@ static void update_mru(wxComboBox *cb, const char *mru_name) {
cb->Thaw();
}

void DialogSearchReplace::UpdateDropDowns() {
template<bool has_replace>
void DialogSearchReplace<has_replace>::UpdateDropDowns() {
update_mru(find_edit, "Find");

if (has_replace)
update_mru(replace_edit, "Replace");
}

void DialogSearchReplace::Show(agi::Context *context, bool replace) {
static DialogSearchReplace *diag = nullptr;

if (diag && replace != diag->has_replace) {
// Already opened, but wrong type - destroy and create the right one
diag->Destroy();
diag = nullptr;
template<bool replace>
void ShowSearchReplaceDialog(agi::Context *context) {
auto other = context->dialog->Get<DialogSearchReplace<!replace>>();
if (other != nullptr) {
other->Close();
}

if (!diag)
diag = new DialogSearchReplace(context, replace);
context->dialog->Show<DialogSearchReplace<replace>>(context);
auto dialog = context->dialog->Get<DialogSearchReplace<replace>>();

diag->find_edit->SetFocus();
diag->find_edit->SelectAll();
diag->wxDialog::Show();
diag->Raise();
dialog->find_edit->SetFocus();
dialog->find_edit->SelectAll();
dialog->Raise();
}

void ShowSearchReplaceDialog(agi::Context *context, bool replace) {
if (replace) {
ShowSearchReplaceDialog<true>(context);
} else {
ShowSearchReplaceDialog<false>(context);
}
}
9 changes: 3 additions & 6 deletions src/dialog_search_replace.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,16 @@ class SearchReplaceEngine;
struct SearchReplaceSettings;
class wxComboBox;

template<bool has_replace>
class DialogSearchReplace final : public wxDialog {
agi::Context *c;
std::unique_ptr<SearchReplaceSettings> settings;
bool has_replace;
wxComboBox *find_edit;
wxComboBox *replace_edit;

void UpdateDropDowns();
void FindReplace(bool (SearchReplaceEngine::*func)());

public:
static void Show(agi::Context *context, bool with_replace);

DialogSearchReplace(agi::Context* c, bool with_replace);
~DialogSearchReplace();
wxComboBox *find_edit;
DialogSearchReplace(agi::Context* c);
};
1 change: 1 addition & 0 deletions src/dialogs.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ void ShowKanjiTimerDialog(agi::Context *c);
void ShowLogWindow(agi::Context *c);
void ShowPreferences(wxWindow *parent);
void ShowPropertiesDialog(agi::Context *c);
void ShowSearchReplaceDialog(agi::Context *c, bool replace);
void ShowSelectLinesDialog(agi::Context *c);
void ShowShiftTimesDialog(agi::Context *c);
void ShowSpellcheckerDialog(agi::Context *c);
Expand Down

0 comments on commit b9ba4ea

Please sign in to comment.