diff --git a/Source/Core/Common/Common.vcproj b/Source/Core/Common/Common.vcproj index 3a2aefca7f..8bc3f6144f 100644 --- a/Source/Core/Common/Common.vcproj +++ b/Source/Core/Common/Common.vcproj @@ -1,7 +1,7 @@ (plugin.Get("GetDllInfo")); DllConfig = reinterpret_cast (plugin.Get("DllConfig")); @@ -97,7 +105,8 @@ bool LoadPlugin(const char *_Filename) (DSP_Update != 0) && (DSP_SendAIBuffer != 0) && (DSP_DoState != 0)) - { + { + //PanicAlert("return true: %i", ret); return true; } else @@ -106,8 +115,13 @@ bool LoadPlugin(const char *_Filename) return false; } } - - return false; + else if (ret == 2) + { + //PanicAlert("return true: %i", ret); + return true; + } + else if (ret == 0) + return false; } } // namespace diff --git a/Source/Core/Core/Src/Plugins/Plugin_DSP.h b/Source/Core/Core/Src/Plugins/Plugin_DSP.h index 427b115e2b..27fea7cc8b 100644 --- a/Source/Core/Core/Src/Plugins/Plugin_DSP.h +++ b/Source/Core/Core/Src/Plugins/Plugin_DSP.h @@ -30,7 +30,7 @@ void UnloadPlugin(); typedef void (__cdecl* TGetDllInfo)(PLUGIN_INFO*); //typedef void (__cdecl* TDllAbout)(HWND); typedef void (__cdecl* TDllConfig)(HWND); -typedef void (__cdecl* TDllDebugger)(HWND); +typedef void (__cdecl* TDllDebugger)(HWND, bool); typedef void (__cdecl* TDSP_Initialize)(DSPInitialize); typedef void (__cdecl* TDSP_Shutdown)(); typedef void (__cdecl* TDSP_WriteMailBox)(BOOL _CPUMailbox, unsigned short); diff --git a/Source/Core/Core/Src/Plugins/Plugin_Video.cpp b/Source/Core/Core/Src/Plugins/Plugin_Video.cpp index a351e130a3..f17081f26b 100644 --- a/Source/Core/Core/Src/Plugins/Plugin_Video.cpp +++ b/Source/Core/Core/Src/Plugins/Plugin_Video.cpp @@ -18,6 +18,9 @@ #include "Common.h" #include "DynamicLibrary.h" #include "Plugin_Video.h" +#include "Plugin.h" + +extern DynamicLibrary Common::CPlugin; namespace PluginVideo { @@ -25,7 +28,7 @@ namespace PluginVideo // Function Pointer TGetDllInfo GetDllInfo = 0; TDllConfig DllConfig = 0; -TDllDebugger DllDebugger = 0; +TDllDebugger DllDebugger = 0; TVideo_Initialize Video_Initialize = 0; TVideo_Prepare Video_Prepare = 0; TVideo_Shutdown Video_Shutdown = 0; @@ -36,10 +39,15 @@ TVideo_EnterLoop Video_EnterLoop = 0; TVideo_AddMessage Video_AddMessage = 0; TVideo_DoState Video_DoState = 0; TVideo_Stop Video_Stop = 0; - + // Library Instance DynamicLibrary plugin; +void Debug(HWND _hwnd, bool Show) +{ + DllDebugger(_hwnd, Show); +} + bool IsLoaded() { return plugin.IsLoaded(); @@ -47,6 +55,8 @@ bool IsLoaded() void UnloadPlugin() { + //PanicAlert("Video UnloadPlugin"); + // set Functions to 0 GetDllInfo = 0; DllConfig = 0; @@ -65,7 +75,9 @@ void UnloadPlugin() bool LoadPlugin(const char *_Filename) { - if (plugin.Load(_Filename)) + int ret = plugin.Load(_Filename); + + if (ret == 1) { GetDllInfo = reinterpret_cast (plugin.Get("GetDllInfo")); DllConfig = reinterpret_cast (plugin.Get("DllConfig")); @@ -79,10 +91,11 @@ bool LoadPlugin(const char *_Filename) Video_EnterLoop = reinterpret_cast (plugin.Get("Video_EnterLoop")); Video_AddMessage = reinterpret_cast (plugin.Get("Video_AddMessage")); Video_DoState = reinterpret_cast (plugin.Get("Video_DoState")); - Video_Stop = reinterpret_cast (plugin.Get("Video_Stop")); + Video_Stop = reinterpret_cast (plugin.Get("Video_Stop")); if ((GetDllInfo != 0) && //(DllAbout != 0) && (DllConfig != 0) && + (DllDebugger != 0) && (Video_Initialize != 0) && (Video_Prepare != 0) && (Video_Shutdown != 0) && @@ -92,8 +105,9 @@ bool LoadPlugin(const char *_Filename) (Video_Screenshot != 0) && (Video_AddMessage != 0) && (Video_DoState != 0) && - (Video_Stop != 0)) + (Video_Stop != 0)) { + //PanicAlert("return true: %i", ret); return true; } else @@ -102,7 +116,16 @@ bool LoadPlugin(const char *_Filename) return false; } } - return false; + else if(ret == 2) + { + //PanicAlert("return true: %i", ret); + return true; + } + else if(ret == 0) + { + //PanicAlert("return false: %i", ret); + return false; + } } diff --git a/Source/Core/Core/Src/Plugins/Plugin_Video.h b/Source/Core/Core/Src/Plugins/Plugin_Video.h index 60f3dd4d9d..20be58bff5 100644 --- a/Source/Core/Core/Src/Plugins/Plugin_Video.h +++ b/Source/Core/Core/Src/Plugins/Plugin_Video.h @@ -34,7 +34,7 @@ void UnloadPlugin(); typedef void (__cdecl* TGetDllInfo)(PLUGIN_INFO*); //typedef void (__cdecl* TDllAbout)(HWND); typedef void (__cdecl* TDllConfig)(HWND); -typedef void (__cdecl* TDllDebugger)(HWND); +typedef void (__cdecl* TDllDebugger)(HWND, bool); typedef void (__cdecl* TVideo_Initialize)(SVideoInitialize*); typedef void (__cdecl* TVideo_Prepare)(); typedef void (__cdecl* TVideo_Shutdown)(); diff --git a/Source/Core/DebuggerWX/Src/CodeWindow.cpp b/Source/Core/DebuggerWX/Src/CodeWindow.cpp index 7aa6d43437..45b0d8a5fd 100644 --- a/Source/Core/DebuggerWX/Src/CodeWindow.cpp +++ b/Source/Core/DebuggerWX/Src/CodeWindow.cpp @@ -64,6 +64,8 @@ // and here are the classes class CPluginInfo; class CPluginManager; +//extern DynamicLibrary Common::CPlugin; +//extern CPluginManager CPluginManager::m_Instance; extern "C" { #include "../resources/toolbar_play.c" @@ -300,16 +302,21 @@ void CCodeWindow::CreateGUIControls(const SCoreStartupParameter& _LocalCoreStart // possible todo: add some kind of if here to? can it fail? CPluginManager::GetInstance().OpenDebug( GetHandle(), - SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDSPPlugin.c_str() + SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDSPPlugin.c_str(), + false, true ); } // don't have any else, just ignore it if(bVideoWindow) { + wxMessageBox(_T("Warning, automatically opening this window before a game is started \n\ +may cause a crash. Todo: figure out why and fix it."), wxT("OpenGL Debugging Window")); + // possible todo: add some kind of if here to? can it fail? CPluginManager::GetInstance().OpenDebug( GetHandle(), - _LocalCoreStartupParameter.m_strVideoPlugin.c_str() + _LocalCoreStartupParameter.m_strVideoPlugin.c_str(), + true, true ); } // don't have any else, just ignore it } @@ -939,13 +946,19 @@ void CCodeWindow::OnToggleSoundWindow(wxCommandEvent& event) { // TODO: add some kind of if() check here to? CPluginManager::GetInstance().OpenDebug( - GetHandle(), - SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDSPPlugin.c_str() - ); + GetHandle(), + SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDSPPlugin.c_str(), + false, true // DSP, show + ); } else // hide { - // can we close the dll window from here? + // Close the sound dll that has an open debugger + CPluginManager::GetInstance().OpenDebug( + GetHandle(), + SConfig::GetInstance().m_LocalCoreStartupParameter.m_strDSPPlugin.c_str(), + false, false // DSP, hide + ); } } // =========== @@ -968,12 +981,18 @@ void CCodeWindow::OnToggleVideoWindow(wxCommandEvent& event) // TODO: add some kind of if() check here to? CPluginManager::GetInstance().OpenDebug( GetHandle(), - SConfig::GetInstance().m_LocalCoreStartupParameter.m_strVideoPlugin.c_str() + SConfig::GetInstance().m_LocalCoreStartupParameter.m_strVideoPlugin.c_str(), + true, true // Video, show ); } else // hide { - // can we close the dll window from here? + // Close the video dll that has an open debugger + CPluginManager::GetInstance().OpenDebug( + GetHandle(), + SConfig::GetInstance().m_LocalCoreStartupParameter.m_strVideoPlugin.c_str(), + true, false // Video, hide + ); } } // =========== diff --git a/Source/Core/DolphinWX/Src/BootManager.cpp b/Source/Core/DolphinWX/Src/BootManager.cpp index f5d90847a7..dbb993f73d 100644 --- a/Source/Core/DolphinWX/Src/BootManager.cpp +++ b/Source/Core/DolphinWX/Src/BootManager.cpp @@ -26,6 +26,7 @@ #include "Volume.h" #include "VolumeCreator.h" #include "Config.h" +#include "ConfigMain.h" #include "Core.h" #if !defined(OSX64) #include "Frame.h" @@ -89,9 +90,61 @@ bool BootCore(const std::string& _rFilename) std::string unique_id = StartUp.GetUniqueID(); if (unique_id.size() == 6 && ini.Load((FULL_GAMECONFIG_DIR + unique_id + ".ini").c_str())) { + // ------------------------------------------------ + // General settings + // ---------------- ini.Get("Core", "UseDualCore", &StartUp.bUseDualCore, StartUp.bUseDualCore); ini.Get("Core", "SkipIdle", &StartUp.bSkipIdle, StartUp.bSkipIdle); ini.Get("Core", "OptimizeQuantizers", &StartUp.bOptimizeQuantizers, StartUp.bOptimizeQuantizers); + + + // ------------------------------------------------ + // Read SYSCONF settings + // ---------------- + bool bEnableProgressiveScan, bEnableWideScreen; + //bRefreshList = false; + FILE* pStream; // file handle + u8 m_SYSCONF[0x4000]; // SYSCONF file + u16 IPL_PGS = 0x17CC; // pregressive scan + u16 IPL_AR = 0x04D9; // widescreen + + // Load Wii SYSCONF + pStream = NULL; + pStream = fopen(FULL_CONFIG_DIR "SYSCONF", "rb"); + if (pStream != NULL) + { + fread(m_SYSCONF, 1, 0x4000, pStream); + fclose(pStream); + + //wxMessageBox(wxString::Format(": %02x", m_SYSCONF[IPL_AR])); + + ini.Get("Core", "EnableProgressiveScan", &bEnableProgressiveScan, (int)m_SYSCONF[IPL_PGS]); + ini.Get("Core", "EnableWideScreen", &bEnableWideScreen, (int)m_SYSCONF[IPL_AR]); + + m_SYSCONF[IPL_PGS] = bEnableProgressiveScan; + m_SYSCONF[IPL_AR] = bEnableWideScreen; + + //wxMessageBox(wxString::Format(": %02x", m_SYSCONF[IPL_AR])); + + // Enable custom Wii SYSCONF settings by saving the file to shared2 + pStream = NULL; + pStream = fopen(FULL_WII_USER_DIR "shared2/sys/SYSCONF", "wb"); + if (pStream != NULL) + { + fwrite(m_SYSCONF, 1, 0x4000, pStream); + fclose(pStream); + } + else + { + PanicAlert("Could not write to shared2/sys/SYSCONF"); + } + + } + else + { + PanicAlert("Could not write to SYSCONF"); + } + // ---------------- } #if !defined(OSX64) if(main_frame) diff --git a/Source/Core/DolphinWX/Src/ConfigMain.cpp b/Source/Core/DolphinWX/Src/ConfigMain.cpp index 297c805f29..89e48be330 100644 --- a/Source/Core/DolphinWX/Src/ConfigMain.cpp +++ b/Source/Core/DolphinWX/Src/ConfigMain.cpp @@ -64,7 +64,7 @@ CConfigMain::CConfigMain(wxWindow* parent, wxWindowID id, const wxString& title, // Load Wii SYSCONF pStream = NULL; - pStream = fopen(FULL_WII_USER_DIR "shared2/sys/SYSCONF", "rb"); + pStream = fopen(FULL_CONFIG_DIR "SYSCONF", "rb"); if (pStream != NULL) { fread(m_SYSCONF, 1, 0x4000, pStream); @@ -301,8 +301,19 @@ void CConfigMain::OnClose(wxCloseEvent& WXUNUSED (event)) { Destroy(); - // Save Wii SYSCONF + // Save Wii SYSCONF twice so that we can keep game specific settings for it pStream = NULL; + pStream = fopen(FULL_CONFIG_DIR "SYSCONF", "wb"); + if (pStream != NULL) + { + fwrite(m_SYSCONF, 1, 0x4000, pStream); + fclose(pStream); + } + else + { + PanicAlert("Could not write to SYSCONF"); + } + pStream = fopen(FULL_WII_USER_DIR "shared2/sys/SYSCONF", "wb"); if (pStream != NULL) { @@ -311,7 +322,7 @@ void CConfigMain::OnClose(wxCloseEvent& WXUNUSED (event)) } else { - PanicAlert("Could not write to Wii SYSCONF"); + PanicAlert("Could not write to shared2/sys/SYSCONF"); } // save the config... dolphin crashes by far to often to save the settings on closing only diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index 3f986176d7..678f94d0e2 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -93,6 +93,7 @@ EVT_MENU(IDM_CONFIG_MAIN, CFrame::OnConfigMain) EVT_MENU(IDM_CONFIG_GFX_PLUGIN, CFrame::OnPluginGFX) EVT_MENU(IDM_CONFIG_DSP_PLUGIN, CFrame::OnPluginDSP) EVT_MENU(IDM_CONFIG_PAD_PLUGIN, CFrame::OnPluginPAD) +EVT_MENU(IDM_CONFIG_WIIMOTE_PLUGIN, CFrame::OnPluginWiimote) EVT_MENU(IDM_BROWSE, CFrame::OnBrowse) EVT_MENU(IDM_MEMCARD, CFrame::OnMemcard) EVT_MENU(IDM_TOGGLE_FULLSCREEN, CFrame::OnToggleFullscreen) @@ -289,6 +290,7 @@ void CFrame::PopulateToolbar(wxToolBar* toolBar) toolBar->AddTool(IDM_CONFIG_GFX_PLUGIN, _T("GFX"), m_Bitmaps[Toolbar_PluginGFX], _T("GFX settings")); toolBar->AddTool(IDM_CONFIG_DSP_PLUGIN, _T("DSP"), m_Bitmaps[Toolbar_PluginDSP], _T("DSP settings")); toolBar->AddTool(IDM_CONFIG_PAD_PLUGIN, _T("PAD"), m_Bitmaps[Toolbar_PluginPAD], _T("PAD settings")); + toolBar->AddTool(IDM_CONFIG_WIIMOTE_PLUGIN, _T("Wiimote"), m_Bitmaps[Toolbar_PluginPAD], _T("Wiimote settings")); toolBar->AddSeparator(); toolBar->AddTool(IDM_HELPABOUT, _T("About"), m_Bitmaps[Toolbar_Help], _T("About Dolphin")); @@ -480,7 +482,6 @@ void CFrame::OnPluginDSP(wxCommandEvent& WXUNUSED (event)) ); } - void CFrame::OnPluginPAD(wxCommandEvent& WXUNUSED (event)) { CPluginManager::GetInstance().OpenConfig( @@ -488,7 +489,7 @@ void CFrame::OnPluginPAD(wxCommandEvent& WXUNUSED (event)) SConfig::GetInstance().m_LocalCoreStartupParameter.m_strPadPlugin.c_str() ); } -void CFrame::OnPluginWiiMote(wxCommandEvent& WXUNUSED (event)) +void CFrame::OnPluginWiimote(wxCommandEvent& WXUNUSED (event)) { CPluginManager::GetInstance().OpenConfig( GetHandle(), diff --git a/Source/Core/DolphinWX/Src/Frame.h b/Source/Core/DolphinWX/Src/Frame.h index 868feba5dc..6d419de80b 100644 --- a/Source/Core/DolphinWX/Src/Frame.h +++ b/Source/Core/DolphinWX/Src/Frame.h @@ -64,7 +64,7 @@ class CFrame : public wxFrame void OnPluginGFX(wxCommandEvent& event); void OnPluginDSP(wxCommandEvent& event); void OnPluginPAD(wxCommandEvent& event); - void OnPluginWiiMote(wxCommandEvent& event); + void OnPluginWiimote(wxCommandEvent& event); void OnOpen(wxCommandEvent& event); void OnPlay(wxCommandEvent& event); void OnStop(wxCommandEvent& event); diff --git a/Source/Core/DolphinWX/Src/Globals.h b/Source/Core/DolphinWX/Src/Globals.h index 2de7114415..591697c708 100644 --- a/Source/Core/DolphinWX/Src/Globals.h +++ b/Source/Core/DolphinWX/Src/Globals.h @@ -57,6 +57,7 @@ enum IDM_CONFIG_GFX_PLUGIN, IDM_CONFIG_DSP_PLUGIN, IDM_CONFIG_PAD_PLUGIN, + IDM_CONFIG_WIIMOTE_PLUGIN, IDM_TOGGLE_FULLSCREEN, IDM_TOGGLE_DUALCORE, IDM_TOGGLE_SKIPIDLE, diff --git a/Source/Core/DolphinWX/Src/ISOProperties.cpp b/Source/Core/DolphinWX/Src/ISOProperties.cpp index 9cd399a0bf..10716a7591 100644 --- a/Source/Core/DolphinWX/Src/ISOProperties.cpp +++ b/Source/Core/DolphinWX/Src/ISOProperties.cpp @@ -201,10 +201,13 @@ void CISOProperties::CreateGUIControls() // GameConfig editing - Core overrides and emulation state sbCoreOverrides = new wxStaticBoxSizer(wxVERTICAL, m_GameConfig, _("Game-Specific Settings")); sCoreOverrides = new wxBoxSizer(wxVERTICAL); - OverrideText = new wxStaticText(m_GameConfig, ID_OVERRIDE_TEXT, _("These settings override core Dolphin settings.\nThe 3rd state means the game uses Dolphin's setting."), wxDefaultPosition, wxDefaultSize); + OverrideText = new wxStaticText(m_GameConfig, ID_OVERRIDE_TEXT, _("These settings override core Dolphin settings. The 3rd state means the game uses Dolphin's setting."), wxDefaultPosition, wxDefaultSize); UseDualCore = new wxCheckBox(m_GameConfig, ID_USEDUALCORE, _("Enable Dual Core"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); SkipIdle = new wxCheckBox(m_GameConfig, ID_IDLESKIP, _("Enable Idle Skipping"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); OptimizeQuantizers = new wxCheckBox(m_GameConfig, ID_OPTIMIZEQUANTIZERS, _("Optimize Quantizers"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); + EnableProgressiveScan = new wxCheckBox(m_GameConfig, ID_ENABLEPROGRESSIVESCAN, _("[Wii] Enable Progressive Scan"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); + EnableWideScreen = new wxCheckBox(m_GameConfig, ID_ENABLEWIDESCREEN, _("[Wii] Enable WideScreen"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER, wxDefaultValidator); + sEmuState = new wxBoxSizer(wxHORIZONTAL); arrayStringFor_EmuState.Add(_("Not Set")); arrayStringFor_EmuState.Add(_("Broken")); @@ -243,6 +246,8 @@ void CISOProperties::CreateGUIControls() sCoreOverrides->Add(UseDualCore, 0, wxEXPAND|wxLEFT, 5); sCoreOverrides->Add(SkipIdle, 0, wxEXPAND|wxLEFT, 5); sCoreOverrides->Add(OptimizeQuantizers, 0, wxEXPAND|wxLEFT, 5); + sCoreOverrides->Add(EnableProgressiveScan, 0, wxEXPAND|wxLEFT, 5); + sCoreOverrides->Add(EnableWideScreen, 0, wxEXPAND|wxLEFT, 5); sEmuState->AddStretchSpacer(); sEmuState->Add(EmuStateText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 0); sEmuState->Add(EmuState, 0, wxEXPAND|wxALL, 0); @@ -473,6 +478,16 @@ void CISOProperties::LoadGameConfig() else OptimizeQuantizers->Set3StateValue(wxCHK_UNDETERMINED); + if (GameIni.Get("Core", "EnableProgressiveScan", &bTemp)) + EnableProgressiveScan->Set3StateValue((wxCheckBoxState)bTemp); + else + EnableProgressiveScan->Set3StateValue(wxCHK_UNDETERMINED); + + if (GameIni.Get("Core", "EnableWideScreen", &bTemp)) + EnableWideScreen->Set3StateValue((wxCheckBoxState)bTemp); + else + EnableWideScreen->Set3StateValue(wxCHK_UNDETERMINED); + GameIni.Get("EmuState", "EmulationStateId", &iTemp, 0); EmuState->SetSelection(iTemp); @@ -499,6 +514,16 @@ bool CISOProperties::SaveGameConfig(std::string GameIniFile) else GameIni.Set("Core", "OptimizeQuantizers", OptimizeQuantizers->Get3StateValue()); + if (EnableProgressiveScan->Get3StateValue() == wxCHK_UNDETERMINED) + GameIni.DeleteKey("Core", "EnableProgressiveScan"); + else + GameIni.Set("Core", "EnableProgressiveScan", EnableProgressiveScan->Get3StateValue()); + + if (EnableWideScreen->Get3StateValue() == wxCHK_UNDETERMINED) + GameIni.DeleteKey("Core", "EnableWideScreen"); + else + GameIni.Set("Core", "EnableWideScreen", EnableWideScreen->Get3StateValue()); + GameIni.Set("EmuState", "EmulationStateId", EmuState->GetSelection()); return GameIni.Save(GameIniFile.c_str()); diff --git a/Source/Core/DolphinWX/Src/ISOProperties.h b/Source/Core/DolphinWX/Src/ISOProperties.h index 408a3eb697..883e2ebdd1 100644 --- a/Source/Core/DolphinWX/Src/ISOProperties.h +++ b/Source/Core/DolphinWX/Src/ISOProperties.h @@ -73,6 +73,8 @@ class CISOProperties : public wxDialog wxCheckBox *UseDualCore; wxCheckBox *SkipIdle; wxCheckBox *OptimizeQuantizers; + wxCheckBox *EnableProgressiveScan, *EnableWideScreen; // Wii + wxStaticText *EmuStateText; wxArrayString arrayStringFor_EmuState; wxChoice *EmuState; @@ -131,6 +133,8 @@ class CISOProperties : public wxDialog ID_OVERRIDE_TEXT, ID_USEDUALCORE, ID_IDLESKIP, + ID_ENABLEPROGRESSIVESCAN, + ID_ENABLEWIDESCREEN, ID_OPTIMIZEQUANTIZERS, ID_EMUSTATE_TEXT, ID_EMUSTATE, diff --git a/Source/Core/DolphinWX/Src/PluginManager.cpp b/Source/Core/DolphinWX/Src/PluginManager.cpp index ed81d54ce4..de8cc950db 100644 --- a/Source/Core/DolphinWX/Src/PluginManager.cpp +++ b/Source/Core/DolphinWX/Src/PluginManager.cpp @@ -24,6 +24,28 @@ #include "PluginManager.h" #include "StringUtil.h" +/* Why does it crash if we try to open the debugger in the same instance like this? */ +namespace PluginVideo +{ + extern DynamicLibrary plugin; + extern bool IsLoaded(); + extern bool LoadPlugin(const char *_Filename); + extern void Debug(HWND _hwnd, bool Show); +} + + +namespace PluginDSP +{ + extern DynamicLibrary plugin; + extern bool IsLoaded(); + extern bool LoadPlugin(const char *_Filename); + extern void Debug(HWND _hwnd, bool Show); +} + + +//void(__cdecl * m_DllDebugger) (HWND _hParent) = 0; + + CPluginManager CPluginManager::m_Instance; @@ -35,6 +57,9 @@ CPluginManager::~CPluginManager() {} +// ---------------------------------------- +// Create list of avaliable plugins +// ------------- void CPluginManager::ScanForPlugins(wxWindow* _wxWindow) { m_PluginInfos.clear(); @@ -98,24 +123,49 @@ void CPluginManager::ScanForPlugins(wxWindow* _wxWindow) } } + +// ---------------------------------------- +// Open config window. _rFilename = plugin filename ,ret = the dll slot number +// ------------- void CPluginManager::OpenConfig(void* _Parent, const char *_rFilename) { - if (Common::CPlugin::Load(_rFilename)) - { - Common::CPlugin::Config((HWND)_Parent); - Common::CPlugin::Release(); - } + int ret = Common::CPlugin::Load(_rFilename); + + Common::CPlugin::Config((HWND)_Parent); + Common::CPlugin::Release(); } -void CPluginManager::OpenDebug(void* _Parent, const char *_rFilename) +// ---------------------------------------- +// Open debugging window. Type = Video or DSP. Show = Show or hide window. +// ------------- +void CPluginManager::OpenDebug(void* _Parent, const char *_rFilename, bool Type, bool Show) { - if (Common::CPlugin::Load(_rFilename)) - { - Common::CPlugin::Debug((HWND)_Parent); + //int ret = 1; + //int ret = Common::CPlugin::Load(_rFilename, true); + //int ret = PluginVideo::LoadPlugin(_rFilename); + //int ret = PluginDSP::LoadPlugin(_rFilename); + + if(Type) + { + //Common::CPlugin::Debug((HWND)_Parent); + if(!PluginVideo::IsLoaded()) PluginVideo::LoadPlugin(_rFilename); + PluginVideo::Debug((HWND)_Parent, Show); + } + else + { + if(!PluginDSP::IsLoaded()) PluginDSP::LoadPlugin(_rFilename); + PluginDSP::Debug((HWND)_Parent, Show); + } //Common::CPlugin::Release(); // this is only if the wx dialog is called with ShowModal() - } + + //m_DllDebugger = (void (__cdecl*)(HWND))PluginVideo::plugin.Get("DllDebugger"); + //m_DllDebugger(NULL); } + +// ---------------------------------------- +// Get dll info +// ------------- CPluginInfo::CPluginInfo(const char *_rFileName) : m_FileName(_rFileName) , m_Valid(false) diff --git a/Source/Core/DolphinWX/Src/PluginManager.h b/Source/Core/DolphinWX/Src/PluginManager.h index 9080d6bb19..27b650d81f 100644 --- a/Source/Core/DolphinWX/Src/PluginManager.h +++ b/Source/Core/DolphinWX/Src/PluginManager.h @@ -42,7 +42,7 @@ public: static CPluginManager& GetInstance() {return(m_Instance);} void ScanForPlugins(wxWindow* _wxWindow); void OpenConfig(void* _Parent, const char *_rFilename); - void OpenDebug(void* _Parent, const char *_rFilename); + void OpenDebug(void* _Parent, const char *_rFilename, bool Type, bool Show); const CPluginInfos& GetPluginInfos() {return(m_PluginInfos);} private: diff --git a/Source/PluginSpecs/pluginspecs_dsp.h b/Source/PluginSpecs/pluginspecs_dsp.h index 1af079c23f..f634a0856e 100644 --- a/Source/PluginSpecs/pluginspecs_dsp.h +++ b/Source/PluginSpecs/pluginspecs_dsp.h @@ -49,22 +49,13 @@ EXPORT void CALL GetDllInfo(PLUGIN_INFO* _pPluginInfo); // EXPORT void CALL DllConfig(HWND _hParent); -// __________________________________________________________________________________________________ -// Function: DllConfig -// Purpose: This function is optional function that is provided -// to allow the user to configure the DLL -// input: a handle to the window that calls this function -// output: none -// -EXPORT void CALL DllConfig(HWND _hParent); - // __________________________________________________________________________________________________ // Function: DllDebugger // Purpose: Open the debugger // input: a handle to the window that calls this function // output: none // -EXPORT void CALL DllDebugger(HWND _hParent); +EXPORT void CALL DllDebugger(HWND _hParent, bool Show); // __________________________________________________________________________________________________ // Function: DSP_Initialize diff --git a/Source/PluginSpecs/pluginspecs_video.h b/Source/PluginSpecs/pluginspecs_video.h index 6d2e505a53..74c7f51f57 100644 --- a/Source/PluginSpecs/pluginspecs_video.h +++ b/Source/PluginSpecs/pluginspecs_video.h @@ -101,7 +101,7 @@ EXPORT void CALL DllConfig(HWND _hParent); // input: a handle to the window that calls this function // output: none // -EXPORT void CALL DllDebugger(HWND _hParent); +EXPORT void CALL DllDebugger(HWND _hParent, bool Show); // __________________________________________________________________________________________________ // Function: Video_Initialize diff --git a/Source/Plugins/Plugin_DSP_HLE/Src/main.cpp b/Source/Plugins/Plugin_DSP_HLE/Src/main.cpp index fc4d294d51..df1a401327 100644 --- a/Source/Plugins/Plugin_DSP_HLE/Src/main.cpp +++ b/Source/Plugins/Plugin_DSP_HLE/Src/main.cpp @@ -150,10 +150,21 @@ void CloseConsole() // because then DLL_PROCESS_DETACH is called immediately after DLL_PROCESS_ATTACH. // ------------------- CDebugger* m_frame; -void DllDebugger(HWND _hParent) +void DllDebugger(HWND _hParent, bool Show) { - m_frame = new CDebugger(NULL); - m_frame->Show(); + if(m_frame && Show) // if we have created it, let us show it again + { + m_frame->Show(); + } + else if(!m_frame && Show) + { + m_frame = new CDebugger(NULL); + m_frame->Show(); + } + else if(m_frame && !Show) + { + m_frame->Hide(); + } } // =================== diff --git a/Source/Plugins/Plugin_DSP_LLE/Src/main.cpp b/Source/Plugins/Plugin_DSP_LLE/Src/main.cpp index 4d9c61332c..a673c52c5c 100644 --- a/Source/Plugins/Plugin_DSP_LLE/Src/main.cpp +++ b/Source/Plugins/Plugin_DSP_LLE/Src/main.cpp @@ -123,7 +123,7 @@ void DSP_DoState(unsigned char **ptr, int mode) { PointerWrap p(ptr, mode); } -void DllDebugger(HWND _hParent) +void DllDebugger(HWND _hParent, bool Show) { #ifdef _WIN32 #if defined (_DEBUG) || defined (DEBUGFAST) diff --git a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj index 4bc60b2823..75691d39a5 100644 --- a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj +++ b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj @@ -1,7 +1,7 @@ SetValue(g_Config.bStretchToFit); m_KeepAR = new wxCheckBox(m_PageGeneral, ID_KEEPAR, wxT("Keep 4:3 aspect ratio"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); m_KeepAR->SetValue(g_Config.bKeepAR); + m_HideCursor = new wxCheckBox(m_PageGeneral, ID_HIDECURSOR, wxT("Hide mouse cursor"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + m_HideCursor->SetValue(g_Config.bHideCursor); wxStaticText *FSText = new wxStaticText(m_PageGeneral, ID_FSTEXT, wxT("Fullscreen video mode:"), wxDefaultPosition, wxDefaultSize, 0); m_FullscreenCB = new wxComboBox(m_PageGeneral, ID_FULLSCREENCB, wxEmptyString, wxDefaultPosition, wxDefaultSize, arrayStringFor_FullscreenCB, 0, wxDefaultValidator); m_FullscreenCB->SetValue(wxString::FromAscii(g_Config.iFSResolution)); @@ -119,16 +122,18 @@ void ConfigDialog::CreateGUIControls() tmp<SetValue(tmp); + // Usage: The wxGBPosition() must have a column and row sGeneral = new wxBoxSizer(wxVERTICAL); sBasic = new wxGridBagSizer(0, 0); sBasic->Add(m_Fullscreen, wxGBPosition(0, 0), wxGBSpan(1, 2), wxALL, 5); sBasic->Add(m_RenderToMainWindow, wxGBPosition(1, 0), wxGBSpan(1, 2), wxALL, 5); sBasic->Add(m_StretchToFit, wxGBPosition(2, 0), wxGBSpan(1, 2), wxALL, 5); sBasic->Add(m_KeepAR, wxGBPosition(3, 0), wxGBSpan(1, 2), wxALL, 5); - sBasic->Add(FSText, wxGBPosition(4, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sBasic->Add(m_FullscreenCB, wxGBPosition(4, 1), wxGBSpan(1, 1), wxALL, 5); - sBasic->Add(WMText, wxGBPosition(5, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); - sBasic->Add(m_WindowResolutionCB, wxGBPosition(5, 1), wxGBSpan(1, 1), wxALL, 5); + sBasic->Add(m_HideCursor, wxGBPosition(4, 0), wxGBSpan(1, 2), wxALL, 5); + sBasic->Add(FSText, wxGBPosition(5, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sBasic->Add(m_FullscreenCB, wxGBPosition(5, 1), wxGBSpan(1, 1), wxALL, 5); + sBasic->Add(WMText, wxGBPosition(6, 0), wxGBSpan(1, 1), wxALIGN_CENTER_VERTICAL|wxALL, 5); + sBasic->Add(m_WindowResolutionCB, wxGBPosition(6, 1), wxGBSpan(1, 1), wxALL, 5); sbBasic->Add(sBasic); sGeneral->Add(sbBasic, 0, wxEXPAND|wxALL, 5); @@ -222,6 +227,8 @@ void ConfigDialog::CreateGUIControls() void ConfigDialog::OnClose(wxCloseEvent& WXUNUSED (event)) { + /* notice that we don't run wxEntryCleanup(); here so the dll will + still be loaded */ g_Config.Save(); EndModal(0); } @@ -272,6 +279,9 @@ void ConfigDialog::GeneralSettingsChanged(wxCommandEvent& event) case ID_KEEPAR: g_Config.bKeepAR = m_KeepAR->IsChecked(); break; + case ID_HIDECURSOR: + g_Config.bHideCursor = m_HideCursor->IsChecked(); + break; case ID_FULLSCREENCB: strcpy(g_Config.iFSResolution, m_FullscreenCB->GetValue().mb_str() ); break; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.h b/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.h index 5542f7e5c4..e80bc15150 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.h @@ -73,11 +73,13 @@ class ConfigDialog : public wxDialog wxCheckBox *m_RenderToMainWindow; wxCheckBox *m_StretchToFit; wxCheckBox *m_KeepAR; + wxCheckBox *m_HideCursor; wxArrayString arrayStringFor_FullscreenCB; wxComboBox *m_FullscreenCB; wxArrayString arrayStringFor_WindowResolutionCB; wxComboBox *m_WindowResolutionCB; - wxCheckBox *m_ForceFiltering; + + wxCheckBox *m_ForceFiltering; // advanced wxCheckBox *m_ForceAnisotropy; wxComboBox *m_AliasModeCB; wxCheckBox *m_ShowFPS; @@ -106,6 +108,7 @@ class ConfigDialog : public wxDialog ID_RENDERTOMAINWINDOW, ID_STRETCHTOFIT, ID_KEEPAR, + ID_HIDECURSOR, ID_FSTEXT, ID_FULLSCREENCB, ID_WMTEXT, diff --git a/Source/Plugins/Plugin_VideoOGL/Src/OS/Win32.cpp b/Source/Plugins/Plugin_VideoOGL/Src/OS/Win32.cpp index ee2601cd72..62c402f1b3 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/OS/Win32.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/OS/Win32.cpp @@ -89,6 +89,21 @@ namespace EmuWindow const TCHAR m_szClassName[] = "DolphinEmuWnd"; int g_winstyle; + // ------------------------------------------ + /* Invisible cursor option. In the lack of a predefined IDC_BLANK we make + an empty transparent cursor */ + // ------------------ + HCURSOR hCursor = NULL, hCursorBlank = NULL; + void CreateCursors(HINSTANCE hInstance) + { + BYTE ANDmaskCursor[] = { 0xff }; + BYTE XORmaskCursor[] = { 0x00 }; + hCursorBlank = CreateCursor(hInstance, 0,0, 1,1, ANDmaskCursor,XORmaskCursor); + + hCursor = LoadCursor( NULL, IDC_ARROW ); + } + + HWND GetWnd() { return m_hWnd; @@ -125,6 +140,18 @@ namespace EmuWindow g_VideoInitialize.pKeyPress(LOWORD(wParam), GetAsyncKeyState(VK_SHIFT) != 0, GetAsyncKeyState(VK_CONTROL) != 0); break; + /* The reason we pick up the WM_MOUSEMOVE is to be able to change this option + during gameplay. The alternative is to load one of the cursors when the plugin + is loaded and go with that. This should only produce a minimal performance hit + because SetCursor is not supposed to actually change the cursor if it's the + same as the one before. */ + case WM_MOUSEMOVE: + if(g_Config.bHideCursor) + SetCursor(hCursorBlank); + else + SetCursor(hCursor); + break; + case WM_CLOSE: ExitProcess(0); @@ -159,7 +186,8 @@ namespace EmuWindow wndClass.cbWndExtra = 0; wndClass.hInstance = hInstance; wndClass.hIcon = LoadIcon( NULL, IDI_APPLICATION ); - wndClass.hCursor = LoadCursor( NULL, IDC_ARROW ); + //wndClass.hCursor = LoadCursor( NULL, IDC_ARROW ); + wndClass.hCursor = NULL; // to interfer less with SetCursor() later wndClass.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH ); wndClass.lpszMenuName = NULL; wndClass.lpszClassName = m_szClassName; @@ -168,6 +196,8 @@ namespace EmuWindow m_hInstance = hInstance; RegisterClassEx( &wndClass ); + CreateCursors(m_hInstance); + if (parent) { m_hWnd = CreateWindow(m_szClassName, title, @@ -216,11 +246,13 @@ namespace EmuWindow // gShowDebugger from main.cpp is forgotten between the Dolphin-Debugger is opened and a game is // started so we have to use an ini file setting here + /* bool bVideoWindow = false; IniFile ini; ini.Load(DEBUGGER_CONFIG_FILE); ini.Get("ShowOnStart", "VideoWindow", &bVideoWindow, false); if(bVideoWindow) DoDllDebugger(); + */ } HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp index 7e91026300..ee7be58f53 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp @@ -54,33 +54,42 @@ SVideoInitialize g_VideoInitialize; #define VERSION_STRING "0.1" -// Create debugging window. We can't use Show() here as usual because then DLL_PROCESS_DETACH will -// be called immediately. And if we use ShowModal() we block the main video window from appearing. -// So I've made a separate function called DoDllDebugger() that creates the window. + +/* Create debugging window. There's currently a strange crash that occurs whe a game is loaded + if the OpenGL plugin was loaded before. I'll try to fix that. Currently you may have to + clsoe the window if it has auto started, and then restart it after the dll has loaded + for the purpose of the game. At that point there is no need to use the same dll instance + as the one that is rendering the game. However, that could be done. */ #if defined(OSX64) void DllDebugger(HWND _hParent) { } void DoDllDebugger() { } #else CDebugger* m_frame; -void DllDebugger(HWND _hParent) +void DllDebugger(HWND _hParent, bool Show) { - if(m_frame) // if we have created it, let us show it again + if(m_frame && Show) // if we have created it, let us show it again { m_frame->Show(); } - else + else if(!m_frame && Show) + { + m_frame = new CDebugger(NULL); + m_frame->Show(); + } + else if(m_frame && !Show) { - wxMessageBox(_T("The debugging window will open after you start a game.")); + m_frame->Hide(); } } void DoDllDebugger() { - m_frame = new CDebugger(NULL); - m_frame->Show(); + //m_frame = new CDebugger(NULL); + //m_frame->Show(); } #endif + void GetDllInfo (PLUGIN_INFO* _PluginInfo) { _PluginInfo->Version = 0x0100; @@ -99,9 +108,13 @@ void GetDllInfo (PLUGIN_INFO* _PluginInfo) void DllConfig(HWND _hParent) { #if defined(_WIN32) - wxWindow win; - win.SetHWND(_hParent); - ConfigDialog frame(&win); + //wxWindow win; + //win.SetHWND(_hParent); + //ConfigDialog frame(&win); + //ConfigDialog frame(NULL); + + ConfigDialog *frame; + frame = new ConfigDialog(NULL); DWORD iModeNum = 0; DEVMODE dmi; @@ -130,13 +143,16 @@ void DllConfig(HWND _hParent) { resos[i] = strBuffer; i++; - frame.AddFSReso(szBuffer); - frame.AddWindowReso(szBuffer); + //frame.AddFSReso(szBuffer); + //frame.AddWindowReso(szBuffer); + frame->AddFSReso(szBuffer); + frame->AddWindowReso(szBuffer); } ZeroMemory(&dmi, sizeof(dmi)); } - frame.ShowModal(); - win.SetHWND(0); + //frame.ShowModal(); + frame->ShowModal(); + //win.SetHWND(0); #elif defined(__linux__) ConfigDialog frame(NULL); @@ -185,7 +201,16 @@ void Video_Initialize(SVideoInitialize* _pVideoInitialize) #ifdef _WIN32 // OpenConsole(); #endif - + + /* Dolphin currently crashes if the dll is loaded when a game is started so we clsoe the + debugger and open it again after loading */ + /* + if(m_frame) + { + m_frame->EndModal(0); wxEntryCleanup(); + }//use wxUninitialize() if you don't want GUI + */ + frameCount = 0; g_VideoInitialize = *_pVideoInitialize; InitLUTs(); @@ -323,4 +348,4 @@ void Video_UpdateXFB(u8* _pXFB, u32 _dwWidth, u32 _dwHeight, s32 _dwYOffset) void Video_AddMessage(const char* pstr, u32 milliseconds) { Renderer::AddMessage(pstr,milliseconds); -} \ No newline at end of file +} diff --git a/Source/Plugins/Plugin_Wiimote_Test/Plugin_Wiimote_Test.vcproj b/Source/Plugins/Plugin_Wiimote_Test/Plugin_Wiimote_Test.vcproj index 0a79886891..33bbf935cb 100644 --- a/Source/Plugins/Plugin_Wiimote_Test/Plugin_Wiimote_Test.vcproj +++ b/Source/Plugins/Plugin_Wiimote_Test/Plugin_Wiimote_Test.vcproj @@ -577,6 +577,26 @@ > + + + + + + + + + + diff --git a/Source/Plugins/Plugin_Wiimote_Test/Src/Config.cpp b/Source/Plugins/Plugin_Wiimote_Test/Src/Config.cpp new file mode 100644 index 0000000000..6dd5007318 --- /dev/null +++ b/Source/Plugins/Plugin_Wiimote_Test/Src/Config.cpp @@ -0,0 +1,50 @@ +// Copyright (C) 2003-2008 Dolphin Project. + +// 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, version 2.0. + +// 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 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +#include "Common.h" +#include "IniFile.h" +#include "Config.h" + +Config g_Config; + +Config::Config() +{ + memset(this, 0, sizeof(Config)); +} + +void Config::Load() +{ + std::string temp; + IniFile iniFile; + iniFile.Load(FULL_CONFIG_DIR "Wiimote.ini"); + + // get resolution + + iniFile.Get("Settings", "SidewaysDPad", &bSidewaysDPad, 0); // Hardware + iniFile.Get("Settings", "WideScreen", &bWideScreen, 0); +} + +void Config::Save() +{ + IniFile iniFile; + iniFile.Load(FULL_CONFIG_DIR "Wiimote.ini"); + iniFile.Set("Settings", "SidewaysDPad", bSidewaysDPad); + iniFile.Set("Settings", "WideScreen", bWideScreen); + + iniFile.Save(FULL_CONFIG_DIR "Wiimote.ini"); +} diff --git a/Source/Plugins/Plugin_Wiimote_Test/Src/Config.h b/Source/Plugins/Plugin_Wiimote_Test/Src/Config.h new file mode 100644 index 0000000000..cb72bb04d2 --- /dev/null +++ b/Source/Plugins/Plugin_Wiimote_Test/Src/Config.h @@ -0,0 +1,40 @@ +// Copyright (C) 2003-2008 Dolphin Project. + +// 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, version 2.0. + +// 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 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _CONFIG_H +#define _CONFIG_H + +#define CONF_LOG 1 +#define CONF_PRIMLOG 2 +#define CONF_SAVETEXTURES 4 +#define CONF_SAVETARGETS 8 +#define CONF_SAVESHADERS 16 + +struct Config +{ + Config(); + void Load(); + void Save(); + + // General + bool bSidewaysDPad; + bool bWideScreen; +}; + +extern Config g_Config; + +#endif // _CONFIG_H diff --git a/Source/Plugins/Plugin_Wiimote_Test/Src/ConfigDlg.cpp b/Source/Plugins/Plugin_Wiimote_Test/Src/ConfigDlg.cpp new file mode 100644 index 0000000000..835bc200d7 --- /dev/null +++ b/Source/Plugins/Plugin_Wiimote_Test/Src/ConfigDlg.cpp @@ -0,0 +1,124 @@ +// Copyright (C) 2003-2008 Dolphin Project. + +// 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, version 2.0. + +// 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 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +#include "ConfigDlg.h" +#include "Config.h" + + +BEGIN_EVENT_TABLE(ConfigDialog,wxDialog) + EVT_CLOSE(ConfigDialog::OnClose) + EVT_BUTTON(ID_CLOSE, ConfigDialog::CloseClick) + EVT_BUTTON(ID_ABOUTOGL, ConfigDialog::AboutClick) + EVT_CHECKBOX(ID_SIDEWAYSDPAD, ConfigDialog::GeneralSettingsChanged) + EVT_CHECKBOX(ID_WIDESCREEN, ConfigDialog::GeneralSettingsChanged) +END_EVENT_TABLE() + +ConfigDialog::ConfigDialog(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style) +: wxDialog(parent, id, title, position, size, style) +{ + g_Config.Load(); + CreateGUIControls(); +} + +ConfigDialog::~ConfigDialog() +{ +} + +void ConfigDialog::CreateGUIControls() +{ + // Notebook + m_Notebook = new wxNotebook(this, ID_NOTEBOOK, wxDefaultPosition, wxDefaultSize); + m_PageGeneral = new wxPanel(m_Notebook, ID_PAGEGENERAL, wxDefaultPosition, wxDefaultSize); + m_Notebook->AddPage(m_PageGeneral, wxT("General")); + + // Buttons + //m_About = new wxButton(this, ID_ABOUTOGL, wxT("About"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + m_Close = new wxButton(this, ID_CLOSE, wxT("Close"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + + // Put notebook and buttons in sizers + wxBoxSizer* sButtons; + sButtons = new wxBoxSizer(wxHORIZONTAL); + //sButtons->Add(m_About, 0, wxALL, 5); // there is no about + sButtons->AddStretchSpacer(); + sButtons->Add(m_Close, 0, wxALL, 5); + + wxBoxSizer* sMain; + sMain = new wxBoxSizer(wxVERTICAL); + sMain->Add(m_Notebook, 1, wxEXPAND|wxALL, 5); + sMain->Add(sButtons, 0, wxEXPAND, 5); + + + // General + sbBasic = new wxStaticBoxSizer(wxVERTICAL, m_PageGeneral, wxT("Basic Settings")); + m_SidewaysDPad = new wxCheckBox(m_PageGeneral, ID_SIDEWAYSDPAD, wxT("Enable Sideways D-Pad"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + m_SidewaysDPad->SetValue(g_Config.bSidewaysDPad); + m_WideScreen = new wxCheckBox(m_PageGeneral, ID_WIDESCREEN, wxT("WideScreen Mode (for correct aiming)"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); + m_WideScreen->SetValue(g_Config.bWideScreen); + + + // ---------------------------------------------------------------------- + // Set up sGeneral and sBasic + // Usage: The wxGBPosition() must have a column and row + // ---------------- + sGeneral = new wxBoxSizer(wxVERTICAL); + sBasic = new wxGridBagSizer(0, 0); + sBasic->Add(m_SidewaysDPad, wxGBPosition(0, 0), wxGBSpan(1, 2), wxALL, 5); + sBasic->Add(m_WideScreen, wxGBPosition(1, 0), wxGBSpan(1, 2), wxALL, 5); + sbBasic->Add(sBasic); + sGeneral->Add(sbBasic, 0, wxEXPAND|wxALL, 5); + + m_PageGeneral->SetSizer(sGeneral); + sGeneral->Layout(); + + this->SetSizer(sMain); + this->Layout(); + // ---------------- + + + Fit(); + Center(); +} + +void ConfigDialog::OnClose(wxCloseEvent& WXUNUSED (event)) +{ + g_Config.Save(); + EndModal(0); +} + +void ConfigDialog::CloseClick(wxCommandEvent& WXUNUSED (event)) +{ + Close(); +} + +void ConfigDialog::AboutClick(wxCommandEvent& WXUNUSED (event)) +{ + +} + +void ConfigDialog::GeneralSettingsChanged(wxCommandEvent& event) +{ + switch (event.GetId()) + { + case ID_SIDEWAYSDPAD: + g_Config.bSidewaysDPad = m_SidewaysDPad->IsChecked(); + break; + case ID_WIDESCREEN: + g_Config.bWideScreen = m_WideScreen->IsChecked(); + break; + } +} \ No newline at end of file diff --git a/Source/Plugins/Plugin_Wiimote_Test/Src/ConfigDlg.h b/Source/Plugins/Plugin_Wiimote_Test/Src/ConfigDlg.h new file mode 100644 index 0000000000..27ff30e060 --- /dev/null +++ b/Source/Plugins/Plugin_Wiimote_Test/Src/ConfigDlg.h @@ -0,0 +1,84 @@ +// Copyright (C) 2003-2008 Dolphin Project. + +// 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, version 2.0. + +// 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 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef __CONFIGDIALOG_h__ +#define __CONFIGDIALOG_h__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#undef ConfigDialog_STYLE +#define ConfigDialog_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxCLOSE_BOX + + +class ConfigDialog : public wxDialog +{ + public: + ConfigDialog(wxWindow *parent, wxWindowID id = 1, + const wxString &title = wxT("Wii Remote Plugin Configuration"), + const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, + long style = ConfigDialog_STYLE); + virtual ~ConfigDialog(); + void CloseClick(wxCommandEvent& event); + + private: + DECLARE_EVENT_TABLE(); + + wxBoxSizer* sGeneral; + wxStaticBoxSizer* sbBasic; + wxGridBagSizer* sBasic; + + wxButton *m_About; + wxButton *m_Close; + wxNotebook *m_Notebook; + wxPanel *m_PageGeneral; + wxPanel *m_PageAdvanced; + + wxCheckBox *m_SidewaysDPad; // general settings + wxCheckBox *m_WideScreen; + + enum + { + ID_CLOSE = 1000, + ID_ABOUTOGL, + + ID_NOTEBOOK, + ID_PAGEGENERAL, + ID_PAGEADVANCED, + + ID_SIDEWAYSDPAD, + ID_WIDESCREEN + }; + + void OnClose(wxCloseEvent& event); + void CreateGUIControls(); + + void AboutClick(wxCommandEvent& event); + void GeneralSettingsChanged(wxCommandEvent& event); +}; + +#endif diff --git a/Source/Plugins/Plugin_Wiimote_Test/Src/EmuDefinitions.h b/Source/Plugins/Plugin_Wiimote_Test/Src/EmuDefinitions.h index 62f6156653..cbaba082bb 100644 --- a/Source/Plugins/Plugin_Wiimote_Test/Src/EmuDefinitions.h +++ b/Source/Plugins/Plugin_Wiimote_Test/Src/EmuDefinitions.h @@ -46,6 +46,12 @@ namespace WiiMoteEmu #define BOTTOM 728 #define SENSOR_BAR_RADIUS 200 +#define wLEFT 332 +#define wTOP 348 +#define wRIGHT 693 +#define wBOTTOM 625 +#define wSENSOR_BAR_RADIUS 200 + // vars #define WIIMOTE_EEPROM_SIZE (16*1024) #define WIIMOTE_REG_SPEAKER_SIZE 10 diff --git a/Source/Plugins/Plugin_Wiimote_Test/Src/FillReport.cpp b/Source/Plugins/Plugin_Wiimote_Test/Src/FillReport.cpp index 2c6ad3ba9a..a203956949 100644 --- a/Source/Plugins/Plugin_Wiimote_Test/Src/FillReport.cpp +++ b/Source/Plugins/Plugin_Wiimote_Test/Src/FillReport.cpp @@ -27,6 +27,7 @@ #include "EmuDeclarations.h" #include "EmuDefinitions.h" #include "Console.h" // for startConsoleWin, wprintf, GetConsoleHwnd +#include "Config.h" // for g_Config extern SWiimoteInitialize g_WiimoteInitialize; //extern void __Log(int log, const char *format, ...); @@ -60,17 +61,11 @@ void FillReportInfo(wm_core& _core) _core.minus = GetAsyncKeyState('M') ? 1 : 0; _core.home = GetAsyncKeyState('H') ? 1 : 0; - if(GetAsyncKeyState('T')) - { - wxMessageBox(wxString::Format("You turned %s sideways controls", - toggleSideWays ? "off" : "on")); - toggleSideWays = !toggleSideWays; - } /* Sideways controls (for example for Wario Land) was not enabled automatically so I have to use this function. I'm not sure how it works on the actual Wii. */ - if(toggleSideWays) + if(g_Config.bSidewaysDPad) { _core.left = GetAsyncKeyState(VK_DOWN) ? 1 : 0; _core.up = GetAsyncKeyState(VK_LEFT) ? 1 : 0; @@ -302,14 +297,29 @@ void FillReportAcc(wm_accel& _acc) */ } -/* DESCRIPTION: The calibration is controlled by these values, their absolute value and - the relative distance between between them control the calibration. These integers is - for the debugger so that we can calibrate the best values */ -int Top = TOP, Left = LEFT, Right = RIGHT, -Bottom = BOTTOM, SensorBarRadius = SENSOR_BAR_RADIUS; +bool toggleWideScreen = false, toggleCursor = true; + void FillReportIR(wm_ir_extended& _ir0, wm_ir_extended& _ir1) { + +/* DESCRIPTION: The calibration is controlled by these values, their absolute value and + the relative distance between between them control the calibration. WideScreen mode + has its own settings. */ + /**/ + int Top, Left, Right, Bottom, SensorBarRadius; + if(g_Config.bWideScreen) + { + Top = wTOP; Left = wLEFT; Right = wRIGHT; + Bottom = wBOTTOM; SensorBarRadius = wSENSOR_BAR_RADIUS; + } + else + { + Top = TOP; Left = LEFT; Right = RIGHT; + Bottom = BOTTOM; SensorBarRadius = SENSOR_BAR_RADIUS; + } + + memset(&_ir0, 0xFF, sizeof(wm_ir_extended)); memset(&_ir1, 0xFF, sizeof(wm_ir_extended)); @@ -340,7 +350,7 @@ void FillReportIR(wm_ir_extended& _ir0, wm_ir_extended& _ir1) // ---------------------------- // Debugging for calibration // ---------- - /* + /**/ if(GetAsyncKeyState(VK_NUMPAD1)) Right +=1; else if(GetAsyncKeyState(VK_NUMPAD2)) @@ -363,11 +373,11 @@ void FillReportIR(wm_ir_extended& _ir0, wm_ir_extended& _ir1) SensorBarRadius -= 1; //ClearScreen(); - if(consoleDisplay == 1) + //if(consoleDisplay == 1) wprintf("x0:%03i x1:%03i y0:%03i y1:%03i irx0:%03i y0:%03i x1:%03i y1:%03i | T:%i L:%i R:%i B:%i S:%i\n", x0, x1, y0, y1, _ir0.x, _ir0.y, _ir1.x, _ir1.y, Top, Left, Right, Bottom, SensorBarRadius ); - */ + } diff --git a/Source/Plugins/Plugin_Wiimote_Test/Src/main.cpp b/Source/Plugins/Plugin_Wiimote_Test/Src/main.cpp index ee94a626a8..93ec231443 100644 --- a/Source/Plugins/Plugin_Wiimote_Test/Src/main.cpp +++ b/Source/Plugins/Plugin_Wiimote_Test/Src/main.cpp @@ -18,9 +18,11 @@ #if !defined(OSX64) #include +#include "ConfigDlg.h" #endif #include "Common.h" +#include "Config.h" #include "StringUtil.h" #include "pluginspecs_wiimote.h" @@ -109,6 +111,17 @@ extern "C" void DllAbout(HWND _hParent) extern "C" void DllConfig(HWND _hParent) { +#if defined(_WIN32) + wxWindow win; + win.SetHWND(_hParent); + ConfigDialog frame(&win); + frame.ShowModal(); + win.SetHWND(0); +#elif defined(__linux__) + //TODO +#else + //TODO +#endif } extern "C" void Wiimote_Initialize(SWiimoteInitialize _WiimoteInitialize) @@ -117,9 +130,10 @@ extern "C" void Wiimote_Initialize(SWiimoteInitialize _WiimoteInitialize) g_UseRealWiiMote = WiiMoteReal::Initialize() > 0; - WiiMoteEmu::Initialize(); + g_Config.Load(); // load config settings + // Debugging window /*startConsoleWin(160, 30, "Wiimote"); // give room for 20 rows wprintf("Wiimote console opened\n");