1 #include "platform/wxwidgets/settings-common.hpp"
2 #include "platform/wxwidgets/settings-keyentry.hpp"
3 #include "core/command.hpp"
4 #include "core/instance.hpp"
9 class wxeditor_esettings_aliases
: public settings_tab
12 wxeditor_esettings_aliases(wxWindow
* parent
);
13 ~wxeditor_esettings_aliases();
14 void on_add(wxCommandEvent
& e
);
15 void on_edit(wxCommandEvent
& e
);
16 void on_delete(wxCommandEvent
& e
);
17 void on_change(wxCommandEvent
& e
);
18 void on_mouse(wxMouseEvent
& e
);
19 void on_popup_menu(wxCommandEvent
& e
);
21 std::map
<int, std::string
> numbers
;
24 wxButton
* deletebutton
;
26 std::string
selected();
29 wxeditor_esettings_aliases::wxeditor_esettings_aliases(wxWindow
* parent
)
30 : settings_tab(parent
)
34 wxSizer
* top_s
= new wxBoxSizer(wxVERTICAL
);
37 top_s
->Add(select
= new wxListBox(this, wxID_ANY
), 1, wxGROW
);
38 select
->SetMinSize(wxSize(300, 400));
39 select
->Connect(wxEVT_COMMAND_LISTBOX_SELECTED
,
40 wxCommandEventHandler(wxeditor_esettings_aliases::on_change
), NULL
, this);
41 select
->Connect(wxEVT_RIGHT_UP
, wxMouseEventHandler(wxeditor_esettings_aliases::on_mouse
), NULL
,
43 select
->Connect(wxEVT_LEFT_UP
, wxMouseEventHandler(wxeditor_esettings_aliases::on_mouse
), NULL
,
46 wxBoxSizer
* pbutton_s
= new wxBoxSizer(wxHORIZONTAL
);
47 pbutton_s
->AddStretchSpacer();
48 pbutton_s
->Add(tmp
= new wxButton(this, wxID_ANY
, wxT("Add")), 0, wxGROW
);
49 tmp
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
, wxCommandEventHandler(wxeditor_esettings_aliases::on_add
),
51 pbutton_s
->Add(editbutton
= new wxButton(this, wxID_ANY
, wxT("Edit")), 0, wxGROW
);
52 editbutton
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
53 wxCommandEventHandler(wxeditor_esettings_aliases::on_edit
), NULL
, this);
54 pbutton_s
->Add(deletebutton
= new wxButton(this, wxID_ANY
, wxT("Delete")), 0, wxGROW
);
55 deletebutton
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
56 wxCommandEventHandler(wxeditor_esettings_aliases::on_delete
), NULL
, this);
57 top_s
->Add(pbutton_s
, 0, wxGROW
);
62 top_s
->SetSizeHints(this);
66 wxeditor_esettings_aliases::~wxeditor_esettings_aliases()
70 void wxeditor_esettings_aliases::on_change(wxCommandEvent
& e
)
74 bool enable
= (selected() != "");
75 editbutton
->Enable(enable
);
76 deletebutton
->Enable(enable
);
79 void wxeditor_esettings_aliases::on_popup_menu(wxCommandEvent
& e
)
83 if(e
.GetId() == wxID_EDIT
)
85 else if(e
.GetId() == wxID_DELETE
)
89 void wxeditor_esettings_aliases::on_mouse(wxMouseEvent
& e
)
91 if(!e
.RightUp() && !(e
.LeftUp() && e
.ControlDown()))
96 menu
.Connect(wxEVT_COMMAND_MENU_SELECTED
,
97 wxCommandEventHandler(wxeditor_esettings_aliases::on_popup_menu
), NULL
, this);
98 menu
.Append(wxID_EDIT
, towxstring("Edit"));
99 menu
.AppendSeparator();
100 menu
.Append(wxID_DELETE
, towxstring("Delete"));
104 void wxeditor_esettings_aliases::on_add(wxCommandEvent
& e
)
109 std::string name
= pick_text(this, "Enter alias name", "Enter name for the new alias:");
110 if(!lsnes_instance
.command
->valid_alias_name(name
)) {
111 show_message_ok(this, "Error", "Not a valid alias name: " + name
, wxICON_EXCLAMATION
);
112 throw canceled_exception();
114 std::string old_alias_value
= lsnes_instance
.command
->get_alias_for(name
);
115 std::string newcmd
= pick_text(this, "Edit alias", "Enter new commands for '" + name
+ "':",
116 old_alias_value
, true);
117 lsnes_instance
.command
->set_alias_for(name
, newcmd
);
118 (*lsnes_instance
.abindmanager
)();
125 void wxeditor_esettings_aliases::on_edit(wxCommandEvent
& e
)
129 std::string name
= selected();
135 std::string old_alias_value
= lsnes_instance
.command
->get_alias_for(name
);
136 std::string newcmd
= pick_text(this, "Edit alias", "Enter new commands for '" + name
+ "':",
137 old_alias_value
, true);
138 lsnes_instance
.command
->set_alias_for(name
, newcmd
);
139 (*lsnes_instance
.abindmanager
)();
146 void wxeditor_esettings_aliases::on_delete(wxCommandEvent
& e
)
150 std::string name
= selected();
155 lsnes_instance
.command
->set_alias_for(name
, "");
156 (*lsnes_instance
.abindmanager
)();
161 void wxeditor_esettings_aliases::refresh()
165 int n
= select
->GetSelection();
166 std::set
<std::string
> bind
;
167 std::vector
<wxString
> choices
;
168 bind
= lsnes_instance
.command
->get_aliases();
170 numbers
[choices
.size()] = i
;
171 choices
.push_back(towxstring(i
));
173 select
->Set(choices
.size(), &choices
[0]);
174 if(n
== wxNOT_FOUND
&& select
->GetCount())
175 select
->SetSelection(0);
176 else if(n
>= (int)select
->GetCount())
177 select
->SetSelection(select
->GetCount() ? (select
->GetCount() - 1) : wxNOT_FOUND
);
179 select
->SetSelection(n
);
185 std::string
wxeditor_esettings_aliases::selected()
189 int x
= select
->GetSelection();
196 settings_tab_factory
aliases("Aliases", [](wxWindow
* parent
) -> settings_tab
* {
197 return new wxeditor_esettings_aliases(parent
);