Add <functional> to files that use std::function
[lsnes.git] / src / platform / wxwidgets / loadrommenu.cpp
blob9249b88852cc31fc6272b4d68e535994b262624c
1 #include <functional>
2 #include "platform/wxwidgets/menu_loadrom.hpp"
3 #include "platform/wxwidgets/platform.hpp"
4 #include "core/dispatch.hpp"
5 #include "core/instance.hpp"
7 loadrom_menu::loadrom_menu(wxWindow* win, int wxid_low, int wxid_high, std::function<void(core_type* name)> cb)
9 CHECK_UI_THREAD;
10 pwin = win;
11 wxid_range_low = wxid_low;
12 wxid_range_high = wxid_high;
13 callback = cb;
14 win->Connect(wxid_low, wxid_high, wxEVT_COMMAND_MENU_SELECTED,
15 wxCommandEventHandler(loadrom_menu::on_select), NULL, this);
16 corelistener.set(notify_new_core, [this]() { this->update(); });
17 update();
20 void loadrom_menu::on_select(wxCommandEvent& e)
22 CHECK_UI_THREAD;
23 int id = e.GetId();
24 if(id < wxid_range_low || id > wxid_range_high)
25 return;
26 if(entries.count(id))
27 callback(entries[id]);
30 void loadrom_menu::update()
32 CHECK_UI_THREAD;
33 auto ents = core_type::get_core_types();
34 int id = wxid_range_low;
35 for(auto i : items)
36 Delete(i.second);
37 items.clear();
38 std::map<std::string, core_type*> ents2;
39 for(auto i : ents)
40 ents2[i->get_hname() + " [" + i->get_core_identifier() + "]..."] = i;
42 for(auto i : ents2) {
43 if(id >= wxid_range_high)
44 break;
45 if(i.second->is_hidden())
46 continue;
47 if(i.second->isnull())
48 continue;
49 entries[id] = i.second;
50 items[id] = Append(id, towxstring(i.first));
51 id++;