1 #include "plat-wxwidgets/callrom.hpp"
2 #include "plat-wxwidgets/rom_patch_window.hpp"
3 #include "plat-wxwidgets/rom_select_window.hpp"
5 wx_rom_select_window::wx_rom_select_window()
6 : wxFrame(NULL
, wxID_ANY
, wxT("Select ROM"), wxDefaultPosition
, wxSize(-1, -1),
10 wxString rrchoices
[3];
11 size_t systems
= populate_system_choices(rtchoices
);
12 size_t regions
= populate_region_choices(rrchoices
);
15 wxFlexGridSizer
* top_s
= new wxFlexGridSizer(3, 1, 0, 0);
18 wxBoxSizer
* selects_s
= new wxBoxSizer(wxHORIZONTAL
);
19 rtypec
= new labeledcombobox(selects_s
, this, "ROM type:", rtchoices
, systems
, 0, true, this,
20 wxCommandEventHandler(wx_rom_select_window::on_romtype_change
));
21 regionc
= new labeledcombobox(selects_s
, this, "Region:", rrchoices
, regions
, 0, true, this,
22 wxCommandEventHandler(wx_rom_select_window::on_romtype_change
));
23 top_s
->Add(selects_s
, 0, wxGROW
);
25 //The XMLs don't matter, so don't notify those.
26 wxFlexGridSizer
* romgrid_s
= new wxFlexGridSizer(6, 3, 0, 0);
27 main_rom
= new filenamebox(romgrid_s
, this, "ROM", FNBF_PZ
, this,
28 wxCommandEventHandler(wx_rom_select_window::on_filename_change
));
29 main_xml
= new filenamebox(romgrid_s
, this, "ROM XML", FNBF_NN
| FNBF_PZ
, this,
30 wxCommandEventHandler(wx_rom_select_window::on_filename_change
));
31 slota_rom
= new filenamebox(romgrid_s
, this, "SLOT A ROM", FNBF_PZ
, this,
32 wxCommandEventHandler(wx_rom_select_window::on_filename_change
));
33 slota_xml
= new filenamebox(romgrid_s
, this, "SLOT A XML", FNBF_NN
| FNBF_PZ
, this,
34 wxCommandEventHandler(wx_rom_select_window::on_filename_change
));
35 slotb_rom
= new filenamebox(romgrid_s
, this, "SLOT A ROM", FNBF_PZ
, this,
36 wxCommandEventHandler(wx_rom_select_window::on_filename_change
));
37 slotb_xml
= new filenamebox(romgrid_s
, this, "SLOT A XML", FNBF_NN
| FNBF_PZ
, this,
38 wxCommandEventHandler(wx_rom_select_window::on_filename_change
));
40 top_s
->Add(romgrid_s
, 1, wxGROW
);
41 wxBoxSizer
* button_s
= new wxBoxSizer(wxHORIZONTAL
);
42 button_s
->AddStretchSpacer();
43 button_s
->Add(open_rom
= new wxButton(this, wxID_OPEN
, wxT("Open ROM")), 0, wxALIGN_RIGHT
);
44 button_s
->Add(quit_button
= new wxButton(this, wxID_EXIT
, wxT("Quit")), 0, wxALIGN_RIGHT
);
45 open_rom
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
46 wxCommandEventHandler(wx_rom_select_window::on_open_rom
), NULL
, this);
48 quit_button
->Connect(wxEVT_COMMAND_BUTTON_CLICKED
,
49 wxCommandEventHandler(wx_rom_select_window::on_quit
), NULL
, this);
50 top_s
->Add(button_s
, 1, wxGROW
);
54 top_s
->SetSizeHints(this);
58 wx_rom_select_window::~wx_rom_select_window()
71 void wx_rom_select_window::set_rtype(std::string rtype
)
73 bool no_rtype
= (current_rtype
== "");
75 rtype
= rtypec
->get_choice();
76 if(rtype
== current_rtype
)
78 if(has_forced_region(rtype
))
79 regionc
->disable(forced_region_for_romtype(rtype
));
83 unsigned c
= fill_rom_names(romtype_from_string(rtype
), tmp
);
84 if(c
> 0) main_rom
->enable(tostdstring(tmp
[0])); else main_rom
->disable();
85 if(c
> 1) main_xml
->enable(tostdstring(tmp
[1])); else main_xml
->disable();
86 if(c
> 2) slota_rom
->enable(tostdstring(tmp
[2])); else slota_rom
->disable();
87 if(c
> 3) slota_xml
->enable(tostdstring(tmp
[3])); else slota_xml
->disable();
88 if(c
> 4) slotb_rom
->enable(tostdstring(tmp
[4])); else slotb_rom
->disable();
89 if(c
> 5) slotb_xml
->enable(tostdstring(tmp
[5])); else slotb_xml
->disable();
90 current_rtype
= rtype
;
94 void wx_rom_select_window::on_filename_change(wxCommandEvent
& e
)
97 enum rom_type rtype
= romtype_from_string(rtypec
->get_choice());
98 ok
= ok
&& main_rom
->is_nonblank();
99 if(rtype
== ROMTYPE_BSX
|| rtype
== ROMTYPE_BSXSLOTTED
|| rtype
== ROMTYPE_SGB
)
100 ok
= ok
&& slota_rom
->is_nonblank();
101 if(rtype
== ROMTYPE_SUFAMITURBO
)
102 ok
= ok
&& (slota_rom
->is_nonblank() || slotb_rom
->is_nonblank());
103 open_rom
->Enable(ok
);
106 void wx_rom_select_window::on_romtype_change(wxCommandEvent
& e
)
108 set_rtype(rtypec
->get_choice());
109 on_filename_change(e
);
112 void wx_rom_select_window::on_quit(wxCommandEvent
& e
)
117 void wx_rom_select_window::on_open_rom(wxCommandEvent
& e
)
120 rfiles
.base_file
= "";
121 rfiles
.rtype
= romtype_from_string(rtypec
->get_choice());
122 rfiles
.region
= region_from_string(regionc
->get_choice());
123 rfiles
.rom
= main_rom
->get_file();
124 rfiles
.rom_xml
= main_xml
->get_file();
125 rfiles
.slota
= slota_rom
->get_file();
126 rfiles
.slota_xml
= slota_xml
->get_file();
127 rfiles
.slotb
= slotb_rom
->get_file();
128 rfiles
.slotb_xml
= slotb_xml
->get_file();
130 our_rom
= new loaded_rom(rfiles
);
131 } catch(std::exception
& e
) {
132 wxMessageDialog
* d
= new wxMessageDialog(this, towxstring(e
.what()),
133 wxT("Error loading ROM"), wxOK
| wxICON_EXCLAMATION
);
136 wx_rom_patch_window
* projwin
= new wx_rom_patch_window(*our_rom
);