mirror of https://github.com/odrling/Aegisub
Add a button to the preferences dialog to reset all options to the defaults
Originally committed to SVN as r6690.
This commit is contained in:
parent
3ae96b59b9
commit
39d2546dcd
|
@ -238,7 +238,7 @@ struct app_options : public Command {
|
||||||
|
|
||||||
void operator()(agi::Context *c) {
|
void operator()(agi::Context *c) {
|
||||||
try {
|
try {
|
||||||
Preferences(c->parent).ShowModal();
|
while (Preferences(c->parent).ShowModal() < 0);
|
||||||
} catch (agi::Exception& e) {
|
} catch (agi::Exception& e) {
|
||||||
LOG_E("config/init") << "Caught exception: " << e.GetName() << " -> " << e.GetMessage();
|
LOG_E("config/init") << "Caught exception: " << e.GetName() << " -> " << e.GetMessage();
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <libaegisub/exception.h>
|
#include <libaegisub/exception.h>
|
||||||
|
#include <libaegisub/hotkey.h>
|
||||||
|
|
||||||
#include "preferences.h"
|
#include "preferences.h"
|
||||||
|
|
||||||
|
@ -614,6 +615,10 @@ void Preferences::AddPendingChange(Thunk const& callback) {
|
||||||
applyButton->Enable(true);
|
applyButton->Enable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Preferences::AddChangeableOption(std::string const& name) {
|
||||||
|
option_names.push_back(name);
|
||||||
|
}
|
||||||
|
|
||||||
void Preferences::OnOK(wxCommandEvent &event) {
|
void Preferences::OnOK(wxCommandEvent &event) {
|
||||||
OnApply(event);
|
OnApply(event);
|
||||||
EndModal(0);
|
EndModal(0);
|
||||||
|
@ -653,6 +658,25 @@ void Preferences::OnApply(wxCommandEvent &) {
|
||||||
config::opt->Flush();
|
config::opt->Flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Preferences::OnResetDefault(wxCommandEvent&) {
|
||||||
|
if (wxYES != wxMessageBox(_("Are you sure that you want to restore the defaults? All your settings will be overridden."), _("Restore defaults?"), wxYES_NO))
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (std::deque<std::string>::iterator it = option_names.begin(); it != option_names.end(); ++it) {
|
||||||
|
agi::OptionValue *opt = OPT_SET(*it);
|
||||||
|
if (!opt->IsDefault())
|
||||||
|
opt->Reset();
|
||||||
|
}
|
||||||
|
config::opt->Flush();
|
||||||
|
|
||||||
|
agi::hotkey::Hotkey def_hotkeys("", GET_DEFAULT_CONFIG(default_hotkey));
|
||||||
|
hotkey::inst->SetHotkeyMap(def_hotkeys.GetHotkeyMap());
|
||||||
|
|
||||||
|
// Close and reopen the dialog to update all the controls with the new values
|
||||||
|
OPT_SET("Tool/Preferences/Page")->SetInt(book->GetSelection());
|
||||||
|
EndModal(-1);
|
||||||
|
}
|
||||||
|
|
||||||
static void PageChanged(wxBookCtrlEvent& evt) {
|
static void PageChanged(wxBookCtrlEvent& evt) {
|
||||||
OPT_SET("Tool/Preferences/Page")->SetInt(evt.GetSelection());
|
OPT_SET("Tool/Preferences/Page")->SetInt(evt.GetSelection());
|
||||||
}
|
}
|
||||||
|
@ -681,11 +705,16 @@ Preferences::Preferences(wxWindow *parent): wxDialog(parent, -1, _("Preferences"
|
||||||
// Bottom Buttons
|
// Bottom Buttons
|
||||||
wxStdDialogButtonSizer *stdButtonSizer = CreateStdDialogButtonSizer(wxOK | wxCANCEL | wxAPPLY | wxHELP);
|
wxStdDialogButtonSizer *stdButtonSizer = CreateStdDialogButtonSizer(wxOK | wxCANCEL | wxAPPLY | wxHELP);
|
||||||
applyButton = stdButtonSizer->GetApplyButton();
|
applyButton = stdButtonSizer->GetApplyButton();
|
||||||
|
wxSizer *buttonSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
wxButton *defaultButton = new wxButton(this, -1, _("&Restore Defaults"));
|
||||||
|
buttonSizer->Add(defaultButton, wxSizerFlags(0).Expand());
|
||||||
|
buttonSizer->AddStretchSpacer(1);
|
||||||
|
buttonSizer->Add(stdButtonSizer, wxSizerFlags(0).Expand());
|
||||||
|
|
||||||
// Main Sizer
|
// Main Sizer
|
||||||
wxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);
|
wxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);
|
||||||
mainSizer->Add(book, wxSizerFlags(1).Expand().Border());
|
mainSizer->Add(book, wxSizerFlags(1).Expand().Border());
|
||||||
mainSizer->Add(stdButtonSizer, wxSizerFlags(0).Expand().Border(wxALL & ~wxTOP));
|
mainSizer->Add(buttonSizer, wxSizerFlags(0).Expand().Border(wxALL & ~wxTOP));
|
||||||
|
|
||||||
SetSizerAndFit(mainSizer);
|
SetSizerAndFit(mainSizer);
|
||||||
SetMinSize(wxSize(-1, 500));
|
SetMinSize(wxSize(-1, 500));
|
||||||
|
@ -697,6 +726,7 @@ Preferences::Preferences(wxWindow *parent): wxDialog(parent, -1, _("Preferences"
|
||||||
Bind(wxEVT_COMMAND_BUTTON_CLICKED, &Preferences::OnOK, this, wxID_OK);
|
Bind(wxEVT_COMMAND_BUTTON_CLICKED, &Preferences::OnOK, this, wxID_OK);
|
||||||
Bind(wxEVT_COMMAND_BUTTON_CLICKED, &Preferences::OnApply, this, wxID_APPLY);
|
Bind(wxEVT_COMMAND_BUTTON_CLICKED, &Preferences::OnApply, this, wxID_APPLY);
|
||||||
Bind(wxEVT_COMMAND_BUTTON_CLICKED, std::tr1::bind(&HelpButton::OpenPage, "Options"), wxID_HELP);
|
Bind(wxEVT_COMMAND_BUTTON_CLICKED, std::tr1::bind(&HelpButton::OpenPage, "Options"), wxID_HELP);
|
||||||
|
defaultButton->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &Preferences::OnResetDefault, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
Preferences::~Preferences() {
|
Preferences::~Preferences() {
|
||||||
|
|
|
@ -37,7 +37,7 @@ DEFINE_BASE_EXCEPTION_NOINNER(PreferencesError, agi::Exception)
|
||||||
DEFINE_SIMPLE_EXCEPTION_NOINNER(PreferenceIncorrectType, PreferencesError, "preferences/incorrect_type")
|
DEFINE_SIMPLE_EXCEPTION_NOINNER(PreferenceIncorrectType, PreferencesError, "preferences/incorrect_type")
|
||||||
DEFINE_SIMPLE_EXCEPTION_NOINNER(PreferenceNotSupported, PreferencesError, "preferences/not_supported")
|
DEFINE_SIMPLE_EXCEPTION_NOINNER(PreferenceNotSupported, PreferencesError, "preferences/not_supported")
|
||||||
|
|
||||||
class Preferences: public wxDialog {
|
class Preferences : public wxDialog {
|
||||||
public:
|
public:
|
||||||
typedef std::tr1::function<void ()> Thunk;
|
typedef std::tr1::function<void ()> Thunk;
|
||||||
private:
|
private:
|
||||||
|
@ -46,15 +46,30 @@ private:
|
||||||
|
|
||||||
std::map<std::string, agi::OptionValue*> pending_changes;
|
std::map<std::string, agi::OptionValue*> pending_changes;
|
||||||
std::deque<Thunk> pending_callbacks;
|
std::deque<Thunk> pending_callbacks;
|
||||||
|
std::deque<std::string> option_names;
|
||||||
|
|
||||||
void OnOK(wxCommandEvent &event);
|
void OnOK(wxCommandEvent &);
|
||||||
void OnCancel(wxCommandEvent &event);
|
void OnCancel(wxCommandEvent &);
|
||||||
void OnApply(wxCommandEvent &event);
|
void OnApply(wxCommandEvent &);
|
||||||
|
void OnResetDefault(wxCommandEvent&);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Preferences(wxWindow *parent);
|
Preferences(wxWindow *parent);
|
||||||
~Preferences();
|
~Preferences();
|
||||||
|
|
||||||
|
/// Add an option to be set when the OK or Apply button is clicked
|
||||||
|
/// @param new_value Clone of the option with the new value to copy over
|
||||||
void SetOption(agi::OptionValue *new_value);
|
void SetOption(agi::OptionValue *new_value);
|
||||||
|
|
||||||
|
/// All a function to call when the OK or Apply button is clicked
|
||||||
|
/// @param callback Function to call
|
||||||
void AddPendingChange(Thunk const& callback);
|
void AddPendingChange(Thunk const& callback);
|
||||||
|
|
||||||
|
/// Add an option which can be changed via the dialog
|
||||||
|
/// @param name Name of the option
|
||||||
|
///
|
||||||
|
/// This is used for resetting options to the defaults. We don't want to
|
||||||
|
/// simply revert to the default config file as a bunch of things other than
|
||||||
|
/// user options are stored in it. Perhaps that should change in the future.
|
||||||
|
void AddChangeableOption(std::string const& name);
|
||||||
};
|
};
|
||||||
|
|
|
@ -131,6 +131,7 @@ void OptionPage::CellSkip(wxFlexGridSizer *flex) {
|
||||||
}
|
}
|
||||||
|
|
||||||
wxControl *OptionPage::OptionAdd(wxFlexGridSizer *flex, const wxString &name, const char *opt_name, double min, double max, double inc) {
|
wxControl *OptionPage::OptionAdd(wxFlexGridSizer *flex, const wxString &name, const char *opt_name, double min, double max, double inc) {
|
||||||
|
parent->AddChangeableOption(opt_name);
|
||||||
const agi::OptionValue *opt = OPT_GET(opt_name);
|
const agi::OptionValue *opt = OPT_GET(opt_name);
|
||||||
|
|
||||||
switch (opt->GetType()) {
|
switch (opt->GetType()) {
|
||||||
|
@ -176,6 +177,7 @@ wxControl *OptionPage::OptionAdd(wxFlexGridSizer *flex, const wxString &name, co
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionPage::OptionChoice(wxFlexGridSizer *flex, const wxString &name, const wxArrayString &choices, const char *opt_name) {
|
void OptionPage::OptionChoice(wxFlexGridSizer *flex, const wxString &name, const wxArrayString &choices, const char *opt_name) {
|
||||||
|
parent->AddChangeableOption(opt_name);
|
||||||
const agi::OptionValue *opt = OPT_GET(opt_name);
|
const agi::OptionValue *opt = OPT_GET(opt_name);
|
||||||
|
|
||||||
wxComboBox *cb = new wxComboBox(this, -1, wxEmptyString, wxDefaultPosition, wxDefaultSize, choices, wxCB_READONLY | wxCB_DROPDOWN);
|
wxComboBox *cb = new wxComboBox(this, -1, wxEmptyString, wxDefaultPosition, wxDefaultSize, choices, wxCB_READONLY | wxCB_DROPDOWN);
|
||||||
|
@ -214,6 +216,7 @@ wxFlexGridSizer* OptionPage::PageSizer(wxString name) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionPage::OptionBrowse(wxFlexGridSizer *flex, const wxString &name, const char *opt_name, wxControl *enabler, bool do_enable) {
|
void OptionPage::OptionBrowse(wxFlexGridSizer *flex, const wxString &name, const char *opt_name, wxControl *enabler, bool do_enable) {
|
||||||
|
parent->AddChangeableOption(opt_name);
|
||||||
const agi::OptionValue *opt = OPT_GET(opt_name);
|
const agi::OptionValue *opt = OPT_GET(opt_name);
|
||||||
|
|
||||||
if (opt->GetType() != agi::OptionValue::Type_String)
|
if (opt->GetType() != agi::OptionValue::Type_String)
|
||||||
|
@ -247,6 +250,9 @@ void OptionPage::OptionFont(wxSizer *sizer, std::string opt_prefix) {
|
||||||
const agi::OptionValue *face_opt = OPT_GET(opt_prefix + "Font Face");
|
const agi::OptionValue *face_opt = OPT_GET(opt_prefix + "Font Face");
|
||||||
const agi::OptionValue *size_opt = OPT_GET(opt_prefix + "Font Size");
|
const agi::OptionValue *size_opt = OPT_GET(opt_prefix + "Font Size");
|
||||||
|
|
||||||
|
parent->AddChangeableOption(face_opt->GetName());
|
||||||
|
parent->AddChangeableOption(size_opt->GetName());
|
||||||
|
|
||||||
wxTextCtrl *font_name = new wxTextCtrl(this, -1, face_opt->GetString());
|
wxTextCtrl *font_name = new wxTextCtrl(this, -1, face_opt->GetString());
|
||||||
font_name->Bind(wxEVT_COMMAND_TEXT_UPDATED, StringUpdater(face_opt->GetName().c_str(), parent));
|
font_name->Bind(wxEVT_COMMAND_TEXT_UPDATED, StringUpdater(face_opt->GetName().c_str(), parent));
|
||||||
|
|
||||||
|
|
|
@ -21,10 +21,10 @@
|
||||||
|
|
||||||
class Preferences;
|
class Preferences;
|
||||||
|
|
||||||
class OptionPage: public wxScrolled<wxPanel> {
|
class OptionPage : public wxScrolled<wxPanel> {
|
||||||
template<class T>
|
template<class T>
|
||||||
void Add(wxSizer *sizer, wxString const& label, T *control);
|
void Add(wxSizer *sizer, wxString const& label, T *control);
|
||||||
public:
|
protected:
|
||||||
enum Style {
|
enum Style {
|
||||||
PAGE_DEFAULT = 0x00000000,
|
PAGE_DEFAULT = 0x00000000,
|
||||||
PAGE_SCROLL = 0x00000001,
|
PAGE_SCROLL = 0x00000001,
|
||||||
|
@ -34,7 +34,6 @@ public:
|
||||||
wxSizer *sizer;
|
wxSizer *sizer;
|
||||||
Preferences *parent;
|
Preferences *parent;
|
||||||
|
|
||||||
OptionPage(wxTreebook *book, Preferences *parent, wxString name, int style = PAGE_DEFAULT);
|
|
||||||
|
|
||||||
wxFlexGridSizer* PageSizer(wxString name);
|
wxFlexGridSizer* PageSizer(wxString name);
|
||||||
|
|
||||||
|
@ -43,9 +42,12 @@ public:
|
||||||
void OptionChoice(wxFlexGridSizer *flex, const wxString &name, const wxArrayString &choices, const char *opt_name);
|
void OptionChoice(wxFlexGridSizer *flex, const wxString &name, const wxArrayString &choices, const char *opt_name);
|
||||||
void OptionBrowse(wxFlexGridSizer *flex, const wxString &name, const char *opt_name, wxControl *enabler = 0, bool do_enable = false);
|
void OptionBrowse(wxFlexGridSizer *flex, const wxString &name, const char *opt_name, wxControl *enabler = 0, bool do_enable = false);
|
||||||
void OptionFont(wxSizer *sizer, std::string opt_prefix);
|
void OptionFont(wxSizer *sizer, std::string opt_prefix);
|
||||||
|
public:
|
||||||
|
|
||||||
/// Enable ctrl only when cbx is checked
|
/// Enable ctrl only when cbx is checked
|
||||||
void EnableIfChecked(wxControl *cbx, wxControl *ctrl);
|
void EnableIfChecked(wxControl *cbx, wxControl *ctrl);
|
||||||
/// Enable ctrl only when cbx is not checked
|
/// Enable ctrl only when cbx is not checked
|
||||||
void DisableIfChecked(wxControl *cbx, wxControl *ctrl);
|
void DisableIfChecked(wxControl *cbx, wxControl *ctrl);
|
||||||
|
|
||||||
|
OptionPage(wxTreebook *book, Preferences *parent, wxString name, int style = PAGE_DEFAULT);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue