1 #include "platform/wxwidgets/settings-common.hpp"
2 #include "core/filedownload.hpp"
6 class wxeditor_esettings_download
: public settings_tab
9 wxeditor_esettings_download(wxWindow
* parent
, emulator_instance
& _inst
);
10 ~wxeditor_esettings_download();
11 void on_add(wxCommandEvent
& e
);
12 void on_delete(wxCommandEvent
& e
);
13 void on_change(wxCommandEvent
& e
);
14 void on_change2(wxMouseEvent
& e
);
15 void on_selchange(wxCommandEvent
& e
);
16 void on_mouse(wxMouseEvent
& e
);
17 void on_popup_menu(wxCommandEvent
& e
);
21 std::set
<std::string
> patterns
;
22 std::map
<std::string
, std::string
> values
;
23 std::map
<std::string
, std::string
> names
;
24 std::map
<int, std::string
> selections
;
25 std::string
selected();
27 wxButton
* changebutton
;
28 wxButton
* deletebutton
;
32 wxeditor_esettings_download::wxeditor_esettings_download(wxWindow
* parent
, emulator_instance
& _inst
)
33 : settings_tab(parent
, inst
)
36 wxSizer
* top_s
= new wxBoxSizer(wxVERTICAL
);
39 top_s
->Add(_settings
= new wxListBox(this, wxID_ANY
), 1, wxGROW
);
40 _settings
->SetMinSize(wxSize(300, 400));
41 _settings
->Connect(wxEVT_COMMAND_LISTBOX_SELECTED
,
42 wxCommandEventHandler(wxeditor_esettings_download::on_selchange
), NULL
, this);
43 _settings
->Connect(wxEVT_RIGHT_UP
, wxMouseEventHandler(wxeditor_esettings_download::on_mouse
), NULL
,
45 _settings
->Connect(wxEVT_LEFT_UP
, wxMouseEventHandler(wxeditor_esettings_download::on_mouse
), NULL
,
48 wxBoxSizer
* pbutton_s
= new wxBoxSizer(wxHORIZONTAL
);
49 pbutton_s
->AddStretchSpacer();
50 pbutton_s
->Add(addbutton
= new wxButton(this, wxID_ANY
, wxT("Add")), 0, wxGROW
);
51 pbutton_s
->Add(changebutton
= new wxButton(this, wxID_ANY
, wxT("Change")), 0, wxGROW
);
52 pbutton_s
->Add(deletebutton
= new wxButton(this, wxID_ANY
, wxT("Delete")), 0, wxGROW
);
53 _settings
->Connect(wxEVT_LEFT_DCLICK
,
54 wxMouseEventHandler(wxeditor_esettings_download::on_change2
), NULL
, this);
55 changebutton
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
56 wxCommandEventHandler(wxeditor_esettings_download::on_change
), NULL
, this);
57 addbutton
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
58 wxCommandEventHandler(wxeditor_esettings_download::on_add
), NULL
, this);
59 deletebutton
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
60 wxCommandEventHandler(wxeditor_esettings_download::on_delete
), NULL
, this);
61 top_s
->Add(pbutton_s
, 0, wxGROW
);
66 top_s
->SetSizeHints(this);
70 wxeditor_esettings_download::~wxeditor_esettings_download()
74 void wxeditor_esettings_download::on_popup_menu(wxCommandEvent
& e
)
79 if(e
.GetId() == wxID_EDIT
)
83 void wxeditor_esettings_download::on_mouse(wxMouseEvent
& e
)
86 if(!e
.RightUp() && !(e
.LeftUp() && e
.ControlDown()))
91 menu
.Connect(wxEVT_COMMAND_MENU_SELECTED
,
92 wxCommandEventHandler(wxeditor_esettings_download::on_popup_menu
), NULL
, this);
93 menu
.Append(wxID_EDIT
, towxstring("Change"));
97 void wxeditor_esettings_download::on_change2(wxMouseEvent
& e
)
104 void wxeditor_esettings_download::on_add(wxCommandEvent
& e
)
109 std::string name
, value
;
111 name
= pick_text(this, "Method name", "Name for the new shortcut scheme:\n"
112 "(A-Z, a-z, 0-9, +, ., -. Has to start with a letter)", "");
113 if(!regex_match("[A-Za-z][A-Za-z0-9+.-]*", name
)) {
114 wxMessageBox(towxstring("Invalid scheme name"), wxT("Error setting pattern"),
115 wxICON_EXCLAMATION
| wxOK
);
118 value
= pick_text(this, "Set URL to", "Set " + name
+ " to URL:\n"
119 "(Use $0 for placeholder, use $$ for literial $)", "");
124 std::string errorstr
;
126 lsnes_uri_rewrite
.set_rewrite(name
, value
);
127 } catch(std::exception
& e
) {
132 wxMessageBox(towxstring(errorstr
), wxT("Error setting pattern"), wxICON_EXCLAMATION
| wxOK
);
137 void wxeditor_esettings_download::on_delete(wxCommandEvent
& e
)
142 std::string name
= selected();
145 lsnes_uri_rewrite
.delete_rewrite(name
);
149 void wxeditor_esettings_download::on_change(wxCommandEvent
& e
)
154 std::string name
= selected();
160 value
= lsnes_uri_rewrite
.get_rewrite(name
);
164 value
= pick_text(this, "Set URL to", "Set " + name
+ " to URL:\n"
165 "(Use $0 for placeholder, use $$ for literial $)", value
);
170 std::string errorstr
;
172 lsnes_uri_rewrite
.set_rewrite(name
, value
);
173 } catch(std::exception
& e
) {
178 wxMessageBox(towxstring(errorstr
), wxT("Error setting replace"), wxICON_EXCLAMATION
| wxOK
);
183 void wxeditor_esettings_download::on_selchange(wxCommandEvent
& e
)
188 std::string sel
= selected();
189 bool enable
= (sel
!= "");
190 changebutton
->Enable(enable
);
191 deletebutton
->Enable(enable
);
194 void wxeditor_esettings_download::refresh()
199 patterns
= lsnes_uri_rewrite
.get_schemes();
200 for(auto i
: patterns
) {
201 values
[i
] = lsnes_uri_rewrite
.get_rewrite(i
);
207 std::string
wxeditor_esettings_download::selected()
212 int x
= _settings
->GetSelection();
213 if(selections
.count(x
))
214 return selections
[x
];
219 void wxeditor_esettings_download::_refresh()
224 std::vector
<wxString
> strings
;
225 std::multimap
<std::string
, std::string
> sort
;
227 for(auto i
: patterns
)
228 sort
.insert(std::make_pair(names
[i
], i
));
230 strings
.push_back(towxstring(names
[i
.second
] + " (Target: " + values
[i
.second
] + ")"));
231 selections
[k
++] = i
.second
;
233 _settings
->Set(strings
.size(), &strings
[0]);
236 settings_tab_factory
download_tab("URI shortcuts", [](wxWindow
* parent
, emulator_instance
& _inst
) ->
238 return new wxeditor_esettings_download(parent
, _inst
);