Wxwidgets graphics plugin
[lsnes.git] / platform / wxwidgets / src / settingseditor.cpp
blob0cb4f52b64a7feeee02cc7dd4ff35777f9da22e4
1 #include "settingseditor.hpp"
2 #include "settings.hpp"
3 #include "common.hpp"
4 #include "window.hpp"
5 #include <stdexcept>
7 wx_settings_editor_setting::wx_settings_editor_setting(wxSizer* sizer, wxWindow* window, const std::string& name)
9 a_name = name;
10 parent = window;
11 std::string pvalue = "<unknown>";
12 try {
13 if(!setting::is_set(a_name))
14 pvalue = "<unset>";
15 else
16 pvalue = setting::get(a_name);
17 } catch(...) {
19 sizer->Add(new wxStaticText(window, wxID_ANY, towxstring(name)), 0, wxGROW);
20 sizer->Add(label = new wxStaticText(window, wxID_ANY, towxstring(pvalue)), 0, wxGROW);
21 sizer->Add(edit = new wxButton(window, wxID_ANY, wxT("Edit")), 0, wxGROW);
22 sizer->Add(clear = new wxButton(window, wxID_ANY, wxT("Clear")), 0, wxGROW);
23 edit->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
24 wxCommandEventHandler(wx_settings_editor_setting::on_edit_click), NULL, this);
25 clear->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
26 wxCommandEventHandler(wx_settings_editor_setting::on_clear_click), NULL, this);
29 void wx_settings_editor_setting::on_clear_click(wxCommandEvent& e)
31 try {
32 setting::blank(a_name);
33 }catch(std::exception& e) {
34 wxMessageDialog* d = new wxMessageDialog(parent, towxstring(std::string("Can't clear setting: ") +
35 e.what()), wxT("Error"), wxOK | wxICON_EXCLAMATION);
36 d->ShowModal();
37 d->Destroy();
41 void wx_settings_editor_setting::on_edit_click(wxCommandEvent& e)
43 try {
44 std::string newsetting;
45 std::string oldvalue = setting::get(a_name);
46 wxTextEntryDialog* d = new wxTextEntryDialog(parent, towxstring("Enter new value for " + a_name),
47 wxT("Enter new value for setting"), towxstring(oldvalue));
48 if(d->ShowModal() == wxID_CANCEL) {
49 d->Destroy();
50 return;
52 newsetting = tostdstring(d->GetValue());
53 setting::set(a_name, newsetting);
54 } catch(std::exception& e) {
55 wxMessageDialog* d = new wxMessageDialog(parent, towxstring(std::string("Can't set setting: ") +
56 e.what()), wxT("Error"), wxOK | wxICON_EXCLAMATION);
57 d->ShowModal();
58 d->Destroy();
62 void wx_settings_editor_setting::change_setting(const std::string& _setting, const std::string& value)
64 if(_setting != a_name)
65 return;
66 label->SetLabel(towxstring(value));
69 void wx_settings_editor_setting::clear_setting(const std::string& _setting)
71 if(_setting != a_name)
72 return;
73 label->SetLabel(wxT("<unset>"));
76 wx_settings_editor::wx_settings_editor(wxWindow* parent)
77 : wxDialog(parent, wxID_ANY, wxT("lsnes: Edit settings"), wxDefaultPosition, wxSize(-1, -1)), listener(this)
79 std::set<std::string> settings_set = setting::get_settings_set();
81 Centre();
82 wxFlexGridSizer* top_s = new wxFlexGridSizer(2, 1, 0, 0);
83 SetSizer(top_s);
85 wxFlexGridSizer* t_s = new wxFlexGridSizer(settings_set.size(), 4, 0, 0);
86 for(auto i : settings_set)
87 esettings.push_back(new wx_settings_editor_setting(t_s, this, i));
88 top_s->Add(t_s);
90 wxBoxSizer* pbutton_s = new wxBoxSizer(wxHORIZONTAL);
91 pbutton_s->AddStretchSpacer();
92 pbutton_s->Add(close = new wxButton(this, wxID_CANCEL, wxT("Close")), 0, wxGROW);
93 close->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
94 wxCommandEventHandler(wx_settings_editor::on_close), NULL, this);
95 top_s->Add(pbutton_s, 0, wxGROW);
97 t_s->SetSizeHints(this);
98 top_s->SetSizeHints(this);
99 Fit();
102 wx_settings_editor::~wx_settings_editor()
104 for(auto i : esettings)
105 delete i;
108 bool wx_settings_editor::ShouldPreventAppExit() const
110 return false;
113 void wx_settings_editor::on_close(wxCommandEvent& e)
115 EndModal(wxID_OK);
118 void wx_settings_editor::change_setting(const std::string& _setting, const std::string& value)
120 for(auto i : esettings)
121 i->change_setting(_setting, value);
124 void wx_settings_editor::clear_setting(const std::string& _setting)
126 for(auto i : esettings)
127 i->clear_setting(_setting);
130 wx_settings_editor_listener::wx_settings_editor_listener(wx_settings_editor* _editor)
132 editor = _editor;
135 wx_settings_editor_listener::~wx_settings_editor_listener() throw()
139 void wx_settings_editor_listener::on_setting_change(const std::string& _setting, const std::string& value)
141 editor->change_setting(_setting, value);
144 void wx_settings_editor_listener::on_setting_clear(const std::string& _setting)
146 editor->clear_setting(_setting);