Merge branch 'rr1-maint'
Conflicts: src/platform/wxwidgets/mainwindow.cpp
This commit is contained in:
commit
2ef9d55de7
11 changed files with 437 additions and 72 deletions
|
@ -32,6 +32,7 @@ void wxeditor_axes_display(wxWindow* parent);
|
||||||
void wxeditor_authors_display(wxWindow* parent);
|
void wxeditor_authors_display(wxWindow* parent);
|
||||||
void wxeditor_settings_display(wxWindow* parent);
|
void wxeditor_settings_display(wxWindow* parent);
|
||||||
void wxeditor_hotkeys_display(wxWindow* parent);
|
void wxeditor_hotkeys_display(wxWindow* parent);
|
||||||
|
void wxeditor_paths_display(wxWindow* parent);
|
||||||
std::string wxeditor_keyselect(wxWindow* parent, bool clearable);
|
std::string wxeditor_keyselect(wxWindow* parent, bool clearable);
|
||||||
void wxeditor_screen_display(wxWindow* parent, double& horiz, double& vert, int& flags);
|
void wxeditor_screen_display(wxWindow* parent, double& horiz, double& vert, int& flags);
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ public:
|
||||||
void menu_entry(int id, wxString name);
|
void menu_entry(int id, wxString name);
|
||||||
void menu_entry_check(int id, wxString name);
|
void menu_entry_check(int id, wxString name);
|
||||||
void menu_start_sub(wxString name);
|
void menu_start_sub(wxString name);
|
||||||
void menu_end_sub(wxString name);
|
void menu_end_sub();
|
||||||
bool menu_ischecked(int id);
|
bool menu_ischecked(int id);
|
||||||
void menu_check(int id, bool newstate);
|
void menu_check(int id, bool newstate);
|
||||||
void menu_separator();
|
void menu_separator();
|
||||||
|
|
13
manual.lyx
13
manual.lyx
|
@ -2748,6 +2748,19 @@ L[<name>]
|
||||||
Can be used anywhere.
|
Can be used anywhere.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Subsubsection
|
||||||
|
gui.rainbow(number step, number steps[, number color])
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
Perform hue rotation of color <color> (default bright red), by <step> steps.
|
||||||
|
The number of steps per full rotation is given by absolute value of <steps>.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
If <steps> is negative, the rotation will be counterclockwise.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Subsection
|
\begin_layout Subsection
|
||||||
table input
|
table input
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
14
manual.txt
14
manual.txt
|
@ -1354,6 +1354,14 @@ The default alpha is 256.
|
||||||
Set status field “L[<name>]” to <value> in status area. Can be
|
Set status field “L[<name>]” to <value> in status area. Can be
|
||||||
used anywhere.
|
used anywhere.
|
||||||
|
|
||||||
|
8.3.26 gui.rainbow(number step, number steps[, number color])
|
||||||
|
|
||||||
|
Perform hue rotation of color <color> (default bright red), by
|
||||||
|
<step> steps. The number of steps per full rotation is given by
|
||||||
|
absolute value of <steps>.
|
||||||
|
|
||||||
|
If <steps> is negative, the rotation will be counterclockwise.
|
||||||
|
|
||||||
8.4 table input
|
8.4 table input
|
||||||
|
|
||||||
Input handling. Only available in on_input callback.
|
Input handling. Only available in on_input callback.
|
||||||
|
@ -1746,7 +1754,7 @@ Called if savestate goes wrong.
|
||||||
8.10.12 Callback: on_post_save(string name, boolean is_savestate)
|
8.10.12 Callback: on_post_save(string name, boolean is_savestate)
|
||||||
|
|
||||||
Called on successful savaestate. is_savestate gives if this was a
|
Called on successful savaestate. is_savestate gives if this was a
|
||||||
savestate or a movie.
|
savestate or a
|
||||||
|
|
||||||
8.10.13 Callback: on_quit()
|
8.10.13 Callback: on_quit()
|
||||||
|
|
||||||
|
@ -2629,7 +2637,7 @@ set-axis joystick0axis19 disabled
|
||||||
|
|
||||||
• Remove calls to runtosave() that aren't supposed to be there
|
• Remove calls to runtosave() that aren't supposed to be there
|
||||||
|
|
||||||
• Lua function: movie.read_rtc()
|
• Lua function: read_rtc()
|
||||||
|
|
||||||
• Ignore src/fonts/font.cpp
|
• Ignore src/fonts/font.cpp
|
||||||
|
|
||||||
|
@ -2850,7 +2858,7 @@ set-axis joystick0axis19 disabled
|
||||||
• Wxwidgets: 128 -> 1024 Autohold slots (in case more are
|
• Wxwidgets: 128 -> 1024 Autohold slots (in case more are
|
||||||
needed).
|
needed).
|
||||||
|
|
||||||
• Don't append trailing '-' to prefix when saving movie.
|
• Don't append trailing '-' to prefix when saving
|
||||||
|
|
||||||
• Fix ROM/savestate handling (don't let user mismatch ROM and
|
• Fix ROM/savestate handling (don't let user mismatch ROM and
|
||||||
savestates).
|
savestates).
|
||||||
|
|
|
@ -95,8 +95,11 @@ public:
|
||||||
|
|
||||||
void set(const std::string& value) throw(std::bad_alloc, std::runtime_error)
|
void set(const std::string& value) throw(std::bad_alloc, std::runtime_error)
|
||||||
{
|
{
|
||||||
|
if(value != "") {
|
||||||
_firmwarepath = value;
|
_firmwarepath = value;
|
||||||
default_firmware = false;
|
default_firmware = false;
|
||||||
|
} else
|
||||||
|
blank();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string get() throw(std::bad_alloc)
|
std::string get() throw(std::bad_alloc)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "lua/internal.hpp"
|
#include "lua/internal.hpp"
|
||||||
#include "core/window.hpp"
|
#include "core/window.hpp"
|
||||||
|
#include "library/minmax.hpp"
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
@ -73,4 +74,61 @@ namespace
|
||||||
return 1;
|
return 1;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
//0: m
|
||||||
|
//1: M
|
||||||
|
//2: m + phue
|
||||||
|
//3: M - phue
|
||||||
|
uint8_t hsl2rgb_flags[] = {24, 52, 6, 13, 33, 19};
|
||||||
|
|
||||||
|
uint32_t shifthue(uint32_t color, double shift)
|
||||||
|
{
|
||||||
|
int16_t R = (color >> 16) & 0xFF;
|
||||||
|
int16_t G = (color >> 8) & 0xFF;
|
||||||
|
int16_t B = color & 0xFF;
|
||||||
|
int16_t m = min(R, min(G, B));
|
||||||
|
int16_t M = max(R, max(G, B));
|
||||||
|
int16_t S = M - m;
|
||||||
|
if(!S)
|
||||||
|
return color; //Grey.
|
||||||
|
int16_t hue;
|
||||||
|
if(R == M)
|
||||||
|
hue = G - B + 6 * S;
|
||||||
|
else if(G == M)
|
||||||
|
hue = B - R + 2 * S;
|
||||||
|
else
|
||||||
|
hue = R - G + 4 * S;
|
||||||
|
int16_t ohue = hue % (6 * S);
|
||||||
|
hue = (hue + static_cast<uint32_t>(shift * S)) % (6 * S);
|
||||||
|
uint32_t V[4];
|
||||||
|
V[0] = m;
|
||||||
|
V[1] = M;
|
||||||
|
V[2] = m + hue % S;
|
||||||
|
V[3] = M - hue % S;
|
||||||
|
uint8_t flag = hsl2rgb_flags[hue / S];
|
||||||
|
return (V[(flag >> 4) & 3] << 16) | (V[(flag >> 2) & 3] << 8) | (V[flag & 3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function_ptr_luafun gui_rainbow("gui.rainbow", [](lua_State* LS, const std::string& fname) -> int {
|
||||||
|
int64_t basecolor = 0x00FF0000;
|
||||||
|
uint64_t step = get_numeric_argument<uint64_t>(LS, 1, fname.c_str());
|
||||||
|
int32_t steps = get_numeric_argument<int32_t>(LS, 2, fname.c_str());
|
||||||
|
get_numeric_argument<int64_t>(LS, 3, basecolor, fname.c_str());
|
||||||
|
if(!steps) {
|
||||||
|
lua_pushstring(LS, "Expected nonzero steps for gui.rainbow");
|
||||||
|
lua_error(LS);
|
||||||
|
}
|
||||||
|
if(basecolor < 0) {
|
||||||
|
//Special: Any rotation of transparent is transparent.
|
||||||
|
lua_pushnumber(LS, -1);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
uint32_t asteps = std::abs(steps);
|
||||||
|
if(steps < 0)
|
||||||
|
step = asteps - step % asteps; //Reverse order.
|
||||||
|
double hueshift = 6.0 * (step % asteps) / asteps;
|
||||||
|
basecolor = shifthue(basecolor & 0xFFFFFF, hueshift) | (basecolor & 0xFF000000);
|
||||||
|
lua_pushnumber(LS, basecolor);
|
||||||
|
return 1;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ namespace
|
||||||
int audiocb(const void *input, void *output, unsigned long frame_count,
|
int audiocb(const void *input, void *output, unsigned long frame_count,
|
||||||
const PaStreamCallbackTimeInfo* time_info, PaStreamCallbackFlags flags, void* user)
|
const PaStreamCallbackTimeInfo* time_info, PaStreamCallbackFlags flags, void* user)
|
||||||
{
|
{
|
||||||
static uint16_t lprev, rprev;
|
static uint16_t lprev = 32768, rprev = 32768;
|
||||||
int16_t* _output = reinterpret_cast<int16_t*>(output);
|
int16_t* _output = reinterpret_cast<int16_t*>(output);
|
||||||
for(unsigned long i = 0; i < frame_count; i++) {
|
for(unsigned long i = 0; i < frame_count; i++) {
|
||||||
uint16_t l, r;
|
uint16_t l, r;
|
||||||
|
|
|
@ -146,12 +146,12 @@ void dumper_menu::update(const std::map<std::string, dumper_info>& new_dumpers)
|
||||||
if(!i.second.active) {
|
if(!i.second.active) {
|
||||||
if(i.second.modes.empty()) {
|
if(i.second.modes.empty()) {
|
||||||
menustructure[i.first].start_items[id] = Append(id, towxstring("Dump " +
|
menustructure[i.first].start_items[id] = Append(id, towxstring("Dump " +
|
||||||
i.second.name));
|
i.second.name + "..."));
|
||||||
menustructure[i.first].start_wxids[id++] = "";
|
menustructure[i.first].start_wxids[id++] = "";
|
||||||
}
|
}
|
||||||
for(auto j : i.second.modes) {
|
for(auto j : i.second.modes) {
|
||||||
menustructure[i.first].start_items[id] = Append(id, towxstring("Dump " +
|
menustructure[i.first].start_items[id] = Append(id, towxstring("Dump " +
|
||||||
i.second.name + " (" + j.second + ")"));
|
i.second.name + " (" + j.second + ")..."));
|
||||||
menustructure[i.first].start_wxids[id++] = j.first;
|
menustructure[i.first].start_wxids[id++] = j.first;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
112
src/platform/wxwidgets/editor-paths.cpp
Normal file
112
src/platform/wxwidgets/editor-paths.cpp
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
#include "platform/wxwidgets/platform.hpp"
|
||||||
|
#include "core/settings.hpp"
|
||||||
|
#include "library/string.hpp"
|
||||||
|
|
||||||
|
#include <wx/wx.h>
|
||||||
|
#include <wx/event.h>
|
||||||
|
#include <wx/control.h>
|
||||||
|
#include <wx/combobox.h>
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
#define FIRMWAREPATH "firmwarepath"
|
||||||
|
#define ROMPATH "rompath"
|
||||||
|
#define MOVIEPATH "moviepath"
|
||||||
|
|
||||||
|
class wxeditor_paths : public wxDialog
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxeditor_paths(wxWindow* parent);
|
||||||
|
~wxeditor_paths();
|
||||||
|
bool ShouldPreventAppExit() const;
|
||||||
|
void on_cancel(wxCommandEvent& e);
|
||||||
|
void on_ok(wxCommandEvent& e);
|
||||||
|
private:
|
||||||
|
wxButton* okbutton;
|
||||||
|
wxButton* cancel;
|
||||||
|
wxTextCtrl* rompath;
|
||||||
|
wxTextCtrl* moviepath;
|
||||||
|
wxTextCtrl* firmwarepath;
|
||||||
|
};
|
||||||
|
|
||||||
|
wxeditor_paths::wxeditor_paths(wxWindow* parent)
|
||||||
|
: wxDialog(parent, wxID_ANY, wxT("lsnes: Paths"), wxDefaultPosition, wxSize(-1, -1))
|
||||||
|
{
|
||||||
|
std::string cur_rompath, cur_moviepath, cur_firmwarepath;
|
||||||
|
runemufn([&cur_firmwarepath, &cur_moviepath, &cur_rompath]() {
|
||||||
|
cur_firmwarepath = setting::get(FIRMWAREPATH);
|
||||||
|
cur_rompath = setting::get(ROMPATH);
|
||||||
|
cur_moviepath = setting::get(MOVIEPATH);
|
||||||
|
});
|
||||||
|
|
||||||
|
Centre();
|
||||||
|
wxFlexGridSizer* top_s = new wxFlexGridSizer(2, 1, 0, 0);
|
||||||
|
SetSizer(top_s);
|
||||||
|
|
||||||
|
wxFlexGridSizer* t_s = new wxFlexGridSizer(3, 2, 0, 0);
|
||||||
|
t_s->Add(new wxStaticText(this, wxID_ANY, wxT("ROMs:")), 0, wxGROW);
|
||||||
|
t_s->Add(rompath = new wxTextCtrl(this, wxID_ANY, towxstring(cur_rompath), wxDefaultPosition, wxSize(400, -1)),
|
||||||
|
1, wxGROW);
|
||||||
|
t_s->Add(new wxStaticText(this, wxID_ANY, wxT("Movies:")), 0, wxGROW);
|
||||||
|
t_s->Add(moviepath = new wxTextCtrl(this, wxID_ANY, towxstring(cur_moviepath), wxDefaultPosition,
|
||||||
|
wxSize(400, -1)), 1, wxGROW);
|
||||||
|
t_s->Add(new wxStaticText(this, wxID_ANY, wxT("Firmware:")), 0, wxGROW);
|
||||||
|
t_s->Add(firmwarepath = new wxTextCtrl(this, wxID_ANY, towxstring(cur_firmwarepath), wxDefaultPosition,
|
||||||
|
wxSize(400, -1)), 1, wxGROW);
|
||||||
|
top_s->Add(t_s);
|
||||||
|
|
||||||
|
wxBoxSizer* pbutton_s = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
pbutton_s->AddStretchSpacer();
|
||||||
|
pbutton_s->Add(okbutton = new wxButton(this, wxID_OK, wxT("OK")), 0, wxGROW);
|
||||||
|
pbutton_s->Add(cancel = new wxButton(this, wxID_CANCEL, wxT("Cancel")), 0, wxGROW);
|
||||||
|
okbutton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(wxeditor_paths::on_ok), NULL, this);
|
||||||
|
cancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
|
||||||
|
wxCommandEventHandler(wxeditor_paths::on_cancel), NULL, this);
|
||||||
|
top_s->Add(pbutton_s, 0, wxGROW);
|
||||||
|
|
||||||
|
t_s->SetSizeHints(this);
|
||||||
|
top_s->SetSizeHints(this);
|
||||||
|
Fit();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxeditor_paths::~wxeditor_paths()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxeditor_paths::ShouldPreventAppExit() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxeditor_paths::on_cancel(wxCommandEvent& e)
|
||||||
|
{
|
||||||
|
EndModal(wxID_CANCEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxeditor_paths::on_ok(wxCommandEvent& e)
|
||||||
|
{
|
||||||
|
std::string cur_rompath = tostdstring(rompath->GetValue());
|
||||||
|
std::string cur_moviepath = tostdstring(moviepath->GetValue());
|
||||||
|
std::string cur_firmwarepath = tostdstring(firmwarepath->GetValue());
|
||||||
|
runemufn([cur_firmwarepath, cur_moviepath, cur_rompath]() {
|
||||||
|
setting::set(ROMPATH, cur_rompath);
|
||||||
|
setting::set(MOVIEPATH, cur_moviepath);
|
||||||
|
setting::set(FIRMWAREPATH, cur_firmwarepath);
|
||||||
|
});
|
||||||
|
EndModal(wxID_OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxeditor_paths_display(wxWindow* parent)
|
||||||
|
{
|
||||||
|
modal_pause_holder hld;
|
||||||
|
wxDialog* editor;
|
||||||
|
try {
|
||||||
|
editor = new wxeditor_paths(parent);
|
||||||
|
editor->ShowModal();
|
||||||
|
} catch(...) {
|
||||||
|
}
|
||||||
|
editor->Destroy();
|
||||||
|
}
|
|
@ -82,7 +82,20 @@ enum
|
||||||
wxID_SHOW_STATUS,
|
wxID_SHOW_STATUS,
|
||||||
wxID_SET_SPEED,
|
wxID_SET_SPEED,
|
||||||
wxID_SET_VOLUME,
|
wxID_SET_VOLUME,
|
||||||
wxID_SET_SCREEN
|
wxID_SET_SCREEN,
|
||||||
|
wxID_SET_PATHS,
|
||||||
|
wxID_SPEED_5,
|
||||||
|
wxID_SPEED_10,
|
||||||
|
wxID_SPEED_17,
|
||||||
|
wxID_SPEED_20,
|
||||||
|
wxID_SPEED_25,
|
||||||
|
wxID_SPEED_33,
|
||||||
|
wxID_SPEED_50,
|
||||||
|
wxID_SPEED_100,
|
||||||
|
wxID_SPEED_150,
|
||||||
|
wxID_SPEED_200,
|
||||||
|
wxID_SPEED_300,
|
||||||
|
wxID_SPEED_TURBO
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -198,6 +211,15 @@ namespace
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_speed(double target)
|
||||||
|
{
|
||||||
|
std::string v = (stringfmt() << target).str();
|
||||||
|
if(target < 0)
|
||||||
|
runemufn([]() { setting::set("targetfps", "infinite"); });
|
||||||
|
else
|
||||||
|
runemufn([v]() { setting::set("targetfps", v); });
|
||||||
|
}
|
||||||
|
|
||||||
class controller_autohold_menu : public wxMenu
|
class controller_autohold_menu : public wxMenu
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -426,6 +448,52 @@ namespace
|
||||||
{
|
{
|
||||||
runuifun([ahmenu]() { ahmenu->reconfigure(); });
|
runuifun([ahmenu]() { ahmenu->reconfigure(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class movie_path_setting : public setting
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
movie_path_setting() : setting("moviepath") { _moviepath = "."; default_movie = true; }
|
||||||
|
void blank() throw(std::bad_alloc, std::runtime_error)
|
||||||
|
{
|
||||||
|
_moviepath = ".";
|
||||||
|
default_movie = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_set() throw()
|
||||||
|
{
|
||||||
|
return !default_movie;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set(const std::string& value) throw(std::bad_alloc, std::runtime_error)
|
||||||
|
{
|
||||||
|
if(value != "") {
|
||||||
|
_moviepath = value;
|
||||||
|
default_movie = false;
|
||||||
|
} else
|
||||||
|
blank();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string get() throw(std::bad_alloc)
|
||||||
|
{
|
||||||
|
return _moviepath;
|
||||||
|
}
|
||||||
|
|
||||||
|
operator std::string() throw(std::bad_alloc)
|
||||||
|
{
|
||||||
|
return _moviepath;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
std::string _moviepath;
|
||||||
|
bool default_movie;
|
||||||
|
} moviepath_setting;
|
||||||
|
|
||||||
|
std::string movie_path()
|
||||||
|
{
|
||||||
|
std::string x;
|
||||||
|
runemufn([&x]() { x = setting::get("moviepath"); });
|
||||||
|
return x;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void boot_emulator(loaded_rom& rom, moviefile& movie)
|
void boot_emulator(loaded_rom& rom, moviefile& movie)
|
||||||
|
@ -506,7 +574,7 @@ void wxwin_mainwindow::menu_start_sub(wxString name)
|
||||||
old->AppendSubMenu(current_menu, name);
|
old->AppendSubMenu(current_menu, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxwin_mainwindow::menu_end_sub(wxString name)
|
void wxwin_mainwindow::menu_end_sub()
|
||||||
{
|
{
|
||||||
current_menu = upper.top();
|
current_menu = upper.top();
|
||||||
upper.pop();
|
upper.pop();
|
||||||
|
@ -617,75 +685,90 @@ wxwin_mainwindow::wxwin_mainwindow()
|
||||||
SetMenuBar(menubar);
|
SetMenuBar(menubar);
|
||||||
|
|
||||||
//TOP-level accels: ACFOS.
|
//TOP-level accels: ACFOS.
|
||||||
//System menu: (ACFOS)EMNPQRU
|
//System menu: (ACOS)ELNPQTV
|
||||||
menu_start(wxT("&System"));
|
menu_start(wxT("&System"));
|
||||||
menu_entry(wxID_FRAMEADVANCE, wxT("Fra&me advance"));
|
|
||||||
menu_entry(wxID_SUBFRAMEADVANCE, wxT("S&ubframe advance"));
|
|
||||||
menu_entry(wxID_NEXTPOLL, wxT("&Next poll"));
|
|
||||||
menu_entry(wxID_PAUSE, wxT("&Pause/Unpause"));
|
|
||||||
menu_separator();
|
|
||||||
menu_entry(wxID_ERESET, wxT("&Reset"));
|
|
||||||
menu_separator();
|
|
||||||
menu_entry(wxID_EDIT_AUTHORS, wxT("&Edit game name && authors"));
|
|
||||||
menu_separator();
|
|
||||||
menu_entry(wxID_EXIT, wxT("&Quit"));
|
|
||||||
menu_separator();
|
|
||||||
menu_entry(wxID_ABOUT, wxT("About"));
|
|
||||||
//File menu: (ACFOS)DEILMNPRTUVW
|
|
||||||
menu_start(wxT("&File"));
|
|
||||||
menu_entry_check(wxID_READONLY_MODE, wxT("Reado&nly mode"));
|
menu_entry_check(wxID_READONLY_MODE, wxT("Reado&nly mode"));
|
||||||
menu_check(wxID_READONLY_MODE, is_readonly_mode());
|
menu_check(wxID_READONLY_MODE, is_readonly_mode());
|
||||||
|
menu_entry(wxID_EDIT_AUTHORS, wxT("Edit game name && authors..."));
|
||||||
|
menu_start_sub(wxT("Spee&d"));
|
||||||
|
menu_entry(wxID_SPEED_5, wxT("1/20x"));
|
||||||
|
menu_entry(wxID_SPEED_10, wxT("1/10x"));
|
||||||
|
menu_entry(wxID_SPEED_17, wxT("1/6x"));
|
||||||
|
menu_entry(wxID_SPEED_20, wxT("1/5x"));
|
||||||
|
menu_entry(wxID_SPEED_25, wxT("1/4x"));
|
||||||
|
menu_entry(wxID_SPEED_33, wxT("1/3x"));
|
||||||
|
menu_entry(wxID_SPEED_50, wxT("1/2x"));
|
||||||
|
menu_entry(wxID_SPEED_100, wxT("1x"));
|
||||||
|
menu_entry(wxID_SPEED_150, wxT("1.5x"));
|
||||||
|
menu_entry(wxID_SPEED_200, wxT("2x"));
|
||||||
|
menu_entry(wxID_SPEED_300, wxT("3x"));
|
||||||
|
menu_entry(wxID_SPEED_TURBO, wxT("Turbo"));
|
||||||
|
menu_entry(wxID_SET_SPEED, wxT("Set..."));
|
||||||
|
menu_end_sub();
|
||||||
menu_separator();
|
menu_separator();
|
||||||
menu_entry(wxID_SAVE_STATE, wxT("Save stat&e"));
|
menu_start_sub(wxT("&Load"));
|
||||||
menu_entry(wxID_SAVE_MOVIE, wxT("Sa&ve movie"));
|
menu_entry(wxID_LOAD_STATE, wxT("&Load state..."));
|
||||||
menu_separator();
|
menu_entry(wxID_LOAD_STATE_RO, wxT("Loa&d state (readonly)..."));
|
||||||
menu_entry(wxID_LOAD_STATE, wxT("&Load state"));
|
menu_entry(wxID_LOAD_STATE_RW, wxT("Load s&tate (read-write)..."));
|
||||||
menu_entry(wxID_LOAD_STATE_RO, wxT("Loa&d state (readonly)"));
|
menu_entry(wxID_LOAD_STATE_P, wxT("Load state (&preserve input)..."));
|
||||||
menu_entry(wxID_LOAD_STATE_RW, wxT("Load s&tate (read-write)"));
|
menu_entry(wxID_LOAD_MOVIE, wxT("Load &movie..."));
|
||||||
menu_entry(wxID_LOAD_STATE_P, wxT("Load state (&preserve)"));
|
menu_entry(wxID_REWIND_MOVIE, wxT("Re&wind movie..."));
|
||||||
menu_entry(wxID_LOAD_MOVIE, wxT("Load &movie"));
|
|
||||||
menu_entry(wxID_REWIND_MOVIE, wxT("Re&wind movie"));
|
|
||||||
menu_separator();
|
|
||||||
menu_entry(wxID_CANCEL_SAVES, wxT("Cancel pend&ing saves"));
|
|
||||||
menu_separator();
|
|
||||||
menu_entry(wxID_SAVE_SCREENSHOT, wxT("Save sc&reenshot"));
|
|
||||||
menu_separator();
|
|
||||||
menu_special_sub(wxT("D&ump video"), reinterpret_cast<dumper_menu*>(dmenu = new dumper_menu(this,
|
|
||||||
wxID_DUMP_FIRST, wxID_DUMP_LAST)));
|
|
||||||
if(load_library_supported) {
|
if(load_library_supported) {
|
||||||
menu_separator();
|
menu_separator();
|
||||||
menu_entry(wxID_LOAD_LIBRARY, towxstring(std::string("Load ") + library_is_called));
|
menu_entry(wxID_LOAD_LIBRARY, towxstring(std::string("Load ") + library_is_called));
|
||||||
}
|
}
|
||||||
//Autohold menu: (ACFOS)
|
menu_end_sub();
|
||||||
|
menu_start_sub(wxT("Sa&ve"));
|
||||||
|
menu_entry(wxID_SAVE_STATE, wxT("Save stat&e..."));
|
||||||
|
menu_entry(wxID_SAVE_MOVIE, wxT("Sa&ve movie..."));
|
||||||
|
menu_entry(wxID_SAVE_SCREENSHOT, wxT("Save sc&reenshot..."));
|
||||||
|
menu_entry(wxID_CANCEL_SAVES, wxT("Cancel pend&ing saves..."));
|
||||||
|
menu_end_sub();
|
||||||
|
menu_separator();
|
||||||
|
menu_entry(wxID_PAUSE, wxT("&Pause/Unpause"));
|
||||||
|
menu_entry(wxID_FRAMEADVANCE, wxT("S&tep frame"));
|
||||||
|
menu_entry(wxID_SUBFRAMEADVANCE, wxT("St&ep subframe"));
|
||||||
|
menu_entry(wxID_NEXTPOLL, wxT("Step poll"));
|
||||||
|
menu_separator();
|
||||||
|
menu_entry(wxID_ERESET, wxT("&Reset"));
|
||||||
|
menu_separator();
|
||||||
|
menu_entry_check(wxID_SHOW_STATUS, wxT("Show/Hide status panel"));
|
||||||
|
menu_separator();
|
||||||
|
menu_special_sub(wxT("D&ump video"), reinterpret_cast<dumper_menu*>(dmenu = new dumper_menu(this,
|
||||||
|
wxID_DUMP_FIRST, wxID_DUMP_LAST)));
|
||||||
|
menu_separator();
|
||||||
|
menu_entry(wxID_EXIT, wxT("&Quit"));
|
||||||
|
menu_separator();
|
||||||
|
menu_entry(wxID_ABOUT, wxT("About..."));
|
||||||
|
//Autohold menu: (ACOS)
|
||||||
menu_special(wxT("&Autohold"), reinterpret_cast<autohold_menu*>(ahmenu = new autohold_menu(this)));
|
menu_special(wxT("&Autohold"), reinterpret_cast<autohold_menu*>(ahmenu = new autohold_menu(this)));
|
||||||
blistener->set_autohold_menu(reinterpret_cast<autohold_menu*>(ahmenu));
|
blistener->set_autohold_menu(reinterpret_cast<autohold_menu*>(ahmenu));
|
||||||
//Scripting menu: (ACFOS)ERU
|
//Scripting menu: (ACOS)ERU
|
||||||
menu_start(wxT("S&cripting"));
|
menu_start(wxT("S&cripting"));
|
||||||
menu_entry(wxID_RUN_SCRIPT, wxT("&Run script"));
|
menu_entry(wxID_RUN_SCRIPT, wxT("&Run script..."));
|
||||||
if(lua_supported) {
|
if(lua_supported) {
|
||||||
menu_separator();
|
menu_separator();
|
||||||
menu_entry(wxID_EVAL_LUA, wxT("&Evaluate Lua statement"));
|
menu_entry(wxID_EVAL_LUA, wxT("&Evaluate Lua statement..."));
|
||||||
menu_entry(wxID_RUN_LUA, wxT("R&un Lua script"));
|
menu_entry(wxID_RUN_LUA, wxT("R&un Lua script..."));
|
||||||
}
|
}
|
||||||
menu_separator();
|
menu_separator();
|
||||||
menu_entry(wxID_EDIT_MEMORYWATCH, wxT("Edit memory watch"));
|
menu_entry(wxID_EDIT_MEMORYWATCH, wxT("Edit memory watch..."));
|
||||||
menu_separator();
|
menu_separator();
|
||||||
menu_entry(wxID_LOAD_MEMORYWATCH, wxT("Load memory watch"));
|
menu_entry(wxID_LOAD_MEMORYWATCH, wxT("Load memory watch..."));
|
||||||
menu_entry(wxID_SAVE_MEMORYWATCH, wxT("Save memory watch"));
|
menu_entry(wxID_SAVE_MEMORYWATCH, wxT("Save memory watch..."));
|
||||||
menu_separator();
|
menu_separator();
|
||||||
menu_entry(wxID_MEMORY_SEARCH, wxT("Memory Search"));
|
menu_entry(wxID_MEMORY_SEARCH, wxT("Memory Search..."));
|
||||||
//Settings menu: (ACFOS)
|
//Settings menu: (ACFOS)
|
||||||
menu_start(wxT("Settings"));
|
menu_start(wxT("Settings"));
|
||||||
menu_entry(wxID_EDIT_AXES, wxT("Configure axes"));
|
menu_entry(wxID_EDIT_AXES, wxT("Configure axes..."));
|
||||||
menu_entry(wxID_EDIT_SETTINGS, wxT("Configure settings"));
|
menu_entry(wxID_EDIT_SETTINGS, wxT("Configure settings..."));
|
||||||
menu_entry(wxID_EDIT_HOTKEYS, wxT("Configure hotkeys"));
|
menu_entry(wxID_EDIT_KEYBINDINGS, wxT("Configure keybindings..."));
|
||||||
menu_entry(wxID_EDIT_KEYBINDINGS, wxT("Configure keybindings"));
|
menu_entry(wxID_EDIT_ALIAS, wxT("Configure aliases..."));
|
||||||
menu_entry(wxID_EDIT_ALIAS, wxT("Configure aliases"));
|
menu_entry(wxID_EDIT_JUKEBOX, wxT("Configure jukebox..."));
|
||||||
menu_entry(wxID_EDIT_JUKEBOX, wxT("Configure jukebox"));
|
|
||||||
menu_separator();
|
menu_separator();
|
||||||
menu_entry_check(wxID_SHOW_STATUS, wxT("Show status panel"));
|
menu_entry(wxID_SET_SCREEN, wxT("Set screen scaling..."));
|
||||||
menu_entry(wxID_SET_SPEED, wxT("Set speed"));
|
menu_entry(wxID_SET_PATHS, wxT("Set paths..."));
|
||||||
menu_entry(wxID_SET_SCREEN, wxT("Set screen scaling"));
|
menu_entry(wxID_EDIT_HOTKEYS, wxT("Configure hotkeys..."));
|
||||||
menu_check(wxID_SHOW_STATUS, true);
|
menu_check(wxID_SHOW_STATUS, true);
|
||||||
if(platform::sound_initialized()) {
|
if(platform::sound_initialized()) {
|
||||||
//Sound menu: (ACFOS)EHU
|
//Sound menu: (ACFOS)EHU
|
||||||
|
@ -794,31 +877,31 @@ void wxwin_mainwindow::handle_menu_click_cancelable(wxCommandEvent& e)
|
||||||
platform::queue("cancel-saves");
|
platform::queue("cancel-saves");
|
||||||
return;
|
return;
|
||||||
case wxID_LOAD_MOVIE:
|
case wxID_LOAD_MOVIE:
|
||||||
platform::queue("load-movie " + pick_file(this, "Load Movie", "."));
|
platform::queue("load-movie " + pick_file(this, "Load Movie", movie_path()));
|
||||||
return;
|
return;
|
||||||
case wxID_LOAD_STATE:
|
case wxID_LOAD_STATE:
|
||||||
platform::queue("load " + pick_file(this, "Load State", "."));
|
platform::queue("load " + pick_file(this, "Load State", movie_path()));
|
||||||
return;
|
return;
|
||||||
case wxID_LOAD_STATE_RO:
|
case wxID_LOAD_STATE_RO:
|
||||||
platform::queue("load-readonly " + pick_file(this, "Load State (Read-Only)", "."));
|
platform::queue("load-readonly " + pick_file(this, "Load State (Read-Only)", movie_path()));
|
||||||
return;
|
return;
|
||||||
case wxID_LOAD_STATE_RW:
|
case wxID_LOAD_STATE_RW:
|
||||||
platform::queue("load-state " + pick_file(this, "Load State (Read-Write)", "."));
|
platform::queue("load-state " + pick_file(this, "Load State (Read-Write)", movie_path()));
|
||||||
return;
|
return;
|
||||||
case wxID_LOAD_STATE_P:
|
case wxID_LOAD_STATE_P:
|
||||||
platform::queue("load-preserve " + pick_file(this, "Load State (Preserve)", "."));
|
platform::queue("load-preserve " + pick_file(this, "Load State (Preserve)", movie_path()));
|
||||||
return;
|
return;
|
||||||
case wxID_REWIND_MOVIE:
|
case wxID_REWIND_MOVIE:
|
||||||
platform::queue("rewind-movie");
|
platform::queue("rewind-movie");
|
||||||
return;
|
return;
|
||||||
case wxID_SAVE_MOVIE:
|
case wxID_SAVE_MOVIE:
|
||||||
platform::queue("save-movie " + pick_file(this, "Save Movie", "."));
|
platform::queue("save-movie " + pick_file(this, "Save Movie", movie_path()));
|
||||||
return;
|
return;
|
||||||
case wxID_SAVE_STATE:
|
case wxID_SAVE_STATE:
|
||||||
platform::queue("save-state " + pick_file(this, "Save State", "."));
|
platform::queue("save-state " + pick_file(this, "Save State", movie_path()));
|
||||||
return;
|
return;
|
||||||
case wxID_SAVE_SCREENSHOT:
|
case wxID_SAVE_SCREENSHOT:
|
||||||
platform::queue("take-screenshot " + pick_file(this, "Save State", "."));
|
platform::queue("take-screenshot " + pick_file(this, "Save Screenshot", movie_path()));
|
||||||
return;
|
return;
|
||||||
case wxID_RUN_SCRIPT:
|
case wxID_RUN_SCRIPT:
|
||||||
platform::queue("run-script " + pick_file_member(this, "Select Script", "."));
|
platform::queue("run-script " + pick_file_member(this, "Select Script", "."));
|
||||||
|
@ -1054,5 +1137,44 @@ void wxwin_mainwindow::handle_menu_click_cancelable(wxCommandEvent& e)
|
||||||
case wxID_SET_SCREEN:
|
case wxID_SET_SCREEN:
|
||||||
wxeditor_screen_display(this, horizontal_multiplier, vertical_multiplier, libswscale_flags);
|
wxeditor_screen_display(this, horizontal_multiplier, vertical_multiplier, libswscale_flags);
|
||||||
return;
|
return;
|
||||||
|
case wxID_SET_PATHS:
|
||||||
|
wxeditor_paths_display(this);
|
||||||
|
return;
|
||||||
|
case wxID_SPEED_5:
|
||||||
|
set_speed(5);
|
||||||
|
break;
|
||||||
|
case wxID_SPEED_10:
|
||||||
|
set_speed(10);
|
||||||
|
break;
|
||||||
|
case wxID_SPEED_17:
|
||||||
|
set_speed(16.66666666666);
|
||||||
|
break;
|
||||||
|
case wxID_SPEED_20:
|
||||||
|
set_speed(20);
|
||||||
|
break;
|
||||||
|
case wxID_SPEED_25:
|
||||||
|
set_speed(25);
|
||||||
|
break;
|
||||||
|
case wxID_SPEED_33:
|
||||||
|
set_speed(33.3333333333333);
|
||||||
|
break;
|
||||||
|
case wxID_SPEED_50:
|
||||||
|
set_speed(50);
|
||||||
|
break;
|
||||||
|
case wxID_SPEED_100:
|
||||||
|
set_speed(100);
|
||||||
|
break;
|
||||||
|
case wxID_SPEED_150:
|
||||||
|
set_speed(150);
|
||||||
|
break;
|
||||||
|
case wxID_SPEED_200:
|
||||||
|
set_speed(200);
|
||||||
|
break;
|
||||||
|
case wxID_SPEED_300:
|
||||||
|
set_speed(300);
|
||||||
|
break;
|
||||||
|
case wxID_SPEED_TURBO:
|
||||||
|
set_speed(-1);
|
||||||
|
break;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "core/moviedata.hpp"
|
#include "core/moviedata.hpp"
|
||||||
#include "core/framerate.hpp"
|
#include "core/framerate.hpp"
|
||||||
|
#include "core/settings.hpp"
|
||||||
#include "library/zip.hpp"
|
#include "library/zip.hpp"
|
||||||
#include "interface/core.hpp"
|
#include "interface/core.hpp"
|
||||||
|
|
||||||
|
@ -245,6 +246,50 @@ namespace
|
||||||
private:
|
private:
|
||||||
wxTextCtrl* ctrl;
|
wxTextCtrl* ctrl;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class rom_path_setting : public setting
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
rom_path_setting() : setting("rompath") { _rompath = "."; default_rom = true; }
|
||||||
|
void blank() throw(std::bad_alloc, std::runtime_error)
|
||||||
|
{
|
||||||
|
_rompath = ".";
|
||||||
|
default_rom = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_set() throw()
|
||||||
|
{
|
||||||
|
return !default_rom;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set(const std::string& value) throw(std::bad_alloc, std::runtime_error)
|
||||||
|
{
|
||||||
|
if(value != "") {
|
||||||
|
_rompath = value;
|
||||||
|
default_rom = false;
|
||||||
|
} else
|
||||||
|
blank();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string get() throw(std::bad_alloc)
|
||||||
|
{
|
||||||
|
return _rompath;
|
||||||
|
}
|
||||||
|
|
||||||
|
operator std::string() throw(std::bad_alloc)
|
||||||
|
{
|
||||||
|
return _rompath;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
std::string _rompath;
|
||||||
|
bool default_rom;
|
||||||
|
} rompath_setting;
|
||||||
|
|
||||||
|
std::string rom_path()
|
||||||
|
{
|
||||||
|
//This is pre-boot, so read directly.
|
||||||
|
return setting::get("rompath");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -286,7 +331,7 @@ wxwin_romselect::wxwin_romselect()
|
||||||
romgrid->Add(rom_label[i] = new wxStaticText(this, wxID_ANY, wxT("")), 0, wxGROW);
|
romgrid->Add(rom_label[i] = new wxStaticText(this, wxID_ANY, wxT("")), 0, wxGROW);
|
||||||
romgrid->Add(rom_name[i] = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(500, -1)),
|
romgrid->Add(rom_name[i] = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(500, -1)),
|
||||||
1, wxGROW);
|
1, wxGROW);
|
||||||
romgrid->Add(rom_change[i] = new wxButton(this, ROM_SELECTS_BASE + i, wxT("...")), 0, wxGROW);
|
romgrid->Add(rom_change[i] = new wxButton(this, ROM_SELECTS_BASE + i, wxT("Pick")), 0, wxGROW);
|
||||||
rom_name[i]->Connect(wxEVT_COMMAND_TEXT_UPDATED,
|
rom_name[i]->Connect(wxEVT_COMMAND_TEXT_UPDATED,
|
||||||
wxCommandEventHandler(wxwin_romselect::on_filename_change), NULL, this);
|
wxCommandEventHandler(wxwin_romselect::on_filename_change), NULL, this);
|
||||||
rom_change[i]->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
|
rom_change[i]->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
|
||||||
|
@ -353,7 +398,7 @@ void wxwin_romselect::on_ask_rom_filename(wxCommandEvent& e)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
std::string fname = pick_file_member(this, "Choose " + tostdstring(
|
std::string fname = pick_file_member(this, "Choose " + tostdstring(
|
||||||
rom_label[e.GetId() - ROM_SELECTS_BASE]->GetLabel()), ".");
|
rom_label[e.GetId() - ROM_SELECTS_BASE]->GetLabel()), rom_path());
|
||||||
wxTextCtrl* textbox = rom_name[e.GetId() - ROM_SELECTS_BASE];
|
wxTextCtrl* textbox = rom_name[e.GetId() - ROM_SELECTS_BASE];
|
||||||
if(textbox)
|
if(textbox)
|
||||||
textbox->SetValue(towxstring(fname));
|
textbox->SetValue(towxstring(fname));
|
||||||
|
@ -471,7 +516,7 @@ wxwin_patch::wxwin_patch(loaded_rom& rom)
|
||||||
patchsel->Add(new wxStaticText(this, wxID_ANY, wxT("File:")), 0, wxGROW);
|
patchsel->Add(new wxStaticText(this, wxID_ANY, wxT("File:")), 0, wxGROW);
|
||||||
patchsel->Add(patchfile = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(500, -1)),
|
patchsel->Add(patchfile = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(500, -1)),
|
||||||
1, wxGROW);
|
1, wxGROW);
|
||||||
patchsel->Add(choosefile = new wxButton(this, wxID_ANY, wxT("...")), 0, wxGROW);
|
patchsel->Add(choosefile = new wxButton(this, wxID_ANY, wxT("Pick")), 0, wxGROW);
|
||||||
patchfile->Connect(wxEVT_COMMAND_TEXT_UPDATED,
|
patchfile->Connect(wxEVT_COMMAND_TEXT_UPDATED,
|
||||||
wxCommandEventHandler(wxwin_patch::on_patchfile_change), NULL, this);
|
wxCommandEventHandler(wxwin_patch::on_patchfile_change), NULL, this);
|
||||||
choosefile->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
|
choosefile->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
|
||||||
|
@ -517,7 +562,7 @@ wxwin_patch::wxwin_patch(loaded_rom& rom)
|
||||||
void wxwin_patch::on_ask_patchfile(wxCommandEvent& e)
|
void wxwin_patch::on_ask_patchfile(wxCommandEvent& e)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
std::string fname = pick_file_member(this, "Choose patch file", ".");
|
std::string fname = pick_file_member(this, "Choose patch file", rom_path());
|
||||||
patchfile->SetValue(towxstring(fname));
|
patchfile->SetValue(towxstring(fname));
|
||||||
on_patchfile_change(e);
|
on_patchfile_change(e);
|
||||||
} catch(canceled_exception& e) {
|
} catch(canceled_exception& e) {
|
||||||
|
@ -649,7 +694,9 @@ wxwin_project::wxwin_project(loaded_rom& rom)
|
||||||
wxFlexGridSizer* fileblock = new wxFlexGridSizer(1, 2, 0, 0);
|
wxFlexGridSizer* fileblock = new wxFlexGridSizer(1, 2, 0, 0);
|
||||||
fileblock->Add(savefile = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(500, -1)),
|
fileblock->Add(savefile = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(500, -1)),
|
||||||
1, wxGROW);
|
1, wxGROW);
|
||||||
fileblock->Add(ask_savefile = new wxButton(this, ASK_FILENAME_BUTTON, wxT("...")), 0, wxGROW);
|
savefile->SetDropTarget(new textboxloadfilename(savefile));
|
||||||
|
|
||||||
|
fileblock->Add(ask_savefile = new wxButton(this, ASK_FILENAME_BUTTON, wxT("Pick")), 0, wxGROW);
|
||||||
savefile->Connect(wxEVT_COMMAND_TEXT_UPDATED,
|
savefile->Connect(wxEVT_COMMAND_TEXT_UPDATED,
|
||||||
wxCommandEventHandler(wxwin_project::on_filename_change), NULL, this);
|
wxCommandEventHandler(wxwin_project::on_filename_change), NULL, this);
|
||||||
ask_savefile->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
|
ask_savefile->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
|
||||||
|
@ -681,7 +728,8 @@ wxwin_project::wxwin_project(loaded_rom& rom)
|
||||||
wxFlexGridSizer* fileblock2 = new wxFlexGridSizer(1, 2, 0, 0);
|
wxFlexGridSizer* fileblock2 = new wxFlexGridSizer(1, 2, 0, 0);
|
||||||
fileblock2->Add(sram_files[i] = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition,
|
fileblock2->Add(sram_files[i] = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition,
|
||||||
wxSize(500, -1)), 1, wxGROW);
|
wxSize(500, -1)), 1, wxGROW);
|
||||||
fileblock2->Add(sram_choosers[i] = new wxButton(this, ASK_SRAMS_BASE + idx, wxT("...")), 0, wxGROW);
|
sram_files[i]->SetDropTarget(new textboxloadfilename(sram_files[i]));
|
||||||
|
fileblock2->Add(sram_choosers[i] = new wxButton(this, ASK_SRAMS_BASE + idx, wxT("Pick")), 0, wxGROW);
|
||||||
sram_files[i]->Connect(wxEVT_COMMAND_TEXT_UPDATED,
|
sram_files[i]->Connect(wxEVT_COMMAND_TEXT_UPDATED,
|
||||||
wxCommandEventHandler(wxwin_project::on_filename_change), NULL, this);
|
wxCommandEventHandler(wxwin_project::on_filename_change), NULL, this);
|
||||||
sram_choosers[i]->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
|
sram_choosers[i]->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
|
||||||
|
|
Loading…
Add table
Reference in a new issue