1
0
mirror of https://github.com/odrling/Aegisub synced 2025-04-11 22:56:02 +02:00

Merge branch 'misc' into feature

This commit is contained in:
arch1t3cht 2024-10-31 22:15:43 +01:00
commit b9ba4ea42c
6 changed files with 35 additions and 31 deletions

View File

@ -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);
}
};

View File

@ -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);
}
};
@ -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);
}
};

View File

@ -70,6 +70,7 @@ public:
if (*diag.first == typeid(DialogType)) {
diag.second->Show();
diag.second->SetFocus();
return;
}
}

View File

@ -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"
@ -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"));
@ -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())
@ -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));
@ -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);
}
}

View File

@ -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);
};

View File

@ -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);