1 #include "settingseditor.hpp"
2 #include "settings.hpp"
7 wx_settings_editor_setting::wx_settings_editor_setting(wxSizer
* sizer
, wxWindow
* window
, const std::string
& name
)
11 std::string pvalue
= "<unknown>";
13 if(!setting::is_set(a_name
))
16 pvalue
= setting::get(a_name
);
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
)
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
);
41 void wx_settings_editor_setting::on_edit_click(wxCommandEvent
& e
)
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
) {
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
);
62 void wx_settings_editor_setting::change_setting(const std::string
& _setting
, const std::string
& value
)
64 if(_setting
!= a_name
)
66 label
->SetLabel(towxstring(value
));
69 void wx_settings_editor_setting::clear_setting(const std::string
& _setting
)
71 if(_setting
!= a_name
)
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();
82 wxFlexGridSizer
* top_s
= new wxFlexGridSizer(2, 1, 0, 0);
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
));
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);
102 wx_settings_editor::~wx_settings_editor()
104 for(auto i
: esettings
)
108 bool wx_settings_editor::ShouldPreventAppExit() const
113 void wx_settings_editor::on_close(wxCommandEvent
& e
)
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
)
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
);