mirror of https://github.com/PCSX2/pcsx2.git
wxgui: Runs games. 'nuff said.
* Fixed some deadlock conditions by adding a message pump to semaphore waits ont he main/gui thread. * Many more config and init bugfixes. * Implemented most of the new Boot menu. git-svn-id: http://pcsx2.googlecode.com/svn/branches/wxgui@1745 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
163efebb29
commit
9308d86ffc
|
@ -70,6 +70,9 @@ namespace Threading
|
|||
void Post();
|
||||
void Post( int multiple );
|
||||
|
||||
#if wxUSE_GUI
|
||||
void WaitGui();
|
||||
#endif
|
||||
void Wait();
|
||||
void Wait( const wxTimeSpan& timeout );
|
||||
void WaitNoCancel();
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
#include "Threading.h"
|
||||
|
||||
#include <wx/datetime.h>
|
||||
#include <wx/thread.h>
|
||||
#include <wx/app.h>
|
||||
|
||||
#ifdef __LINUX__
|
||||
# include <signal.h> // for pthread_kill, which is in pthread.h on w32-pthreads
|
||||
|
@ -245,6 +247,28 @@ namespace Threading
|
|||
}
|
||||
#endif
|
||||
|
||||
#if wxUSE_GUI
|
||||
// This is a wxApp-safe implementation of Wait, which makes sure and executes the App's
|
||||
// pending messages *if* the Wait is performed on the Main/GUI thread. If the Wait is
|
||||
// called from another thread, no message pumping is performed.
|
||||
void Semaphore::WaitGui()
|
||||
{
|
||||
if( !wxThread::IsMain() || (wxTheApp == NULL) )
|
||||
Wait();
|
||||
else
|
||||
{
|
||||
// In order to avoid deadlock we need to make sure we cut some time
|
||||
// to handle messages. I choose 200ms:
|
||||
|
||||
static const timespec fail = { 0, 200 * 1000000 };
|
||||
do {
|
||||
|
||||
wxTheApp->ProcessPendingEvents();
|
||||
} while( sem_timedwait( &sema, &fail ) == ETIMEDOUT );
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void Semaphore::Wait()
|
||||
{
|
||||
sem_wait( &sema );
|
||||
|
|
|
@ -82,7 +82,7 @@ FILE *_cdvdOpenMechaVer() {
|
|||
// get the name of the bios file
|
||||
|
||||
// use the bios filename to get the name of the mecha ver file
|
||||
// [TODO] : Upgrade this to use std::string!
|
||||
// [TODO] : Upgrade this to use wxstring!
|
||||
|
||||
strcpy(file, g_Conf->FullpathToBios().ToAscii().data() );
|
||||
|
||||
|
@ -133,7 +133,7 @@ FILE *_cdvdOpenNVM() {
|
|||
// get the name of the bios file
|
||||
|
||||
// use the bios filename to get the name of the nvm file
|
||||
// [TODO] : Upgrade this to use std::string!
|
||||
// [TODO] : Upgrade this to use wxString!
|
||||
|
||||
strcpy( file, g_Conf->FullpathToBios().ToAscii().data() );
|
||||
ptr = file;
|
||||
|
|
|
@ -134,37 +134,6 @@ struct cdvdStruct {
|
|||
};
|
||||
|
||||
|
||||
struct CDVD_API
|
||||
{
|
||||
void (CALLBACK *close)();
|
||||
|
||||
// Don't need init or shutdown. iso/nodisc have no init/shutdown and plugin's
|
||||
// is handled by the PluginManager.
|
||||
|
||||
// Don't need plugin specific things like freeze, test, or other stuff here.
|
||||
// Those are handled by the plugin manager specifically.
|
||||
|
||||
_CDVDopen open;
|
||||
_CDVDreadTrack readTrack;
|
||||
_CDVDgetBuffer getBuffer;
|
||||
_CDVDreadSubQ readSubQ;
|
||||
_CDVDgetTN getTN;
|
||||
_CDVDgetTD getTD;
|
||||
_CDVDgetTOC getTOC;
|
||||
_CDVDgetDiskType getDiskType;
|
||||
_CDVDgetTrayStatus getTrayStatus;
|
||||
_CDVDctrlTrayOpen ctrlTrayOpen;
|
||||
_CDVDctrlTrayClose ctrlTrayClose;
|
||||
_CDVDnewDiskCB newDiskCB;
|
||||
|
||||
// special functions, not in external interface yet
|
||||
_CDVDreadSector readSector;
|
||||
_CDVDgetBuffer2 getBuffer2;
|
||||
_CDVDgetDualInfo getDualInfo;
|
||||
|
||||
wxString (*getUniqueFilename)();
|
||||
};
|
||||
|
||||
extern void cdvdReset();
|
||||
extern void cdvdVsync();
|
||||
extern void cdvdActionInterrupt();
|
||||
|
@ -175,10 +144,3 @@ extern void cdvdDetectDisk();
|
|||
extern void cdvdNewDiskCB();
|
||||
extern u8 cdvdRead(u8 key);
|
||||
extern void cdvdWrite(u8 key, u8 rt);
|
||||
|
||||
extern void CDVDsys_ChangeSource( CDVD_SourceType type );
|
||||
extern CDVD_API* CDVD; // currently active CDVD access mode api (either Iso, NoDisc, or Plugin)
|
||||
|
||||
extern CDVD_API CDVDapi_Plugin;
|
||||
extern CDVD_API CDVDapi_Iso;
|
||||
extern CDVD_API CDVDapi_NoDisc;
|
||||
|
|
|
@ -33,6 +33,14 @@
|
|||
#include "IsoFSdrv.h"
|
||||
#include "CDVDisoReader.h"
|
||||
|
||||
const wxChar* CDVD_SourceLabels[] =
|
||||
{
|
||||
L"Iso",
|
||||
L"Plugin",
|
||||
L"NoDisc",
|
||||
NULL
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// diskTypeCached
|
||||
// Internal disc type cache, to reduce the overhead of disc type checks, which are
|
||||
|
@ -61,7 +69,7 @@ static void CheckNullCDVD()
|
|||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Disk Type detection stuff (from cdvdGigaherz)
|
||||
//
|
||||
int CheckDiskTypeFS(int baseType)
|
||||
static int CheckDiskTypeFS(int baseType)
|
||||
{
|
||||
int f;
|
||||
char buffer[256];//if a file is longer...it should be shorter :D
|
||||
|
@ -258,14 +266,19 @@ static void DetectDiskType()
|
|||
diskTypeCached = FindDiskType(mType);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// CDVDsys_ChangeSource
|
||||
//
|
||||
static wxString m_SourceFilename[3];
|
||||
static CDVD_SourceType m_CurrentSourceType = CDVDsrc_NoDisc;
|
||||
|
||||
void CDVDsys_SetFile( CDVD_SourceType srctype, const wxString& newfile )
|
||||
{
|
||||
m_SourceFilename[srctype] = newfile;
|
||||
}
|
||||
|
||||
void CDVDsys_ChangeSource( CDVD_SourceType type )
|
||||
{
|
||||
GetPluginManager().Close( PluginId_CDVD );
|
||||
|
||||
switch( type )
|
||||
switch( m_CurrentSourceType = type )
|
||||
{
|
||||
case CDVDsrc_Iso:
|
||||
CDVD = &CDVDapi_Iso;
|
||||
|
@ -283,11 +296,13 @@ void CDVDsys_ChangeSource( CDVD_SourceType type )
|
|||
}
|
||||
}
|
||||
|
||||
s32 DoCDVDopen(const char* pTitleFilename)
|
||||
bool DoCDVDopen()
|
||||
{
|
||||
CheckNullCDVD();
|
||||
|
||||
int ret = CDVD->open(pTitleFilename);
|
||||
int ret = CDVD->open( m_SourceFilename[m_CurrentSourceType].IsEmpty() ? NULL : m_SourceFilename[m_CurrentSourceType].ToUTF8().data() );
|
||||
if( ret == -1 ) return false;
|
||||
|
||||
int cdtype = DoCDVDdetectDiskType();
|
||||
|
||||
if (EmuConfig.CdvdDumpBlocks && (cdtype != CDVD_TYPE_NODISC))
|
||||
|
@ -297,7 +312,11 @@ s32 DoCDVDopen(const char* pTitleFilename)
|
|||
// TODO: "Untitled" should use pnach/slus name resolution, slus if no patch,
|
||||
// and finally an "Untitled-[ElfCRC]" if no slus.
|
||||
|
||||
wxString temp( Path::Combine( wxGetCwd(), CDVD->getUniqueFilename() ) );
|
||||
wxString somepick( Path::GetFilenameWithoutExt( m_SourceFilename[m_CurrentSourceType] ) );
|
||||
if( somepick.IsEmpty() )
|
||||
somepick = L"Untitled";
|
||||
|
||||
wxString temp( Path::Combine( wxGetCwd(), somepick ) );
|
||||
|
||||
#ifdef ENABLE_TIMESTAMPS
|
||||
wxDateTime curtime( wxDateTime::GetTimeNow() );
|
||||
|
@ -338,7 +357,7 @@ s32 DoCDVDopen(const char* pTitleFilename)
|
|||
blockDumpFile = NULL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
return true;
|
||||
}
|
||||
|
||||
void DoCDVDclose()
|
||||
|
@ -495,12 +514,6 @@ s32 CALLBACK NODISCgetDualInfo(s32* dualType, u32* _layer1start)
|
|||
return -1;
|
||||
}
|
||||
|
||||
wxString NODISCgetUniqueFilename()
|
||||
{
|
||||
DevAssert( false, "NODISC is an invalid CDVD object for block dumping.. >_<" );
|
||||
return L"epicfail";
|
||||
}
|
||||
|
||||
CDVD_API CDVDapi_NoDisc =
|
||||
{
|
||||
NODISCclose,
|
||||
|
@ -521,6 +534,4 @@ CDVD_API CDVDapi_NoDisc =
|
|||
NODISCreadSector,
|
||||
NODISCgetBuffer2,
|
||||
NODISCgetDualInfo,
|
||||
|
||||
NODISCgetUniqueFilename
|
||||
};
|
||||
|
|
|
@ -18,7 +18,62 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
extern s32 DoCDVDopen(const char* pTitleFilename);
|
||||
#include "Plugins.h"
|
||||
|
||||
enum CDVD_SourceType
|
||||
{
|
||||
CDVDsrc_Iso = 0, // use built in ISO api
|
||||
CDVDsrc_Plugin, // use external plugin
|
||||
CDVDsrc_NoDisc, // use built in CDVDnull
|
||||
};
|
||||
|
||||
struct CDVD_API
|
||||
{
|
||||
void (CALLBACK *close)();
|
||||
|
||||
// Don't need init or shutdown. iso/nodisc have no init/shutdown and plugin's
|
||||
// is handled by the PluginManager.
|
||||
|
||||
// Don't need plugin specific things like freeze, test, or other stuff here.
|
||||
// Those are handled by the plugin manager specifically.
|
||||
|
||||
_CDVDopen open;
|
||||
_CDVDreadTrack readTrack;
|
||||
_CDVDgetBuffer getBuffer;
|
||||
_CDVDreadSubQ readSubQ;
|
||||
_CDVDgetTN getTN;
|
||||
_CDVDgetTD getTD;
|
||||
_CDVDgetTOC getTOC;
|
||||
_CDVDgetDiskType getDiskType;
|
||||
_CDVDgetTrayStatus getTrayStatus;
|
||||
_CDVDctrlTrayOpen ctrlTrayOpen;
|
||||
_CDVDctrlTrayClose ctrlTrayClose;
|
||||
_CDVDnewDiskCB newDiskCB;
|
||||
|
||||
// special functions, not in external interface yet
|
||||
_CDVDreadSector readSector;
|
||||
_CDVDgetBuffer2 getBuffer2;
|
||||
_CDVDgetDualInfo getDualInfo;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Multiple interface system for CDVD, used to provide internal CDVDiso and NoDisc,
|
||||
// and external plugin interfaces. Do* functions are meant as replacements for
|
||||
// direct CDVD plugin invocation, and add universal block dumping features.
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
extern CDVD_API* CDVD; // currently active CDVD access mode api (either Iso, NoDisc, or Plugin)
|
||||
|
||||
extern CDVD_API CDVDapi_Plugin;
|
||||
extern CDVD_API CDVDapi_Iso;
|
||||
extern CDVD_API CDVDapi_NoDisc;
|
||||
|
||||
extern const wxChar* CDVD_SourceLabels[];
|
||||
|
||||
extern void CDVDsys_ChangeSource( CDVD_SourceType type );
|
||||
extern void CDVDsys_SetFile( CDVD_SourceType srctype, const wxString& newfile );
|
||||
|
||||
extern bool DoCDVDopen();
|
||||
extern void DoCDVDclose();
|
||||
extern s32 DoCDVDreadSector(u8* buffer, u32 lsn, int mode);
|
||||
extern s32 DoCDVDreadTrack(u32 lsn, int mode);
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
|
||||
#include "CDVDisoReader.h"
|
||||
|
||||
static char isoFileName[g_MaxPath];
|
||||
static u8 *pbuffer;
|
||||
static u8 cdbuffer[2352] = {0};
|
||||
static isoFile *iso = NULL;
|
||||
|
@ -46,13 +45,16 @@ s32 CALLBACK ISOopen(const char* pTitle)
|
|||
{
|
||||
ISOclose(); // just in case
|
||||
|
||||
if ((pTitle != NULL) && (strlen(pTitle) > 0))
|
||||
strcpy(isoFileName, pTitle);
|
||||
if( (pTitle == NULL) || (pTitle[0] == 0) )
|
||||
{
|
||||
Console::Error( "CDVDiso Error: No filename specified." );
|
||||
return -1;
|
||||
}
|
||||
|
||||
iso = isoOpen(isoFileName);
|
||||
iso = isoOpen(pTitle);
|
||||
if (iso == NULL)
|
||||
{
|
||||
Console::Error("Error loading %s\n", params isoFileName);
|
||||
Console::Error( "CDVDiso Error: Failed loading %s", params pTitle );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -399,11 +401,6 @@ void CALLBACK ISOnewDiskCB(void(CALLBACK*)())
|
|||
{
|
||||
}
|
||||
|
||||
wxString ISOgetUniqueFilename()
|
||||
{
|
||||
return Path::GetFilenameWithoutExt(wxString::FromAscii(isoFileName));
|
||||
}
|
||||
|
||||
CDVD_API CDVDapi_Iso =
|
||||
{
|
||||
ISOclose,
|
||||
|
@ -425,6 +422,4 @@ CDVD_API CDVDapi_Iso =
|
|||
ISOreadSector,
|
||||
ISOgetBuffer2,
|
||||
ISOgetDualInfo,
|
||||
|
||||
ISOgetUniqueFilename
|
||||
};
|
||||
|
|
|
@ -211,7 +211,7 @@ void mtgsThreadObject::Start()
|
|||
// Wait for the thread to finish initialization (it runs GSopen, which can take
|
||||
// some time since it's creating a new window and all), and then check for errors.
|
||||
|
||||
m_sem_InitDone.Wait();
|
||||
m_sem_InitDone.WaitGui();
|
||||
|
||||
if( m_returncode != 0 ) // means the thread failed to init the GS plugin
|
||||
throw Exception::PluginOpenError( PluginId_GS );
|
||||
|
|
|
@ -708,7 +708,7 @@ static bool OpenPlugin_GS()
|
|||
|
||||
return !GSopen( (void*)&pDsp, "PCSX2", renderswitch ? 2 : 1 );
|
||||
|
||||
// Note: rederswitch is us abusing the isMultiThread parameter for that so
|
||||
// Note: renderswitch is us abusing the isMultiThread parameter for that so
|
||||
// we don't need a new callback
|
||||
}
|
||||
|
||||
|
@ -765,7 +765,7 @@ void PluginManager::Open( PluginsEnum_t pid )
|
|||
bool result = true;
|
||||
switch( pid )
|
||||
{
|
||||
case PluginId_CDVD: result = OpenPlugin_CDVD(); break;
|
||||
case PluginId_CDVD: result = DoCDVDopen(); break;
|
||||
case PluginId_GS: result = OpenPlugin_GS(); break;
|
||||
case PluginId_PAD: result = OpenPlugin_PAD(); break;
|
||||
case PluginId_SPU2: result = OpenPlugin_SPU2(); break;
|
||||
|
@ -784,6 +784,8 @@ void PluginManager::Open()
|
|||
const PluginInfo* pi = tbl_PluginInfo-1;
|
||||
while( ++pi, pi->shortname != NULL )
|
||||
g_plugins->Open( pi->id );
|
||||
|
||||
cdvdDetectDisk();
|
||||
}
|
||||
|
||||
void PluginManager::Close( PluginsEnum_t pid )
|
||||
|
@ -803,6 +805,11 @@ void PluginManager::Close( PluginsEnum_t pid )
|
|||
return;
|
||||
}
|
||||
}
|
||||
else if( pid == PluginId_CDVD )
|
||||
{
|
||||
DoCDVDclose();
|
||||
return;
|
||||
}
|
||||
|
||||
m_info[pid].IsOpened = false;
|
||||
m_info[pid].CommonBindings.Close();
|
||||
|
@ -902,6 +909,11 @@ void PluginManager::Freeze( SaveState& state )
|
|||
Freeze( pi->id, state );
|
||||
}
|
||||
|
||||
void PluginManager::Configure( PluginsEnum_t pid )
|
||||
{
|
||||
m_info[pid].CommonBindings.Configure();
|
||||
}
|
||||
|
||||
// Creates an instance of a plugin manager, using the specified plugin filenames for sources.
|
||||
// Impl Note: Have to use this stupid effing 'friend' declaration because static members of
|
||||
// classes can't access their own protected members. W-T-F?
|
||||
|
|
|
@ -213,6 +213,8 @@ public:
|
|||
void Freeze( PluginsEnum_t pid, SaveState& state );
|
||||
void Freeze( SaveState& state );
|
||||
|
||||
void Configure( PluginsEnum_t pid );
|
||||
|
||||
friend PluginManager* PluginManager_Create( const wxString (&folders)[PluginId_Count] );
|
||||
friend PluginManager* PluginManager_Create( const wxChar* (&folders)[PluginId_Count] );
|
||||
|
||||
|
|
|
@ -22,17 +22,7 @@
|
|||
#include "Utilities/SafeArray.h"
|
||||
#include "Utilities/Threading.h" // to use threading stuff, include the Threading namespace in your file.
|
||||
#include "Misc.h"
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Multiple interface system for CDVD
|
||||
// used to provide internal CDVDiso and NoDisc, and external plugin interfaces.
|
||||
// ---------------------------------------------------------------------------
|
||||
enum CDVD_SourceType
|
||||
{
|
||||
CDVDsrc_Iso = 0, // use built in ISO api
|
||||
CDVDsrc_Plugin, // use external plugin
|
||||
CDVDsrc_NoDisc, // use built in CDVDnull
|
||||
};
|
||||
#include "CDVD/CDVDaccess.h"
|
||||
|
||||
class CoreEmuThread;
|
||||
|
||||
|
|
|
@ -54,13 +54,13 @@ enum MenuIdentifiers
|
|||
// Run SubSection
|
||||
MenuId_Cdvd_Source,
|
||||
MenuId_Src_Iso,
|
||||
MenuId_Src_Cdvd,
|
||||
MenuId_Src_Plugin,
|
||||
MenuId_Src_NoDisc,
|
||||
MenuId_Boot_Iso, // Opens submenu with Iso browser, and recent isos.
|
||||
MenuId_IsoBrowse, // Open dialog, runs selected iso.
|
||||
MenuId_Boot_CDVD, // opens a submenu filled by CDVD plugin (usually list of drives)
|
||||
MenuId_RunWithoutDisc, // used to enter the bios (subs in cdvdnull)
|
||||
MenuId_Boot_ELF,
|
||||
MenuId_Boot_Recent, // Menu populated with recent source bootings
|
||||
MenuId_SkipBiosToggle, // enables the Bios Skip speedhack
|
||||
|
||||
|
||||
|
@ -83,24 +83,30 @@ enum MenuIdentifiers
|
|||
// Config Subsection
|
||||
MenuId_Config_Settings,
|
||||
MenuId_Config_BIOS,
|
||||
|
||||
// Plugin ID order is important. Must match the order in tbl_PluginInfo.
|
||||
MenuId_Config_GS,
|
||||
MenuId_Config_PAD,
|
||||
MenuId_Config_SPU2,
|
||||
MenuId_Config_CDVD,
|
||||
MenuId_Config_DEV9,
|
||||
MenuId_Config_USB,
|
||||
MenuId_Config_FW,
|
||||
MenuId_Config_DEV9,
|
||||
MenuId_Config_FireWire,
|
||||
MenuId_Config_Patches,
|
||||
|
||||
// Video Subsection
|
||||
// Top items are Pcsx2-controlled. GS plugin items are inserted beneath.
|
||||
// Top items are PCSX2-controlled. GS plugin items are inserted beneath.
|
||||
MenuId_Video_Basics, // includes frame timings and skippings settings
|
||||
MenuId_Video_Advanced, // inserted at the bottom of the menu
|
||||
|
||||
// Audio subsection
|
||||
// Top items are Pcsx2-controlled. SPU2 plugin items are inserted beneath.
|
||||
// Top items are PCSX2-controlled. SPU2 plugin items are inserted beneath.
|
||||
// [no items at this time]
|
||||
MenuId_Audio_Advanced, // inserted at the bottom of the menu
|
||||
|
||||
// Controller subsection
|
||||
// Top items are Pcsx2-controlled. Pad plugin items are inserted beneath.
|
||||
// Top items are PCSX2-controlled. Pad plugin items are inserted beneath.
|
||||
// [no items at this time]
|
||||
MenuId_Pad_Advanced,
|
||||
|
||||
|
@ -116,6 +122,28 @@ enum MenuIdentifiers
|
|||
MenuId_Debug_Usermode,
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
class ScopedWindowDisable
|
||||
{
|
||||
DeclareNoncopyableObject( ScopedWindowDisable )
|
||||
|
||||
protected:
|
||||
wxWindow& m_window;
|
||||
|
||||
public:
|
||||
ScopedWindowDisable( wxWindow* whee ) :
|
||||
m_window( *whee )
|
||||
{
|
||||
wxASSERT( whee != NULL );
|
||||
m_window.Disable();
|
||||
}
|
||||
|
||||
~ScopedWindowDisable()
|
||||
{
|
||||
m_window.Enable();
|
||||
}
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
@ -200,7 +228,6 @@ public:
|
|||
int OnExit();
|
||||
void OnInitCmdLine( wxCmdLineParser& parser );
|
||||
bool OnCmdLineParsed( wxCmdLineParser& parser );
|
||||
|
||||
bool PrepForExit();
|
||||
|
||||
#ifdef __WXDEBUG__
|
||||
|
@ -222,6 +249,10 @@ public:
|
|||
void PostMenuAction( MenuIdentifiers menu_id ) const;
|
||||
void Ping() const;
|
||||
|
||||
void ApplySettings();
|
||||
void LoadSettings();
|
||||
void SaveSettings();
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Console / Program Logging Helpers
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@ -303,5 +334,3 @@ extern void OpenPlugins();
|
|||
|
||||
extern wxRect wxGetDisplayArea();
|
||||
extern bool pxIsValidWindowPosition( const wxWindow& window, const wxPoint& windowPos );
|
||||
|
||||
extern wxFileHistory* g_RecentIsoList;
|
||||
|
|
|
@ -369,12 +369,14 @@ AppConfig::AppConfig() :
|
|||
|
||||
, McdEnableNTFS( true )
|
||||
|
||||
, CurrentIso()
|
||||
, CdvdSource( CDVDsrc_Iso )
|
||||
|
||||
, ProgLogBox()
|
||||
, Ps2ConBox()
|
||||
, Folders()
|
||||
, BaseFilenames()
|
||||
, EmuOptions()
|
||||
, m_IsLoaded( false )
|
||||
{
|
||||
Mcd[0].Enabled = true;
|
||||
Mcd[1].Enabled = true;
|
||||
|
@ -427,6 +429,10 @@ void AppConfig::LoadSave( IniInterface& ini )
|
|||
IniEntry( Toolbar_ImageSize );
|
||||
IniEntry( Toolbar_ShowLabels );
|
||||
|
||||
IniEntry( CurrentIso );
|
||||
|
||||
ini.EnumEntry( L"CdvdSource", CdvdSource, CDVD_SourceLabels, defaults.CdvdSource );
|
||||
|
||||
// Process various sub-components:
|
||||
ProgLogBox.LoadSave( ini, L"ProgramLog" );
|
||||
Ps2ConBox.LoadSave( ini, L"Ps2Console" );
|
||||
|
@ -434,9 +440,6 @@ void AppConfig::LoadSave( IniInterface& ini )
|
|||
Folders.LoadSave( ini );
|
||||
BaseFilenames.LoadSave( ini );
|
||||
|
||||
if( ini.IsSaving() && (g_RecentIsoList != NULL) )
|
||||
g_RecentIsoList->Save( ini.GetConfig() );
|
||||
|
||||
EmuOptions.LoadSave( ini );
|
||||
|
||||
ini.Flush();
|
||||
|
@ -450,8 +453,6 @@ void AppConfig::Apply()
|
|||
{
|
||||
Folders.ApplyDefaults();
|
||||
|
||||
if( NULL == wxConfigBase::Get( false ) ) return;
|
||||
|
||||
// Ensure existence of necessary documents folders. Plugins and other parts
|
||||
// of PCSX2 rely on them.
|
||||
|
||||
|
@ -474,41 +475,6 @@ void AppConfig::Apply()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Always perform delete and reload of the Recent Iso List. This handles cases where
|
||||
// the recent file count has been changed, and it's a helluva lot easier than trying
|
||||
// to make a clone copy of this complex object. ;)
|
||||
|
||||
wxConfigBase* cfg = wxConfigBase::Get( false );
|
||||
wxASSERT( cfg != NULL );
|
||||
|
||||
if( g_RecentIsoList != NULL )
|
||||
g_RecentIsoList->Save( *cfg );
|
||||
safe_delete( g_RecentIsoList );
|
||||
g_RecentIsoList = new wxFileHistory( RecentFileCount );
|
||||
g_RecentIsoList->Load( *cfg );
|
||||
|
||||
cfg->Flush();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
void AppConfig::Load()
|
||||
{
|
||||
if( NULL == wxConfigBase::Get( false ) ) return;
|
||||
|
||||
m_IsLoaded = true;
|
||||
|
||||
// Note: Extra parenthesis resolves "I think this is a function" issues with C++.
|
||||
IniLoader loader( (IniLoader()) );
|
||||
LoadSave( loader );
|
||||
}
|
||||
|
||||
void AppConfig::Save()
|
||||
{
|
||||
if( NULL == wxConfigBase::Get( false ) ) return;
|
||||
|
||||
IniSaver saver( (IniSaver()) );
|
||||
LoadSave( saver );
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
|
@ -629,9 +595,9 @@ void AppConfig_ReloadGlobalSettings( bool overwrite )
|
|||
wxConfigBase::Get()->SetRecordDefaults();
|
||||
|
||||
if( !overwrite )
|
||||
g_Conf->Load();
|
||||
wxGetApp().LoadSettings();
|
||||
|
||||
g_Conf->Apply();
|
||||
wxGetApp().ApplySettings();
|
||||
g_Conf->Folders.Logs.Mkdir();
|
||||
|
||||
wxString newlogname( Path::Combine( g_Conf->Folders.Logs.ToString(), L"emuLog.txt" ) );
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "CDVD/CDVDaccess.h"
|
||||
|
||||
class IniInterface;
|
||||
|
||||
extern bool UseAdminMode; // dictates if the program uses /home/user or /cwd for the program data
|
||||
|
@ -131,6 +133,9 @@ public:
|
|||
// enables automatic ntfs compression of memory cards (Win32 only)
|
||||
bool McdEnableNTFS;
|
||||
|
||||
wxString CurrentIso;
|
||||
CDVD_SourceType CdvdSource;
|
||||
|
||||
McdOptions Mcd[2];
|
||||
ConsoleLogOptions ProgLogBox;
|
||||
ConsoleLogOptions Ps2ConBox;
|
||||
|
@ -143,11 +148,6 @@ public:
|
|||
// used by emulation. The gui allows temporary per-game and commandline level overrides.
|
||||
Pcsx2Config EmuOptions;
|
||||
|
||||
protected:
|
||||
// indicates if the main AppConfig settings are valid (excludes the status of UseAdminMode,
|
||||
// which is a special value that's initialized independently of the rest of the config)
|
||||
bool m_IsLoaded;
|
||||
|
||||
public:
|
||||
AppConfig();
|
||||
|
||||
|
@ -156,16 +156,16 @@ public:
|
|||
wxString FullpathTo( PluginsEnum_t pluginId ) const;
|
||||
wxString FullPathToConfig() const;
|
||||
|
||||
void Load();
|
||||
void Save();
|
||||
void Apply();
|
||||
void LoadSaveUserMode( IniInterface& ini, const wxString& cwdhash );
|
||||
|
||||
wxString GetDefaultDocumentsFolder();
|
||||
|
||||
protected:
|
||||
void Apply();
|
||||
void LoadSave( IniInterface& ini );
|
||||
void LoadSaveMemcards( IniInterface& ini );
|
||||
|
||||
friend class Pcsx2App;
|
||||
};
|
||||
|
||||
class wxFileConfig; // forward declare.
|
||||
|
|
|
@ -124,7 +124,7 @@ void Dialogs::ConfigurationDialog::OnOk_Click( wxCommandEvent& evt )
|
|||
{
|
||||
FindWindow( wxID_APPLY )->Disable();
|
||||
g_Conf->SettingsTabName = m_labels[m_listbook.GetSelection()];
|
||||
g_Conf->Save();
|
||||
wxGetApp().SaveSettings();
|
||||
|
||||
Close();
|
||||
evt.Skip();
|
||||
|
@ -143,7 +143,7 @@ void Dialogs::ConfigurationDialog::OnApply_Click( wxCommandEvent& evt )
|
|||
FindWindow( wxID_APPLY )->Disable();
|
||||
|
||||
g_Conf->SettingsTabName = m_labels[m_listbook.GetSelection()];
|
||||
g_Conf->Save();
|
||||
wxGetApp().SaveSettings();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -20,6 +20,18 @@
|
|||
#include "System.h"
|
||||
#include "IniInterface.h"
|
||||
|
||||
static int _calcEnumLength( const wxChar* const* enumArray )
|
||||
{
|
||||
int cnt = 0;
|
||||
while( *enumArray != NULL )
|
||||
{
|
||||
enumArray++;
|
||||
cnt++;
|
||||
}
|
||||
|
||||
return cnt;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
IniInterface::IniInterface( wxConfigBase& config ) :
|
||||
|
@ -149,6 +161,14 @@ void IniLoader::Entry( const wxString& var, wxRect& value, const wxRect& defvalu
|
|||
|
||||
void IniLoader::_EnumEntry( const wxString& var, int& value, const wxChar* const* enumArray, const int defvalue )
|
||||
{
|
||||
// Confirm default value sanity...
|
||||
|
||||
const int cnt = _calcEnumLength( enumArray );
|
||||
if( defvalue >= cnt )
|
||||
throw Exception::IndexBoundsFault( L"IniLoader Enumeration DefaultValue", defvalue, cnt );
|
||||
|
||||
// Sanity confirmed, proceed with craziness!
|
||||
|
||||
wxString retval;
|
||||
m_Config.Read( var, &retval, enumArray[defvalue] );
|
||||
|
||||
|
@ -238,6 +258,22 @@ void IniSaver::Entry( const wxString& var, wxRect& value, const wxRect& defvalue
|
|||
|
||||
void IniSaver::_EnumEntry( const wxString& var, int& value, const wxChar* const* enumArray, const int defvalue )
|
||||
{
|
||||
const int cnt = _calcEnumLength( enumArray );
|
||||
if( value >= cnt )
|
||||
{
|
||||
Console::Notice( wxsFormat(
|
||||
L"Settings Warning: An illegal enumerated index was detected when saving '%s'\n"
|
||||
L"\tIllegal Value: %d\n"
|
||||
L"\tUsing Default: %d (%s)\n",
|
||||
var.c_str(), value, defvalue, enumArray[defvalue] )
|
||||
);
|
||||
|
||||
// Cause a debug assertion, since this is a fully recoverable error.
|
||||
wxASSERT( value < cnt );
|
||||
|
||||
value = defvalue;
|
||||
}
|
||||
|
||||
m_Config.Write( var, enumArray[value] );
|
||||
}
|
||||
|
||||
|
|
|
@ -37,49 +37,66 @@ wxMenu* MainEmuFrame::MakeStatesSubMenu( int baseid ) const
|
|||
{
|
||||
wxMenu* mnuSubstates = new wxMenu();
|
||||
|
||||
mnuSubstates->Append( baseid+1, _("Slot 0"), wxEmptyString, wxITEM_NORMAL );
|
||||
mnuSubstates->Append( baseid+2, _("Slot 1"), wxEmptyString, wxITEM_NORMAL );
|
||||
mnuSubstates->Append( baseid+3, _("Slot 2"), wxEmptyString, wxITEM_NORMAL );
|
||||
mnuSubstates->Append( baseid+4, _("Slot 3"), wxEmptyString, wxITEM_NORMAL );
|
||||
mnuSubstates->Append( baseid+5, _("Slot 4"), wxEmptyString, wxITEM_NORMAL );
|
||||
mnuSubstates->Append( baseid, _("Other..."), wxEmptyString, wxITEM_NORMAL );
|
||||
mnuSubstates->Append( baseid+1, _("Slot 0") );
|
||||
mnuSubstates->Append( baseid+2, _("Slot 1") );
|
||||
mnuSubstates->Append( baseid+3, _("Slot 2") );
|
||||
mnuSubstates->Append( baseid+4, _("Slot 3") );
|
||||
mnuSubstates->Append( baseid+5, _("Slot 4") );
|
||||
mnuSubstates->Append( baseid, _("Other...") );
|
||||
return mnuSubstates;
|
||||
}
|
||||
|
||||
/*struct StringListNode
|
||||
{
|
||||
wxString* item;
|
||||
StringListNode* next;
|
||||
};*/
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
wxMenu* MainEmuFrame::MakeIsoMenu()
|
||||
{
|
||||
wxMenu* mnuIso = new wxMenu();
|
||||
|
||||
mnuIso->Append( MenuId_IsoBrowse, _("Browse..."), _("Select an Iso image from your hard drive.") );
|
||||
|
||||
if( g_RecentIsoList != NULL )
|
||||
{
|
||||
g_RecentIsoList->UseMenu( mnuIso );
|
||||
g_RecentIsoList->AddFilesToMenu( mnuIso );
|
||||
}
|
||||
return mnuIso;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
wxMenu* MainEmuFrame::MakeCdvdMenu()
|
||||
{
|
||||
wxMenu* mnuCdvd = new wxMenu();
|
||||
mnuCdvd->Append( MenuId_Src_Iso, _("Iso image"), wxEmptyString, wxITEM_RADIO );
|
||||
mnuCdvd->Append( MenuId_Src_Cdvd, _("Cdvd plugin"), wxEmptyString, wxITEM_RADIO );
|
||||
mnuCdvd->Append( MenuId_Src_Iso, _("Iso"), wxEmptyString, wxITEM_RADIO );
|
||||
mnuCdvd->Append( MenuId_Src_Plugin, _("Plugin"), wxEmptyString, wxITEM_RADIO );
|
||||
mnuCdvd->Append( MenuId_Src_NoDisc, _("No disc"), wxEmptyString, wxITEM_RADIO );
|
||||
|
||||
mnuCdvd->AppendSeparator();
|
||||
mnuCdvd->Append( MenuId_IsoBrowse, _("Iso Browser..."), _("Select the Iso source image.") );
|
||||
mnuCdvd->Append( MenuId_Config_CDVD, _("Plugin settings..."),
|
||||
_("Opens the CDVD plugin configuration dialog") );
|
||||
|
||||
return mnuCdvd;
|
||||
}
|
||||
|
||||
void MainEmuFrame::UpdateIsoSrcSelection()
|
||||
{
|
||||
MenuIdentifiers cdsrc = MenuId_Src_Iso;
|
||||
|
||||
switch( g_Conf->CdvdSource )
|
||||
{
|
||||
case CDVDsrc_Iso: cdsrc = MenuId_Src_Iso; break;
|
||||
case CDVDsrc_Plugin: cdsrc = MenuId_Src_Plugin; break;
|
||||
case CDVDsrc_NoDisc: cdsrc = MenuId_Src_NoDisc; break;
|
||||
|
||||
jNO_DEFAULT
|
||||
}
|
||||
|
||||
GetMenuBar()->Check( cdsrc, true );
|
||||
m_statusbar.SetStatusText( CDVD_SourceLabels[g_Conf->CdvdSource], 1 );
|
||||
}
|
||||
|
||||
void MainEmuFrame::UpdateIsoSrcFile()
|
||||
{
|
||||
UpdateIsoSrcSelection();
|
||||
const bool exists = wxFile::Exists( g_Conf->CurrentIso );
|
||||
if( !exists )
|
||||
g_Conf->CurrentIso.Clear();
|
||||
|
||||
wxString label;
|
||||
label.Printf( L"%s -> %s", _("Iso"),
|
||||
exists ? g_Conf->CurrentIso.c_str() : _("Empty")
|
||||
);
|
||||
GetMenuBar()->SetLabel( MenuId_Src_Iso, label );
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Video / Audio / Pad "Extensible" Menus
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
void MainEmuFrame::PopulateVideoMenu()
|
||||
{
|
||||
m_menuVideo.Append( MenuId_Video_Basics, _("Basic Settings..."), wxEmptyString, wxITEM_CHECK );
|
||||
|
@ -164,12 +181,19 @@ void MainEmuFrame::ConnectMenus()
|
|||
|
||||
ConnectMenu( MenuId_Config_Settings, Menu_ConfigSettings_Click );
|
||||
ConnectMenu( MenuId_Config_BIOS, Menu_SelectBios_Click );
|
||||
ConnectMenu( MenuId_IsoBrowse, Menu_RunIso_Click );
|
||||
ConnectMenu( MenuId_RunWithoutDisc, Menu_RunWithoutDisc_Click );
|
||||
|
||||
Connect( wxID_FILE1, wxID_FILE1+20, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MainEmuFrame::Menu_IsoRecent_Click) );
|
||||
Connect( wxID_FILE1, wxID_FILE1+20, wxEVT_COMMAND_MENU_SELECTED,
|
||||
wxCommandEventHandler(MainEmuFrame::Menu_IsoRecent_Click) );
|
||||
|
||||
Connect( MenuId_Config_GS, MenuId_Config_GS+PluginId_Count, wxEVT_COMMAND_MENU_SELECTED,
|
||||
wxCommandEventHandler(MainEmuFrame::Menu_ConfigPlugin_Click) );
|
||||
|
||||
Connect( MenuId_Src_Iso, MenuId_Src_Iso+3, wxEVT_COMMAND_MENU_SELECTED,
|
||||
wxCommandEventHandler(MainEmuFrame::Menu_CdvdSource_Click) );
|
||||
|
||||
ConnectMenu( MenuId_Boot_CDVD, Menu_BootCdvd_Click );
|
||||
ConnectMenu( MenuId_Boot_ELF, Menu_OpenELF_Click );
|
||||
ConnectMenu( MenuId_IsoBrowse, Menu_IsoBrowse_Click );
|
||||
ConnectMenu( MenuId_Exit, Menu_Exit_Click );
|
||||
|
||||
ConnectMenu( MenuId_Emu_Pause, Menu_EmuPause_Click );
|
||||
|
@ -210,6 +234,8 @@ void MainEmuFrame::InitLogBoxPosition( AppConfig::ConsoleLogOptions& conf )
|
|||
MainEmuFrame::MainEmuFrame(wxWindow* parent, const wxString& title):
|
||||
wxFrame(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE & ~(wxMAXIMIZE_BOX | wxRESIZE_BORDER) ),
|
||||
|
||||
m_RecentIsoList( new wxFileHistory( g_Conf->RecentFileCount ) ),
|
||||
|
||||
m_statusbar( *CreateStatusBar(2, 0) ),
|
||||
m_background( this, wxID_ANY, wxGetApp().GetLogoBitmap() ),
|
||||
|
||||
|
@ -257,8 +283,8 @@ MainEmuFrame::MainEmuFrame(wxWindow* parent, const wxString& title):
|
|||
|
||||
int m_statusbar_widths[] = { (int)(backsize.GetWidth()*0.73), (int)(backsize.GetWidth()*0.25) };
|
||||
m_statusbar.SetStatusWidths(2, m_statusbar_widths);
|
||||
m_statusbar.SetStatusText( _T("The Status is Good!"), 0);
|
||||
m_statusbar.SetStatusText( _T("Good Status"), 1);
|
||||
m_statusbar.SetStatusText( L"The Status is Good!", 0);
|
||||
m_statusbar.SetStatusText( wxEmptyString, 1);
|
||||
|
||||
wxBoxSizer& joe( *new wxBoxSizer( wxVERTICAL ) );
|
||||
joe.Add( &m_background );
|
||||
|
@ -279,16 +305,18 @@ MainEmuFrame::MainEmuFrame(wxWindow* parent, const wxString& title):
|
|||
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
m_menuBoot.Append(MenuId_Boot_Iso, _("Run ISO"),
|
||||
MakeIsoMenu() );
|
||||
|
||||
m_menuBoot.AppendSeparator();
|
||||
m_menuBoot.Append(MenuId_RunWithoutDisc,_("Boot without Disc"),
|
||||
m_menuBoot.Append(MenuId_Boot_CDVD, _("Run CDVD"),
|
||||
_("Use this to access the PS2 system configuration menu"));
|
||||
|
||||
m_menuBoot.Append(MenuId_Boot_ELF, _("Run ELF File..."),
|
||||
_("For running raw binaries"));
|
||||
|
||||
wxMenu* recentRunMenu = new wxMenu();
|
||||
m_menuBoot.Append(MenuId_Boot_Recent, _("Run Recent"), recentRunMenu);
|
||||
|
||||
m_RecentIsoList->UseMenu( recentRunMenu );
|
||||
m_RecentIsoList->AddFilesToMenu( recentRunMenu );
|
||||
|
||||
m_menuBoot.AppendSeparator();
|
||||
m_menuBoot.Append(MenuId_Cdvd_Source, _("Select CDVD source"), MakeCdvdMenu() );
|
||||
m_menuBoot.Append(MenuId_SkipBiosToggle,_("BIOS Skip Hack"),
|
||||
|
@ -362,11 +390,42 @@ MainEmuFrame::MainEmuFrame(wxWindow* parent, const wxString& title):
|
|||
m_menuDebug.Append(MenuId_Debug_Logging, _("Logging..."), wxEmptyString);
|
||||
|
||||
m_menuDebug.AppendSeparator();
|
||||
m_menuDebug.Append(MenuId_Debug_Usermode, _("Change Usermode..."), _(" Advanced feature for managing multiple concurrent PCSX2 environments."));
|
||||
m_menuDebug.Append(MenuId_Debug_Usermode, _("Change Usermode..."),
|
||||
_(" Advanced feature for managing multiple concurrent PCSX2 environments."));
|
||||
|
||||
m_MenuItem_Console.Check( g_Conf->ProgLogBox.Visible );
|
||||
|
||||
ConnectMenus();
|
||||
Connect( wxEVT_MOVE, wxMoveEventHandler (MainEmuFrame::OnMoveAround) );
|
||||
Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler(MainEmuFrame::OnCloseWindow) );
|
||||
|
||||
UpdateIsoSrcFile();
|
||||
}
|
||||
|
||||
MainEmuFrame::~MainEmuFrame()
|
||||
{
|
||||
if( m_RecentIsoList != NULL )
|
||||
{
|
||||
m_RecentIsoList->Save( *wxConfigBase::Get( false ) );
|
||||
safe_delete( m_RecentIsoList );
|
||||
}
|
||||
}
|
||||
|
||||
void MainEmuFrame::ApplySettings()
|
||||
{
|
||||
// Always perform delete and reload of the Recent Iso List. This handles cases where
|
||||
// the recent file count has been changed, and it's a helluva lot easier than trying
|
||||
// to make a clone copy of this complex object. ;)
|
||||
|
||||
wxConfigBase* cfg = wxConfigBase::Get( false );
|
||||
wxASSERT( cfg != NULL );
|
||||
|
||||
if( m_RecentIsoList != NULL )
|
||||
m_RecentIsoList->Save( *cfg );
|
||||
safe_delete( m_RecentIsoList );
|
||||
m_RecentIsoList = new wxFileHistory( g_Conf->RecentFileCount );
|
||||
m_RecentIsoList->Load( *cfg );
|
||||
|
||||
UpdateIsoSrcFile();
|
||||
cfg->Flush();
|
||||
}
|
||||
|
|
|
@ -26,13 +26,12 @@
|
|||
|
||||
class MainEmuFrame: public wxFrame
|
||||
{
|
||||
public:
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// MainEmuFrame Protected Variables
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
protected:
|
||||
wxFileHistory* m_RecentIsoList;
|
||||
wxStatusBar& m_statusbar;
|
||||
wxStaticBitmap m_background;
|
||||
|
||||
|
@ -59,9 +58,14 @@ protected:
|
|||
|
||||
public:
|
||||
MainEmuFrame(wxWindow* parent, const wxString& title);
|
||||
virtual ~MainEmuFrame();
|
||||
|
||||
void OnLogBoxHidden();
|
||||
|
||||
bool IsPaused() const { return GetMenuBar()->IsChecked( MenuId_Emu_Pause ); }
|
||||
void UpdateIsoSrcFile();
|
||||
void UpdateIsoSrcSelection();
|
||||
void ApplySettings();
|
||||
|
||||
protected:
|
||||
void InitLogBoxPosition( AppConfig::ConsoleLogOptions& conf );
|
||||
|
@ -73,11 +77,12 @@ protected:
|
|||
void Menu_SelectBios_Click(wxCommandEvent &event);
|
||||
|
||||
void Menu_RunIso_Click(wxCommandEvent &event);
|
||||
void Menu_RunWithoutDisc_Click(wxCommandEvent &event);
|
||||
void Menu_IsoBrowse_Click(wxCommandEvent &event);
|
||||
void Menu_IsoRecent_Click(wxCommandEvent &event);
|
||||
|
||||
void Menu_BootCdvd_Click(wxCommandEvent &event);
|
||||
void Menu_OpenELF_Click(wxCommandEvent &event);
|
||||
void Menu_CdvdSource_Click(wxCommandEvent &event);
|
||||
void Menu_LoadStateOther_Click(wxCommandEvent &event);
|
||||
void Menu_SaveStateOther_Click(wxCommandEvent &event);
|
||||
void Menu_Exit_Click(wxCommandEvent &event);
|
||||
|
@ -86,6 +91,8 @@ protected:
|
|||
void Menu_EmuClose_Click(wxCommandEvent &event);
|
||||
void Menu_EmuReset_Click(wxCommandEvent &event);
|
||||
|
||||
void Menu_ConfigPlugin_Click(wxCommandEvent &event);
|
||||
|
||||
void Menu_Debug_Open_Click(wxCommandEvent &event);
|
||||
void Menu_Debug_MemoryDump_Click(wxCommandEvent &event);
|
||||
void Menu_Debug_Logging_Click(wxCommandEvent &event);
|
||||
|
@ -100,12 +107,13 @@ protected:
|
|||
wxMenu* MakeStatesSubMenu( int baseid ) const;
|
||||
wxMenu* MakeStatesMenu();
|
||||
wxMenu* MakeLanguagesMenu() const;
|
||||
wxMenu* MakeIsoMenu();
|
||||
wxMenu* MakeCdvdMenu();
|
||||
|
||||
void PopulateVideoMenu();
|
||||
void PopulateAudioMenu();
|
||||
void PopulatePadMenu();
|
||||
void ConnectMenus();
|
||||
|
||||
friend class Pcsx2App;
|
||||
};
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ void MainEmuFrame::Menu_ConfigSettings_Click(wxCommandEvent &event)
|
|||
{
|
||||
if( Dialogs::ConfigurationDialog( this ).ShowModal() )
|
||||
{
|
||||
g_Conf->Save();
|
||||
wxGetApp().SaveSettings();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -40,18 +40,72 @@ void MainEmuFrame::Menu_SelectBios_Click(wxCommandEvent &event)
|
|||
{
|
||||
if( Dialogs::BiosSelectorDialog( this ).ShowModal() )
|
||||
{
|
||||
g_Conf->Save();
|
||||
wxGetApp().SaveSettings();
|
||||
}
|
||||
}
|
||||
|
||||
static const wxChar* isoFilterTypes =
|
||||
L"Iso Image (*.iso)|*.iso|Bin Image|(*.bin)|MDF Image (*.mdf)|*.mdf|Nero Image (*.nrg)|*.nrg";
|
||||
void MainEmuFrame::Menu_CdvdSource_Click( wxCommandEvent &event )
|
||||
{
|
||||
switch( event.GetId() )
|
||||
{
|
||||
case MenuId_Src_Iso: g_Conf->CdvdSource = CDVDsrc_Iso; break;
|
||||
case MenuId_Src_Plugin: g_Conf->CdvdSource = CDVDsrc_Plugin; break;
|
||||
case MenuId_Src_NoDisc: g_Conf->CdvdSource = CDVDsrc_NoDisc; break;
|
||||
|
||||
jNO_DEFAULT
|
||||
}
|
||||
UpdateIsoSrcSelection();
|
||||
wxGetApp().SaveSettings();
|
||||
}
|
||||
|
||||
void MainEmuFrame::Menu_BootCdvd_Click( wxCommandEvent &event )
|
||||
{
|
||||
if( EmulationInProgress() )
|
||||
{
|
||||
SysSuspend();
|
||||
|
||||
// [TODO] : Add one of 'dems checkboxes that read like "[x] don't show this stupid shit again, kthx."
|
||||
bool result = Msgbox::OkCancel( pxE( ".Popup:ConfirmEmuReset", L"This will reset the emulator and your current emulation session will be lost. Are you sure?") );
|
||||
|
||||
if( !result )
|
||||
{
|
||||
SysResume();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
SysEndExecution();
|
||||
InitPlugins();
|
||||
|
||||
CDVDsys_SetFile( CDVDsrc_Iso, g_Conf->CurrentIso );
|
||||
SysExecute( new AppEmuThread(), g_Conf->CdvdSource );
|
||||
}
|
||||
|
||||
extern const wxChar* isoFilterTypes;
|
||||
|
||||
void MainEmuFrame::Menu_IsoBrowse_Click( wxCommandEvent &event )
|
||||
{
|
||||
SysSuspend();
|
||||
|
||||
wxFileDialog ctrl( this, _("Select CDVD source iso..."), g_Conf->Folders.RunIso.ToString(), wxEmptyString,
|
||||
isoFilterTypes, wxFD_OPEN | wxFD_FILE_MUST_EXIST );
|
||||
|
||||
if( ctrl.ShowModal() != wxID_CANCEL )
|
||||
{
|
||||
g_Conf->Folders.RunIso = wxFileName( ctrl.GetPath() ).GetPath();
|
||||
g_Conf->CurrentIso = ctrl.GetPath();
|
||||
wxGetApp().SaveSettings();
|
||||
|
||||
UpdateIsoSrcFile();
|
||||
}
|
||||
|
||||
SysResume();
|
||||
}
|
||||
|
||||
void MainEmuFrame::Menu_RunIso_Click( wxCommandEvent &event )
|
||||
{
|
||||
SysSuspend();
|
||||
|
||||
Console::Status( L"Default Folder: " + g_Conf->Folders.RunIso.ToString() );
|
||||
wxFileDialog ctrl( this, _("Run PS2 Iso..."), g_Conf->Folders.RunIso.ToString(), wxEmptyString,
|
||||
isoFilterTypes, wxFD_OPEN | wxFD_FILE_MUST_EXIST );
|
||||
|
||||
|
@ -63,14 +117,17 @@ void MainEmuFrame::Menu_RunIso_Click(wxCommandEvent &event)
|
|||
|
||||
SysEndExecution();
|
||||
|
||||
g_Conf->Folders.RunIso = ctrl.GetPath();
|
||||
g_Conf->Save();
|
||||
g_Conf->Folders.RunIso = wxFileName( ctrl.GetPath() ).GetPath();
|
||||
g_Conf->CurrentIso = ctrl.GetPath();
|
||||
wxGetApp().SaveSettings();
|
||||
|
||||
UpdateIsoSrcFile();
|
||||
|
||||
wxString elf_file;
|
||||
if( EmuConfig.SkipBiosSplash )
|
||||
{
|
||||
// Fetch the ELF filename and CD type from the CDVD provider.
|
||||
wxString ename( ctrl.GetFilename() );
|
||||
wxString ename( g_Conf->CurrentIso );
|
||||
int result = GetPS2ElfName( ename );
|
||||
switch( result )
|
||||
{
|
||||
|
@ -86,6 +143,8 @@ void MainEmuFrame::Menu_RunIso_Click(wxCommandEvent &event)
|
|||
// PS2 game. Valid!
|
||||
elf_file = ename;
|
||||
break;
|
||||
|
||||
jNO_DEFAULT
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -93,7 +152,7 @@ void MainEmuFrame::Menu_RunIso_Click(wxCommandEvent &event)
|
|||
SysExecute( new AppEmuThread( elf_file ), CDVDsrc_Iso );
|
||||
}
|
||||
|
||||
void MainEmuFrame::Menu_RunWithoutDisc_Click(wxCommandEvent &event)
|
||||
/*void MainEmuFrame::Menu_RunWithoutDisc_Click(wxCommandEvent &event)
|
||||
{
|
||||
if( EmulationInProgress() )
|
||||
{
|
||||
|
@ -112,7 +171,7 @@ void MainEmuFrame::Menu_RunWithoutDisc_Click(wxCommandEvent &event)
|
|||
SysEndExecution();
|
||||
InitPlugins();
|
||||
SysExecute( new AppEmuThread(), CDVDsrc_NoDisc );
|
||||
}
|
||||
}*/
|
||||
|
||||
void MainEmuFrame::Menu_IsoRecent_Click(wxCommandEvent &event)
|
||||
{
|
||||
|
@ -163,6 +222,16 @@ void MainEmuFrame::Menu_EmuReset_Click(wxCommandEvent &event)
|
|||
SysExecute( new AppEmuThread() );
|
||||
}
|
||||
|
||||
void MainEmuFrame::Menu_ConfigPlugin_Click(wxCommandEvent &event)
|
||||
{
|
||||
typedef void (CALLBACK* PluginConfigureFnptr)();
|
||||
const PluginsEnum_t pid = (PluginsEnum_t)( event.GetId() - MenuId_Config_GS );
|
||||
|
||||
LoadPlugins();
|
||||
ScopedWindowDisable disabler( this );
|
||||
g_plugins->Configure( pid );
|
||||
}
|
||||
|
||||
void MainEmuFrame::Menu_Debug_Open_Click(wxCommandEvent &event)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "ps2/BiosTools.h"
|
||||
|
||||
#include <wx/dir.h>
|
||||
#include <wx/listbox.h>
|
||||
|
||||
using namespace wxHelpers;
|
||||
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
#include <wx/image.h>
|
||||
#include <wx/statline.h>
|
||||
#include <wx/bookctrl.h>
|
||||
#include <wx/listbox.h>
|
||||
|
||||
#include <list>
|
||||
|
||||
|
@ -36,6 +35,8 @@
|
|||
#include "Utilities/SafeArray.h"
|
||||
#include "Utilities/Threading.h"
|
||||
|
||||
class wxListBox;
|
||||
|
||||
// Annoyances of C++ forward declarations. Having to type in this red tape mess
|
||||
// is keeping me form eating a good sandwich right now... >_<
|
||||
namespace Panels
|
||||
|
|
|
@ -18,8 +18,10 @@
|
|||
|
||||
#include "PrecompiledHeader.h"
|
||||
#include "ConfigurationPanels.h"
|
||||
#include "ps2/BiosTools.h"
|
||||
|
||||
#include "App.h"
|
||||
|
||||
#include "ps2/BiosTools.h"
|
||||
#include <wx/stdpaths.h>
|
||||
|
||||
using namespace wxHelpers;
|
||||
|
@ -81,9 +83,9 @@ bool Panels::StaticApplyState::ApplyPage( int pageid, bool saveOnSuccess )
|
|||
|
||||
*g_Conf = confcopy;
|
||||
UseAdminMode = g_ApplyState.UseAdminMode;
|
||||
g_Conf->Apply();
|
||||
wxGetApp().ApplySettings();
|
||||
if( saveOnSuccess )
|
||||
g_Conf->Save();
|
||||
wxGetApp().SaveSettings();
|
||||
}
|
||||
catch( Exception::CannotApplySettings& ex )
|
||||
{
|
||||
|
|
|
@ -368,9 +368,8 @@ void Panels::PluginSelectorPanel::OnConfigure_Clicked( wxCommandEvent& evt )
|
|||
wxDynamicLibrary dynlib( (*m_FileList)[(int)m_ComponentBoxes.Get(pid).GetClientData(sel)] );
|
||||
if( PluginConfigureFnptr configfunc = (PluginConfigureFnptr)dynlib.GetSymbol( tbl_PluginInfo[pid].GetShortname() + L"configure" ) )
|
||||
{
|
||||
wxGetTopLevelParent( this )->Disable();
|
||||
ScopedWindowDisable disabler( wxGetTopLevelParent( this ) );
|
||||
configfunc();
|
||||
wxGetTopLevelParent( this )->Enable();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -39,7 +39,6 @@ DEFINE_EVENT_TYPE( pxEVT_SemaphorePing )
|
|||
|
||||
bool UseAdminMode = false;
|
||||
AppConfig* g_Conf = NULL;
|
||||
wxFileHistory* g_RecentIsoList = NULL;
|
||||
|
||||
namespace Exception
|
||||
{
|
||||
|
@ -180,7 +179,7 @@ void Pcsx2App::ReadUserModeSettings()
|
|||
IniSaver saver( *conf_usermode );
|
||||
g_Conf->LoadSaveUserMode( saver, groupname );
|
||||
AppConfig_ReloadGlobalSettings( true );
|
||||
g_Conf->Save();
|
||||
wxGetApp().SaveSettings();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -205,7 +204,7 @@ void Pcsx2App::ReadUserModeSettings()
|
|||
IniSaver saver( *conf_usermode );
|
||||
g_Conf->LoadSaveUserMode( saver, groupname );
|
||||
AppConfig_ReloadGlobalSettings( true );
|
||||
g_Conf->Save();
|
||||
wxGetApp().SaveSettings();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -311,6 +310,8 @@ bool Pcsx2App::OnInit()
|
|||
return false;
|
||||
}
|
||||
|
||||
ApplySettings();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -354,7 +355,7 @@ void Pcsx2App::OnMessageBox( pxMessageBoxEvent& evt )
|
|||
|
||||
void Pcsx2App::CleanupMess()
|
||||
{
|
||||
safe_delete( g_RecentIsoList );
|
||||
SysReset();
|
||||
safe_delete( m_Bitmap_Logo );
|
||||
safe_delete( g_Conf );
|
||||
}
|
||||
|
@ -392,17 +393,20 @@ bool Pcsx2App::PrepForExit()
|
|||
int Pcsx2App::OnExit()
|
||||
{
|
||||
m_ProgramLogBox = NULL;
|
||||
m_MainFrame = NULL;
|
||||
|
||||
MemoryCard::Shutdown();
|
||||
|
||||
if( g_Conf != NULL )
|
||||
g_Conf->Save();
|
||||
SaveSettings();
|
||||
|
||||
CleanupMess();
|
||||
return wxApp::OnExit();
|
||||
}
|
||||
|
||||
Pcsx2App::Pcsx2App() :
|
||||
m_ProgramLogBox( NULL )
|
||||
m_MainFrame( NULL )
|
||||
, m_ProgramLogBox( NULL )
|
||||
, m_ConfigImages( 32, 32 )
|
||||
, m_ConfigImagesAreLoaded( false )
|
||||
, m_ToolbarImages( NULL )
|
||||
|
@ -417,3 +421,33 @@ Pcsx2App::~Pcsx2App()
|
|||
}
|
||||
|
||||
|
||||
void Pcsx2App::ApplySettings()
|
||||
{
|
||||
g_Conf->Apply();
|
||||
if( m_MainFrame != NULL )
|
||||
m_MainFrame->ApplySettings();
|
||||
}
|
||||
|
||||
void Pcsx2App::LoadSettings()
|
||||
{
|
||||
wxConfigBase* conf = wxConfigBase::Get( false );
|
||||
if( NULL == conf ) return;
|
||||
|
||||
IniLoader loader( *conf );
|
||||
g_Conf->LoadSave( loader );
|
||||
|
||||
if( m_MainFrame != NULL )
|
||||
m_MainFrame->m_RecentIsoList->Load( *conf );
|
||||
}
|
||||
|
||||
void Pcsx2App::SaveSettings()
|
||||
{
|
||||
wxConfigBase* conf = wxConfigBase::Get( false );
|
||||
if( NULL == conf ) return;
|
||||
|
||||
IniSaver saver( *conf );
|
||||
g_Conf->LoadSave( saver );
|
||||
|
||||
if( m_MainFrame != NULL )
|
||||
m_MainFrame->m_RecentIsoList->Save( *conf );
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ void CoreEmuThread::CpuInitializeMess()
|
|||
GetPluginManager().Open();
|
||||
cpuReset();
|
||||
SysClearExecutionCache();
|
||||
GetPluginManager().Open();
|
||||
|
||||
if( GSsetGameCRC != NULL )
|
||||
GSsetGameCRC( ElfCRC, 0 );
|
||||
|
@ -100,7 +101,7 @@ sptr CoreEmuThread::ExecuteTask()
|
|||
|
||||
while( m_ExecMode != ExecMode_Running )
|
||||
{
|
||||
m_ResumeEvent.Wait();
|
||||
m_ResumeEvent.WaitGui();
|
||||
}
|
||||
|
||||
CpuInitializeMess();
|
||||
|
@ -134,7 +135,7 @@ void CoreEmuThread::StateCheck()
|
|||
|
||||
case ExecMode_Suspended:
|
||||
while( m_ExecMode == ExecMode_Suspended )
|
||||
m_ResumeEvent.Wait();
|
||||
m_ResumeEvent.WaitGui();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -185,7 +186,7 @@ void CoreEmuThread::Resume()
|
|||
if( m_resetRecompilers || m_resetProfilers )
|
||||
{
|
||||
locker.Unlock(); // no deadlocks please, thanks. :)
|
||||
m_SuspendEvent.Wait();
|
||||
m_SuspendEvent.WaitGui();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -235,7 +236,7 @@ void CoreEmuThread::Suspend( bool isBlocking )
|
|||
DevAssert( m_ExecMode == ExecMode_Suspending, "ExecMode should be nothing other than Suspended..." );
|
||||
}
|
||||
|
||||
m_SuspendEvent.Wait();
|
||||
m_SuspendEvent.WaitGui();
|
||||
}
|
||||
|
||||
// Applies a full suite of new settings, which will automatically facilitate the necessary
|
||||
|
|
|
@ -1764,10 +1764,6 @@
|
|||
RelativePath="..\..\CDVD\CDVDisoReader.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\CDVD\CDVDlib.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\CDVD\IsoFileTools.cpp"
|
||||
>
|
||||
|
|
|
@ -740,7 +740,7 @@ void recClear(u32 addr, u32 size)
|
|||
if (pexblock->startpc >= addr && pexblock->startpc < addr + size * 4
|
||||
|| pexblock->startpc < addr && blockend > addr) {
|
||||
Console::Error( "Impossible block clearing failure" );
|
||||
jASSUME(0);
|
||||
wxASSERT_MSG( false, L"Impossible block clearing failure" );
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue