From b410bc0314b8e8041d31791488351310e4a84b40 Mon Sep 17 00:00:00 2001 From: skidau Date: Wed, 3 Jun 2015 13:36:54 +0000 Subject: [PATCH] Added portable mode. The emulator will attempt to use portable mode initially. If that fails, it will use the local user directories. The Directories settings now accept relative and absolute paths. Leave the directory blank to use the ROM directory. Changed the logging to print to the status bar as well as the log file. --- project/vs2013_mfc/VBA2013.vcxproj | 4 +- src/wx/cmdevents.cpp | 107 +++------------------- src/wx/panel.cpp | 38 ++++---- src/wx/sys.cpp | 80 +++++++---------- src/wx/viewsupt.cpp | 15 +--- src/wx/wxvbam.cpp | 139 +++++++++++++++++++++-------- src/wx/wxvbam.h | 4 + src/wx/wxvbam.rc | 10 +-- 8 files changed, 177 insertions(+), 220 deletions(-) diff --git a/project/vs2013_mfc/VBA2013.vcxproj b/project/vs2013_mfc/VBA2013.vcxproj index c332ca09..340e9fbc 100644 --- a/project/vs2013_mfc/VBA2013.vcxproj +++ b/project/vs2013_mfc/VBA2013.vcxproj @@ -201,7 +201,7 @@ - + @@ -259,7 +259,7 @@ - + _SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) diff --git a/src/wx/cmdevents.cpp b/src/wx/cmdevents.cpp index 63b9ab39..10d567ee 100644 --- a/src/wx/cmdevents.cpp +++ b/src/wx/cmdevents.cpp @@ -92,7 +92,7 @@ static wxString open_dir; EVT_HANDLER(wxID_OPEN, "Open ROM...") { - open_dir = gopts.gba_rom_dir; + open_dir = wxGetApp().GetAbsolutePath(gopts.gba_rom_dir); // FIXME: ignore if non-existent or not a dir wxString pats = _( "GameBoy Advance Files (*.agb;*.gba;*.bin;*.elf;*.mb;*.zip;*.7z;*.rar)|" @@ -122,7 +122,7 @@ EVT_HANDLER(wxID_OPEN, "Open ROM...") EVT_HANDLER(OpenGB, "Open GB...") { - open_dir = gopts.gb_rom_dir; + open_dir = wxGetApp().GetAbsolutePath(gopts.gb_rom_dir); // FIXME: ignore if non-existent or not a dir wxString pats = _( "GameBoy Files (*.dmg;*.gb;*.gbc;*.cgb;*.sgb;*.zip;*.7z;*.rar)|" @@ -147,7 +147,7 @@ EVT_HANDLER(OpenGB, "Open GB...") EVT_HANDLER(OpenGBC, "Open GBC...") { - open_dir = gopts.gbc_rom_dir; + open_dir = wxGetApp().GetAbsolutePath(gopts.gbc_rom_dir); // FIXME: ignore if non-existent or not a dir wxString pats = _( "GameBoy Color Files (*.dmg;*.gb;*.gbc;*.cgb;*.sgb;*.zip;*.7z;*.rar)|" @@ -844,7 +844,7 @@ EVT_HANDLER_MASK(SaveDotCodeFile, "Save e-Reader Dot Code...", CMDEN_GBA) return; savedotcodefile_path = dlg.GetPath(); - SetLoadDotCodeFile(savedotcodefile_path.mb_str(wxConvUTF8)); + SetSaveDotCodeFile(savedotcodefile_path.mb_str(wxConvUTF8)); } static wxString batimp_path; @@ -1133,23 +1133,7 @@ EVT_HANDLER_MASK(ExportGamesharkSnapshot, "Export GameShark snapshot...", CMDEN_ EVT_HANDLER_MASK(ScreenCapture, "Screen capture...", CMDEN_GB | CMDEN_GBA) { - static wxString scap_path; - - if (!scap_path.size()) - { - scap_path = gopts.scrshot_dir; - - if (scap_path.size()) - { - wxFileName sp(scap_path, wxEmptyString); - - if (!sp.IsAbsolute()) - scap_path = panel->game_dir() + wxT('/') + gopts.scrshot_dir; - - wxFileName::Mkdir(scap_path, 0777, wxPATH_MKDIR_FULL); - } - } - + wxString scap_path = GetGamePath(gopts.scrshot_dir); wxString def_name = panel->game_name(); if (captureFormat == 0) @@ -1230,23 +1214,7 @@ EVT_HANDLER_MASK(RecordSoundStartRecording, "Start sound recording...", CMDEN_NS sound_extno = extno; } - if (!sound_path.size()) - { - if (!gopts.recording_dir.size()) - sound_path = panel->game_dir(); - else - { - wxFileName sp(gopts.recording_dir, wxEmptyString); - - if (sp.IsAbsolute()) - sound_path = gopts.recording_dir; - else - sound_path = panel->game_dir() + wxT('/') + gopts.recording_dir; - } - - wxFileName::Mkdir(sound_path, 0777, wxPATH_MKDIR_FULL); - } - + sound_path = GetGamePath(gopts.recording_dir); wxString def_name = panel->game_name(); const wxChar* extoff = sound_exts.c_str(); @@ -1322,23 +1290,7 @@ EVT_HANDLER_MASK(RecordAVIStartRecording, "Start video recording...", CMDEN_NVRE vid_extno = extno; } - if (!vid_path.size()) - { - if (!gopts.recording_dir.size()) - vid_path = panel->game_dir(); - else - { - wxFileName sp(gopts.recording_dir, wxEmptyString); - - if (sp.IsAbsolute()) - vid_path = gopts.recording_dir; - else - vid_path = panel->game_dir() + wxT('/') + gopts.recording_dir; - } - - wxFileName::Mkdir(vid_path, 0777, wxPATH_MKDIR_FULL); - } - + vid_path = GetGamePath(gopts.recording_dir); wxString def_name = panel->game_name(); const wxChar* extoff = vid_exts.c_str(); @@ -1375,23 +1327,7 @@ static wxString mov_path; EVT_HANDLER_MASK(RecordMovieStartRecording, "Start game recording...", CMDEN_NGREC) { - if (!mov_path.size()) - { - if (!gopts.recording_dir.size()) - mov_path = panel->game_dir(); - else - { - wxFileName sp(gopts.recording_dir, wxEmptyString); - - if (sp.IsAbsolute()) - mov_path = gopts.recording_dir; - else - mov_path = panel->game_dir() + wxT('/') + gopts.recording_dir; - } - - wxFileName::Mkdir(mov_path, 0777, wxPATH_MKDIR_FULL); - } - + mov_path = GetGamePath(gopts.recording_dir); wxString def_name = panel->game_name() + wxT(".vmv"); wxFileDialog dlg(this, _("Select output file"), mov_path, def_name, _("VBA Movie files|*.vmv"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT); @@ -1411,24 +1347,7 @@ EVT_HANDLER_MASK(RecordMovieStopRecording, "Stop game recording", CMDEN_GREC) EVT_HANDLER_MASK(PlayMovieStartPlaying, "Start playing movie...", CMDEN_NGREC | CMDEN_NGPLAY) { - if (!mov_path.size()) - { - if (!gopts.recording_dir.size()) - mov_path = panel->game_dir(); - else - { - wxFileName sp(gopts.recording_dir, wxEmptyString); - - if (sp.IsAbsolute()) - mov_path = gopts.recording_dir; - else - mov_path = panel->game_dir() + wxT('/') + gopts.recording_dir; - } - - if (!wxFileName::DirExists(mov_path)) - mov_path = wxFileName::GetCwd(); - } - + mov_path = GetGamePath(gopts.recording_dir); systemStopGamePlayback(); wxString def_name = panel->game_name() + wxT(".vmv"); wxFileDialog dlg(this, _("Select file"), mov_path, def_name, @@ -1951,9 +1870,7 @@ EVT_HANDLER_MASK(Disassemble, "Disassemble...", CMDEN_GB | CMDEN_GBA) Disassemble(); } -// only GBA generates the log messages this handles -// you could view them even w/o a gba cart, but why? -EVT_HANDLER_MASK(Logging, "Logging...", CMDEN_GBA) +EVT_HANDLER(Logging, "Logging...") { wxDialog* dlg = wxGetApp().frame->logdlg; dlg->SetWindowStyle(wxCAPTION | wxRESIZE_BORDER); @@ -2310,7 +2227,7 @@ EVT_HANDLER(GameBoyAdvanceConfigure, "Game Boy Advance options...") if (chg) { wxString vba_over; - wxFileName fn(wxStandardPaths::Get().GetUserDataDir(), wxT("vba-over.ini")); + wxFileName fn(wxGetApp().GetConfigurationPath(), wxT("vba-over.ini")); if (fn.FileExists()) { @@ -2587,7 +2504,7 @@ EVT_HANDLER(wxID_ABOUT, "About...") wxAboutDialogInfo ai; ai.SetName(wxT("VisualBoyAdvance-M")); wxString version = wxT(""); -#ifdef FINAL_BUILD +#ifndef FINAL_BUILD version = version + wxT("-") + wxT(SVN_REV_STR); #endif ai.SetVersion(version); diff --git a/src/wx/panel.cpp b/src/wx/panel.cpp index faa66830..6bc375c2 100644 --- a/src/wx/panel.cpp +++ b/src/wx/panel.cpp @@ -45,21 +45,21 @@ void GameArea::LoadGame(const wxString &name) wxString rp = fnfn.GetPath(); // can't really decide which dir to use, so try GBA first, then GB - if (!gopts.gba_rom_dir.empty()) + if (!wxGetApp().GetAbsolutePath(gopts.gba_rom_dir).empty()) { - fnfn.SetPath(gopts.gba_rom_dir + wxT('/') + rp); + fnfn.SetPath(wxGetApp().GetAbsolutePath(gopts.gba_rom_dir) + wxT('/') + rp); badfile = !fnfn.IsFileReadable(); } - if (badfile && !gopts.gb_rom_dir.empty()) + if (badfile && !wxGetApp().GetAbsolutePath(gopts.gb_rom_dir).empty()) { - fnfn.SetPath(gopts.gb_rom_dir + wxT('/') + rp); + fnfn.SetPath(wxGetApp().GetAbsolutePath(gopts.gb_rom_dir) + wxT('/') + rp); badfile = !fnfn.IsFileReadable(); } - if (badfile && !gopts.gbc_rom_dir.empty()) + if (badfile && !wxGetApp().GetAbsolutePath(gopts.gbc_rom_dir).empty()) { - fnfn.SetPath(gopts.gbc_rom_dir + wxT('/') + rp); + fnfn.SetPath(wxGetApp().GetAbsolutePath(gopts.gbc_rom_dir) + wxT('/') + rp); badfile = !fnfn.IsFileReadable(); } } @@ -450,7 +450,7 @@ void GameArea::SetFrameTitle() } tit.append(wxT("VisualBoyAdvance-M ")); -#ifdef FINAL_BUILD +#ifndef FINAL_BUILD tit.append(_(SVN_REV_STR)); #endif #ifndef NO_LINK @@ -471,26 +471,30 @@ void GameArea::recompute_dirs() batdir = gopts.battery_dir; if (!batdir.size()) - batdir = wxStandardPaths::Get().GetUserLocalDataDir(); + { + batdir = loaded_game.GetPathWithSep(); + } else { - wxFileName bp(batdir, wxEmptyString); - - if (!bp.IsAbsolute()) - batdir = loaded_game.GetPathWithSep() + batdir; + batdir = wxGetApp().GetAbsolutePath(gopts.battery_dir); } statedir = gopts.state_dir; if (!statedir.size()) - statedir = batdir; + { + statedir = loaded_game.GetPathWithSep(); + } else { - wxFileName sp(statedir, wxEmptyString); - - if (!sp.IsAbsolute()) - statedir = batdir + wxT('/') + statedir; + statedir = wxGetApp().GetAbsolutePath(gopts.state_dir); } + + if (!wxIsWritable(batdir)) + batdir = wxGetApp().GetConfigurationPath(); + + if (!wxIsWritable(statedir)) + statedir = wxGetApp().GetConfigurationPath(); } void GameArea::UnloadGame(bool destruct) diff --git a/src/wx/sys.cpp b/src/wx/sys.cpp index 5ce74d85..f69d0aa6 100644 --- a/src/wx/sys.cpp +++ b/src/wx/sys.cpp @@ -454,18 +454,7 @@ void systemFrame() void systemScreenCapture(int num) { GameArea* panel = wxGetApp().frame->GetPanel(); - wxFileName fn; - - if (!gopts.scrshot_dir.size()) - fn = wxFileName(panel->game_dir(), wxEmptyString); - else - { - fn = wxFileName(gopts.scrshot_dir, wxEmptyString); - - if (!fn.IsAbsolute()) - fn = wxFileName(panel->game_dir() + wxT('/') + - gopts.scrshot_dir, wxEmptyString); - } + wxFileName fn = wxFileName(wxGetApp().frame->GetGamePath(gopts.scrshot_dir), wxEmptyString); do { @@ -1048,19 +1037,7 @@ void systemGbPrint(u8* data, int len, int pages, int feed, int pal, int cont) if (gopts.print_screen_cap) { - wxFileName fn; - - if (!gopts.scrshot_dir.size()) - fn = wxFileName(panel->game_dir(), wxEmptyString); - else - { - fn = wxFileName(gopts.scrshot_dir, wxEmptyString); - - if (!fn.IsAbsolute()) - fn = wxFileName(panel->game_dir() + wxT('/') + - gopts.scrshot_dir, wxEmptyString); - } - + wxFileName fn = wxFileName(wxGetApp().frame->GetGamePath(gopts.scrshot_dir), wxEmptyString); int num = 1; do @@ -1130,16 +1107,19 @@ void systemGbPrint(u8* data, int len, int pages, int feed, int pal, int cont) void systemScreenMessage(const wxString &msg) { - wxPuts(msg); - MainFrame* f = wxGetApp().frame; - GameArea* panel = f->GetPanel(); + if (wxGetApp().frame && wxGetApp().frame->IsShown()) + { + wxPuts(msg); + MainFrame* f = wxGetApp().frame; + GameArea* panel = f->GetPanel(); - if (!panel->osdtext.empty()) - f->PopStatusText(); + if (!panel->osdtext.empty()) + f->PopStatusText(); - f->PushStatusText(msg); - panel->osdtext = msg; - panel->osdtime = systemGetClock(); + f->PushStatusText(msg); + panel->osdtext = msg; + panel->osdtime = systemGetClock(); + } } void systemScreenMessage(const char* msg) @@ -1403,21 +1383,7 @@ bool debugWaitSocket() void log(const char* defaultMsg, ...) { static FILE* out = NULL; - - if (out == NULL) - { - // FIXME: this should be an option - wxFileName trace_log(wxStandardPaths::Get().GetUserLocalDataDir(), wxT("trace.log")); - out = fopen(trace_log.GetFullPath().mb_str(), "w"); - - if (!out) - return; - } - va_list valist; - va_start(valist, defaultMsg); - vfprintf(out, defaultMsg, valist); - va_end(valist); char buf[2048]; va_start(valist, defaultMsg); vsnprintf(buf, 2048, defaultMsg, valist); @@ -1428,7 +1394,25 @@ void log(const char* defaultMsg, ...) { LogDialog* d = wxGetApp().frame->logdlg; - if (d) + if (d && d->IsShown()) + { d->Update(); + } + + systemScreenMessage(buf); } + + if (out == NULL) + { + // FIXME: this should be an option + wxFileName trace_log(wxGetApp().GetConfigurationPath(), wxT("trace.log")); + out = fopen(trace_log.GetFullPath().mb_str(), "w"); + + if (!out) + return; + } + + va_start(valist, defaultMsg); + vfprintf(out, defaultMsg, valist); + va_end(valist); } diff --git a/src/wx/viewsupt.cpp b/src/wx/viewsupt.cpp index 1a6ecf47..ada650e2 100644 --- a/src/wx/viewsupt.cpp +++ b/src/wx/viewsupt.cpp @@ -1212,20 +1212,7 @@ void GfxViewer::StretchTog(wxCommandEvent &ev) void GfxViewer::SaveBMP(wxCommandEvent &ev) { GameArea* panel = wxGetApp().frame->GetPanel(); - - if (bmp_save_dir.empty()) - { - bmp_save_dir = gopts.scrshot_dir; - - if (bmp_save_dir.size()) - { - wxFileName sp(bmp_save_dir, wxEmptyString); - - if (!sp.IsAbsolute()) - bmp_save_dir = panel->game_dir() + wxT('/') + gopts.scrshot_dir; - } - } - + bmp_save_dir = wxGetApp().frame->GetGamePath(gopts.scrshot_dir); // no attempt is made here to translate the dialog type name // it's just a suggested name, anyway wxString def_name = panel->game_name() + wxT('-') + dname; diff --git a/src/wx/wxvbam.cpp b/src/wx/wxvbam.cpp index f2a9907e..170b2dbd 100644 --- a/src/wx/wxvbam.cpp +++ b/src/wx/wxvbam.cpp @@ -40,13 +40,13 @@ static void get_config_path(wxPathList &path, bool exists = true) path.Add(s); \ } while(0) // NOTE: this does not support XDG (freedesktop.org) paths + add_path(GetPluginsDir()); add_path(GetUserLocalDataDir()); add_path(GetUserDataDir()); add_path(GetLocalizedResourcesDir(wxGetApp().locale.GetCanonicalName())); add_path(GetResourcesDir()); add_path(GetDataDir()); add_path(GetLocalDataDir()); - add_path(GetPluginsDir()); } static void tack_full_path(wxString &s, const wxString &app = wxEmptyString) @@ -59,6 +59,47 @@ static void tack_full_path(wxString &s, const wxString &app = wxEmptyString) s += wxT("\n\t") + full_config_path[i] + app; } +wxString wxvbamApp::GetConfigurationPath() +{ + if (data_path.empty()) + { + get_config_path(config_path); + + for (int i = 0; i < config_path.size(); i++) + { + wxFileName fn(config_path[i], wxT("vbam.ini")); + + if (fn.FileExists() && fn.IsFileWritable()) + { + data_path = config_path[i]; + break; + } + // Check if path is writeable + else if (wxIsWritable(config_path[i])) + { + data_path = config_path[i]; + break; + } + } + } + + return data_path; +} + +wxString wxvbamApp::GetAbsolutePath(wxString path) +{ + wxFileName dir(path); + + if (dir.IsRelative()) + { + wxFileName fn(GetConfigurationPath(), path); + fn.Normalize(); + return fn.GetFullPath(); + } + + return path; +} + bool wxvbamApp::OnInit() { // use consistent names for config @@ -103,9 +144,9 @@ bool wxvbamApp::OnInit() xr->Load(wxT("*.xrs")); } - wxString xrcDir = wxStandardPaths::Get().GetPluginsDir() + wxT("\\xrc"); + wxFileName xrcDir(GetConfigurationPath() + wxT("//xrc"), wxEmptyString); - if (wxDirExists(xrcDir) && wxSetWorkingDirectory(xrcDir) && !wxFindFirstFile(wxT("*.xrc")).empty()) + if (xrcDir.DirExists() && wxSetWorkingDirectory(xrcDir.GetFullPath()) && !wxFindFirstFile(wxT("*.xrc")).empty()) { xr->Load(wxT("*.xrc")); } @@ -121,8 +162,9 @@ bool wxvbamApp::OnInit() // but subdir flag behaves differently 2.8 vs. 2.9. Oh well. // NOTE: this does not support XDG (freedesktop.org) paths #ifdef __WXMSW__ + wxFileName vbamconf(GetConfigurationPath(), _T("vbam.ini")); cfg = new wxFileConfig(wxT("vbam"), wxEmptyString, - wxStandardPaths::Get().GetPluginsDir() + _T("\\vbam.ini"), + vbamconf.GetFullPath(), wxEmptyString, wxCONFIG_USE_LOCAL_FILE); #else cfg = new wxFileConfig(wxEmptyString, wxEmptyString, wxEmptyString, @@ -139,9 +181,9 @@ bool wxvbamApp::OnInit() // logic, so do it at run-time // wxFileConfig *f = wxDynamicCast(cfg, wxFileConfig); // wxConfigBase does not derive from wxObject!!! so no wxDynamicCast - wxFileConfig* f = dynamic_cast(cfg); + wxFileConfig* fc = dynamic_cast(cfg); - if (f) + if (fc) { wxFileName s(wxFileConfig::GetLocalFileName(GetAppName())); // at least up to 2.8.12, GetLocalFileName returns the dir if @@ -153,7 +195,7 @@ bool wxvbamApp::OnInit() // only the path part gets created // note that 0777 is default (assumes umask will do og-w) s.Mkdir(0777, wxPATH_MKDIR_FULL); - s = wxStandardPaths::Get().GetUserLocalDataDir(); + s = GetConfigurationPath(); s.AppendDir(s.GetFullName()); s.Mkdir(0777, wxPATH_MKDIR_FULL); } @@ -201,41 +243,37 @@ bool wxvbamApp::OnInit() overrides->Write(s + wxT("/comment"), cmt); } - for (int i = config_path.size() - 1; i >= 0 ; i--) + wxFileName fn(GetConfigurationPath(), wxT("vba-over.ini")); + wxFileName rdb(GetConfigurationPath(), wxT("Nintendo - Game Boy Advance*.dat")); + wxFileName scene_rdb(GetConfigurationPath(), wxT("Nintendo - Game Boy Advance (Scene)*.dat")); + wxFileName nointro_rdb(GetConfigurationPath(), wxT("Official No-Intro Nintendo Gameboy Advance Number (Date).xml")); + wxString f = wxFindFirstFile(nointro_rdb.GetFullPath(), wxFILE); + + if (!f.empty() && wxFileName(f).IsFileReadable()) + rom_database_nointro = f; + + f = wxFindFirstFile(scene_rdb.GetFullPath(), wxFILE); + + if (!f.empty() && wxFileName(f).IsFileReadable()) + rom_database_scene = f; + + f = wxFindFirstFile(rdb.GetFullPath(), wxFILE); + + while (!f.empty()) { - wxFileName fn(config_path[i], wxT("vba-over.ini")); - wxFileName rdb(config_path[i], wxT("Nintendo - Game Boy Advance*.dat")); - wxFileName scene_rdb(config_path[i], wxT("Nintendo - Game Boy Advance (Scene)*.dat")); - wxFileName nointro_rdb(config_path[i], wxT("Official No-Intro Nintendo Gameboy Advance Number (Date).xml")); - wxString f = wxFindFirstFile(nointro_rdb.GetFullPath(), wxFILE); - - if (!f.empty() && wxFileName(f).IsFileReadable()) - rom_database_nointro = f; - - f = wxFindFirstFile(scene_rdb.GetFullPath(), wxFILE); - - if (!f.empty() && wxFileName(f).IsFileReadable()) - rom_database_scene = f; - - f = wxFindFirstFile(rdb.GetFullPath(), wxFILE); - - while (!f.empty()) + if (f == rom_database_scene.GetFullPath()) { - if (f == rom_database_scene.GetFullPath()) - { - f = wxFindNextFile(); - } - else if (wxFileName(f).IsFileReadable()) - { - rom_database = f; - break; - } + f = wxFindNextFile(); } + else if (wxFileName(f).IsFileReadable()) + { + rom_database = f; + break; + } + } - if (!fn.IsFileReadable()) - continue; - - data_path = config_path[i]; + if (fn.FileExists()) + { wxStringOutputStream sos; wxFileInputStream fis(fn.GetFullPath()); // not the most efficient thing to do: read entire file into a string @@ -252,7 +290,7 @@ bool wxvbamApp::OnInit() overrides->DeleteGroup(s); overrides->SetPath(s); ov.SetPath(s); - overrides->Write(wxT("path"), config_path[i]); + overrides->Write(wxT("path"), GetConfigurationPath()); // apparently even MacOSX sometimes uses \r by itself wxString cmt(CMT_RE_START); cmt += s + wxT("\\]"); @@ -623,6 +661,29 @@ void MainFrame::DownloadFile(wxString host, wxString url) get.Close(); } +wxString MainFrame::GetGamePath(wxString path) +{ + wxString game_path = path; + + if (game_path.size()) + { + game_path = wxGetApp().GetAbsolutePath(game_path); + } + else + { + game_path = panel->game_dir(); + wxFileName::Mkdir(game_path, 0777, wxPATH_MKDIR_FULL); + } + + if (!wxFileName::DirExists(game_path)) + game_path = wxFileName::GetCwd(); + + if (!wxIsWritable(game_path)) + game_path = wxGetApp().GetConfigurationPath(); + + return game_path; +} + void MainFrame::SetJoystick() { bool anyjoy = false; diff --git a/src/wx/wxvbam.h b/src/wx/wxvbam.h index 6b0e9556..27132fd9 100644 --- a/src/wx/wxvbam.h +++ b/src/wx/wxvbam.h @@ -60,6 +60,8 @@ public: virtual bool OnInit(); virtual void OnInitCmdLine(wxCmdLineParser &); virtual bool OnCmdLineParsed(wxCmdLineParser &); + wxString GetConfigurationPath(); + wxString GetAbsolutePath(wxString path); // name of a file to load at earliest opportunity wxString pending_load; // list of options to set after config file loaded @@ -192,6 +194,8 @@ public: GameArea* GetPanel() { return panel; } + wxString GetGamePath(wxString path); + // wxMSW pauses the game for menu popups and modal dialogs, but wxGTK // does not. It's probably desirable to pause the game. To do this for // dialogs, use this function instead of dlg->ShowModal() diff --git a/src/wx/wxvbam.rc b/src/wx/wxvbam.rc index e7128ad2..dd5c7002 100644 --- a/src/wx/wxvbam.rc +++ b/src/wx/wxvbam.rc @@ -8,8 +8,8 @@ IDI_MAINICON ICON "../win32/res/VBA.ico" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,8,0,0 - PRODUCTVERSION 1,8,0,0 + FILEVERSION 2,0,0,0 + PRODUCTVERSION 2,0,0,0 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -27,12 +27,12 @@ BEGIN VALUE "Comments", "VBA-M comes with NO WARRANTY. Use it at your own risk." VALUE "CompanyName", "http://vba-m.com/" VALUE "FileDescription", "VisualBoyAdvance-M" - VALUE "FileVersion", "1, 8, 0, 0" + VALUE "FileVersion", "2, 0, 0, 0" VALUE "InternalName", "VBA-M" VALUE "LegalCopyright", "Copyright © 2008-2015 VBA-M development team" VALUE "OriginalFilename", "VisualBoyAdvance-M.exe" - VALUE "ProductName", "GB/C/A emulator for Windows" - VALUE "ProductVersion", "1, 8, 0, 0" + VALUE "ProductName", "VisualBoyAdvance-M" + VALUE "ProductVersion", "2, 0, 0, 0" END END BLOCK "VarFileInfo"