* Added /gui/AppRes.cpp : contains resource management code that used to be in /gui/App.cpp.
 * Redid disk/linux console logging to be both thread safe and crash-safe.
 * Cleaned up plugin init/open exception handlers
 * Was forced to implement a manual version of wxEventLoop because of a critical design flaw in wxWidgets' message loop exception handler.


git-svn-id: http://pcsx2.googlecode.com/svn/branches/wxgui@1727 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2009-09-02 11:22:16 +00:00
parent 600f7b2207
commit f7a44a7af2
17 changed files with 826 additions and 636 deletions

View File

@ -263,8 +263,7 @@ static void DetectDiskType()
// //
void CDVDsys_ChangeSource( CDVD_SourceType type ) void CDVDsys_ChangeSource( CDVD_SourceType type )
{ {
if( g_plugins != NULL ) GetPluginManager().Close( PluginId_CDVD );
g_plugins->Close( PluginId_CDVD );
switch( type ) switch( type )
{ {

View File

@ -19,6 +19,7 @@
#pragma once #pragma once
extern FILE *emuLog; extern FILE *emuLog;
extern wxString emuLogName;
extern char* disVU0MicroUF(u32 code, u32 pc); extern char* disVU0MicroUF(u32 code, u32 pc);
extern char* disVU0MicroLF(u32 code, u32 pc); extern char* disVU0MicroLF(u32 code, u32 pc);

View File

@ -1,411 +1,412 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file> <CodeBlocks_project_file>
<FileVersion major="1" minor="6" /> <FileVersion major="1" minor="6" />
<Project> <Project>
<Option title="pcsx2" /> <Option title="pcsx2" />
<Option platforms="Windows;Unix;" /> <Option platforms="Windows;Unix;" />
<Option pch_mode="2" /> <Option pch_mode="2" />
<Option compiler="gcc" /> <Option compiler="gcc" />
<Build> <Build>
<Target title="Debug"> <Target title="Debug">
<Option platforms="Windows;Unix;" /> <Option platforms="Windows;Unix;" />
<Option output="$(SvnRootDir)/bin/pcsx2-dbg" prefix_auto="1" extension_auto="1" /> <Option output="$(SvnRootDir)/bin/pcsx2-dbg" prefix_auto="1" extension_auto="1" />
<Option working_dir="$(SvnRootDir)/bin/" /> <Option working_dir="$(SvnRootDir)/bin/" />
<Option object_output="./.objs/debug" /> <Option object_output="./.objs/debug" />
<Option type="0" /> <Option type="0" />
<Option compiler="gcc" /> <Option compiler="gcc" />
<Compiler> <Compiler>
<Add option="-g" /> <Add option="-g" />
<Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=yes --cflags`" /> <Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=yes --cflags`" />
<Add option="-DPCSX2_DEVBUILD" /> <Add option="-DPCSX2_DEVBUILD" />
<Add option="-DPCSX2_DEBUG" /> <Add option="-DPCSX2_DEBUG" />
</Compiler> </Compiler>
<ResourceCompiler> <ResourceCompiler>
<Add directory="$(ProjectRootDir)/gui" /> <Add directory="$(ProjectRootDir)/gui" />
</ResourceCompiler> </ResourceCompiler>
<Linker> <Linker>
<Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=yes --libs`" /> <Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=yes --libs`" />
<Add library="$(SvnRootDir)/deps/debug/zlib.a" /> <Add library="$(SvnRootDir)/deps/debug/zlib.a" />
<Add library="$(SvnRootDir)/deps/debug/libx86emitter.a" /> <Add library="$(SvnRootDir)/deps/debug/libx86emitter.a" />
<Add library="$(SvnRootDir)/deps/debug/libUtilities.a" /> <Add library="$(SvnRootDir)/deps/debug/libUtilities.a" />
</Linker> </Linker>
</Target> </Target>
<Target title="Devel"> <Target title="Devel">
<Option platforms="Windows;Unix;" /> <Option platforms="Windows;Unix;" />
<Option output="$(SvnRootDir)/bin/pcsx2-dev" prefix_auto="1" extension_auto="1" /> <Option output="$(SvnRootDir)/bin/pcsx2-dev" prefix_auto="1" extension_auto="1" />
<Option working_dir="$(SvnRootDir)/bin/" /> <Option working_dir="$(SvnRootDir)/bin/" />
<Option object_output="./.objs/devel" /> <Option object_output="./.objs/devel" />
<Option type="0" /> <Option type="0" />
<Option compiler="gcc" /> <Option compiler="gcc" />
<Compiler> <Compiler>
<Add option="-O2" /> <Add option="-O2" />
<Add option="-W" /> <Add option="-W" />
<Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=yes --cflags`" /> <Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=yes --cflags`" />
<Add option="-DNDEBUG" /> <Add option="-DNDEBUG" />
<Add option="-DPCSX2_DEVBUILD" /> <Add option="-DPCSX2_DEVBUILD" />
</Compiler> </Compiler>
<ResourceCompiler> <ResourceCompiler>
<Add directory="$(ProjectRootDir)/gui" /> <Add directory="$(ProjectRootDir)/gui" />
</ResourceCompiler> </ResourceCompiler>
<Linker> <Linker>
<Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=yes --libs`" /> <Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=yes --libs`" />
<Add library="$(SvnRootDir)/deps/devel/zlib.a" /> <Add library="$(SvnRootDir)/deps/devel/zlib.a" />
<Add library="$(SvnRootDir)/deps/devel/libx86emitter.a" /> <Add library="$(SvnRootDir)/deps/devel/libx86emitter.a" />
<Add library="$(SvnRootDir)/deps/devel/libUtilities.a" /> <Add library="$(SvnRootDir)/deps/devel/libUtilities.a" />
</Linker> </Linker>
</Target> </Target>
<Target title="Release"> <Target title="Release">
<Option platforms="Windows;Unix;" /> <Option platforms="Windows;Unix;" />
<Option output="$(SvnRootDir)/bin/pcsx2" prefix_auto="1" extension_auto="1" /> <Option output="$(SvnRootDir)/bin/pcsx2" prefix_auto="1" extension_auto="1" />
<Option working_dir="$(SvnRootDir)/bin/" /> <Option working_dir="$(SvnRootDir)/bin/" />
<Option object_output="./.objs/release" /> <Option object_output="./.objs/release" />
<Option type="0" /> <Option type="0" />
<Option compiler="gcc" /> <Option compiler="gcc" />
<Compiler> <Compiler>
<Add option="-O2" /> <Add option="-O2" />
<Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=no --cflags`" /> <Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=no --cflags`" />
<Add option="-DNDEBUG" /> <Add option="-DNDEBUG" />
</Compiler> </Compiler>
<ResourceCompiler> <ResourceCompiler>
<Add directory="$(ProjectRootDir)/gui" /> <Add directory="$(ProjectRootDir)/gui" />
</ResourceCompiler> </ResourceCompiler>
<Linker> <Linker>
<Add option="-s" /> <Add option="-s" />
<Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=no --libs`" /> <Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=no --libs`" />
<Add library="$(SvnRootDir)/deps/release/zlib.a" /> <Add library="$(SvnRootDir)/deps/release/zlib.a" />
<Add library="$(SvnRootDir)/deps/release/libx86emitter.a" /> <Add library="$(SvnRootDir)/deps/release/libx86emitter.a" />
<Add library="$(SvnRootDir)/deps/release/libUtilities.a" /> <Add library="$(SvnRootDir)/deps/release/libUtilities.a" />
</Linker> </Linker>
</Target> </Target>
<Environment> <Environment>
<Variable name="SvnRootDir" value="../../" /> <Variable name="SvnRootDir" value="../../" />
<Variable name="ProjectRootDir" value='&quot;$(SvnRootDir)/pcsx2/&quot;' /> <Variable name="ProjectRootDir" value='&quot;$(SvnRootDir)/pcsx2/&quot;' />
<Variable name="CommonDir" value='&quot;$(SvnRootDir)/common/&quot;' /> <Variable name="CommonDir" value='&quot;$(SvnRootDir)/common/&quot;' />
</Environment> </Environment>
</Build> </Build>
<Compiler> <Compiler>
<Add option="-march=athlon" /> <Add option="-march=athlon" />
<Add option="-march=pentium4" /> <Add option="-march=pentium4" />
<Add option="-march=i686" /> <Add option="-march=i686" />
<Add option="-march=i586" /> <Add option="-march=i586" />
<Add option="-Wno-format" /> <Add option="-Wno-format" />
<Add option="-Wno-unused-parameter" /> <Add option="-Wno-unused-parameter" />
<Add option="-Wno-unused-value" /> <Add option="-Wno-unused-value" />
<Add option="-Wunused-variable" /> <Add option="-Wunused-variable" />
<Add option="-fno-guess-branch-probability" /> <Add option="-fno-guess-branch-probability" />
<Add option="-fno-dse" /> <Add option="-fno-dse" />
<Add option="-fno-tree-dse" /> <Add option="-fno-tree-dse" />
<Add option="-pipe -msse -msse2" /> <Add option="-pipe -msse -msse2" />
<Add option="-DWX_PRECOMP" /> <Add option="-DWX_PRECOMP" />
<Add directory="$(SvnRootDir)/common/include/" /> <Add directory="$(SvnRootDir)/common/include/" />
<Add directory="$(SvnRootDir)/3rdparty/" /> <Add directory="$(SvnRootDir)/3rdparty/" />
<Add directory="$(ProjectRootDir)" /> <Add directory="$(ProjectRootDir)" />
<Add directory="$(ProjectRootDir)/gui" /> <Add directory="$(ProjectRootDir)/gui" />
<Add directory="$(ProjectRootDir)/x86" /> <Add directory="$(ProjectRootDir)/x86" />
</Compiler> </Compiler>
<Linker> <Linker>
<Add option="-Xlinker -zmuldefs" /> <Add option="-Xlinker -zmuldefs" />
</Linker> </Linker>
<Unit filename="../../common/include/Pcsx2Config.h" /> <Unit filename="../../common/include/Pcsx2Config.h" />
<Unit filename="../../common/include/Pcsx2Defs.h" /> <Unit filename="../../common/include/Pcsx2Defs.h" />
<Unit filename="../../common/include/Pcsx2Types.h" /> <Unit filename="../../common/include/Pcsx2Types.h" />
<Unit filename="../../common/include/wx/folderdesc.txt" /> <Unit filename="../../common/include/wx/folderdesc.txt" />
<Unit filename="../../common/include/wx/scopedarray.h" /> <Unit filename="../../common/include/wx/scopedarray.h" />
<Unit filename="../../common/include/wx/scopedptr.h" /> <Unit filename="../../common/include/wx/scopedptr.h" />
<Unit filename="../CDVD/CDVD.cpp" /> <Unit filename="../CDVD/CDVD.cpp" />
<Unit filename="../CDVD/CDVD.h" /> <Unit filename="../CDVD/CDVD.h" />
<Unit filename="../CDVD/CDVD_internal.h" /> <Unit filename="../CDVD/CDVD_internal.h" />
<Unit filename="../CDVD/CDVDaccess.cpp" /> <Unit filename="../CDVD/CDVDaccess.cpp" />
<Unit filename="../CDVD/CDVDaccess.h" /> <Unit filename="../CDVD/CDVDaccess.h" />
<Unit filename="../CDVD/CDVDisoReader.cpp" /> <Unit filename="../CDVD/CDVDisoReader.cpp" />
<Unit filename="../CDVD/CDVDisoReader.h" /> <Unit filename="../CDVD/CDVDisoReader.h" />
<Unit filename="../CDVD/CdRom.cpp" /> <Unit filename="../CDVD/CdRom.cpp" />
<Unit filename="../CDVD/CdRom.h" /> <Unit filename="../CDVD/CdRom.h" />
<Unit filename="../CDVD/IsoFScdvd.h" /> <Unit filename="../CDVD/IsoFScdvd.h" />
<Unit filename="../CDVD/IsoFSdrv.cpp" /> <Unit filename="../CDVD/IsoFSdrv.cpp" />
<Unit filename="../CDVD/IsoFSdrv.h" /> <Unit filename="../CDVD/IsoFSdrv.h" />
<Unit filename="../CDVD/IsoFStools.cpp" /> <Unit filename="../CDVD/IsoFStools.cpp" />
<Unit filename="../CDVD/IsoFStools.h" /> <Unit filename="../CDVD/IsoFStools.h" />
<Unit filename="../CDVD/IsoFileFormats.cpp" /> <Unit filename="../CDVD/IsoFileFormats.cpp" />
<Unit filename="../CDVD/IsoFileFormats.h" /> <Unit filename="../CDVD/IsoFileFormats.h" />
<Unit filename="../CDVD/IsoFileTools.cpp" /> <Unit filename="../CDVD/IsoFileTools.cpp" />
<Unit filename="../CDVD/IsoFileTools.h" /> <Unit filename="../CDVD/IsoFileTools.h" />
<Unit filename="../CDVD/IsoFileTools.h.save" /> <Unit filename="../CDVD/IsoFileTools.h.save" />
<Unit filename="../CDVD/Makefile.am" /> <Unit filename="../CDVD/Makefile.am" />
<Unit filename="../COP0.cpp" /> <Unit filename="../COP0.cpp" />
<Unit filename="../COP2.cpp" /> <Unit filename="../COP2.cpp" />
<Unit filename="../Cache.cpp" /> <Unit filename="../Cache.cpp" />
<Unit filename="../Cache.h" /> <Unit filename="../Cache.h" />
<Unit filename="../Common.h" /> <Unit filename="../Common.h" />
<Unit filename="../Config.h" /> <Unit filename="../Config.h" />
<Unit filename="../Counters.cpp" /> <Unit filename="../Counters.cpp" />
<Unit filename="../Counters.h" /> <Unit filename="../Counters.h" />
<Unit filename="../DebugTools/Debug.h" /> <Unit filename="../DebugTools/Debug.h" />
<Unit filename="../DebugTools/DisASM.h" /> <Unit filename="../DebugTools/DisASM.h" />
<Unit filename="../DebugTools/DisR3000A.cpp" /> <Unit filename="../DebugTools/DisR3000A.cpp" />
<Unit filename="../DebugTools/DisR5900.cpp" /> <Unit filename="../DebugTools/DisR5900.cpp" />
<Unit filename="../DebugTools/DisR5900asm.cpp" /> <Unit filename="../DebugTools/DisR5900asm.cpp" />
<Unit filename="../DebugTools/DisVU0Micro.cpp" /> <Unit filename="../DebugTools/DisVU0Micro.cpp" />
<Unit filename="../DebugTools/DisVU1Micro.cpp" /> <Unit filename="../DebugTools/DisVU1Micro.cpp" />
<Unit filename="../DebugTools/DisVUmicro.h" /> <Unit filename="../DebugTools/DisVUmicro.h" />
<Unit filename="../DebugTools/DisVUops.h" /> <Unit filename="../DebugTools/DisVUops.h" />
<Unit filename="../Docs/ChangeLog.txt" /> <Unit filename="../Docs/ChangeLog.txt" />
<Unit filename="../Docs/License.txt" /> <Unit filename="../Docs/License.txt" />
<Unit filename="../Docs/PS2Edefs.txt" /> <Unit filename="../Docs/PS2Edefs.txt" />
<Unit filename="../Docs/RemoteDebugging.txt" /> <Unit filename="../Docs/RemoteDebugging.txt" />
<Unit filename="../Docs/devblog.txt" /> <Unit filename="../Docs/devblog.txt" />
<Unit filename="../Docs/readme 0.9.4.txt" /> <Unit filename="../Docs/readme 0.9.4.txt" />
<Unit filename="../Docs/readme Playground.txt" /> <Unit filename="../Docs/readme Playground.txt" />
<Unit filename="../Dump.cpp" /> <Unit filename="../Dump.cpp" />
<Unit filename="../Dump.h" /> <Unit filename="../Dump.h" />
<Unit filename="../Elfheader.cpp" /> <Unit filename="../Elfheader.cpp" />
<Unit filename="../Elfheader.h" /> <Unit filename="../Elfheader.h" />
<Unit filename="../FPU.cpp" /> <Unit filename="../FPU.cpp" />
<Unit filename="../FiFo.cpp" /> <Unit filename="../FiFo.cpp" />
<Unit filename="../GS.cpp" /> <Unit filename="../GS.cpp" />
<Unit filename="../GS.h" /> <Unit filename="../GS.h" />
<Unit filename="../Gif.cpp" /> <Unit filename="../Gif.cpp" />
<Unit filename="../HashMap.h" /> <Unit filename="../HashMap.h" />
<Unit filename="../HashTools.cpp" /> <Unit filename="../HashTools.cpp" />
<Unit filename="../HostGui.h" /> <Unit filename="../HostGui.h" />
<Unit filename="../Hw.cpp" /> <Unit filename="../Hw.cpp" />
<Unit filename="../Hw.h" /> <Unit filename="../Hw.h" />
<Unit filename="../HwRead.cpp" /> <Unit filename="../HwRead.cpp" />
<Unit filename="../HwWrite.cpp" /> <Unit filename="../HwWrite.cpp" />
<Unit filename="../IPU/IPU.cpp" /> <Unit filename="../IPU/IPU.cpp" />
<Unit filename="../IPU/IPU.h" /> <Unit filename="../IPU/IPU.h" />
<Unit filename="../IPU/acoroutine.S" /> <Unit filename="../IPU/acoroutine.S" />
<Unit filename="../IPU/coroutine.cpp" /> <Unit filename="../IPU/coroutine.cpp" />
<Unit filename="../IPU/coroutine.h" /> <Unit filename="../IPU/coroutine.h" />
<Unit filename="../IPU/mpeg2lib/Idct.cpp" /> <Unit filename="../IPU/mpeg2lib/Idct.cpp" />
<Unit filename="../IPU/mpeg2lib/Mpeg.cpp" /> <Unit filename="../IPU/mpeg2lib/Mpeg.cpp" />
<Unit filename="../IPU/mpeg2lib/Mpeg.h" /> <Unit filename="../IPU/mpeg2lib/Mpeg.h" />
<Unit filename="../IPU/mpeg2lib/Vlc.h" /> <Unit filename="../IPU/mpeg2lib/Vlc.h" />
<Unit filename="../IPU/yuv2rgb.cpp" /> <Unit filename="../IPU/yuv2rgb.cpp" />
<Unit filename="../IPU/yuv2rgb.h" /> <Unit filename="../IPU/yuv2rgb.h" />
<Unit filename="../Interpreter.cpp" /> <Unit filename="../Interpreter.cpp" />
<Unit filename="../IopBios.cpp" /> <Unit filename="../IopBios.cpp" />
<Unit filename="../IopBios.h" /> <Unit filename="../IopBios.h" />
<Unit filename="../IopBios2.h" /> <Unit filename="../IopBios2.h" />
<Unit filename="../IopCommon.h" /> <Unit filename="../IopCommon.h" />
<Unit filename="../IopCounters.cpp" /> <Unit filename="../IopCounters.cpp" />
<Unit filename="../IopCounters.h" /> <Unit filename="../IopCounters.h" />
<Unit filename="../IopDma.cpp" /> <Unit filename="../IopDma.cpp" />
<Unit filename="../IopDma.h" /> <Unit filename="../IopDma.h" />
<Unit filename="../IopHw.cpp" /> <Unit filename="../IopHw.cpp" />
<Unit filename="../IopHw.h" /> <Unit filename="../IopHw.h" />
<Unit filename="../IopMem.cpp" /> <Unit filename="../IopMem.cpp" />
<Unit filename="../IopMem.h" /> <Unit filename="../IopMem.h" />
<Unit filename="../IopSio2.cpp" /> <Unit filename="../IopSio2.cpp" />
<Unit filename="../IopSio2.h" /> <Unit filename="../IopSio2.h" />
<Unit filename="LnxHostSys.cpp" /> <Unit filename="LnxHostSys.cpp" />
<Unit filename="../MMI.cpp" /> <Unit filename="../MMI.cpp" />
<Unit filename="../MTGS.cpp" /> <Unit filename="../MTGS.cpp" />
<Unit filename="../Memory.cpp" /> <Unit filename="../Memory.cpp" />
<Unit filename="../Memory.h" /> <Unit filename="../Memory.h" />
<Unit filename="../MemoryCard.cpp" /> <Unit filename="../MemoryCard.cpp" />
<Unit filename="../MemoryCard.h" /> <Unit filename="../MemoryCard.h" />
<Unit filename="../Misc.cpp" /> <Unit filename="../Misc.cpp" />
<Unit filename="../Misc.h" /> <Unit filename="../Misc.h" />
<Unit filename="../NakedAsm.h" /> <Unit filename="../NakedAsm.h" />
<Unit filename="../Patch.cpp" /> <Unit filename="../Patch.cpp" />
<Unit filename="../Patch.h" /> <Unit filename="../Patch.h" />
<Unit filename="../PathUtils.cpp" /> <Unit filename="../PathUtils.cpp" />
<Unit filename="../Paths.h" /> <Unit filename="../Paths.h" />
<Unit filename="../Pcsx2Config.cpp" /> <Unit filename="../Pcsx2Config.cpp" />
<Unit filename="../PluginManager.cpp" /> <Unit filename="../PluginManager.cpp" />
<Unit filename="../Plugins.h" /> <Unit filename="../Plugins.h" />
<Unit filename="../PrecompiledHeader.h" /> <Unit filename="../PrecompiledHeader.h" />
<Unit filename="../R3000A.cpp" /> <Unit filename="../R3000A.cpp" />
<Unit filename="../R3000A.h" /> <Unit filename="../R3000A.h" />
<Unit filename="../R3000AInterpreter.cpp" /> <Unit filename="../R3000AInterpreter.cpp" />
<Unit filename="../R3000AOpcodeTables.cpp" /> <Unit filename="../R3000AOpcodeTables.cpp" />
<Unit filename="../R5900.cpp" /> <Unit filename="../R5900.cpp" />
<Unit filename="../R5900.h" /> <Unit filename="../R5900.h" />
<Unit filename="../R5900Exceptions.h" /> <Unit filename="../R5900Exceptions.h" />
<Unit filename="../R5900OpcodeImpl.cpp" /> <Unit filename="../R5900OpcodeImpl.cpp" />
<Unit filename="../R5900OpcodeTables.cpp" /> <Unit filename="../R5900OpcodeTables.cpp" />
<Unit filename="../R5900OpcodeTables.h" /> <Unit filename="../R5900OpcodeTables.h" />
<Unit filename="../RecoverySystem.cpp" /> <Unit filename="../RecoverySystem.cpp" />
<Unit filename="../SPR.cpp" /> <Unit filename="../SPR.cpp" />
<Unit filename="../SPR.h" /> <Unit filename="../SPR.h" />
<Unit filename="../SamplProf.h" /> <Unit filename="../SamplProf.h" />
<Unit filename="../SaveState.cpp" /> <Unit filename="../SaveState.cpp" />
<Unit filename="../SaveState.h" /> <Unit filename="../SaveState.h" />
<Unit filename="../Sif.cpp" /> <Unit filename="../Sif.cpp" />
<Unit filename="../Sif.h" /> <Unit filename="../Sif.h" />
<Unit filename="../Sifcmd.h" /> <Unit filename="../Sifcmd.h" />
<Unit filename="../Sio.cpp" /> <Unit filename="../Sio.cpp" />
<Unit filename="../Sio.h" /> <Unit filename="../Sio.h" />
<Unit filename="../SourceLog.cpp" /> <Unit filename="../SourceLog.cpp" />
<Unit filename="../Stats.cpp" /> <Unit filename="../Stats.cpp" />
<Unit filename="../Stats.h" /> <Unit filename="../Stats.h" />
<Unit filename="../StringUtils.h" /> <Unit filename="../StringUtils.h" />
<Unit filename="../System.cpp" /> <Unit filename="../System.cpp" />
<Unit filename="../System.h" /> <Unit filename="../System.h" />
<Unit filename="../Utilities/AsciiFile.h" /> <Unit filename="../Utilities/AsciiFile.h" />
<Unit filename="../Utilities/FileUtils.cpp" /> <Unit filename="../Utilities/FileUtils.cpp" />
<Unit filename="../Utilities/folderdesc.txt" /> <Unit filename="../Utilities/folderdesc.txt" />
<Unit filename="../VU.h" /> <Unit filename="../VU.h" />
<Unit filename="../VU0.cpp" /> <Unit filename="../VU0.cpp" />
<Unit filename="../VU0micro.cpp" /> <Unit filename="../VU0micro.cpp" />
<Unit filename="../VU0microInterp.cpp" /> <Unit filename="../VU0microInterp.cpp" />
<Unit filename="../VU1micro.cpp" /> <Unit filename="../VU1micro.cpp" />
<Unit filename="../VU1microInterp.cpp" /> <Unit filename="../VU1microInterp.cpp" />
<Unit filename="../VUflags.cpp" /> <Unit filename="../VUflags.cpp" />
<Unit filename="../VUflags.h" /> <Unit filename="../VUflags.h" />
<Unit filename="../VUmicro.h" /> <Unit filename="../VUmicro.h" />
<Unit filename="../VUmicroMem.cpp" /> <Unit filename="../VUmicroMem.cpp" />
<Unit filename="../VUops.cpp" /> <Unit filename="../VUops.cpp" />
<Unit filename="../VUops.h" /> <Unit filename="../VUops.h" />
<Unit filename="../Vif.cpp" /> <Unit filename="../Vif.cpp" />
<Unit filename="../Vif.h" /> <Unit filename="../Vif.h" />
<Unit filename="../VifDma.cpp" /> <Unit filename="../VifDma.cpp" />
<Unit filename="../VifDma.h" /> <Unit filename="../VifDma.h" />
<Unit filename="../gui/AdvancedDialog.cpp" /> <Unit filename="../gui/AdvancedDialog.cpp" />
<Unit filename="../gui/AdvancedDialog.h" /> <Unit filename="../gui/AdvancedDialog.h" />
<Unit filename="../gui/App.h" /> <Unit filename="../gui/App.h" />
<Unit filename="../gui/AppAssert.cpp" /> <Unit filename="../gui/AppAssert.cpp" />
<Unit filename="../gui/AppConfig.cpp" /> <Unit filename="../gui/AppConfig.cpp" />
<Unit filename="../gui/AppConfig.h" /> <Unit filename="../gui/AppConfig.h" />
<Unit filename="../gui/CheckedStaticBox.cpp" /> <Unit filename="../gui/AppRes.cpp" />
<Unit filename="../gui/CheckedStaticBox.h" /> <Unit filename="../gui/CheckedStaticBox.cpp" />
<Unit filename="../gui/ConsoleLogger.cpp" /> <Unit filename="../gui/CheckedStaticBox.h" />
<Unit filename="../gui/ConsoleLogger.h" /> <Unit filename="../gui/ConsoleLogger.cpp" />
<Unit filename="../gui/Dialogs/AboutBoxDialog.cpp" /> <Unit filename="../gui/ConsoleLogger.h" />
<Unit filename="../gui/Dialogs/ConfigurationDialog.cpp" /> <Unit filename="../gui/Dialogs/AboutBoxDialog.cpp" />
<Unit filename="../gui/Dialogs/ConfigurationDialog.h" /> <Unit filename="../gui/Dialogs/ConfigurationDialog.cpp" />
<Unit filename="../gui/Dialogs/FirstTimeWizard.cpp" /> <Unit filename="../gui/Dialogs/ConfigurationDialog.h" />
<Unit filename="../gui/Dialogs/ImportSettingsDialog.cpp" /> <Unit filename="../gui/Dialogs/FirstTimeWizard.cpp" />
<Unit filename="../gui/Dialogs/LogOptionsDialog.cpp" /> <Unit filename="../gui/Dialogs/ImportSettingsDialog.cpp" />
<Unit filename="../gui/Dialogs/LogOptionsDialog.h" /> <Unit filename="../gui/Dialogs/LogOptionsDialog.cpp" />
<Unit filename="../gui/Dialogs/ModalPopups.h" /> <Unit filename="../gui/Dialogs/LogOptionsDialog.h" />
<Unit filename="../gui/Dialogs/PickUserModeDialog.cpp" /> <Unit filename="../gui/Dialogs/ModalPopups.h" />
<Unit filename="../gui/HostGui.cpp" /> <Unit filename="../gui/Dialogs/PickUserModeDialog.cpp" />
<Unit filename="../gui/IniInterface.cpp" /> <Unit filename="../gui/HostGui.cpp" />
<Unit filename="../gui/IniInterface.h" /> <Unit filename="../gui/IniInterface.cpp" />
<Unit filename="../gui/MainFrame.cpp" /> <Unit filename="../gui/IniInterface.h" />
<Unit filename="../gui/MainFrame.h" /> <Unit filename="../gui/MainFrame.cpp" />
<Unit filename="../gui/MainMenuClicks.cpp" /> <Unit filename="../gui/MainFrame.h" />
<Unit filename="../gui/Panels/AudioPanel.cpp" /> <Unit filename="../gui/MainMenuClicks.cpp" />
<Unit filename="../gui/Panels/BiosSelectorPanel.cpp" /> <Unit filename="../gui/Panels/AudioPanel.cpp" />
<Unit filename="../gui/Panels/ConfigurationPanels.h" /> <Unit filename="../gui/Panels/BiosSelectorPanel.cpp" />
<Unit filename="../gui/Panels/CpuPanel.cpp" /> <Unit filename="../gui/Panels/ConfigurationPanels.h" />
<Unit filename="../gui/Panels/DirPickerPanel.cpp" /> <Unit filename="../gui/Panels/CpuPanel.cpp" />
<Unit filename="../gui/Panels/GameFixesPanel.cpp" /> <Unit filename="../gui/Panels/DirPickerPanel.cpp" />
<Unit filename="../gui/Panels/MiscPanelStuff.cpp" /> <Unit filename="../gui/Panels/GameFixesPanel.cpp" />
<Unit filename="../gui/Panels/PathsPanel.cpp" /> <Unit filename="../gui/Panels/MiscPanelStuff.cpp" />
<Unit filename="../gui/Panels/PluginSelectorPanel.cpp" /> <Unit filename="../gui/Panels/PathsPanel.cpp" />
<Unit filename="../gui/Panels/SpeedhacksPanel.cpp" /> <Unit filename="../gui/Panels/PluginSelectorPanel.cpp" />
<Unit filename="../gui/Panels/VideoPanel.cpp" /> <Unit filename="../gui/Panels/SpeedhacksPanel.cpp" />
<Unit filename="../gui/Plugins.cpp" /> <Unit filename="../gui/Panels/VideoPanel.cpp" />
<Unit filename="../gui/Resources/AppIcon.h" /> <Unit filename="../gui/Plugins.cpp" />
<Unit filename="../gui/Resources/BackgroundLogo.h" /> <Unit filename="../gui/Resources/AppIcon.h" />
<Unit filename="../gui/Resources/ConfigIcon_Cpu.h" /> <Unit filename="../gui/Resources/BackgroundLogo.h" />
<Unit filename="../gui/Resources/ConfigIcon_Gamefixes.h" /> <Unit filename="../gui/Resources/ConfigIcon_Cpu.h" />
<Unit filename="../gui/Resources/ConfigIcon_Paths.h" /> <Unit filename="../gui/Resources/ConfigIcon_Gamefixes.h" />
<Unit filename="../gui/Resources/ConfigIcon_Plugins.h" /> <Unit filename="../gui/Resources/ConfigIcon_Paths.h" />
<Unit filename="../gui/Resources/ConfigIcon_Speedhacks.h" /> <Unit filename="../gui/Resources/ConfigIcon_Plugins.h" />
<Unit filename="../gui/Resources/ConfigIcon_Video.h" /> <Unit filename="../gui/Resources/ConfigIcon_Speedhacks.h" />
<Unit filename="../gui/Resources/EmbeddedImage.h" /> <Unit filename="../gui/Resources/ConfigIcon_Video.h" />
<Unit filename="../gui/Resources/ps2_silver.h" /> <Unit filename="../gui/Resources/EmbeddedImage.h" />
<Unit filename="../gui/Saveslots.cpp" /> <Unit filename="../gui/Resources/ps2_silver.h" />
<Unit filename="../gui/i18n.cpp" /> <Unit filename="../gui/Saveslots.cpp" />
<Unit filename="../gui/i18n.h" /> <Unit filename="../gui/i18n.cpp" />
<Unit filename="../gui/main.cpp" /> <Unit filename="../gui/i18n.h" />
<Unit filename="../gui/wxHelpers.cpp" /> <Unit filename="../gui/main.cpp" />
<Unit filename="../gui/wxHelpers.h" /> <Unit filename="../gui/wxHelpers.cpp" />
<Unit filename="../pcsxAbout.bmp" /> <Unit filename="../gui/wxHelpers.h" />
<Unit filename="../ps2/BiosTools.cpp" /> <Unit filename="../pcsxAbout.bmp" />
<Unit filename="../ps2/BiosTools.h" /> <Unit filename="../ps2/BiosTools.cpp" />
<Unit filename="../ps2/CoreEmuThread.cpp" /> <Unit filename="../ps2/BiosTools.h" />
<Unit filename="../ps2/CoreEmuThread.h" /> <Unit filename="../ps2/CoreEmuThread.cpp" />
<Unit filename="../ps2/Iop/IopHwRead.cpp" /> <Unit filename="../ps2/CoreEmuThread.h" />
<Unit filename="../ps2/Iop/IopHwWrite.cpp" /> <Unit filename="../ps2/Iop/IopHwRead.cpp" />
<Unit filename="../ps2/Iop/IopHw_Internal.h" /> <Unit filename="../ps2/Iop/IopHwWrite.cpp" />
<Unit filename="../tinyxml/tinystr.cpp" /> <Unit filename="../ps2/Iop/IopHw_Internal.h" />
<Unit filename="../tinyxml/tinystr.h" /> <Unit filename="../tinyxml/tinystr.cpp" />
<Unit filename="../tinyxml/tinyxml.cpp" /> <Unit filename="../tinyxml/tinystr.h" />
<Unit filename="../tinyxml/tinyxml.h" /> <Unit filename="../tinyxml/tinyxml.cpp" />
<Unit filename="../tinyxml/tinyxmlerror.cpp" /> <Unit filename="../tinyxml/tinyxml.h" />
<Unit filename="../tinyxml/tinyxmlparser.cpp" /> <Unit filename="../tinyxml/tinyxmlerror.cpp" />
<Unit filename="../vtlb.cpp" /> <Unit filename="../tinyxml/tinyxmlparser.cpp" />
<Unit filename="../vtlb.h" /> <Unit filename="../vtlb.cpp" />
<Unit filename="../x86/BaseblockEx.cpp" /> <Unit filename="../vtlb.h" />
<Unit filename="../x86/BaseblockEx.h" /> <Unit filename="../x86/BaseblockEx.cpp" />
<Unit filename="../x86/aR3000A.S" /> <Unit filename="../x86/BaseblockEx.h" />
<Unit filename="../x86/aVUzerorec.S" /> <Unit filename="../x86/aR3000A.S" />
<Unit filename="../x86/aVif.S" /> <Unit filename="../x86/aVUzerorec.S" />
<Unit filename="../x86/iCOP0.cpp" /> <Unit filename="../x86/aVif.S" />
<Unit filename="../x86/iCOP0.h" /> <Unit filename="../x86/iCOP0.cpp" />
<Unit filename="../x86/iCOP2.cpp" /> <Unit filename="../x86/iCOP0.h" />
<Unit filename="../x86/iCore.cpp" /> <Unit filename="../x86/iCOP2.cpp" />
<Unit filename="../x86/iCore.h" /> <Unit filename="../x86/iCore.cpp" />
<Unit filename="../x86/iFPU.cpp" /> <Unit filename="../x86/iCore.h" />
<Unit filename="../x86/iFPU.h" /> <Unit filename="../x86/iFPU.cpp" />
<Unit filename="../x86/iFPUd.cpp" /> <Unit filename="../x86/iFPU.h" />
<Unit filename="../x86/iMMI.cpp" /> <Unit filename="../x86/iFPUd.cpp" />
<Unit filename="../x86/iMMI.h" /> <Unit filename="../x86/iMMI.cpp" />
<Unit filename="../x86/iMisc.cpp" /> <Unit filename="../x86/iMMI.h" />
<Unit filename="../x86/iR3000A.cpp" /> <Unit filename="../x86/iMisc.cpp" />
<Unit filename="../x86/iR3000A.h" /> <Unit filename="../x86/iR3000A.cpp" />
<Unit filename="../x86/iR3000Atables.cpp" /> <Unit filename="../x86/iR3000A.h" />
<Unit filename="../x86/iR5900.h" /> <Unit filename="../x86/iR3000Atables.cpp" />
<Unit filename="../x86/iR5900Arit.h" /> <Unit filename="../x86/iR5900.h" />
<Unit filename="../x86/iR5900AritImm.h" /> <Unit filename="../x86/iR5900Arit.h" />
<Unit filename="../x86/iR5900Branch.h" /> <Unit filename="../x86/iR5900AritImm.h" />
<Unit filename="../x86/iR5900Jump.h" /> <Unit filename="../x86/iR5900Branch.h" />
<Unit filename="../x86/iR5900LoadStore.h" /> <Unit filename="../x86/iR5900Jump.h" />
<Unit filename="../x86/iR5900Misc.cpp" /> <Unit filename="../x86/iR5900LoadStore.h" />
<Unit filename="../x86/iR5900Move.h" /> <Unit filename="../x86/iR5900Misc.cpp" />
<Unit filename="../x86/iR5900MultDiv.h" /> <Unit filename="../x86/iR5900Move.h" />
<Unit filename="../x86/iR5900Shift.h" /> <Unit filename="../x86/iR5900MultDiv.h" />
<Unit filename="../x86/iVU0micro.cpp" /> <Unit filename="../x86/iR5900Shift.h" />
<Unit filename="../x86/iVU1micro.cpp" /> <Unit filename="../x86/iVU0micro.cpp" />
<Unit filename="../x86/iVif.cpp" /> <Unit filename="../x86/iVU1micro.cpp" />
<Unit filename="../x86/ir5900tables.cpp" /> <Unit filename="../x86/iVif.cpp" />
<Unit filename="../x86/ix86-32/aR5900-32.S" /> <Unit filename="../x86/ir5900tables.cpp" />
<Unit filename="../x86/ix86-32/iCore-32.cpp" /> <Unit filename="../x86/ix86-32/aR5900-32.S" />
<Unit filename="../x86/ix86-32/iR5900-32.cpp" /> <Unit filename="../x86/ix86-32/iCore-32.cpp" />
<Unit filename="../x86/ix86-32/iR5900Arit.cpp" /> <Unit filename="../x86/ix86-32/iR5900-32.cpp" />
<Unit filename="../x86/ix86-32/iR5900AritImm.cpp" /> <Unit filename="../x86/ix86-32/iR5900Arit.cpp" />
<Unit filename="../x86/ix86-32/iR5900Branch.cpp" /> <Unit filename="../x86/ix86-32/iR5900AritImm.cpp" />
<Unit filename="../x86/ix86-32/iR5900Jump.cpp" /> <Unit filename="../x86/ix86-32/iR5900Branch.cpp" />
<Unit filename="../x86/ix86-32/iR5900LoadStore.cpp" /> <Unit filename="../x86/ix86-32/iR5900Jump.cpp" />
<Unit filename="../x86/ix86-32/iR5900Move.cpp" /> <Unit filename="../x86/ix86-32/iR5900LoadStore.cpp" />
<Unit filename="../x86/ix86-32/iR5900MultDiv.cpp" /> <Unit filename="../x86/ix86-32/iR5900Move.cpp" />
<Unit filename="../x86/ix86-32/iR5900Shift.cpp" /> <Unit filename="../x86/ix86-32/iR5900MultDiv.cpp" />
<Unit filename="../x86/ix86-32/iR5900Templates.cpp" /> <Unit filename="../x86/ix86-32/iR5900Shift.cpp" />
<Unit filename="../x86/ix86-32/recVTLB.cpp" /> <Unit filename="../x86/ix86-32/iR5900Templates.cpp" />
<Unit filename="../x86/microVU.cpp" /> <Unit filename="../x86/ix86-32/recVTLB.cpp" />
<Unit filename="../x86/microVU.h" /> <Unit filename="../x86/microVU.cpp" />
<Unit filename="../x86/microVU_Alloc.inl" /> <Unit filename="../x86/microVU.h" />
<Unit filename="../x86/microVU_Analyze.inl" /> <Unit filename="../x86/microVU_Alloc.inl" />
<Unit filename="../x86/microVU_Compile.inl" /> <Unit filename="../x86/microVU_Analyze.inl" />
<Unit filename="../x86/microVU_Execute.inl" /> <Unit filename="../x86/microVU_Compile.inl" />
<Unit filename="../x86/microVU_Flags.inl" /> <Unit filename="../x86/microVU_Execute.inl" />
<Unit filename="../x86/microVU_IR.h" /> <Unit filename="../x86/microVU_Flags.inl" />
<Unit filename="../x86/microVU_Log.inl" /> <Unit filename="../x86/microVU_IR.h" />
<Unit filename="../x86/microVU_Lower.inl" /> <Unit filename="../x86/microVU_Log.inl" />
<Unit filename="../x86/microVU_Misc.h" /> <Unit filename="../x86/microVU_Lower.inl" />
<Unit filename="../x86/microVU_Misc.inl" /> <Unit filename="../x86/microVU_Misc.h" />
<Unit filename="../x86/microVU_Tables.inl" /> <Unit filename="../x86/microVU_Misc.inl" />
<Unit filename="../x86/microVU_Upper.inl" /> <Unit filename="../x86/microVU_Tables.inl" />
<Unit filename="../x86/sVU_Debug.h" /> <Unit filename="../x86/microVU_Upper.inl" />
<Unit filename="../x86/sVU_Lower.cpp" /> <Unit filename="../x86/sVU_Debug.h" />
<Unit filename="../x86/sVU_Micro.cpp" /> <Unit filename="../x86/sVU_Lower.cpp" />
<Unit filename="../x86/sVU_Micro.h" /> <Unit filename="../x86/sVU_Micro.cpp" />
<Unit filename="../x86/sVU_Upper.cpp" /> <Unit filename="../x86/sVU_Micro.h" />
<Unit filename="../x86/sVU_zerorec.cpp" /> <Unit filename="../x86/sVU_Upper.cpp" />
<Unit filename="../x86/sVU_zerorec.h" /> <Unit filename="../x86/sVU_zerorec.cpp" />
<Unit filename="../xmlpatchloader.cpp" /> <Unit filename="../x86/sVU_zerorec.h" />
<Extensions> <Unit filename="../xmlpatchloader.cpp" />
<envvars /> <Extensions>
<code_completion> <envvars />
<search_path add="/usr/include/wx-2.8" /> <code_completion>
</code_completion> <search_path add="/usr/include/wx-2.8" />
<lib_finder disable_auto="1" /> </code_completion>
<debugger /> <lib_finder disable_auto="1" />
</Extensions> <debugger />
</Project> </Extensions>
</CodeBlocks_project_file> </Project>
</CodeBlocks_project_file>

View File

@ -214,7 +214,7 @@ void mtgsThreadObject::Start()
m_sem_InitDone.Wait(); m_sem_InitDone.Wait();
if( m_returncode != 0 ) // means the thread failed to init the GS plugin if( m_returncode != 0 ) // means the thread failed to init the GS plugin
throw Exception::PluginFailure( "GS", wxLt("%s plugin failed to open.") ); throw Exception::PluginOpenError( PluginId_GS );
} }
mtgsThreadObject::~mtgsThreadObject() mtgsThreadObject::~mtgsThreadObject()
@ -507,7 +507,7 @@ sptr mtgsThreadObject::ExecuteTask()
GSsetBaseMem( m_gsMem ); GSsetBaseMem( m_gsMem );
GSirqCallback( NULL ); GSirqCallback( NULL );
g_plugins->Open( PluginId_GS ); GetPluginManager().Open( PluginId_GS );
Console::WriteLn( "MTGS > GSopen Finished, return code: 0x%x", params m_returncode ); Console::WriteLn( "MTGS > GSopen Finished, return code: 0x%x", params m_returncode );
@ -629,7 +629,7 @@ sptr mtgsThreadObject::ExecuteTask()
{ {
freezeData* data = (freezeData*)(*(uptr*)&tag.data[1]); freezeData* data = (freezeData*)(*(uptr*)&tag.data[1]);
int mode = tag.data[0]; int mode = tag.data[0];
g_plugins->Freeze( PluginId_GS, mode, data ); GetPluginManager().Freeze( PluginId_GS, mode, data );
break; break;
} }
@ -667,7 +667,7 @@ sptr mtgsThreadObject::ExecuteTask()
break; break;
case GS_RINGTYPE_QUIT: case GS_RINGTYPE_QUIT:
g_plugins->Close( PluginId_GS ); GetPluginManager().Close( PluginId_GS );
m_sem_Quitter.Post(); m_sem_Quitter.Post();
return 0; return 0;

View File

@ -210,7 +210,7 @@ void LoadGSState(const wxString& file)
if (ret != 0) if (ret != 0)
{ {
delete f; delete f;
throw Exception::PluginFailure( "GS" ); throw Exception::PluginOpenError( PluginId_GS );
} }
ret = PADopen((void *)&pDsp); ret = PADopen((void *)&pDsp);

View File

@ -527,14 +527,14 @@ PluginManager *g_plugins = NULL;
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
Exception::InvalidPluginConfigured::InvalidPluginConfigured( PluginsEnum_t pid, const wxString& objname, const char* eng ) Exception::PluginLoadError::PluginLoadError( PluginsEnum_t pid, const wxString& objname, const char* eng )
{ {
BaseException::InitBaseEx( eng ); BaseException::InitBaseEx( eng );
StreamName = objname; StreamName = objname;
PluginId = pid; PluginId = pid;
} }
Exception::InvalidPluginConfigured::InvalidPluginConfigured( PluginsEnum_t pid, const wxString& objname, Exception::PluginLoadError::PluginLoadError( PluginsEnum_t pid, const wxString& objname,
const wxString& eng_msg, const wxString& xlt_msg ) const wxString& eng_msg, const wxString& xlt_msg )
{ {
BaseException::InitBaseEx( eng_msg, xlt_msg ); BaseException::InitBaseEx( eng_msg, xlt_msg );
@ -542,17 +542,26 @@ Exception::InvalidPluginConfigured::InvalidPluginConfigured( PluginsEnum_t pid,
PluginId = pid; PluginId = pid;
} }
wxString Exception::PluginFailure::FormatDiagnosticMessage() const wxString Exception::PluginLoadError::FormatDiagnosticMessage() const
{ {
return wxsFormat( return wxsFormat( m_message_diag, tbl_PluginInfo[PluginId].GetShortname() ) +
L"%s plugin has encountered an error.\n\n", L"\n\n" + StreamName;
plugin_name.c_str()
) + m_stacktrace;
} }
wxString Exception::PluginFailure::FormatDisplayMessage() const wxString Exception::PluginLoadError::FormatDisplayMessage() const
{ {
return wxsFormat( m_message_user, plugin_name.c_str() ); return wxsFormat( m_message_user, tbl_PluginInfo[PluginId].GetShortname() ) +
L"\n\n" + StreamName;
}
wxString Exception::PluginError::FormatDiagnosticMessage() const
{
return wxsFormat( m_message_diag, tbl_PluginInfo[PluginId].GetShortname() );
}
wxString Exception::PluginError::FormatDisplayMessage() const
{
return wxsFormat( m_message_user, tbl_PluginInfo[PluginId].GetShortname() );
} }
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
@ -570,14 +579,13 @@ PluginManager::PluginManager( const wxString (&folders)[PluginId_Count] )
m_info[pid].Filename = folders[pid]; m_info[pid].Filename = folders[pid];
if( !wxFile::Exists( folders[pid] ) ) if( !wxFile::Exists( folders[pid] ) )
throw Exception::InvalidPluginConfigured( pid, folders[pid], throw Exception::PluginLoadError( pid, folders[pid],
L"Plugin file not found", wxLt("The configured %s plugin file was not found")
_("The configured plugin file was not found")
); );
if( !m_info[pid].Lib.Load( folders[pid] ) ) if( !m_info[pid].Lib.Load( folders[pid] ) )
throw Exception::InvalidPluginConfigured( pid, folders[pid], throw Exception::PluginLoadError( pid, folders[pid],
wxLt("Configured plugin file is not a valid dynamic library") wxLt("The configured %s plugin file is not a valid dynamic library")
); );
// Try to enumerate the new v2.0 plugin interface first. // Try to enumerate the new v2.0 plugin interface first.
@ -625,8 +633,8 @@ void PluginManager::BindCommon( PluginsEnum_t pid )
if( *target == NULL ) if( *target == NULL )
{ {
throw Exception::InvalidPluginConfigured( pid, m_info[pid].Filename, throw Exception::PluginLoadError( pid, m_info[pid].Filename,
wxLt( "Configured plugin is not a valid PCSX2 plugin, or is for an older unsupported version of PCSX2." ) ); wxLt( "Configured plugin is not a PCSX2 plugin, or is for an older unsupported version of PCSX2." ) );
} }
target++; target++;
@ -650,7 +658,7 @@ void PluginManager::BindRequired( PluginsEnum_t pid )
if( *(current->Dest) == NULL ) if( *(current->Dest) == NULL )
{ {
throw Exception::InvalidPluginConfigured( pid, m_info[pid].Filename, throw Exception::PluginLoadError( pid, m_info[pid].Filename,
wxLt( "Configured plugin is not a valid PCSX2 plugin, or is for an older unsupported version of PCSX2." ) ); wxLt( "Configured plugin is not a valid PCSX2 plugin, or is for an older unsupported version of PCSX2." ) );
} }
@ -766,7 +774,7 @@ void PluginManager::Open( PluginsEnum_t pid )
case PluginId_DEV9: result = OpenPlugin_DEV9(); break; case PluginId_DEV9: result = OpenPlugin_DEV9(); break;
} }
if( !result ) if( !result )
throw Exception::PluginFailure( tbl_PluginInfo[pid].shortname, wxLt("%s plugin failed to open.") ); throw Exception::PluginOpenError( pid );
m_info[pid].IsOpened = true; m_info[pid].IsOpened = true;
} }
@ -829,7 +837,7 @@ void PluginManager::Init()
if( m_info[pid].IsInitialized ) continue; if( m_info[pid].IsInitialized ) continue;
m_info[pid].IsInitialized = true; m_info[pid].IsInitialized = true;
if( 0 != m_info[pid].CommonBindings.Init() ) if( 0 != m_info[pid].CommonBindings.Init() )
throw Exception::PluginFailure( tbl_PluginInfo[pid].shortname, wxLt( "%s plugin: Initialization Failure" ) ); throw Exception::PluginInitError( pid );
} }
} }

