If initsram/initstate points to LSS file, pull the matching member
[lsnes.git] / src / platform / wxwidgets / loadrommenu.cpp
blobd6871886769ff9c65185f03a1284be58b381c293
1 #include "platform/wxwidgets/menu_loadrom.hpp"
2 #include "platform/wxwidgets/platform.hpp"
3 #include "core/dispatch.hpp"
4 #include "core/instance.hpp"
6 loadrom_menu::loadrom_menu(wxWindow* win, int wxid_low, int wxid_high, std::function<void(core_type* name)> cb)
8 CHECK_UI_THREAD;
9 pwin = win;
10 wxid_range_low = wxid_low;
11 wxid_range_high = wxid_high;
12 callback = cb;
13 win->Connect(wxid_low, wxid_high, wxEVT_COMMAND_MENU_SELECTED,
14 wxCommandEventHandler(loadrom_menu::on_select), NULL, this);
15 corelistener.set(notify_new_core, [this]() { this->update(); });
16 update();
19 void loadrom_menu::on_select(wxCommandEvent& e)
21 CHECK_UI_THREAD;
22 int id = e.GetId();
23 if(id < wxid_range_low || id > wxid_range_high)
24 return;
25 if(entries.count(id))
26 callback(entries[id]);
29 void loadrom_menu::update()
31 CHECK_UI_THREAD;
32 auto ents = core_type::get_core_types();
33 int id = wxid_range_low;
34 for(auto i : items)
35 Delete(i.second);
36 items.clear();
37 std::map<std::string, core_type*> ents2;
38 for(auto i : ents)
39 ents2[i->get_hname() + " [" + i->get_core_identifier() + "]..."] = i;
41 for(auto i : ents2) {
42 if(id >= wxid_range_high)
43 break;
44 if(i.second->is_hidden())
45 continue;
46 if(i.second->isnull())
47 continue;
48 entries[id] = i.second;
49 items[id] = Append(id, towxstring(i.first));
50 id++;