1 #include "platform/wxwidgets/settings-common.hpp"
2 #include "platform/wxwidgets/settings-keyentry.hpp"
3 #include "core/command.hpp"
8 class wxeditor_esettings_aliases
: public settings_tab
11 wxeditor_esettings_aliases(wxWindow
* parent
);
12 ~wxeditor_esettings_aliases();
13 void on_add(wxCommandEvent
& e
);
14 void on_edit(wxCommandEvent
& e
);
15 void on_delete(wxCommandEvent
& e
);
16 void on_change(wxCommandEvent
& e
);
17 void on_mouse(wxMouseEvent
& e
);
18 void on_popup_menu(wxCommandEvent
& e
);
20 std::map
<int, std::string
> numbers
;
23 wxButton
* deletebutton
;
25 std::string
selected();
28 wxeditor_esettings_aliases::wxeditor_esettings_aliases(wxWindow
* parent
)
29 : settings_tab(parent
)
33 wxSizer
* top_s
= new wxBoxSizer(wxVERTICAL
);
36 top_s
->Add(select
= new wxListBox(this, wxID_ANY
), 1, wxGROW
);
37 select
->SetMinSize(wxSize(300, 400));
38 select
->Connect(wxEVT_COMMAND_LISTBOX_SELECTED
,
39 wxCommandEventHandler(wxeditor_esettings_aliases::on_change
), NULL
, this);
40 select
->Connect(wxEVT_RIGHT_UP
, wxMouseEventHandler(wxeditor_esettings_aliases::on_mouse
), NULL
,
42 select
->Connect(wxEVT_LEFT_UP
, wxMouseEventHandler(wxeditor_esettings_aliases::on_mouse
), NULL
,
45 wxBoxSizer
* pbutton_s
= new wxBoxSizer(wxHORIZONTAL
);
46 pbutton_s
->AddStretchSpacer();
47 pbutton_s
->Add(tmp
= new wxButton(this, wxID_ANY
, wxT("Add")), 0, wxGROW
);
48 tmp
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
, wxCommandEventHandler(wxeditor_esettings_aliases::on_add
),
50 pbutton_s
->Add(editbutton
= new wxButton(this, wxID_ANY
, wxT("Edit")), 0, wxGROW
);
51 editbutton
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
52 wxCommandEventHandler(wxeditor_esettings_aliases::on_edit
), NULL
, this);
53 pbutton_s
->Add(deletebutton
= new wxButton(this, wxID_ANY
, wxT("Delete")), 0, wxGROW
);
54 deletebutton
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
55 wxCommandEventHandler(wxeditor_esettings_aliases::on_delete
), NULL
, this);
56 top_s
->Add(pbutton_s
, 0, wxGROW
);
61 top_s
->SetSizeHints(this);
65 wxeditor_esettings_aliases::~wxeditor_esettings_aliases()
69 void wxeditor_esettings_aliases::on_change(wxCommandEvent
& e
)
73 bool enable
= (selected() != "");
74 editbutton
->Enable(enable
);
75 deletebutton
->Enable(enable
);
78 void wxeditor_esettings_aliases::on_popup_menu(wxCommandEvent
& e
)
82 if(e
.GetId() == wxID_EDIT
)
84 else if(e
.GetId() == wxID_DELETE
)
88 void wxeditor_esettings_aliases::on_mouse(wxMouseEvent
& e
)
90 if(!e
.RightUp() && !(e
.LeftUp() && e
.ControlDown()))
95 menu
.Connect(wxEVT_COMMAND_MENU_SELECTED
,
96 wxCommandEventHandler(wxeditor_esettings_aliases::on_popup_menu
), NULL
, this);
97 menu
.Append(wxID_EDIT
, towxstring("Edit"));
98 menu
.AppendSeparator();
99 menu
.Append(wxID_DELETE
, towxstring("Delete"));
103 void wxeditor_esettings_aliases::on_add(wxCommandEvent
& e
)
108 std::string name
= pick_text(this, "Enter alias name", "Enter name for the new alias:");
109 if(!lsnes_cmd
.valid_alias_name(name
)) {
110 show_message_ok(this, "Error", "Not a valid alias name: " + name
, wxICON_EXCLAMATION
);
111 throw canceled_exception();
113 std::string old_alias_value
= lsnes_cmd
.get_alias_for(name
);
114 std::string newcmd
= pick_text(this, "Edit alias", "Enter new commands for '" + name
+ "':",
115 old_alias_value
, true);
116 lsnes_cmd
.set_alias_for(name
, newcmd
);
117 refresh_alias_binds();
124 void wxeditor_esettings_aliases::on_edit(wxCommandEvent
& e
)
128 std::string name
= selected();
134 std::string old_alias_value
= lsnes_cmd
.get_alias_for(name
);
135 std::string newcmd
= pick_text(this, "Edit alias", "Enter new commands for '" + name
+ "':",
136 old_alias_value
, true);
137 lsnes_cmd
.set_alias_for(name
, newcmd
);
138 refresh_alias_binds();
145 void wxeditor_esettings_aliases::on_delete(wxCommandEvent
& e
)
149 std::string name
= selected();
154 lsnes_cmd
.set_alias_for(name
, "");
155 refresh_alias_binds();
160 void wxeditor_esettings_aliases::refresh()
164 int n
= select
->GetSelection();
165 std::set
<std::string
> bind
;
166 std::vector
<wxString
> choices
;
167 bind
= lsnes_cmd
.get_aliases();
169 numbers
[choices
.size()] = i
;
170 choices
.push_back(towxstring(i
));
172 select
->Set(choices
.size(), &choices
[0]);
173 if(n
== wxNOT_FOUND
&& select
->GetCount())
174 select
->SetSelection(0);
175 else if(n
>= (int)select
->GetCount())
176 select
->SetSelection(select
->GetCount() ? (select
->GetCount() - 1) : wxNOT_FOUND
);
178 select
->SetSelection(n
);
184 std::string
wxeditor_esettings_aliases::selected()
188 int x
= select
->GetSelection();
195 settings_tab_factory
aliases("Aliases", [](wxWindow
* parent
) -> settings_tab
* {
196 return new wxeditor_esettings_aliases(parent
);