View File

@ -52,35 +52,57 @@ namespace Exception
BaseException::InitBaseEx( msg ); BaseException::InitBaseEx( msg );
PluginId = pid; PluginId = pid;
} }
};
class PluginFailure : public virtual RuntimeError
{
public:
wxString plugin_name; // name of the plugin
public:
DEFINE_EXCEPTION_COPYTORS( PluginFailure )
explicit PluginFailure( const char* plugin, const char* msg="%s plugin encountered a critical error" )
{
BaseException::InitBaseEx( msg );
plugin_name = wxString::FromUTF8( plugin );
}
virtual wxString FormatDiagnosticMessage() const; virtual wxString FormatDiagnosticMessage() const;
virtual wxString FormatDisplayMessage() const; virtual wxString FormatDisplayMessage() const;
}; };
class InvalidPluginConfigured : public virtual PluginError, public virtual BadStream // Plugin load errors occur when initially trying to load plugins durign the
// creation of a PluginManager object. The error may either be due to non-existence,
// corruption, or incompatible versioning.
class PluginLoadError : public virtual PluginError, public virtual BadStream
{ {
public: public:
DEFINE_EXCEPTION_COPYTORS( InvalidPluginConfigured ) DEFINE_EXCEPTION_COPYTORS( PluginLoadError )
InvalidPluginConfigured( PluginsEnum_t pid, const wxString& objname, const char* eng ); PluginLoadError( PluginsEnum_t pid, const wxString& objname, const char* eng );
InvalidPluginConfigured( PluginsEnum_t pid, const wxString& objname, PluginLoadError( PluginsEnum_t pid, const wxString& objname,
const wxString& eng_msg, const wxString& xlt_msg ); const wxString& eng_msg, const wxString& xlt_msg );
virtual wxString FormatDiagnosticMessage() const;
virtual wxString FormatDisplayMessage() const;
};
// Thrown when a plugin fails it's init() callback. The meaning of this error is entirely
// dependent on the plugin and, in most cases probably never happens (most plugins do little
// more than a couple basic memory reservations during init)
class PluginInitError : public virtual PluginError
{
public:
DEFINE_EXCEPTION_COPYTORS( PluginInitError )
explicit PluginInitError( PluginsEnum_t pid,
const char* msg=wxLt("%s plugin failed to initialize. Your system may have insufficient memory or resources needed.") )
{
BaseException::InitBaseEx( msg );
PluginId = pid;
}
};
// Plugin failed to open. Typically this is a non-critical error that means the plugin has
// not been configured properly by the user, but may also be indicative of a system
class PluginOpenError : public virtual PluginError
{
public:
DEFINE_EXCEPTION_COPYTORS( PluginOpenError )
explicit PluginOpenError( PluginsEnum_t pid,
const char* msg=wxLt("%s plugin failed to open. Your computer may have insufficient resources, or incompatible hardware/drivers.") )
{
BaseException::InitBaseEx( msg );
PluginId = pid;
}
}; };
}; };

