1 #include "core/settings.hpp"
2 #include "core/window.hpp"
4 #include "plat-wxwidgets/settingseditor.hpp"
5 #include "plat-wxwidgets/common.hpp"
9 wx_settings_editor_setting::wx_settings_editor_setting(wxSizer
* sizer
, wxWindow
* window
, const std::string
& name
)
13 std::string pvalue
= "<unknown>";
15 if(!setting::is_set(a_name
))
18 pvalue
= setting::get(a_name
);
21 sizer
->Add(new wxStaticText(window
, wxID_ANY
, towxstring(name
)), 0, wxGROW
);
22 sizer
->Add(label
= new wxStaticText(window
, wxID_ANY
, towxstring(pvalue
)), 0, wxGROW
);
23 sizer
->Add(edit
= new wxButton(window
, wxID_ANY
, wxT("Edit")), 0, wxGROW
);
24 sizer
->Add(clear
= new wxButton(window
, wxID_ANY
, wxT("Clear")), 0, wxGROW
);
25 edit
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
26 wxCommandEventHandler(wx_settings_editor_setting::on_edit_click
), NULL
, this);
27 clear
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
28 wxCommandEventHandler(wx_settings_editor_setting::on_clear_click
), NULL
, this);
31 void wx_settings_editor_setting::on_clear_click(wxCommandEvent
& e
)
34 setting::blank(a_name
);
35 }catch(std::exception
& e
) {
36 wxMessageDialog
* d
= new wxMessageDialog(parent
, towxstring(std::string("Can't clear setting: ") +
37 e
.what()), wxT("Error"), wxOK
| wxICON_EXCLAMATION
);
43 void wx_settings_editor_setting::on_edit_click(wxCommandEvent
& e
)
46 std::string newsetting
;
47 std::string oldvalue
= setting::get(a_name
);
48 wxTextEntryDialog
* d
= new wxTextEntryDialog(parent
, towxstring("Enter new value for " + a_name
),
49 wxT("Enter new value for setting"), towxstring(oldvalue
));
50 if(d
->ShowModal() == wxID_CANCEL
) {
54 newsetting
= tostdstring(d
->GetValue());
55 setting::set(a_name
, newsetting
);
56 } catch(std::exception
& e
) {
57 wxMessageDialog
* d
= new wxMessageDialog(parent
, towxstring(std::string("Can't set setting: ") +
58 e
.what()), wxT("Error"), wxOK
| wxICON_EXCLAMATION
);
64 void wx_settings_editor_setting::change_setting(const std::string
& _setting
, const std::string
& value
)
66 if(_setting
!= a_name
)
68 label
->SetLabel(towxstring(value
));
71 void wx_settings_editor_setting::clear_setting(const std::string
& _setting
)
73 if(_setting
!= a_name
)
75 label
->SetLabel(wxT("<unset>"));
78 wx_settings_editor::wx_settings_editor(wxWindow
* parent
)
79 : wxDialog(parent
, wxID_ANY
, wxT("lsnes: Edit settings"), wxDefaultPosition
, wxSize(-1, -1)), listener(this)
81 std::set
<std::string
> settings_set
= setting::get_settings_set();
84 wxFlexGridSizer
* top_s
= new wxFlexGridSizer(2, 1, 0, 0);
87 wxFlexGridSizer
* t_s
= new wxFlexGridSizer(settings_set
.size(), 4, 0, 0);
88 for(auto i
: settings_set
)
89 esettings
.push_back(new wx_settings_editor_setting(t_s
, this, i
));
92 wxBoxSizer
* pbutton_s
= new wxBoxSizer(wxHORIZONTAL
);
93 pbutton_s
->AddStretchSpacer();
94 pbutton_s
->Add(close
= new wxButton(this, wxID_CANCEL
, wxT("Close")), 0, wxGROW
);
95 close
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
96 wxCommandEventHandler(wx_settings_editor::on_close
), NULL
, this);
97 top_s
->Add(pbutton_s
, 0, wxGROW
);
99 t_s
->SetSizeHints(this);
100 top_s
->SetSizeHints(this);
104 wx_settings_editor::~wx_settings_editor()
106 for(auto i
: esettings
)
110 bool wx_settings_editor::ShouldPreventAppExit() const
115 void wx_settings_editor::on_close(wxCommandEvent
& e
)
120 void wx_settings_editor::change_setting(const std::string
& _setting
, const std::string
& value
)
122 for(auto i
: esettings
)
123 i
->change_setting(_setting
, value
);
126 void wx_settings_editor::clear_setting(const std::string
& _setting
)
128 for(auto i
: esettings
)
129 i
->clear_setting(_setting
);
132 wx_settings_editor_listener::wx_settings_editor_listener(wx_settings_editor
* _editor
)
133 : information_dispatch("wx-settings-editor-listener")
138 wx_settings_editor_listener::~wx_settings_editor_listener() throw()
142 void wx_settings_editor_listener::on_setting_change(const std::string
& _setting
, const std::string
& value
)
144 editor
->change_setting(_setting
, value
);
147 void wx_settings_editor_listener::on_setting_clear(const std::string
& _setting
)
149 editor
->clear_setting(_setting
);