wxgui: improve single-threaded plugin enumerator for Linux (still a bit buggy)

git-svn-id: http://pcsx2.googlecode.com/svn/branches/wxgui@1743 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2009-09-05 09:21:59 +00:00
parent 0fa673fdd2
commit 93e1d87a22
7 changed files with 546 additions and 518 deletions

View File

@ -50,6 +50,8 @@ namespace Threading
// your sister, and then cheating on her with your daughter. // your sister, and then cheating on her with your daughter.
PersistentThread::~PersistentThread() PersistentThread::~PersistentThread()
{ {
if( !m_running ) return;
wxASSERT( !IsSelf() ); // not allowed from our own thread. wxASSERT( !IsSelf() ); // not allowed from our own thread.
if( !_InterlockedExchange( &m_detached, true ) ) if( !_InterlockedExchange( &m_detached, true ) )
@ -62,9 +64,7 @@ namespace Threading
// This function should not be called from the owner thread. // This function should not be called from the owner thread.
void PersistentThread::Start() void PersistentThread::Start()
{ {
wxASSERT( !IsSelf() ); // not allowed from our own thread.
if( m_running ) return; if( m_running ) return;
if( pthread_create( &m_thread, NULL, _internal_callback, this ) != 0 ) if( pthread_create( &m_thread, NULL, _internal_callback, this ) != 0 )
throw Exception::ThreadCreationError(); throw Exception::ThreadCreationError();
@ -74,8 +74,10 @@ namespace Threading
// This function should not be called from the owner thread. // This function should not be called from the owner thread.
void PersistentThread::Detach() void PersistentThread::Detach()
{ {
wxASSERT( !IsSelf() ); // not allowed from our own thread. if( !m_running ) return;
if( _InterlockedExchange( &m_detached, true ) ) return; if( _InterlockedExchange( &m_detached, true ) ) return;
wxASSERT( !IsSelf() ); // not allowed from our own thread.
pthread_detach( m_thread ); pthread_detach( m_thread );
} }
@ -92,7 +94,6 @@ namespace Threading
// //
void PersistentThread::Cancel( bool isBlocking ) void PersistentThread::Cancel( bool isBlocking )
{ {
wxASSERT( !IsSelf() );
if( _InterlockedExchange( &m_detached, true ) ) if( _InterlockedExchange( &m_detached, true ) )
{ {
if( m_running ) if( m_running )
@ -100,6 +101,7 @@ namespace Threading
return; return;
} }
wxASSERT( !IsSelf() );
pthread_cancel( m_thread ); pthread_cancel( m_thread );
if( isBlocking ) if( isBlocking )
@ -120,8 +122,6 @@ namespace Threading
// //
sptr PersistentThread::Block() sptr PersistentThread::Block()
{ {
DevAssert( !IsSelf(), "Thread deadlock detected; Block() should never be called by the owner thread." );
if( _InterlockedExchange( &m_detached, true ) ) if( _InterlockedExchange( &m_detached, true ) )
{ {
// already detached: if we're still running then its an invalid operation // already detached: if we're still running then its an invalid operation
@ -132,11 +132,12 @@ namespace Threading
} }
else else
{ {
DevAssert( !IsSelf(), "Thread deadlock detected; Block() should never be called by the owner thread." );
pthread_join( m_thread, (void**)&m_returncode ); pthread_join( m_thread, (void**)&m_returncode );
return m_returncode; return m_returncode;
} }
} }
bool PersistentThread::IsSelf() const bool PersistentThread::IsSelf() const
{ {
return pthread_self() == m_thread; return pthread_self() == m_thread;

View File

@ -1,416 +1,410 @@
<?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/PS2Edefs.h" /> <Unit filename="../../common/include/PS2Edefs.h" />
<Unit filename="../../common/include/PS2Etypes.h" /> <Unit filename="../../common/include/PS2Etypes.h" />
<Unit filename="../../common/include/Pcsx2Api.h" /> <Unit filename="../../common/include/Pcsx2Api.h" />
<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/PluginCallbacks.h" /> <Unit filename="../../common/include/PluginCallbacks.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="../COP0.cpp" />
<Unit filename="../CDVD/Makefile.am" /> <Unit filename="../COP2.cpp" />
<Unit filename="../COP0.cpp" /> <Unit filename="../Cache.cpp" />
<Unit filename="../COP2.cpp" /> <Unit filename="../Cache.h" />
<Unit filename="../Cache.cpp" /> <Unit filename="../Common.h" />
<Unit filename="../Cache.h" /> <Unit filename="../Config.h" />
<Unit filename="../Common.h" /> <Unit filename="../Counters.cpp" />
<Unit filename="../Config.h" /> <Unit filename="../Counters.h" />
<Unit filename="../Counters.cpp" /> <Unit filename="../DebugTools/Debug.h" />
<Unit filename="../Counters.h" /> <Unit filename="../DebugTools/DisASM.h" />
<Unit filename="../DebugTools/Debug.h" /> <Unit filename="../DebugTools/DisR3000A.cpp" />
<Unit filename="../DebugTools/DisASM.h" /> <Unit filename="../DebugTools/DisR5900.cpp" />
<Unit filename="../DebugTools/DisR3000A.cpp" /> <Unit filename="../DebugTools/DisR5900asm.cpp" />
<Unit filename="../DebugTools/DisR5900.cpp" /> <Unit filename="../DebugTools/DisVU0Micro.cpp" />
<Unit filename="../DebugTools/DisR5900asm.cpp" /> <Unit filename="../DebugTools/DisVU1Micro.cpp" />
<Unit filename="../DebugTools/DisVU0Micro.cpp" /> <Unit filename="../DebugTools/DisVUmicro.h" />
<Unit filename="../DebugTools/DisVU1Micro.cpp" /> <Unit filename="../DebugTools/DisVUops.h" />
<Unit filename="../DebugTools/DisVUmicro.h" /> <Unit filename="../Docs/ChangeLog.txt" />
<Unit filename="../DebugTools/DisVUops.h" /> <Unit filename="../Docs/License.txt" />
<Unit filename="../Docs/ChangeLog.txt" /> <Unit filename="../Docs/devblog.txt" />
<Unit filename="../Docs/License.txt" /> <Unit filename="../Dump.cpp" />
<Unit filename="../Docs/PS2Edefs.txt" /> <Unit filename="../Dump.h" />
<Unit filename="../Docs/RemoteDebugging.txt" /> <Unit filename="../Elfheader.cpp" />
<Unit filename="../Docs/devblog.txt" /> <Unit filename="../Elfheader.h" />
<Unit filename="../Docs/readme 0.9.4.txt" /> <Unit filename="../FPU.cpp" />
<Unit filename="../Docs/readme Playground.txt" /> <Unit filename="../FiFo.cpp" />
<Unit filename="../Dump.cpp" /> <Unit filename="../GS.cpp" />
<Unit filename="../Dump.h" /> <Unit filename="../GS.h" />
<Unit filename="../Elfheader.cpp" /> <Unit filename="../Gif.cpp" />
<Unit filename="../Elfheader.h" /> <Unit filename="../HashMap.h" />
<Unit filename="../FPU.cpp" /> <Unit filename="../HashTools.cpp" />
<Unit filename="../FiFo.cpp" /> <Unit filename="../HostGui.h" />
<Unit filename="../GS.cpp" /> <Unit filename="../Hw.cpp" />
<Unit filename="../GS.h" /> <Unit filename="../Hw.h" />
<Unit filename="../Gif.cpp" /> <Unit filename="../HwRead.cpp" />
<Unit filename="../HashMap.h" /> <Unit filename="../HwWrite.cpp" />
<Unit filename="../HashTools.cpp" /> <Unit filename="../IPU/IPU.cpp" />
<Unit filename="../HostGui.h" /> <Unit filename="../IPU/IPU.h" />
<Unit filename="../Hw.cpp" /> <Unit filename="../IPU/acoroutine.S" />
<Unit filename="../Hw.h" /> <Unit filename="../IPU/coroutine.cpp" />
<Unit filename="../HwRead.cpp" /> <Unit filename="../IPU/coroutine.h" />
<Unit filename="../HwWrite.cpp" /> <Unit filename="../IPU/mpeg2lib/Idct.cpp" />
<Unit filename="../IPU/IPU.cpp" /> <Unit filename="../IPU/mpeg2lib/Mpeg.cpp" />
<Unit filename="../IPU/IPU.h" /> <Unit filename="../IPU/mpeg2lib/Mpeg.h" />
<Unit filename="../IPU/acoroutine.S" /> <Unit filename="../IPU/mpeg2lib/Vlc.h" />
<Unit filename="../IPU/coroutine.cpp" /> <Unit filename="../IPU/yuv2rgb.cpp" />
<Unit filename="../IPU/coroutine.h" /> <Unit filename="../IPU/yuv2rgb.h" />
<Unit filename="../IPU/mpeg2lib/Idct.cpp" /> <Unit filename="../Interpreter.cpp" />
<Unit filename="../IPU/mpeg2lib/Mpeg.cpp" /> <Unit filename="../IopBios.cpp" />
<Unit filename="../IPU/mpeg2lib/Mpeg.h" /> <Unit filename="../IopBios.h" />
<Unit filename="../IPU/mpeg2lib/Vlc.h" /> <Unit filename="../IopBios2.h" />
<Unit filename="../IPU/yuv2rgb.cpp" /> <Unit filename="../IopCommon.h" />
<Unit filename="../IPU/yuv2rgb.h" /> <Unit filename="../IopCounters.cpp" />
<Unit filename="../Interpreter.cpp" /> <Unit filename="../IopCounters.h" />
<Unit filename="../IopBios.cpp" /> <Unit filename="../IopDma.cpp" />
<Unit filename="../IopBios.h" /> <Unit filename="../IopDma.h" />
<Unit filename="../IopBios2.h" /> <Unit filename="../IopHw.cpp" />
<Unit filename="../IopCommon.h" /> <Unit filename="../IopHw.h" />
<Unit filename="../IopCounters.cpp" /> <Unit filename="../IopMem.cpp" />
<Unit filename="../IopCounters.h" /> <Unit filename="../IopMem.h" />
<Unit filename="../IopDma.cpp" /> <Unit filename="../IopSio2.cpp" />
<Unit filename="../IopDma.h" /> <Unit filename="../IopSio2.h" />
<Unit filename="../IopHw.cpp" /> <Unit filename="LnxHostSys.cpp" />
<Unit filename="../IopHw.h" /> <Unit filename="../MMI.cpp" />
<Unit filename="../IopMem.cpp" /> <Unit filename="../MTGS.cpp" />
<Unit filename="../IopMem.h" /> <Unit filename="../Memory.cpp" />
<Unit filename="../IopSio2.cpp" /> <Unit filename="../Memory.h" />
<Unit filename="../IopSio2.h" /> <Unit filename="../MemoryCard.cpp" />
<Unit filename="LnxHostSys.cpp" /> <Unit filename="../MemoryCard.h" />
<Unit filename="../MMI.cpp" /> <Unit filename="../Misc.cpp" />
<Unit filename="../MTGS.cpp" /> <Unit filename="../Misc.h" />
<Unit filename="../Memory.cpp" /> <Unit filename="../NakedAsm.h" />
<Unit filename="../Memory.h" /> <Unit filename="../Patch.cpp" />
<Unit filename="../MemoryCard.cpp" /> <Unit filename="../Patch.h" />
<Unit filename="../MemoryCard.h" /> <Unit filename="../PathUtils.cpp" />
<Unit filename="../Misc.cpp" /> <Unit filename="../Paths.h" />
<Unit filename="../Misc.h" /> <Unit filename="../Pcsx2Config.cpp" />
<Unit filename="../NakedAsm.h" /> <Unit filename="../PluginManager.cpp" />
<Unit filename="../Patch.cpp" /> <Unit filename="../Plugins.h" />
<Unit filename="../Patch.h" /> <Unit filename="../PrecompiledHeader.h" />
<Unit filename="../PathUtils.cpp" /> <Unit filename="../R3000A.cpp" />
<Unit filename="../Paths.h" /> <Unit filename="../R3000A.h" />
<Unit filename="../Pcsx2Config.cpp" /> <Unit filename="../R3000AInterpreter.cpp" />
<Unit filename="../PluginManager.cpp" /> <Unit filename="../R3000AOpcodeTables.cpp" />
<Unit filename="../Plugins.h" /> <Unit filename="../R5900.cpp" />
<Unit filename="../PrecompiledHeader.h" /> <Unit filename="../R5900.h" />
<Unit filename="../R3000A.cpp" /> <Unit filename="../R5900Exceptions.h" />
<Unit filename="../R3000A.h" /> <Unit filename="../R5900OpcodeImpl.cpp" />
<Unit filename="../R3000AInterpreter.cpp" /> <Unit filename="../R5900OpcodeTables.cpp" />
<Unit filename="../R3000AOpcodeTables.cpp" /> <Unit filename="../R5900OpcodeTables.h" />
<Unit filename="../R5900.cpp" /> <Unit filename="../RecoverySystem.cpp" />
<Unit filename="../R5900.h" /> <Unit filename="../SPR.cpp" />
<Unit filename="../R5900Exceptions.h" /> <Unit filename="../SPR.h" />
<Unit filename="../R5900OpcodeImpl.cpp" /> <Unit filename="../SamplProf.h" />
<Unit filename="../R5900OpcodeTables.cpp" /> <Unit filename="../SaveState.cpp" />
<Unit filename="../R5900OpcodeTables.h" /> <Unit filename="../SaveState.h" />
<Unit filename="../RecoverySystem.cpp" /> <Unit filename="../Sif.cpp" />
<Unit filename="../SPR.cpp" /> <Unit filename="../Sif.h" />
<Unit filename="../SPR.h" /> <Unit filename="../Sifcmd.h" />
<Unit filename="../SamplProf.h" /> <Unit filename="../Sio.cpp" />
<Unit filename="../SaveState.cpp" /> <Unit filename="../Sio.h" />
<Unit filename="../SaveState.h" /> <Unit filename="../SourceLog.cpp" />
<Unit filename="../Sif.cpp" /> <Unit filename="../Stats.cpp" />
<Unit filename="../Sif.h" /> <Unit filename="../Stats.h" />
<Unit filename="../Sifcmd.h" /> <Unit filename="../StringUtils.h" />
<Unit filename="../Sio.cpp" /> <Unit filename="../System.cpp" />
<Unit filename="../Sio.h" /> <Unit filename="../System.h" />
<Unit filename="../SourceLog.cpp" /> <Unit filename="../Utilities/AsciiFile.h" />
<Unit filename="../Stats.cpp" /> <Unit filename="../Utilities/FileUtils.cpp" />
<Unit filename="../Stats.h" /> <Unit filename="../Utilities/folderdesc.txt" />
<Unit filename="../StringUtils.h" /> <Unit filename="../VU.h" />
<Unit filename="../System.cpp" /> <Unit filename="../VU0.cpp" />
<Unit filename="../System.h" /> <Unit filename="../VU0micro.cpp" />
<Unit filename="../Utilities/AsciiFile.h" /> <Unit filename="../VU0microInterp.cpp" />
<Unit filename="../Utilities/FileUtils.cpp" /> <Unit filename="../VU1micro.cpp" />
<Unit filename="../Utilities/folderdesc.txt" /> <Unit filename="../VU1microInterp.cpp" />
<Unit filename="../VU.h" /> <Unit filename="../VUflags.cpp" />
<Unit filename="../VU0.cpp" /> <Unit filename="../VUflags.h" />
<Unit filename="../VU0micro.cpp" /> <Unit filename="../VUmicro.h" />
<Unit filename="../VU0microInterp.cpp" /> <Unit filename="../VUmicroMem.cpp" />
<Unit filename="../VU1micro.cpp" /> <Unit filename="../VUops.cpp" />
<Unit filename="../VU1microInterp.cpp" /> <Unit filename="../VUops.h" />
<Unit filename="../VUflags.cpp" /> <Unit filename="../Vif.cpp" />
<Unit filename="../VUflags.h" /> <Unit filename="../Vif.h" />
<Unit filename="../VUmicro.h" /> <Unit filename="../VifDma.cpp" />
<Unit filename="../VUmicroMem.cpp" /> <Unit filename="../VifDma.h" />
<Unit filename="../VUops.cpp" /> <Unit filename="../gui/AdvancedDialog.cpp" />
<Unit filename="../VUops.h" /> <Unit filename="../gui/AdvancedDialog.h" />
<Unit filename="../Vif.cpp" /> <Unit filename="../gui/App.h" />
<Unit filename="../Vif.h" /> <Unit filename="../gui/AppAssert.cpp" />
<Unit filename="../VifDma.cpp" /> <Unit filename="../gui/AppConfig.cpp" />
<Unit filename="../VifDma.h" /> <Unit filename="../gui/AppConfig.h" />
<Unit filename="../gui/AdvancedDialog.cpp" /> <Unit filename="../gui/AppRes.cpp" />
<Unit filename="../gui/AdvancedDialog.h" /> <Unit filename="../gui/CheckedStaticBox.cpp" />
<Unit filename="../gui/App.h" /> <Unit filename="../gui/CheckedStaticBox.h" />
<Unit filename="../gui/AppAssert.cpp" /> <Unit filename="../gui/ConsoleLogger.cpp" />
<Unit filename="../gui/AppConfig.cpp" /> <Unit filename="../gui/ConsoleLogger.h" />
<Unit filename="../gui/AppConfig.h" /> <Unit filename="../gui/Dialogs/AboutBoxDialog.cpp" />
<Unit filename="../gui/AppRes.cpp" /> <Unit filename="../gui/Dialogs/ConfigurationDialog.cpp" />
<Unit filename="../gui/CheckedStaticBox.cpp" /> <Unit filename="../gui/Dialogs/ConfigurationDialog.h" />
<Unit filename="../gui/CheckedStaticBox.h" /> <Unit filename="../gui/Dialogs/FirstTimeWizard.cpp" />
<Unit filename="../gui/ConsoleLogger.cpp" /> <Unit filename="../gui/Dialogs/ImportSettingsDialog.cpp" />
<Unit filename="../gui/ConsoleLogger.h" /> <Unit filename="../gui/Dialogs/LogOptionsDialog.cpp" />
<Unit filename="../gui/Dialogs/AboutBoxDialog.cpp" /> <Unit filename="../gui/Dialogs/LogOptionsDialog.h" />
<Unit filename="../gui/Dialogs/ConfigurationDialog.cpp" /> <Unit filename="../gui/Dialogs/ModalPopups.h" />
<Unit filename="../gui/Dialogs/ConfigurationDialog.h" /> <Unit filename="../gui/Dialogs/PickUserModeDialog.cpp" />
<Unit filename="../gui/Dialogs/FirstTimeWizard.cpp" /> <Unit filename="../gui/HostGui.cpp" />
<Unit filename="../gui/Dialogs/ImportSettingsDialog.cpp" /> <Unit filename="../gui/IniInterface.cpp" />
<Unit filename="../gui/Dialogs/LogOptionsDialog.cpp" /> <Unit filename="../gui/IniInterface.h" />
<Unit filename="../gui/Dialogs/LogOptionsDialog.h" /> <Unit filename="../gui/MainFrame.cpp" />
<Unit filename="../gui/Dialogs/ModalPopups.h" /> <Unit filename="../gui/MainFrame.h" />
<Unit filename="../gui/Dialogs/PickUserModeDialog.cpp" /> <Unit filename="../gui/MainMenuClicks.cpp" />
<Unit filename="../gui/HostGui.cpp" /> <Unit filename="../gui/Panels/AudioPanel.cpp" />
<Unit filename="../gui/IniInterface.cpp" /> <Unit filename="../gui/Panels/BiosSelectorPanel.cpp" />
<Unit filename="../gui/IniInterface.h" /> <Unit filename="../gui/Panels/ConfigurationPanels.h" />
<Unit filename="../gui/MainFrame.cpp" /> <Unit filename="../gui/Panels/CpuPanel.cpp" />
<Unit filename="../gui/MainFrame.h" /> <Unit filename="../gui/Panels/DirPickerPanel.cpp" />
<Unit filename="../gui/MainMenuClicks.cpp" /> <Unit filename="../gui/Panels/GameFixesPanel.cpp" />
<Unit filename="../gui/Panels/AudioPanel.cpp" /> <Unit filename="../gui/Panels/MiscPanelStuff.cpp" />
<Unit filename="../gui/Panels/BiosSelectorPanel.cpp" /> <Unit filename="../gui/Panels/PathsPanel.cpp" />
<Unit filename="../gui/Panels/ConfigurationPanels.h" /> <Unit filename="../gui/Panels/PluginSelectorPanel.cpp" />
<Unit filename="../gui/Panels/CpuPanel.cpp" /> <Unit filename="../gui/Panels/SpeedhacksPanel.cpp" />
<Unit filename="../gui/Panels/DirPickerPanel.cpp" /> <Unit filename="../gui/Panels/VideoPanel.cpp" />
<Unit filename="../gui/Panels/GameFixesPanel.cpp" /> <Unit filename="../gui/Plugins.cpp" />
<Unit filename="../gui/Panels/MiscPanelStuff.cpp" /> <Unit filename="../gui/Resources/AppIcon.h" />
<Unit filename="../gui/Panels/PathsPanel.cpp" /> <Unit filename="../gui/Resources/BackgroundLogo.h" />
<Unit filename="../gui/Panels/PluginSelectorPanel.cpp" /> <Unit filename="../gui/Resources/ConfigIcon_Cpu.h" />
<Unit filename="../gui/Panels/SpeedhacksPanel.cpp" /> <Unit filename="../gui/Resources/ConfigIcon_Gamefixes.h" />
<Unit filename="../gui/Panels/VideoPanel.cpp" /> <Unit filename="../gui/Resources/ConfigIcon_Paths.h" />
<Unit filename="../gui/Plugins.cpp" /> <Unit filename="../gui/Resources/ConfigIcon_Plugins.h" />
<Unit filename="../gui/Resources/AppIcon.h" /> <Unit filename="../gui/Resources/ConfigIcon_Speedhacks.h" />
<Unit filename="../gui/Resources/BackgroundLogo.h" /> <Unit filename="../gui/Resources/ConfigIcon_Video.h" />
<Unit filename="../gui/Resources/ConfigIcon_Cpu.h" /> <Unit filename="../gui/Resources/EmbeddedImage.h" />
<Unit filename="../gui/Resources/ConfigIcon_Gamefixes.h" /> <Unit filename="../gui/Resources/ps2_silver.h" />
<Unit filename="../gui/Resources/ConfigIcon_Paths.h" /> <Unit filename="../gui/Saveslots.cpp" />
<Unit filename="../gui/Resources/ConfigIcon_Plugins.h" /> <Unit filename="../gui/i18n.cpp" />
<Unit filename="../gui/Resources/ConfigIcon_Speedhacks.h" /> <Unit filename="../gui/i18n.h" />
<Unit filename="../gui/Resources/ConfigIcon_Video.h" /> <Unit filename="../gui/main.cpp" />
<Unit filename="../gui/Resources/EmbeddedImage.h" /> <Unit filename="../gui/wxHelpers.cpp" />
<Unit filename="../gui/Resources/ps2_silver.h" /> <Unit filename="../gui/wxHelpers.h" />
<Unit filename="../gui/Saveslots.cpp" /> <Unit filename="../pcsxAbout.bmp" />
<Unit filename="../gui/i18n.cpp" /> <Unit filename="../ps2/BiosTools.cpp" />
<Unit filename="../gui/i18n.h" /> <Unit filename="../ps2/BiosTools.h" />
<Unit filename="../gui/main.cpp" /> <Unit filename="../ps2/CoreEmuThread.cpp" />
<Unit filename="../gui/wxHelpers.cpp" /> <Unit filename="../ps2/CoreEmuThread.h" />
<Unit filename="../gui/wxHelpers.h" /> <Unit filename="../ps2/Iop/IopHwRead.cpp" />
<Unit filename="../pcsxAbout.bmp" /> <Unit filename="../ps2/Iop/IopHwWrite.cpp" />
<Unit filename="../ps2/BiosTools.cpp" /> <Unit filename="../ps2/Iop/IopHw_Internal.h" />
<Unit filename="../ps2/BiosTools.h" /> <Unit filename="../tinyxml/tinystr.cpp" />
<Unit filename="../ps2/CoreEmuThread.cpp" /> <Unit filename="../tinyxml/tinystr.h" />
<Unit filename="../ps2/CoreEmuThread.h" /> <Unit filename="../tinyxml/tinyxml.cpp" />
<Unit filename="../ps2/Iop/IopHwRead.cpp" /> <Unit filename="../tinyxml/tinyxml.h" />
<Unit filename="../ps2/Iop/IopHwWrite.cpp" /> <Unit filename="../tinyxml/tinyxmlerror.cpp" />
<Unit filename="../ps2/Iop/IopHw_Internal.h" /> <Unit filename="../tinyxml/tinyxmlparser.cpp" />
<Unit filename="../tinyxml/tinystr.cpp" /> <Unit filename="../vtlb.cpp" />
<Unit filename="../tinyxml/tinystr.h" /> <Unit filename="../vtlb.h" />
<Unit filename="../tinyxml/tinyxml.cpp" /> <Unit filename="../x86/BaseblockEx.cpp" />
<Unit filename="../tinyxml/tinyxml.h" /> <Unit filename="../x86/BaseblockEx.h" />
<Unit filename="../tinyxml/tinyxmlerror.cpp" /> <Unit filename="../x86/aR3000A.S" />
<Unit filename="../tinyxml/tinyxmlparser.cpp" /> <Unit filename="../x86/aVUzerorec.S" />
<Unit filename="../vtlb.cpp" /> <Unit filename="../x86/aVif.S" />
<Unit filename="../vtlb.h" /> <Unit filename="../x86/iCOP0.cpp" />
<Unit filename="../x86/BaseblockEx.cpp" /> <Unit filename="../x86/iCOP0.h" />
<Unit filename="../x86/BaseblockEx.h" /> <Unit filename="../x86/iCOP2.cpp" />
<Unit filename="../x86/aR3000A.S" /> <Unit filename="../x86/iCore.cpp" />
<Unit filename="../x86/aVUzerorec.S" /> <Unit filename="../x86/iCore.h" />
<Unit filename="../x86/aVif.S" /> <Unit filename="../x86/iFPU.cpp" />
<Unit filename="../x86/iCOP0.cpp" /> <Unit filename="../x86/iFPU.h" />
<Unit filename="../x86/iCOP0.h" /> <Unit filename="../x86/iFPUd.cpp" />
<Unit filename="../x86/iCOP2.cpp" /> <Unit filename="../x86/iMMI.cpp" />
<Unit filename="../x86/iCore.cpp" /> <Unit filename="../x86/iMMI.h" />
<Unit filename="../x86/iCore.h" /> <Unit filename="../x86/iMisc.cpp" />
<Unit filename="../x86/iFPU.cpp" /> <Unit filename="../x86/iR3000A.cpp" />
<Unit filename="../x86/iFPU.h" /> <Unit filename="../x86/iR3000A.h" />
<Unit filename="../x86/iFPUd.cpp" /> <Unit filename="../x86/iR3000Atables.cpp" />
<Unit filename="../x86/iMMI.cpp" /> <Unit filename="../x86/iR5900.h" />
<Unit filename="../x86/iMMI.h" /> <Unit filename="../x86/iR5900Arit.h" />
<Unit filename="../x86/iMisc.cpp" /> <Unit filename="../x86/iR5900AritImm.h" />
<Unit filename="../x86/iR3000A.cpp" /> <Unit filename="../x86/iR5900Branch.h" />
<Unit filename="../x86/iR3000A.h" /> <Unit filename="../x86/iR5900Jump.h" />
<Unit filename="../x86/iR3000Atables.cpp" /> <Unit filename="../x86/iR5900LoadStore.h" />
<Unit filename="../x86/iR5900.h" /> <Unit filename="../x86/iR5900Misc.cpp" />
<Unit filename="../x86/iR5900Arit.h" /> <Unit filename="../x86/iR5900Move.h" />
<Unit filename="../x86/iR5900AritImm.h" /> <Unit filename="../x86/iR5900MultDiv.h" />
<Unit filename="../x86/iR5900Branch.h" /> <Unit filename="../x86/iR5900Shift.h" />
<Unit filename="../x86/iR5900Jump.h" /> <Unit filename="../x86/iVU0micro.cpp" />
<Unit filename="../x86/iR5900LoadStore.h" /> <Unit filename="../x86/iVU1micro.cpp" />
<Unit filename="../x86/iR5900Misc.cpp" /> <Unit filename="../x86/iVif.cpp" />
<Unit filename="../x86/iR5900Move.h" /> <Unit filename="../x86/ir5900tables.cpp" />
<Unit filename="../x86/iR5900MultDiv.h" /> <Unit filename="../x86/ix86-32/aR5900-32.S" />
<Unit filename="../x86/iR5900Shift.h" /> <Unit filename="../x86/ix86-32/iCore-32.cpp" />
<Unit filename="../x86/iVU0micro.cpp" /> <Unit filename="../x86/ix86-32/iR5900-32.cpp" />
<Unit filename="../x86/iVU1micro.cpp" /> <Unit filename="../x86/ix86-32/iR5900Arit.cpp" />
<Unit filename="../x86/iVif.cpp" /> <Unit filename="../x86/ix86-32/iR5900AritImm.cpp" />
<Unit filename="../x86/ir5900tables.cpp" /> <Unit filename="../x86/ix86-32/iR5900Branch.cpp" />
<Unit filename="../x86/ix86-32/aR5900-32.S" /> <Unit filename="../x86/ix86-32/iR5900Jump.cpp" />
<Unit filename="../x86/ix86-32/iCore-32.cpp" /> <Unit filename="../x86/ix86-32/iR5900LoadStore.cpp" />
<Unit filename="../x86/ix86-32/iR5900-32.cpp" /> <Unit filename="../x86/ix86-32/iR5900Move.cpp" />
<Unit filename="../x86/ix86-32/iR5900Arit.cpp" /> <Unit filename="../x86/ix86-32/iR5900MultDiv.cpp" />
<Unit filename="../x86/ix86-32/iR5900AritImm.cpp" /> <Unit filename="../x86/ix86-32/iR5900Shift.cpp" />
<Unit filename="../x86/ix86-32/iR5900Branch.cpp" /> <Unit filename="../x86/ix86-32/iR5900Templates.cpp" />
<Unit filename="../x86/ix86-32/iR5900Jump.cpp" /> <Unit filename="../x86/ix86-32/recVTLB.cpp" />
<Unit filename="../x86/ix86-32/iR5900LoadStore.cpp" /> <Unit filename="../x86/microVU.cpp" />
<Unit filename="../x86/ix86-32/iR5900Move.cpp" /> <Unit filename="../x86/microVU.h" />
<Unit filename="../x86/ix86-32/iR5900MultDiv.cpp" /> <Unit filename="../x86/microVU_Alloc.inl" />
<Unit filename="../x86/ix86-32/iR5900Shift.cpp" /> <Unit filename="../x86/microVU_Analyze.inl" />
<Unit filename="../x86/ix86-32/iR5900Templates.cpp" /> <Unit filename="../x86/microVU_Compile.inl" />
<Unit filename="../x86/ix86-32/recVTLB.cpp" /> <Unit filename="../x86/microVU_Execute.inl" />
<Unit filename="../x86/microVU.cpp" /> <Unit filename="../x86/microVU_Flags.inl" />
<Unit filename="../x86/microVU.h" /> <Unit filename="../x86/microVU_IR.h" />
<Unit filename="../x86/microVU_Alloc.inl" /> <Unit filename="../x86/microVU_Log.inl" />
<Unit filename="../x86/microVU_Analyze.inl" /> <Unit filename="../x86/microVU_Lower.inl" />
<Unit filename="../x86/microVU_Compile.inl" /> <Unit filename="../x86/microVU_Misc.h" />
<Unit filename="../x86/microVU_Execute.inl" /> <Unit filename="../x86/microVU_Misc.inl" />
<Unit filename="../x86/microVU_Flags.inl" /> <Unit filename="../x86/microVU_Tables.inl" />
<Unit filename="../x86/microVU_IR.h" /> <Unit filename="../x86/microVU_Upper.inl" />
<Unit filename="../x86/microVU_Log.inl" /> <Unit filename="../x86/sVU_Debug.h" />
<Unit filename="../x86/microVU_Lower.inl" /> <Unit filename="../x86/sVU_Lower.cpp" />
<Unit filename="../x86/microVU_Misc.h" /> <Unit filename="../x86/sVU_Micro.cpp" />
<Unit filename="../x86/microVU_Misc.inl" /> <Unit filename="../x86/sVU_Micro.h" />
<Unit filename="../x86/microVU_Tables.inl" /> <Unit filename="../x86/sVU_Upper.cpp" />
<Unit filename="../x86/microVU_Upper.inl" /> <Unit filename="../x86/sVU_zerorec.cpp" />
<Unit filename="../x86/sVU_Debug.h" /> <Unit filename="../x86/sVU_zerorec.h" />
<Unit filename="../x86/sVU_Lower.cpp" /> <Unit filename="../xmlpatchloader.cpp" />
<Unit filename="../x86/sVU_Micro.cpp" /> <Extensions>
<Unit filename="../x86/sVU_Micro.h" /> <envvars />
<Unit filename="../x86/sVU_Upper.cpp" /> <code_completion>
<Unit filename="../x86/sVU_zerorec.cpp" /> <search_path add="/usr/include/wx-2.8" />
<Unit filename="../x86/sVU_zerorec.h" /> </code_completion>
<Unit filename="../xmlpatchloader.cpp" /> <lib_finder disable_auto="1" />
<Extensions> <debugger />
<envvars /> </Extensions>
<code_completion> </Project>
<search_path add="/usr/include/wx-2.8" /> </CodeBlocks_project_file>
</code_completion>
<lib_finder disable_auto="1" />
<debugger />
</Extensions>
</Project>
</CodeBlocks_project_file>

View File

@ -603,7 +603,7 @@ PluginManager::PluginManager( const wxString (&folders)[PluginId_Count] )
// Bind Optional Functions // Bind Optional Functions
// (leave pointer null and do not generate error) // (leave pointer null and do not generate error)
} }
// Hack for PAD's stupid parameter passed on Init // Hack for PAD's stupid parameter passed on Init
PADinit = (_PADinit)m_info[PluginId_PAD].CommonBindings.Init; PADinit = (_PADinit)m_info[PluginId_PAD].CommonBindings.Init;
m_info[PluginId_PAD].CommonBindings.Init = _hack_PADinit; m_info[PluginId_PAD].CommonBindings.Init = _hack_PADinit;
@ -613,7 +613,7 @@ PluginManager::~PluginManager()
{ {
Close(); Close();
Shutdown(); Shutdown();
// All library unloading done automatically. // All library unloading done automatically.
} }
@ -627,7 +627,7 @@ void PluginManager::BindCommon( PluginsEnum_t pid )
while( current->MethodName != NULL ) while( current->MethodName != NULL )
{ {
*target = (VoidMethod*)m_info[pid].Lib.GetSymbol( current->GetMethodName( pid ) ); *target = (VoidMethod*)m_info[pid].Lib.GetSymbol( current->GetMethodName( pid ) );
if( *target == NULL ) if( *target == NULL )
*target = current->Fallback; *target = current->Fallback;
@ -636,7 +636,7 @@ void PluginManager::BindCommon( PluginsEnum_t pid )
throw Exception::PluginLoadError( pid, m_info[pid].Filename, throw Exception::PluginLoadError( pid, m_info[pid].Filename,
wxLt( "Configured plugin is not a 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++;
current++; current++;
} }
@ -759,7 +759,7 @@ static bool OpenPlugin_FW()
void PluginManager::Open( PluginsEnum_t pid ) void PluginManager::Open( PluginsEnum_t pid )
{ {
if( m_info[pid].IsOpened ) return; if( m_info[pid].IsOpened ) return;
// Each Open needs to be called explicitly. >_< // Each Open needs to be called explicitly. >_<
bool result = true; bool result = true;
@ -793,7 +793,7 @@ void PluginManager::Close( PluginsEnum_t pid )
if( pid == PluginId_GS ) if( pid == PluginId_GS )
{ {
if( mtgsThread == NULL ) return; if( mtgsThread == NULL ) return;
if( !mtgsThread->IsSelf() ) if( !mtgsThread->IsSelf() )
{ {
// force-close PAD before GS, because the PAD depends on the GS window. // force-close PAD before GS, because the PAD depends on the GS window.
@ -853,7 +853,7 @@ void PluginManager::Shutdown()
// Shutdown plugins in reverse order (probably doesn't matter... // Shutdown plugins in reverse order (probably doesn't matter...
// ... but what the heck, right?) // ... but what the heck, right?)
for( int i=PluginId_Count-1; i>=0; --i ) for( int i=PluginId_Count-1; i>=0; --i )
{ {
const PluginsEnum_t pid = tbl_PluginInfo[i].id; const PluginsEnum_t pid = tbl_PluginInfo[i].id;
@ -916,7 +916,7 @@ PluginManager* PluginManager_Create( const wxString (&folders)[PluginId_Count] )
PluginManager* PluginManager_Create( const wxChar* (&folders)[PluginId_Count] ) PluginManager* PluginManager_Create( const wxChar* (&folders)[PluginId_Count] )
{ {
wxString passins[PluginId_Count]; wxString passins[PluginId_Count];
const PluginInfo* pi = tbl_PluginInfo-1; const PluginInfo* pi = tbl_PluginInfo-1;
while( ++pi, pi->shortname != NULL ) while( ++pi, pi->shortname != NULL )
passins[pi->id] = folders[pi->id]; passins[pi->id] = folders[pi->id];

View File

@ -105,7 +105,7 @@ void pxLogConsole::DoLog( wxLogLevel level, const wxChar *szString, time_t t )
sptr ConsoleTestThread::ExecuteTask() sptr ConsoleTestThread::ExecuteTask()
{ {
static int numtrack = 0; static int numtrack = 0;
while( !m_done ) while( !m_done )
{ {
// Two lines, both formatted, and varied colors. This makes for a fairly realistic // Two lines, both formatted, and varied colors. This makes for a fairly realistic
@ -195,7 +195,7 @@ void ConsoleLogFrame::ColorArray::Cleanup()
{ {
// The contents of m_table were created with placement new, and must be // The contents of m_table were created with placement new, and must be
// disposed of manually: // disposed of manually:
for( int i=0; i<8; ++i ) for( int i=0; i<8; ++i )
m_table[i].~wxTextAttr(); m_table[i].~wxTextAttr();
} }
@ -259,7 +259,7 @@ ConsoleLogFrame::ConsoleLogFrame( MainEmuFrame *parent, const wxString& title, A
wxMenu& menuAppear = *new wxMenu(); wxMenu& menuAppear = *new wxMenu();
menuAppear.Append( wxID_ANY, _("Always on Top"), menuAppear.Append( wxID_ANY, _("Always on Top"),
_("When checked the log window will be visible over other foreground windows."), wxITEM_CHECK ); _("When checked the log window will be visible over other foreground windows."), wxITEM_CHECK );
menuAppear.Append( wxID_ANY, _("Font Size"), &menuFontSizes ); menuAppear.Append( wxID_ANY, _("Font Size"), &menuFontSizes );
pMenuBar->Append(&menuLog, _("&Log")); pMenuBar->Append(&menuLog, _("&Log"));
pMenuBar->Append(&menuAppear, _("&Appearance")); pMenuBar->Append(&menuAppear, _("&Appearance"));
@ -290,7 +290,7 @@ ConsoleLogFrame::ConsoleLogFrame( MainEmuFrame *parent, const wxString& title, A
Connect( wxEVT_SetTitleText, wxCommandEventHandler(ConsoleLogFrame::OnSetTitle) ); Connect( wxEVT_SetTitleText, wxCommandEventHandler(ConsoleLogFrame::OnSetTitle) );
Connect( wxEVT_DockConsole, wxCommandEventHandler(ConsoleLogFrame::OnDockedMove) ); Connect( wxEVT_DockConsole, wxCommandEventHandler(ConsoleLogFrame::OnDockedMove) );
Connect( wxEVT_SemaphoreWait, wxCommandEventHandler(ConsoleLogFrame::OnSemaphoreWait) ); Connect( wxEVT_SemaphoreWait, wxCommandEventHandler(ConsoleLogFrame::OnSemaphoreWait) );
if( m_threadlogger != NULL ) if( m_threadlogger != NULL )
m_threadlogger->Start(); m_threadlogger->Start();
} }
@ -324,7 +324,7 @@ void ConsoleLogFrame::Write( const wxString& text )
#endif #endif
m_TextCtrl.AppendText( text ); m_TextCtrl.AppendText( text );
// cap at 256k for now... // cap at 256k for now...
// fixme - 256k runs well on win32 but appears to be very sluggish on linux. Might // fixme - 256k runs well on win32 but appears to be very sluggish on linux. Might
// need platform dependent defaults here. - air // need platform dependent defaults here. - air
@ -463,9 +463,9 @@ void ConsoleLogFrame::OnFontSize( wxMenuEvent& evt )
case MenuID_FontSize_Large: ptsize = 10; break; case MenuID_FontSize_Large: ptsize = 10; break;
case MenuID_FontSize_Huge: ptsize = 12; break; case MenuID_FontSize_Huge: ptsize = 12; break;
} }
if( ptsize == m_conf.FontSize ) return; if( ptsize == m_conf.FontSize ) return;
m_conf.FontSize = ptsize; m_conf.FontSize = ptsize;
m_ColorTable.SetFont( ptsize ); m_ColorTable.SetFont( ptsize );
m_TextCtrl.SetDefaultStyle( m_ColorTable[m_curcolor] ); m_TextCtrl.SetDefaultStyle( m_ColorTable[m_curcolor] );
@ -530,13 +530,13 @@ void ConsoleLogFrame::CountMessage()
// Thread Safety note: This function expects to be called from the Main GUI thread // Thread Safety note: This function expects to be called from the Main GUI thread
// only. If called from a thread other than Main, it will generate an assertion failure. // only. If called from a thread other than Main, it will generate an assertion failure.
// //
void ConsoleLogFrame::DoMessage() void ConsoleLogFrame::DoMessage()
{ {
wxASSERT_MSG( wxThread::IsMain(), L"DoMessage must only be called from the main gui thread!" ); wxASSERT_MSG( wxThread::IsMain(), L"DoMessage must only be called from the main gui thread!" );
int cur = _InterlockedDecrement( &m_msgcounter ); int cur = _InterlockedDecrement( &m_msgcounter );
// We need to freeze the control if there are more than 2 pending messages, // We need to freeze the control if there are more than 2 pending messages,
// otherwise the redraw of the console will prevent it from ever being able to // otherwise the redraw of the console will prevent it from ever being able to
// catch up with the rate the queue is being filled, and the whole app could // catch up with the rate the queue is being filled, and the whole app could
@ -641,7 +641,7 @@ namespace Console
return false; return false;
} }
bool __fastcall WriteLn( const char* fmt ) bool __fastcall WriteLn( const char* fmt )
{ {
const wxString fmtline( wxString::FromAscii( fmt ) + L"\n" ); const wxString fmtline( wxString::FromAscii( fmt ) + L"\n" );
@ -652,7 +652,7 @@ namespace Console
// 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( fmtline ); evt.SetString( fmtline );
evt.SetExtraLong( th_CurrentColor ); evt.SetExtraLong( th_CurrentColor );
@ -700,7 +700,7 @@ static int pxMessageDialog( const wxString& content, const wxString& caption, lo
// 2) Issue the popup with wxSTAY_ON_TOP specified so that the user will see it. // 2) Issue the popup with wxSTAY_ON_TOP specified so that the user will see it.
// //
// And in either case the emulation should be paused/suspended for the user. // And in either case the emulation should be paused/suspended for the user.
return wxMessageDialog( NULL, content, caption, flags ).ShowModal(); return wxMessageDialog( NULL, content, caption, flags ).ShowModal();
} }
@ -766,7 +766,7 @@ public:
void DoTheDialog() void DoTheDialog()
{ {
int result; int result;
if( m_id == pxEVT_MSGBOX ) if( m_id == pxEVT_MSGBOX )
result = pxMessageDialog( m_Content, m_Title, m_Flags ); result = pxMessageDialog( m_Content, m_Title, m_Flags );
else else
@ -799,7 +799,7 @@ namespace Msgbox
instdat.WaitForMe.WaitNoCancel(); // Important! disable cancellation since we're using local stack vars. instdat.WaitForMe.WaitNoCancel(); // Important! disable cancellation since we're using local stack vars.
return instdat.result; return instdat.result;
} }
void OnEvent( pxMessageBoxEvent& evt ) void OnEvent( pxMessageBoxEvent& evt )
{ {
evt.DoTheDialog(); evt.DoTheDialog();
@ -844,7 +844,7 @@ namespace Msgbox
return wxID_YES == ThreadedMessageBox( text, caption, icon ); return wxID_YES == ThreadedMessageBox( text, caption, icon );
} }
} }
// [TODO] : This should probably be a fancier looking dialog box with the stacktrace // [TODO] : This should probably be a fancier looking dialog box with the stacktrace
// displayed inside a wxTextCtrl. // displayed inside a wxTextCtrl.
static int CallStack( const wxString& errormsg, const wxString& stacktrace, const wxString& prompt, const wxString& caption, int buttons ) static int CallStack( const wxString& errormsg, const wxString& stacktrace, const wxString& prompt, const wxString& caption, int buttons )
@ -862,10 +862,10 @@ namespace Msgbox
return ThreadedMessageBox( text, caption, buttons, pxEVT_CallStackBox ); return ThreadedMessageBox( text, caption, buttons, pxEVT_CallStackBox );
} }
} }
int Assertion( const wxString& text, const wxString& stacktrace ) int Assertion( const wxString& text, const wxString& stacktrace )
{ {
return CallStack( text, stacktrace, return CallStack( text, stacktrace,
L"\nDo you want to stop the program?" L"\nDo you want to stop the program?"
L"\nOr press [Cancel] to suppress further assertions.", L"\nOr press [Cancel] to suppress further assertions.",
L"PCSX2 Assertion Failure", L"PCSX2 Assertion Failure",
@ -877,5 +877,5 @@ namespace Msgbox
{ {
CallStack( src.FormatDisplayMessage(), src.FormatDiagnosticMessage(), wxEmptyString, L"PCSX2 Unhandled Exception", wxOK ); CallStack( src.FormatDisplayMessage(), src.FormatDiagnosticMessage(), wxEmptyString, L"PCSX2 Unhandled Exception", wxOK );
} }
} }

View File

@ -22,12 +22,12 @@
#include <wx/stdpaths.h> #include <wx/stdpaths.h>
using namespace wxHelpers; using namespace wxHelpers;
using namespace Panels;
Dialogs::PickUserModeDialog::PickUserModeDialog( wxWindow* parent, int id ) : Dialogs::PickUserModeDialog::PickUserModeDialog( wxWindow* parent, int id ) :
wxDialogWithHelpers( parent, id, _("PCSX2 First Time configuration"), false ) wxDialogWithHelpers( parent, id, _("PCSX2 First Time configuration"), false )
, m_panel_usersel( new Panels::UsermodeSelectionPanel( *this, 620, false ) ) , m_panel_usersel( new UsermodeSelectionPanel( *this, 620, false ) )
, m_panel_langsel( new Panels::LanguageSelectionPanel( *this, 620 ) ) , m_panel_langsel( new LanguageSelectionPanel( *this, 620 ) )
{ {
wxBoxSizer& s_main = *new wxBoxSizer( wxVERTICAL ); wxBoxSizer& s_main = *new wxBoxSizer( wxVERTICAL );
@ -46,7 +46,7 @@ Dialogs::PickUserModeDialog::PickUserModeDialog( wxWindow* parent, int id ) :
void Dialogs::PickUserModeDialog::OnOk_Click( wxCommandEvent& evt ) void Dialogs::PickUserModeDialog::OnOk_Click( wxCommandEvent& evt )
{ {
if( Panels::g_ApplyState.ApplyAll(true) ) if( g_ApplyState.ApplyAll() )
{ {
Close(); Close();
evt.Skip(); evt.Skip();

View File

@ -70,7 +70,7 @@ namespace Exception
BaseException::InitBaseEx( msg_eng, msg_xlt ); BaseException::InitBaseEx( msg_eng, msg_xlt );
m_Panel = thispanel; m_Panel = thispanel;
} }
Panels::BaseApplicableConfigPanel* GetPanel() Panels::BaseApplicableConfigPanel* GetPanel()
{ {
return m_Panel; return m_Panel;
@ -88,7 +88,7 @@ namespace Panels
PanelApplyList_t PanelList; PanelApplyList_t PanelList;
// Current book page being initialized. Any apply objects created will use // Current book page being initialized. Any apply objects created will use
// this page as their "go here on error" page. (used to take the user to the // this page as their "go here on error" page. (used to take the user to the
// page with the option that failed apply validation). // page with the option that failed apply validation).
int CurOwnerPage; int CurOwnerPage;
@ -98,14 +98,14 @@ namespace Panels
// Crappy hack to handle the UseAdminMode option, which can't be part of AppConfig // Crappy hack to handle the UseAdminMode option, which can't be part of AppConfig
// because AppConfig depends on this value to initialize itself. // because AppConfig depends on this value to initialize itself.
bool UseAdminMode; bool UseAdminMode;
StaticApplyState() : StaticApplyState() :
PanelList() PanelList()
, CurOwnerPage( wxID_NONE ) , CurOwnerPage( wxID_NONE )
, ParentBook( NULL ) , ParentBook( NULL )
{ {
} }
void SetCurrentPage( int page ) void SetCurrentPage( int page )
{ {
CurOwnerPage = page; CurOwnerPage = page;
@ -115,7 +115,7 @@ namespace Panels
{ {
CurOwnerPage = wxID_NONE; CurOwnerPage = wxID_NONE;
} }
void StartBook( wxBookCtrlBase* book ); void StartBook( wxBookCtrlBase* book );
void StartWizard(); void StartWizard();
bool ApplyAll( bool saveOnSuccess=true ); bool ApplyAll( bool saveOnSuccess=true );
@ -132,7 +132,7 @@ namespace Panels
// Thread Safety: None. This class is only safe when used from the GUI thread, as it uses // Thread Safety: None. This class is only safe when used from the GUI thread, as it uses
// static vars and assumes that only one ApplicableConfig system is available to the // static vars and assumes that only one ApplicableConfig system is available to the
// user at any time (ie, a singular modal dialog). // user at any time (ie, a singular modal dialog).
// //
class BaseApplicableConfigPanel : public wxPanelWithHelpers class BaseApplicableConfigPanel : public wxPanelWithHelpers
{ {
protected: protected:
@ -145,7 +145,7 @@ namespace Panels
g_ApplyState.PanelList.remove( this ); g_ApplyState.PanelList.remove( this );
} }
BaseApplicableConfigPanel( wxWindow* parent, int idealWidth ) : BaseApplicableConfigPanel( wxWindow* parent, int idealWidth ) :
wxPanelWithHelpers( parent, idealWidth ) wxPanelWithHelpers( parent, idealWidth )
, m_OwnerPage( g_ApplyState.CurOwnerPage ) , m_OwnerPage( g_ApplyState.CurOwnerPage )
, m_OwnerBook( g_ApplyState.ParentBook ) , m_OwnerBook( g_ApplyState.ParentBook )
@ -155,7 +155,7 @@ namespace Panels
int GetOwnerPage() const { return m_OwnerPage; } int GetOwnerPage() const { return m_OwnerPage; }
wxBookCtrlBase* GetOwnerBook() { return m_OwnerBook; } wxBookCtrlBase* GetOwnerBook() { return m_OwnerBook; }
void SetFocusToMe() void SetFocusToMe()
{ {
if( (m_OwnerBook == NULL) || (m_OwnerPage == wxID_NONE) ) return; if( (m_OwnerBook == NULL) || (m_OwnerPage == wxID_NONE) ) return;
@ -212,7 +212,7 @@ namespace Panels
wxRadioButton* m_Option_RecIOP; wxRadioButton* m_Option_RecIOP;
wxRadioButton* m_Option_mVU0; wxRadioButton* m_Option_mVU0;
wxRadioButton* m_Option_mVU1; wxRadioButton* m_Option_mVU1;
wxRadioButton* m_Option_sVU0; wxRadioButton* m_Option_sVU0;
wxRadioButton* m_Option_sVU1; wxRadioButton* m_Option_sVU1;
@ -220,7 +220,7 @@ namespace Panels
CpuPanel( wxWindow& parent, int idealWidth ); CpuPanel( wxWindow& parent, int idealWidth );
void Apply( AppConfig& conf ); void Apply( AppConfig& conf );
}; };
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
// //
class VideoPanel : public BaseApplicableConfigPanel class VideoPanel : public BaseApplicableConfigPanel
@ -231,7 +231,7 @@ namespace Panels
VideoPanel( wxWindow& parent, int idealWidth ); VideoPanel( wxWindow& parent, int idealWidth );
void Apply( AppConfig& conf ); void Apply( AppConfig& conf );
}; };
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
// //
class SpeedHacksPanel : public BaseApplicableConfigPanel class SpeedHacksPanel : public BaseApplicableConfigPanel
@ -241,7 +241,7 @@ namespace Panels
wxSlider* m_slider_vustealer; wxSlider* m_slider_vustealer;
wxStaticText* m_msg_eecycle; wxStaticText* m_msg_eecycle;
wxStaticText* m_msg_vustealer; wxStaticText* m_msg_vustealer;
wxCheckBox* m_check_intc; wxCheckBox* m_check_intc;
wxCheckBox* m_check_b1fc0; wxCheckBox* m_check_b1fc0;
wxCheckBox* m_check_IOPx2; wxCheckBox* m_check_IOPx2;
@ -286,7 +286,7 @@ namespace Panels
void Apply( AppConfig& conf ); void Apply( AppConfig& conf );
void Reset(); void Reset();
wxDirName GetPath() const { return wxDirName( m_pickerCtrl->GetPath() ); } wxDirName GetPath() const { return wxDirName( m_pickerCtrl->GetPath() ); }
DirPickerPanel& SetStaticDesc( const wxString& msg ); DirPickerPanel& SetStaticDesc( const wxString& msg );
protected: protected:
@ -294,7 +294,7 @@ namespace Panels
void Explore_Click( wxCommandEvent &event ); void Explore_Click( wxCommandEvent &event );
void UpdateCheckStatus( bool someNoteworthyBoolean ); void UpdateCheckStatus( bool someNoteworthyBoolean );
}; };
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
// //
class SettingsDirPickerPanel : public DirPickerPanel class SettingsDirPickerPanel : public DirPickerPanel
@ -331,7 +331,7 @@ namespace Panels
class BaseSelectorPanel: public BaseApplicableConfigPanel class BaseSelectorPanel: public BaseApplicableConfigPanel
{ {
protected: protected:
public: public:
virtual ~BaseSelectorPanel(); virtual ~BaseSelectorPanel();
BaseSelectorPanel( wxWindow& parent, int idealWidth ); BaseSelectorPanel( wxWindow& parent, int idealWidth );
@ -345,7 +345,7 @@ namespace Panels
virtual void DoRefresh()=0; virtual void DoRefresh()=0;
virtual bool ValidateEnumerationStatus()=0; virtual bool ValidateEnumerationStatus()=0;
}; };
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
// //
class BiosSelectorPanel : public BaseSelectorPanel class BiosSelectorPanel : public BaseSelectorPanel
@ -354,7 +354,7 @@ namespace Panels
wxListBox& m_ComboBox; wxListBox& m_ComboBox;
DirPickerPanel& m_FolderPicker; DirPickerPanel& m_FolderPicker;
wxArrayString* m_BiosList; wxArrayString* m_BiosList;
public: public:
BiosSelectorPanel( wxWindow& parent, int idealWidth ); BiosSelectorPanel( wxWindow& parent, int idealWidth );
virtual ~BiosSelectorPanel(); virtual ~BiosSelectorPanel();
@ -392,7 +392,7 @@ namespace Panels
{ {
} }
}; };
class EnumThread : public Threading::PersistentThread class EnumThread : public Threading::PersistentThread
{ {
public: public:
@ -400,15 +400,18 @@ namespace Panels
protected: protected:
PluginSelectorPanel& m_master; PluginSelectorPanel& m_master;
volatile bool m_cancel; volatile bool m_cancel;
public: public:
virtual ~EnumThread(); virtual ~EnumThread();
EnumThread( PluginSelectorPanel& master ); EnumThread( PluginSelectorPanel& master );
void Cancel(); void Cancel();
void DoNextPlugin( int evtidx );
protected:
sptr ExecuteTask(); sptr ExecuteTask();
}; };
// This panel contains all of the plugin combo boxes. We stick them // This panel contains all of the plugin combo boxes. We stick them
// on a panel together so that we can hide/show the whole mess easily. // on a panel together so that we can hide/show the whole mess easily.
class ComboBoxPanel : public wxPanelWithHelpers class ComboBoxPanel : public wxPanelWithHelpers
@ -431,10 +434,10 @@ namespace Panels
wxGauge& m_gauge; wxGauge& m_gauge;
wxStaticText& m_label; wxStaticText& m_label;
int m_progress; int m_progress;
public: public:
StatusPanel( wxWindow* parent ); StatusPanel( wxWindow* parent );
void SetGaugeLength( int len ); void SetGaugeLength( int len );
void AdvanceProgress( const wxString& msg ); void AdvanceProgress( const wxString& msg );
void Reset(); void Reset();
@ -465,7 +468,7 @@ namespace Panels
virtual void DoRefresh(); virtual void DoRefresh();
virtual bool ValidateEnumerationStatus(); virtual bool ValidateEnumerationStatus();
int FileCount() const { return m_FileList->Count(); } int FileCount() const { return m_FileList->Count(); }
const wxString& GetFilename( int i ) const { return (*m_FileList)[i]; } const wxString& GetFilename( int i ) const { return (*m_FileList)[i]; }
friend class EnumThread; friend class EnumThread;

View File

@ -26,7 +26,12 @@
#include <wx/dir.h> #include <wx/dir.h>
// Allows us to force-disable threading for debugging/troubleshooting // Allows us to force-disable threading for debugging/troubleshooting
static const bool DisableThreading = true; static const bool DisableThreading =
#ifdef __LINUX__
true; // linux appears to have threading issues with loadlibrary.
#else
false;
#endif
using namespace wxHelpers; using namespace wxHelpers;
using namespace Threading; using namespace Threading;
@ -287,12 +292,20 @@ void Panels::PluginSelectorPanel::Apply( AppConfig& conf )
void Panels::PluginSelectorPanel::CancelRefresh() void Panels::PluginSelectorPanel::CancelRefresh()
{ {
if (!DisableThreading) safe_delete( m_EnumeratorThread ); safe_delete( m_EnumeratorThread );
safe_delete( m_FileList ); safe_delete( m_FileList );
} }
void Panels::PluginSelectorPanel::DoRefresh() void Panels::PluginSelectorPanel::DoRefresh()
{ {
m_ComponentBoxes.Reset();
if( m_FileList == NULL )
{
wxCommandEvent evt;
OnEnumComplete( evt );
return;
}
// Disable all controls until enumeration is complete. // Disable all controls until enumeration is complete.
// Show status bar for plugin enumeration. // Show status bar for plugin enumeration.
@ -307,19 +320,13 @@ void Panels::PluginSelectorPanel::DoRefresh()
m_StatusPanel.Show(); m_StatusPanel.Show();
// Use a thread to load plugins. // Use a thread to load plugins.
if (!DisableThreading) safe_delete( m_EnumeratorThread ); safe_delete( m_EnumeratorThread );
m_EnumeratorThread = new EnumThread( *this ); m_EnumeratorThread = new EnumThread( *this );
if( DisableThreading ) if( DisableThreading )
{ m_EnumeratorThread->DoNextPlugin( 0 );
m_ComponentBoxes.Reset();
m_EnumeratorThread->ExecuteTask();
}
else else
{
m_EnumeratorThread->Start(); m_EnumeratorThread->Start();
m_ComponentBoxes.Reset();
}
} }
bool Panels::PluginSelectorPanel::ValidateEnumerationStatus() bool Panels::PluginSelectorPanel::ValidateEnumerationStatus()
@ -338,6 +345,12 @@ bool Panels::PluginSelectorPanel::ValidateEnumerationStatus()
if( (m_FileList == NULL) || (*pluginlist != *m_FileList) ) if( (m_FileList == NULL) || (*pluginlist != *m_FileList) )
validated = false; validated = false;
if( pluggers == 0 )
{
safe_delete( m_FileList );
return validated;
}
delete m_FileList; delete m_FileList;
m_FileList = pluginlist.release(); m_FileList = pluginlist.release();
@ -363,7 +376,7 @@ void Panels::PluginSelectorPanel::OnConfigure_Clicked( wxCommandEvent& evt )
void Panels::PluginSelectorPanel::OnEnumComplete( wxCommandEvent& evt ) void Panels::PluginSelectorPanel::OnEnumComplete( wxCommandEvent& evt )
{ {
if (!DisableThreading) safe_delete( m_EnumeratorThread ); safe_delete( m_EnumeratorThread );
// fixme: Default plugins should be picked based on the timestamp of the DLL or something? // fixme: Default plugins should be picked based on the timestamp of the DLL or something?
// (for now we just force it to selection zero if nothing's selected) // (for now we just force it to selection zero if nothing's selected)
@ -388,7 +401,20 @@ void Panels::PluginSelectorPanel::OnProgress( wxCommandEvent& evt )
{ {
if( m_FileList == NULL ) return; if( m_FileList == NULL ) return;
size_t evtidx = evt.GetExtraLong(); const size_t evtidx = evt.GetExtraLong();
if( DisableThreading )
{
const int nextidx = evtidx+1;
if( nextidx == m_FileList->Count() )
{
wxCommandEvent done( wxEVT_EnumerationFinished );
GetEventHandler()->AddPendingEvent( done );
}
else
m_EnumeratorThread->DoNextPlugin( nextidx );
}
m_StatusPanel.AdvanceProgress( (evtidx < m_FileList->Count()-1) ? m_StatusPanel.AdvanceProgress( (evtidx < m_FileList->Count()-1) ?
(*m_FileList)[evtidx + 1] : wxString(_("Completing tasks...")) (*m_FileList)[evtidx + 1] : wxString(_("Completing tasks..."))
); );
@ -449,6 +475,39 @@ void Panels::PluginSelectorPanel::EnumThread::Cancel()
PersistentThread::Cancel(); PersistentThread::Cancel();
} }
void Panels::PluginSelectorPanel::EnumThread::DoNextPlugin( int curidx )
{
DbgCon::WriteLn( L"Enumerating Plugin: " + m_master.GetFilename( curidx ) );
try
{
EnumeratedPluginInfo& result( Results[curidx] );
result.TypeMask = 0;
PluginEnumerator penum( m_master.GetFilename( curidx ) );
result.Name = penum.GetName();
for( int pidx=0; pidx<PluginId_Count; ++pidx )
{
const PluginsEnum_t pid = (PluginsEnum_t)pidx;
result.TypeMask |= tbl_PluginInfo[pid].typemask;
if( penum.CheckVersion( pid ) )
{
result.PassedTest |= tbl_PluginInfo[pid].typemask;
penum.GetVersionString( result.Version[pid], pidx );
}
}
}
catch( Exception::BadStream& ex )
{
Console::Status( ex.FormatDiagnosticMessage() );
}
wxCommandEvent yay( wxEVT_EnumeratedNext );
yay.SetExtraLong( curidx );
m_master.GetEventHandler()->AddPendingEvent( yay );
}
sptr Panels::PluginSelectorPanel::EnumThread::ExecuteTask() sptr Panels::PluginSelectorPanel::EnumThread::ExecuteTask()
{ {
DevCon::Status( "Plugin Enumeration Thread started..." ); DevCon::Status( "Plugin Enumeration Thread started..." );
@ -458,37 +517,8 @@ sptr Panels::PluginSelectorPanel::EnumThread::ExecuteTask()
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 ) ); DoNextPlugin( curidx );
try
{
EnumeratedPluginInfo& result( Results[curidx] );
result.TypeMask = 0;
PluginEnumerator penum( m_master.GetFilename( curidx ) );
result.Name = penum.GetName();
for( int pidx=0; pidx<PluginId_Count; ++pidx )
{
const PluginsEnum_t pid = (PluginsEnum_t)pidx;
result.TypeMask |= tbl_PluginInfo[pid].typemask;
if( penum.CheckVersion( pid ) )
{
result.PassedTest |= tbl_PluginInfo[pid].typemask;
penum.GetVersionString( result.Version[pid], pidx );
}
}
}
catch( Exception::BadStream& ex )
{
Console::Status( ex.FormatDiagnosticMessage() );
}
pthread_testcancel(); pthread_testcancel();
wxCommandEvent yay( wxEVT_EnumeratedNext );
yay.SetExtraLong( curidx );
m_master.GetEventHandler()->AddPendingEvent( yay );
} }
wxCommandEvent done( wxEVT_EnumerationFinished ); wxCommandEvent done( wxEVT_EnumerationFinished );