View File

@ -35,6 +35,7 @@
using namespace R5900; using namespace R5900;
FILE *emuLog; FILE *emuLog;
wxString emuLogName;
#ifdef PCSX2_DEVBUILD #ifdef PCSX2_DEVBUILD
LogSources varLog; LogSources varLog;

View File

@ -180,6 +180,22 @@ protected:
void OnMessageBox( pxMessageBoxEvent& evt ); void OnMessageBox( pxMessageBoxEvent& evt );
void CleanupMess(); void CleanupMess();
void OpenWizardConsole(); void OpenWizardConsole();
int MainLoop();
// ----------------------------------------------------------------------------
// Override wx default exception handling behavior
// ----------------------------------------------------------------------------
// Just rethrow exceptions in the main loop, so that we can handle them properly in our
// custom catch clauses in OnRun(). (ranting note: wtf is the point of this functionality
// in wx? Why would anyone ever want a generic catch-all exception handler that *isn't*
// the unhandled exception handler? Using this as anything besides a re-throw is terrible
// program design and shouldn't even be allowed -- air)
bool OnExceptionInMainLoop() { throw; }
// Just rethrow unhandled exceptions to cause immediate debugger fail.
void OnUnhandledException() { throw; }
}; };
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////

View File

@ -22,6 +22,7 @@
#include "Plugins.h" #include "Plugins.h"
#include <wx/stdpaths.h> #include <wx/stdpaths.h>
#include "DebugTools/Debug.h"
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
// PathDefs Namespace -- contains default values for various pcsx2 path names and locations. // PathDefs Namespace -- contains default values for various pcsx2 path names and locations.
@ -630,5 +631,21 @@ void AppConfig_ReloadGlobalSettings( bool overwrite )
g_Conf->Apply(); g_Conf->Apply();
g_Conf->Folders.Logs.Mkdir(); g_Conf->Folders.Logs.Mkdir();
}
wxString newlogname( Path::Combine( g_Conf->Folders.Logs.ToString(), L"emuLog.txt" ) );
if( emuLog != NULL )
{
if( emuLogName != newlogname )
{
fclose( emuLog );
emuLog = NULL;
}
}
if( emuLog == NULL )
{
emuLogName = newlogname;
emuLog = fopen( emuLogName.ToUTF8().data(), "wb" );
}
}

