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
, emulator_instance
& _inst
);
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
, emulator_instance
& _inst
)
30 : settings_tab(parent
, _inst
)
35 wxSizer
* top_s
= new wxBoxSizer(wxVERTICAL
);
38 top_s
->Add(select
= new wxListBox(this, wxID_ANY
), 1, wxGROW
);
39 select
->SetMinSize(wxSize(300, 400));
40 select
->Connect(wxEVT_COMMAND_LISTBOX_SELECTED
,
41 wxCommandEventHandler(wxeditor_esettings_aliases::on_change
), NULL
, this);
42 select
->Connect(wxEVT_RIGHT_UP
, wxMouseEventHandler(wxeditor_esettings_aliases::on_mouse
), NULL
,
44 select
->Connect(wxEVT_LEFT_UP
, wxMouseEventHandler(wxeditor_esettings_aliases::on_mouse
), NULL
,
47 wxBoxSizer
* pbutton_s
= new wxBoxSizer(wxHORIZONTAL
);
48 pbutton_s
->AddStretchSpacer();
49 pbutton_s
->Add(tmp
= new wxButton(this, wxID_ANY
, wxT("Add")), 0, wxGROW
);
50 tmp
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
, wxCommandEventHandler(wxeditor_esettings_aliases::on_add
),
52 pbutton_s
->Add(editbutton
= new wxButton(this, wxID_ANY
, wxT("Edit")), 0, wxGROW
);
53 editbutton
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
54 wxCommandEventHandler(wxeditor_esettings_aliases::on_edit
), NULL
, this);
55 pbutton_s
->Add(deletebutton
= new wxButton(this, wxID_ANY
, wxT("Delete")), 0, wxGROW
);
56 deletebutton
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
57 wxCommandEventHandler(wxeditor_esettings_aliases::on_delete
), NULL
, this);
58 top_s
->Add(pbutton_s
, 0, wxGROW
);
63 top_s
->SetSizeHints(this);
67 wxeditor_esettings_aliases::~wxeditor_esettings_aliases()
71 void wxeditor_esettings_aliases::on_change(wxCommandEvent
& e
)
76 bool enable
= (selected() != "");
77 editbutton
->Enable(enable
);
78 deletebutton
->Enable(enable
);
81 void wxeditor_esettings_aliases::on_popup_menu(wxCommandEvent
& e
)
86 if(e
.GetId() == wxID_EDIT
)
88 else if(e
.GetId() == wxID_DELETE
)
92 void wxeditor_esettings_aliases::on_mouse(wxMouseEvent
& e
)
95 if(!e
.RightUp() && !(e
.LeftUp() && e
.ControlDown()))
100 menu
.Connect(wxEVT_COMMAND_MENU_SELECTED
,
101 wxCommandEventHandler(wxeditor_esettings_aliases::on_popup_menu
), NULL
, this);
102 menu
.Append(wxID_EDIT
, towxstring("Edit"));
103 menu
.AppendSeparator();
104 menu
.Append(wxID_DELETE
, towxstring("Delete"));
108 void wxeditor_esettings_aliases::on_add(wxCommandEvent
& e
)
114 std::string name
= pick_text(this, "Enter alias name", "Enter name for the new alias:");
115 if(!inst
.command
->valid_alias_name(name
)) {
116 show_message_ok(this, "Error", "Not a valid alias name: " + name
, wxICON_EXCLAMATION
);
117 throw canceled_exception();
119 std::string old_alias_value
= inst
.command
->get_alias_for(name
);
120 std::string newcmd
= pick_text(this, "Edit alias", "Enter new commands for '" + name
+ "':",
121 old_alias_value
, true);
122 inst
.command
->set_alias_for(name
, newcmd
);
123 (*inst
.abindmanager
)();
130 void wxeditor_esettings_aliases::on_edit(wxCommandEvent
& e
)
135 std::string name
= selected();
141 std::string old_alias_value
= inst
.command
->get_alias_for(name
);
142 std::string newcmd
= pick_text(this, "Edit alias", "Enter new commands for '" + name
+ "':",
143 old_alias_value
, true);
144 inst
.command
->set_alias_for(name
, newcmd
);
145 (*inst
.abindmanager
)();
152 void wxeditor_esettings_aliases::on_delete(wxCommandEvent
& e
)
157 std::string name
= selected();
162 inst
.command
->set_alias_for(name
, "");
163 (*inst
.abindmanager
)();
168 void wxeditor_esettings_aliases::refresh()
173 int n
= select
->GetSelection();
174 std::set
<std::string
> bind
;
175 std::vector
<wxString
> choices
;
176 bind
= inst
.command
->get_aliases();
178 numbers
[choices
.size()] = i
;
179 choices
.push_back(towxstring(i
));
181 select
->Set(choices
.size(), &choices
[0]);
182 if(n
== wxNOT_FOUND
&& select
->GetCount())
183 select
->SetSelection(0);
184 else if(n
>= (int)select
->GetCount())
185 select
->SetSelection(select
->GetCount() ? (select
->GetCount() - 1) : wxNOT_FOUND
);
187 select
->SetSelection(n
);
193 std::string
wxeditor_esettings_aliases::selected()
198 int x
= select
->GetSelection();
205 settings_tab_factory
aliases("Aliases", [](wxWindow
* parent
, emulator_instance
& _inst
) -> settings_tab
* {
206 return new wxeditor_esettings_aliases(parent
, _inst
);