Fix Win32 build
[lsnes.git] / src / platform / wxwidgets / tracelogmenu.cpp
blob9ce8c48de5a59cc7ca61b470435840ff7461a915
1 #include <wx/wx.h>
2 #include <wx/statline.h>
3 #include <wx/event.h>
4 #include <wx/control.h>
5 #include <wx/combobox.h>
6 #include <wx/radiobut.h>
7 #include <wx/spinctrl.h>
9 #include "platform/wxwidgets/menu_tracelog.hpp"
10 #include "platform/wxwidgets/platform.hpp"
11 #include "platform/wxwidgets/loadsave.hpp"
12 #include "core/debug.hpp"
13 #include "core/dispatch.hpp"
14 #include "core/instance.hpp"
15 #include "core/project.hpp"
16 #include "core/moviedata.hpp"
17 #include "core/rom.hpp"
18 #include "core/ui-services.hpp"
21 tracelog_menu::tracelog_menu(wxWindow* win, emulator_instance& _inst, int wxid_low, int wxid_high)
22 : inst(_inst)
24 CHECK_UI_THREAD;
25 pwin = win;
26 wxid_range_low = wxid_low;
27 wxid_range_high = wxid_high;
28 win->Connect(wxid_low, wxid_high, wxEVT_COMMAND_MENU_SELECTED,
29 wxCommandEventHandler(tracelog_menu::on_select), NULL, this);
30 inst.dbg->set_tracelog_change_cb([this]() { runuifun([this]() { this->update(); }); });
31 corechange.set(inst.dispatch->core_change, [this]() { runuifun([this]() { this->update(); }); });
34 tracelog_menu::~tracelog_menu()
38 void tracelog_menu::on_select(wxCommandEvent& e)
40 CHECK_UI_THREAD;
41 int id = e.GetId() - wxid_range_low;
42 if(id < 0 || id > wxid_range_high - wxid_range_low) return;
43 int rid = id / 2;
44 if(!cpunames.count(rid))
45 return;
46 if(id % 2) {
47 wxeditor_tracelog_display(pwin, inst, rid, cpunames[rid]);
48 } else {
49 bool ch = items[rid]->IsChecked();
50 if(ch) {
51 try {
52 std::string filename = choose_file_save(pwin, "Save " + cpunames[rid] + " Trace",
53 UI_get_project_moviepath(inst), filetype_trace, "");
54 inst.dbg->tracelog(rid, filename);
55 } catch(canceled_exception& e) {
57 } else {
58 inst.dbg->tracelog(rid, "");
61 update();
64 void tracelog_menu::update()
66 CHECK_UI_THREAD;
67 auto _items = inst.rom->get_trace_cpus();
68 for(auto i : items)
69 Delete(i);
70 items.clear();
71 unsigned id = 0;
72 for(auto i : _items) {
73 items.push_back(AppendCheckItem(wxid_range_low + 2 * id, towxstring(i + " (to file)...")));
74 cpunames[id] = i;
75 items[id]->Check(inst.dbg->is_tracelogging(id));
76 id++;
78 items.push_back(AppendSeparator());
79 id = 0;
80 for(auto i : _items) {
81 items.push_back(Append(wxid_range_low + 2 * id + 1, towxstring(i + " (to window)...")));
82 id++;
84 if(disabler_fn) disabler_fn(!_items.empty());
87 bool tracelog_menu::any_enabled()
89 return !items.empty();