167
pcsx2/gui/AppRes.cpp Normal file
View File

@ -0,0 +1,167 @@
/* Pcsx2 - Pc Ps2 Emulator
* Copyright (C) 2002-2009 Pcsx2 Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "PrecompiledHeader.h"
#include "MainFrame.h"
#include <wx/zipstrm.h>
#include <wx/wfstream.h>
#include "Resources/EmbeddedImage.h"
#include "Resources/BackgroundLogo.h"
#include "Resources/ConfigIcon_Cpu.h"
#include "Resources/ConfigIcon_Video.h"
#include "Resources/ConfigIcon_Speedhacks.h"
#include "Resources/ConfigIcon_Gamefixes.h"
#include "Resources/ConfigIcon_Paths.h"
#include "Resources/ConfigIcon_Plugins.h"
// ------------------------------------------------------------------------
const wxImage& LoadImageAny(
wxImage& dest, bool useTheme, wxFileName& base, const wxChar* filename, IEmbeddedImage& onFail )
{
if( useTheme )
{
base.SetName( filename );
base.SetExt( L"png" );
if( base.FileExists() )
{
if( dest.LoadFile( base.GetFullPath() ) ) return dest;
}
base.SetExt( L"jpg" );
if( base.FileExists() )
{
if( dest.LoadFile( base.GetFullPath() ) ) return dest;
}
base.SetExt( L"bmp" );
if( base.FileExists() )
{
if( dest.LoadFile( base.GetFullPath() ) ) return dest;
}
}
return dest = onFail.Get();
}
// ------------------------------------------------------------------------
const wxBitmap& Pcsx2App::GetLogoBitmap()
{
if( m_Bitmap_Logo != NULL )
return *m_Bitmap_Logo;
wxFileName mess;
bool useTheme = (g_Conf->DeskTheme != L"default");
if( useTheme )
{
wxDirName theme( PathDefs::GetThemes() + g_Conf->DeskTheme );
wxFileName zipped( theme.GetFilename() );
zipped.SetExt( L"zip" );
if( zipped.FileExists() )
{
// loading theme from zipfile.
//wxFileInputStream stream( zipped.ToString() )
//wxZipInputStream zstream( stream );
Console::Error( "Loading themes from zipfile is not supported yet.\nFalling back on default theme." );
}
// Overrides zipfile settings (fix when zipfile support added)
mess = theme.ToString();
}
wxImage img;
EmbeddedImage<png_BackgroundLogo> temp; // because gcc can't allow non-const temporaries.
LoadImageAny( img, useTheme, mess, L"BackgroundLogo", temp );
m_Bitmap_Logo = new wxBitmap( img );
return *m_Bitmap_Logo;
}
// ------------------------------------------------------------------------
wxImageList& Pcsx2App::GetImgList_Config()
{
if( !m_ConfigImagesAreLoaded )
{
wxFileName mess;
bool useTheme = (g_Conf->DeskTheme != L"default");
if( useTheme )
{
wxDirName theme( PathDefs::GetThemes() + g_Conf->DeskTheme );
mess = theme.ToString();
}
wxImage img;
// GCC Specific: wxT() macro is required when using string token pasting. For some reason L
// generates syntax errors. >_<
#undef FancyLoadMacro
#define FancyLoadMacro( name ) \
{ \
EmbeddedImage<png_ConfigIcon_##name> temp( g_Conf->Listbook_ImageSize, g_Conf->Listbook_ImageSize ); \
m_ImageId.Config.name = m_ConfigImages.Add( LoadImageAny( \
img, useTheme, mess, L"ConfigIcon_" wxT(#name), temp ) \
); \
}
FancyLoadMacro( Paths );
FancyLoadMacro( Plugins );
FancyLoadMacro( Gamefixes );
FancyLoadMacro( Speedhacks );
FancyLoadMacro( Video );
FancyLoadMacro( Cpu );
}
m_ConfigImagesAreLoaded = true;
return m_ConfigImages;
}
// ------------------------------------------------------------------------
wxImageList& Pcsx2App::GetImgList_Toolbars()
{
if( m_ToolbarImages == NULL )
{
const int imgSize = g_Conf->Toolbar_ImageSize ? 64 : 32;
m_ToolbarImages = new wxImageList( imgSize, imgSize );
wxFileName mess;
bool useTheme = (g_Conf->DeskTheme != L"default");
if( useTheme )
{
wxDirName theme( PathDefs::GetThemes() + g_Conf->DeskTheme );
mess = theme.ToString();
}
wxImage img;
#undef FancyLoadMacro
#define FancyLoadMacro( name ) \
{ \
EmbeddedImage<png_ToolbarIcon_##name> temp( imgSize, imgSize ); \
m_ImageId.Toolbars.name = m_ConfigImages.Add( LoadImageAny( img, useTheme, mess, L"ToolbarIcon" wxT(#name), temp ) ); \
}
}
return *m_ToolbarImages;
}

View File

@ -314,19 +314,6 @@ void ConsoleLogFrame::ClearColor()
void ConsoleLogFrame::Write( const wxString& text ) void ConsoleLogFrame::Write( const wxString& text )
{ {
// Many platforms still do not provide thread-safe implementations of
// fputs or printf, so they need to be implemented here.
// fixme: these really should go in the global message handler but I haven't time to
// do that right now.
if( emuLog != NULL )
fputs( text.ToUTF8().data(), emuLog );
// Linux has a handy dandy universal console...
// [TODO] make this a configurable option? Do we care? :)
#ifdef __LINUX__
printf( (L"PCSX2 > " + text).ToUTF8().data() );
#endif
// remove selection (WriteText is in fact ReplaceSelection) // remove selection (WriteText is in fact ReplaceSelection)
// TODO : Optimize this to only replace selection if some selection // TODO : Optimize this to only replace selection if some selection
// messages have been received since the last write. // messages have been received since the last write.
@ -568,11 +555,38 @@ void ConsoleLogFrame::DoMessage()
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
// //
namespace Console namespace Console
{ {
// thread-local console color storage. // thread-local console color storage.
__threadlocal Colors th_CurrentColor = DefaultConsoleColor; static __threadlocal Colors th_CurrentColor = DefaultConsoleColor;
static Threading::MutexLock immediate_log_lock;
// performs immediate thread-safe (mutex locked) logging to disk and to the Linux console.
// Many platforms still do not provide thread-safe implementations of fputs or printf, so
// they are implemented here using a mutex lock for maximum safety.
static void _immediate_logger( const char* src )
{
ScopedLock locker( immediate_log_lock );
if( emuLog != NULL )
fputs( src, emuLog ); // fputs does not do automatic newlines, so it's ok!
// Linux has a handy dandy universal console...
// [TODO] make this a configurable option? Do we care? :)
#ifdef __LINUX__
// puts does automatic newlines, which we don't want here
fputs( L"PCSX2 > ", stdout );
fputs( src, stdout );
#endif
}
static void _immediate_logger( const wxString& src )
{
_immediate_logger( src.ToUTF8().data() );
}
void __fastcall SetTitle( const wxString& title ) void __fastcall SetTitle( const wxString& title )
{ {
@ -593,6 +607,8 @@ namespace Console
bool Newline() bool Newline()
{ {
_immediate_logger( "\n" );
wxCommandEvent evt( wxEVT_LOG_Newline ); wxCommandEvent evt( wxEVT_LOG_Newline );
wxGetApp().ProgramLog_PostEvent( evt ); wxGetApp().ProgramLog_PostEvent( evt );
wxGetApp().ProgramLog_CountMsg(); wxGetApp().ProgramLog_CountMsg();
@ -602,6 +618,8 @@ namespace Console
bool __fastcall Write( const char* fmt ) bool __fastcall Write( const char* fmt )
{ {
_immediate_logger( fmt );
wxCommandEvent evt( wxEVT_LOG_Write ); wxCommandEvent evt( wxEVT_LOG_Write );
evt.SetString( wxString::FromAscii( fmt ) ); evt.SetString( wxString::FromAscii( fmt ) );
evt.SetExtraLong( th_CurrentColor ); evt.SetExtraLong( th_CurrentColor );
@ -613,6 +631,8 @@ namespace Console
bool __fastcall Write( const wxString& fmt ) bool __fastcall Write( const wxString& fmt )
{ {
_immediate_logger( fmt );
wxCommandEvent evt( wxEVT_LOG_Write ); wxCommandEvent evt( wxEVT_LOG_Write );
evt.SetString( fmt ); evt.SetString( fmt );
evt.SetExtraLong( th_CurrentColor ); evt.SetExtraLong( th_CurrentColor );
@ -624,11 +644,14 @@ namespace Console
bool __fastcall WriteLn( const char* fmt ) bool __fastcall WriteLn( const char* fmt )
{ {
const wxString fmtline( wxString::FromAscii( fmt ) + L"\n" );
_immediate_logger( fmtline );
// Implementation note: I've duplicated Write+Newline behavior here to avoid polluting // Implementation note: I've duplicated Write+Newline behavior here to avoid polluting
// the message pump with lots of erroneous messages (Newlines can be bound into Write message). // the message pump with lots of erroneous messages (Newlines can be bound into Write message).
wxCommandEvent evt( wxEVT_LOG_Write ); wxCommandEvent evt( wxEVT_LOG_Write );
evt.SetString( wxString::FromAscii( fmt ) + L"\n" ); evt.SetString( fmtline );
evt.SetExtraLong( th_CurrentColor ); evt.SetExtraLong( th_CurrentColor );
wxGetApp().ProgramLog_PostEvent( evt ); wxGetApp().ProgramLog_PostEvent( evt );
wxGetApp().ProgramLog_CountMsg(); wxGetApp().ProgramLog_CountMsg();
@ -638,11 +661,14 @@ namespace Console
bool __fastcall WriteLn( const wxString& fmt ) bool __fastcall WriteLn( const wxString& fmt )
{ {
const wxString fmtline( fmt + L"\n" );
_immediate_logger( fmtline );
// Implementation note: I've duplicated Write+Newline behavior here to avoid polluting // Implementation note: I've duplicated Write+Newline behavior here to avoid polluting
// the message pump with lots of erroneous messages (Newlines can be bound into Write message). // the message pump with lots of erroneous messages (Newlines can be bound into Write message).
wxCommandEvent evt( wxEVT_LOG_Write ); wxCommandEvent evt( wxEVT_LOG_Write );
evt.SetString( fmt + L"\n" ); evt.SetString( fmtline );
evt.SetExtraLong( th_CurrentColor ); evt.SetExtraLong( th_CurrentColor );
wxGetApp().ProgramLog_PostEvent( evt ); wxGetApp().ProgramLog_PostEvent( evt );
wxGetApp().ProgramLog_CountMsg(); wxGetApp().ProgramLog_CountMsg();

View File

@ -98,7 +98,7 @@ namespace HostGui
SysSuspend(); SysSuspend();
StateRecovery::MakeGsOnly(); StateRecovery::MakeGsOnly();
g_plugins->Close( PluginId_GS ); GetPluginManager().Close( PluginId_GS );
renderswitch = !renderswitch; renderswitch = !renderswitch;
StateRecovery::Recover(); StateRecovery::Recover();

View File

@ -89,6 +89,7 @@ void MainEmuFrame::Menu_RunIso_Click(wxCommandEvent &event)
} }
} }
InitPlugins();
SysExecute( new AppEmuThread( elf_file ), CDVDsrc_Iso ); SysExecute( new AppEmuThread( elf_file ), CDVDsrc_Iso );
} }
@ -109,6 +110,7 @@ void MainEmuFrame::Menu_RunWithoutDisc_Click(wxCommandEvent &event)
} }
SysEndExecution(); SysEndExecution();
InitPlugins();
SysExecute( new AppEmuThread(), CDVDsrc_NoDisc ); SysExecute( new AppEmuThread(), CDVDsrc_NoDisc );
} }

View File

@ -91,10 +91,7 @@ public:
m_type = m_GetLibType(); m_type = m_GetLibType();
} }
// Parameters: bool CheckVersion( PluginsEnum_t pluginTypeIndex ) const
// pluginTypeIndex - Value from 1 to 8 which represents the plugin's index.
//
bool CheckVersion( int pluginTypeIndex ) const
{ {
const PluginInfo& info( tbl_PluginInfo[pluginTypeIndex] ); const PluginInfo& info( tbl_PluginInfo[pluginTypeIndex] );
if( m_type & info.typemask ) if( m_type & info.typemask )
@ -436,36 +433,37 @@ void Panels::PluginSelectorPanel::EnumThread::Cancel()
sptr Panels::PluginSelectorPanel::EnumThread::ExecuteTask() sptr Panels::PluginSelectorPanel::EnumThread::ExecuteTask()
{ {
DevCon::WriteLn( "Plugin Enumeration Thread started..." ); DevCon::Status( "Plugin Enumeration Thread started..." );
Sleep( 10 ); // gives the gui thread some time to refresh Sleep( 10 ); // gives the gui thread some time to refresh
for( int curidx=0; curidx < m_master.FileCount(); ++curidx ) for( int curidx=0; curidx < m_master.FileCount(); ++curidx )
{ {
if( m_cancel ) return 0; if( m_cancel ) return 0;
DbgCon::WriteLn( L"Enumerating Plugin: " + m_master.GetFilename( curidx ) );
Results[curidx].TypeMask = 0;
try try
{ {
PluginEnumerator penum( m_master.GetFilename( curidx ) );
EnumeratedPluginInfo& result( Results[curidx] ); EnumeratedPluginInfo& result( Results[curidx] );
result.TypeMask = 0;
PluginEnumerator penum( m_master.GetFilename( curidx ) );
result.Name = penum.GetName(); result.Name = penum.GetName();
for( int pidx=0; pidx<NumPluginTypes; ++pidx ) for( int pidx=0; pidx<PluginId_Count; ++pidx )
{ {
result.TypeMask |= tbl_PluginInfo[pidx].typemask; const PluginsEnum_t pid = (PluginsEnum_t)pidx;
if( penum.CheckVersion( pidx ) ) result.TypeMask |= tbl_PluginInfo[pid].typemask;
if( penum.CheckVersion( pid ) )
{ {
result.PassedTest |= tbl_PluginInfo[pidx].typemask; result.PassedTest |= tbl_PluginInfo[pid].typemask;
penum.GetVersionString( result.Version[pidx], pidx ); penum.GetVersionString( result.Version[pid], pidx );
} }
} }
} }
catch( Exception::BadStream& ex ) catch( Exception::BadStream& ex )
{ {
Console::Status( ex.FormatDiagnosticMessage() ); Console::Status( ex.FormatDiagnosticMessage() );
} }
pthread_testcancel(); pthread_testcancel();
@ -478,6 +476,6 @@ sptr Panels::PluginSelectorPanel::EnumThread::ExecuteTask()
wxCommandEvent done( wxEVT_EnumerationFinished ); wxCommandEvent done( wxEVT_EnumerationFinished );
m_master.GetEventHandler()->AddPendingEvent( done ); m_master.GetEventHandler()->AddPendingEvent( done );
DevCon::WriteLn( "Plugin Enumeration Thread complete!" ); DevCon::Status( "Plugin Enumeration Thread complete!" );
return 0; return 0;
} }

View File

@ -23,14 +23,11 @@
#include "Plugins.h" #include "Plugins.h"
#include "Dialogs/ModalPopups.h" #include "Dialogs/ModalPopups.h"
#include "Utilities/ScopedPtr.h" #include "Utilities/ScopedPtr.h"
#include "Resources/EmbeddedImage.h"
#include "Resources/BackgroundLogo.h"
#include <wx/cmdline.h> #include <wx/cmdline.h>
#include <wx/stdpaths.h> #include <wx/stdpaths.h>
#include <wx/evtloop.h>
IMPLEMENT_APP(Pcsx2App) IMPLEMENT_APP(Pcsx2App)
@ -310,6 +307,78 @@ void Pcsx2App::CleanupMess()
safe_delete( g_Conf ); safe_delete( g_Conf );
} }
static int pxRunningEventLoopCount = 0;
class pxEvtLoop : public wxEventLoop
{
protected:
struct pxRunningEventLoopCounter
{
pxRunningEventLoopCounter() { pxRunningEventLoopCount++; }
~pxRunningEventLoopCounter() { pxRunningEventLoopCount--; }
};
public:
virtual int Run()
{
// event loops are not recursive, you need to create another loop!
wxCHECK_MSG( !IsRunning(), -1, _T("can't reenter a message loop") );
wxEventLoopActivator activate(wx_static_cast(wxEventLoop *, this));
#if defined(__WXMSW__) && wxUSE_THREADS
pxRunningEventLoopCounter evtLoopCounter;
#endif // __WXMSW__
while( true )
{
try
{
while( !m_shouldExit )
{
// give ourselves the possibility to do whatever we want!
OnNextIteration();
while( Pending() )
{
if( !Dispatch() )
{
m_shouldExit = true;
break;
}
}
if( wxTheApp )
wxTheApp->ProcessIdle();
}
break;
}
// ----------------------------------------------------------------------------
catch( Exception::PluginError& ex )
{
}
// ----------------------------------------------------------------------------
catch( Exception::RuntimeError& ex )
{
// Runtime errors which have been unhandled should still be safe to recover from,
// so lets issue a message to the user and then continue the message pump.
Console::Error( ex.FormatDiagnosticMessage() );
Msgbox::Alert( ex.FormatDisplayMessage() );
}
}
}
};
// This overload performs universal exception handling for specific types of recoverable
// errors that can be thrown from a multitude of events.
int Pcsx2App::MainLoop()
{
assert( m_mainLoop == NULL );
m_mainLoop = new pxEvtLoop();
return m_mainLoop->Run();
}
// Common exit handler which can be called from any event (though really it should // Common exit handler which can be called from any event (though really it should
// be called only from CloseWindow handlers since that's the more appropriate way // be called only from CloseWindow handlers since that's the more appropriate way
// to handle window closures) // to handle window closures)
@ -320,6 +389,7 @@ bool Pcsx2App::PrepForExit()
int Pcsx2App::OnExit() int Pcsx2App::OnExit()
{ {
m_ProgramLogBox = NULL;
MemoryCard::Shutdown(); MemoryCard::Shutdown();
if( g_Conf != NULL ) if( g_Conf != NULL )
@ -345,146 +415,4 @@ Pcsx2App::~Pcsx2App()
CleanupMess(); CleanupMess();
} }
#include <wx/zipstrm.h>
#include <wx/wfstream.h>
// ------------------------------------------------------------------------
const wxImage& LoadImageAny(
wxImage& dest, bool useTheme, wxFileName& base, const wxChar* filename, IEmbeddedImage& onFail )
{
if( useTheme )
{
base.SetName( filename );
base.SetExt( L"png" );
if( base.FileExists() )
{
if( dest.LoadFile( base.GetFullPath() ) ) return dest;
}
base.SetExt( L"jpg" );
if( base.FileExists() )
{
if( dest.LoadFile( base.GetFullPath() ) ) return dest;
}
base.SetExt( L"bmp" );
if( base.FileExists() )
{
if( dest.LoadFile( base.GetFullPath() ) ) return dest;
}
}
return dest = onFail.Get();
}
// ------------------------------------------------------------------------
const wxBitmap& Pcsx2App::GetLogoBitmap()
{
if( m_Bitmap_Logo != NULL )
return *m_Bitmap_Logo;
wxFileName mess;
bool useTheme = (g_Conf->DeskTheme != L"default");
if( useTheme )
{
wxDirName theme( PathDefs::GetThemes() + g_Conf->DeskTheme );
wxFileName zipped( theme.GetFilename() );
zipped.SetExt( L"zip" );
if( zipped.FileExists() )
{
// loading theme from zipfile.
//wxFileInputStream stream( zipped.ToString() )
//wxZipInputStream zstream( stream );
Console::Error( "Loading themes from zipfile is not supported yet.\nFalling back on default theme." );
}
// Overrides zipfile settings (fix when zipfile support added)
mess = theme.ToString();
}
wxImage img;
EmbeddedImage<png_BackgroundLogo> temp; // because gcc can't allow non-const temporaries.
LoadImageAny( img, useTheme, mess, L"BackgroundLogo", temp );
m_Bitmap_Logo = new wxBitmap( img );
return *m_Bitmap_Logo;
}
#include "Resources/ConfigIcon_Cpu.h"
#include "Resources/ConfigIcon_Video.h"
#include "Resources/ConfigIcon_Speedhacks.h"
#include "Resources/ConfigIcon_Gamefixes.h"
#include "Resources/ConfigIcon_Paths.h"
#include "Resources/ConfigIcon_Plugins.h"
// ------------------------------------------------------------------------
wxImageList& Pcsx2App::GetImgList_Config()
{
if( !m_ConfigImagesAreLoaded )
{
wxFileName mess;
bool useTheme = (g_Conf->DeskTheme != L"default");
if( useTheme )
{
wxDirName theme( PathDefs::GetThemes() + g_Conf->DeskTheme );
mess = theme.ToString();
}
wxImage img;
// GCC Specific: wxT() macro is required when using string token pasting. For some reason L
// generates syntax errors. >_<
#undef FancyLoadMacro
#define FancyLoadMacro( name ) \
{ \
EmbeddedImage<png_ConfigIcon_##name> temp( g_Conf->Listbook_ImageSize, g_Conf->Listbook_ImageSize ); \
m_ImageId.Config.name = m_ConfigImages.Add( LoadImageAny( \
img, useTheme, mess, L"ConfigIcon_" wxT(#name), temp ) \
); \
}
FancyLoadMacro( Paths );
FancyLoadMacro( Plugins );
FancyLoadMacro( Gamefixes );
FancyLoadMacro( Speedhacks );
FancyLoadMacro( Video );
FancyLoadMacro( Cpu );
}
m_ConfigImagesAreLoaded = true;
return m_ConfigImages;
}
// ------------------------------------------------------------------------
wxImageList& Pcsx2App::GetImgList_Toolbars()
{
if( m_ToolbarImages == NULL )
{
const int imgSize = g_Conf->Toolbar_ImageSize ? 64 : 32;
m_ToolbarImages = new wxImageList( imgSize, imgSize );
wxFileName mess;
bool useTheme = (g_Conf->DeskTheme != L"default");
if( useTheme )
{
wxDirName theme( PathDefs::GetThemes() + g_Conf->DeskTheme );
mess = theme.ToString();
}
wxImage img;
#undef FancyLoadMacro
#define FancyLoadMacro( name ) \
{ \
EmbeddedImage<png_ToolbarIcon_##name> temp( imgSize, imgSize ); \
m_ImageId.Toolbars.name = m_ConfigImages.Add( LoadImageAny( img, useTheme, mess, L"ToolbarIcon" wxT(#name), temp ) ); \
}
}
return *m_ToolbarImages;
}

View File

@ -1914,6 +1914,10 @@
RelativePath="..\..\gui\AppConfig.cpp" RelativePath="..\..\gui\AppConfig.cpp"
> >
</File> </File>
<File
RelativePath="..\..\gui\AppRes.cpp"
>
</File>
<File <File
RelativePath="..\..\gui\CheckedStaticBox.cpp" RelativePath="..\..\gui\CheckedStaticBox.cpp"
> >