mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
add wxw modalness to both njoys and fix a bug where calling DllConfig from different parent HWNDs would stop the config dialog from appearing.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3656 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -45,51 +45,51 @@ static const char* ControllerType[] =
|
||||
// "Keyboard" // Not supported yet, sorry F|RES ;( ...
|
||||
};
|
||||
|
||||
BEGIN_EVENT_TABLE(ConfigBox,wxDialog)
|
||||
EVT_CLOSE(ConfigBox::OnClose)
|
||||
EVT_BUTTON(ID_ABOUT, ConfigBox::AboutClick)
|
||||
EVT_BUTTON(ID_OK, ConfigBox::OKClick)
|
||||
EVT_BUTTON(ID_CANCEL, ConfigBox::CancelClick)
|
||||
EVT_COMBOBOX(IDC_JOYNAME, ConfigBox::ChangeJoystick)
|
||||
EVT_COMBOBOX(IDC_CONTROLTYPE, ConfigBox::ChangeControllertype)
|
||||
EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, ConfigBox::NotebookPageChanged)
|
||||
BEGIN_EVENT_TABLE(PADConfigDialognJoy4,wxDialog)
|
||||
EVT_CLOSE(PADConfigDialognJoy4::OnClose)
|
||||
EVT_BUTTON(ID_ABOUT, PADConfigDialognJoy4::AboutClick)
|
||||
EVT_BUTTON(ID_OK, PADConfigDialognJoy4::OKClick)
|
||||
EVT_BUTTON(ID_CANCEL, PADConfigDialognJoy4::CancelClick)
|
||||
EVT_COMBOBOX(IDC_JOYNAME, PADConfigDialognJoy4::ChangeJoystick)
|
||||
EVT_COMBOBOX(IDC_CONTROLTYPE, PADConfigDialognJoy4::ChangeControllertype)
|
||||
EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, PADConfigDialognJoy4::NotebookPageChanged)
|
||||
|
||||
EVT_BUTTON(IDB_SHOULDER_L, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_SHOULDER_R, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_BUTTON_A, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_BUTTON_B, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_BUTTON_X, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_BUTTON_Y, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_BUTTON_Z, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_BUTTONSTART, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(ID_BUTTONCALIBRATE, ConfigBox::Calibrate)
|
||||
EVT_BUTTON(IDB_BUTTONHALFPRESS, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_DPAD_UP, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_DPAD_DOWN, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_DPAD_LEFT, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_DPAD_RIGHT, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_SHOULDER_L, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_SHOULDER_R, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_BUTTON_A, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_BUTTON_B, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_BUTTON_X, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_BUTTON_Y, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_BUTTON_Z, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_BUTTONSTART, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(ID_BUTTONCALIBRATE, PADConfigDialognJoy4::Calibrate)
|
||||
EVT_BUTTON(IDB_BUTTONHALFPRESS, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_DPAD_UP, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_DPAD_DOWN, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_DPAD_LEFT, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_DPAD_RIGHT, PADConfigDialognJoy4::GetInputs)
|
||||
|
||||
EVT_BUTTON(IDB_ANALOG_MAIN_X, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_ANALOG_MAIN_Y, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_ANALOG_SUB_X, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_ANALOG_SUB_Y, ConfigBox::GetInputs)
|
||||
EVT_BUTTON(IDB_BUTTONDEBUGSTART,ConfigBox::StartDebug)
|
||||
EVT_BUTTON(IDB_ANALOG_MAIN_X, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_ANALOG_MAIN_Y, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_ANALOG_SUB_X, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_ANALOG_SUB_Y, PADConfigDialognJoy4::GetInputs)
|
||||
EVT_BUTTON(IDB_BUTTONDEBUGSTART,PADConfigDialognJoy4::StartDebug)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
ConfigBox::ConfigBox(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style)
|
||||
PADConfigDialognJoy4::PADConfigDialognJoy4(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style)
|
||||
: wxDialog(parent, id, title, position, size, style)
|
||||
{
|
||||
notebookpage = 0;
|
||||
CreateGUIControls();
|
||||
}
|
||||
|
||||
ConfigBox::~ConfigBox()
|
||||
PADConfigDialognJoy4::~PADConfigDialognJoy4()
|
||||
{
|
||||
// empty
|
||||
}
|
||||
|
||||
// Warning: horrible code below proceed at own risk!
|
||||
void ConfigBox::CreateGUIControls()
|
||||
void PADConfigDialognJoy4::CreateGUIControls()
|
||||
{
|
||||
#ifndef _DEBUG
|
||||
SetTitle(wxT("Configure: nJoy v"INPUT_VERSION" Input Plugin"));
|
||||
@ -288,12 +288,12 @@ void ConfigBox::CreateGUIControls()
|
||||
m_bJoyDebug = new wxButton(m_Controller[4], IDB_BUTTONDEBUGSTART, wxT("Start"), wxPoint(297, 385), wxDefaultSize, 0, wxDefaultValidator, wxT("Start"));
|
||||
}
|
||||
|
||||
void ConfigBox::OnClose(wxCloseEvent& /*event*/)
|
||||
void PADConfigDialognJoy4::OnClose(wxCloseEvent& /*event*/)
|
||||
{
|
||||
EndModal(0);
|
||||
}
|
||||
|
||||
void ConfigBox::AboutClick(wxCommandEvent& event)
|
||||
void PADConfigDialognJoy4::AboutClick(wxCommandEvent& event)
|
||||
{
|
||||
// Call about dialog
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
@ -313,7 +313,7 @@ void ConfigBox::AboutClick(wxCommandEvent& event)
|
||||
#endif
|
||||
}
|
||||
|
||||
void ConfigBox::OKClick(wxCommandEvent& event)
|
||||
void PADConfigDialognJoy4::OKClick(wxCommandEvent& event)
|
||||
{
|
||||
if (event.GetId() == ID_OK)
|
||||
{
|
||||
@ -325,7 +325,7 @@ void ConfigBox::OKClick(wxCommandEvent& event)
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigBox::CancelClick(wxCommandEvent& event)
|
||||
void PADConfigDialognJoy4::CancelClick(wxCommandEvent& event)
|
||||
{
|
||||
if (event.GetId() == ID_CANCEL)
|
||||
{
|
||||
@ -333,7 +333,7 @@ void ConfigBox::CancelClick(wxCommandEvent& event)
|
||||
Close();
|
||||
}
|
||||
}
|
||||
void ConfigBox::StartDebug(wxCommandEvent& event)
|
||||
void PADConfigDialognJoy4::StartDebug(wxCommandEvent& event)
|
||||
{
|
||||
SDL_Joystick *joy = SDL_JoystickOpen(joysticks[0].ID);
|
||||
int axes = SDL_JoystickNumAxes(joy);
|
||||
@ -356,7 +356,7 @@ void ConfigBox::StartDebug(wxCommandEvent& event)
|
||||
}
|
||||
}
|
||||
}
|
||||
void ConfigBox::Calibrate(wxCommandEvent& event)
|
||||
void PADConfigDialognJoy4::Calibrate(wxCommandEvent& event)
|
||||
{
|
||||
int controller = notebookpage;
|
||||
|
||||
@ -391,7 +391,7 @@ void ConfigBox::Calibrate(wxCommandEvent& event)
|
||||
}
|
||||
// Set dialog items
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void ConfigBox::SetControllerAll(int controller)
|
||||
void PADConfigDialognJoy4::SetControllerAll(int controller)
|
||||
{
|
||||
// http://wiki.wxwidgets.org/Converting_everything_to_and_from_wxString
|
||||
wxString tmp;
|
||||
@ -439,7 +439,7 @@ void ConfigBox::SetControllerAll(int controller)
|
||||
|
||||
// Get dialog items
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void ConfigBox::GetControllerAll(int controller)
|
||||
void PADConfigDialognJoy4::GetControllerAll(int controller)
|
||||
{
|
||||
wxString tmp;
|
||||
long lvalue;
|
||||
@ -481,7 +481,7 @@ void ConfigBox::GetControllerAll(int controller)
|
||||
joysticks[controller].deadzone = m_Deadzone[controller]->GetSelection();
|
||||
}
|
||||
|
||||
void ConfigBox::UpdateVisibleItems(int controller)
|
||||
void PADConfigDialognJoy4::UpdateVisibleItems(int controller)
|
||||
{
|
||||
if(joysticks[controller].controllertype)
|
||||
{
|
||||
@ -515,7 +515,7 @@ void ConfigBox::UpdateVisibleItems(int controller)
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigBox::ChangeJoystick(wxCommandEvent& event)
|
||||
void PADConfigDialognJoy4::ChangeJoystick(wxCommandEvent& event)
|
||||
{
|
||||
joysticks[0].ID = m_Joyname[0]->GetSelection();
|
||||
joysticks[1].ID = m_Joyname[1]->GetSelection();
|
||||
@ -523,7 +523,7 @@ void ConfigBox::ChangeJoystick(wxCommandEvent& event)
|
||||
joysticks[3].ID = m_Joyname[3]->GetSelection();
|
||||
}
|
||||
|
||||
void ConfigBox::ChangeControllertype(wxCommandEvent& event)
|
||||
void PADConfigDialognJoy4::ChangeControllertype(wxCommandEvent& event)
|
||||
{
|
||||
joysticks[0].controllertype = m_Controltype[0]->GetSelection();
|
||||
joysticks[1].controllertype = m_Controltype[1]->GetSelection();
|
||||
@ -534,12 +534,12 @@ void ConfigBox::ChangeControllertype(wxCommandEvent& event)
|
||||
UpdateVisibleItems(i);
|
||||
}
|
||||
|
||||
void ConfigBox::NotebookPageChanged(wxNotebookEvent& event)
|
||||
void PADConfigDialognJoy4::NotebookPageChanged(wxNotebookEvent& event)
|
||||
{
|
||||
notebookpage = event.GetSelection();
|
||||
}
|
||||
|
||||
void ConfigBox::SetButtonText(int id, char text[128])
|
||||
void PADConfigDialognJoy4::SetButtonText(int id, char text[128])
|
||||
{
|
||||
int controller = notebookpage;
|
||||
|
||||
@ -651,7 +651,7 @@ void ConfigBox::SetButtonText(int id, char text[128])
|
||||
break;
|
||||
}
|
||||
}
|
||||
void ConfigBox::GetInputs(wxCommandEvent& event)
|
||||
void PADConfigDialognJoy4::GetInputs(wxCommandEvent& event)
|
||||
{
|
||||
int ID = event.GetId();
|
||||
int controller = notebookpage;
|
||||
@ -744,7 +744,7 @@ InputEnd:
|
||||
|
||||
// Wait for D-Pad
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void ConfigBox::GetHats(int ID)
|
||||
void PADConfigDialognJoy4::GetHats(int ID)
|
||||
{
|
||||
int controller = notebookpage;
|
||||
|
||||
|
@ -47,15 +47,15 @@
|
||||
#include <wx/statbmp.h>
|
||||
|
||||
|
||||
class ConfigBox : public wxDialog
|
||||
class PADConfigDialognJoy4 : public wxDialog
|
||||
{
|
||||
private:
|
||||
DECLARE_EVENT_TABLE();
|
||||
|
||||
public:
|
||||
ConfigBox(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Configure: nJoy Input Plugin"),
|
||||
PADConfigDialognJoy4(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Configure: nJoy Input Plugin"),
|
||||
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE);
|
||||
virtual ~ConfigBox();
|
||||
virtual ~PADConfigDialognJoy4();
|
||||
|
||||
private:
|
||||
wxButton *m_About;
|
||||
|
@ -52,7 +52,6 @@ bool g_rumbleEnable = FALSE;
|
||||
|
||||
// Rumble in windows
|
||||
#ifdef _WIN32
|
||||
HINSTANCE nJoy_hInst = NULL;
|
||||
#ifdef USE_RUMBLE_DINPUT_HACK
|
||||
LPDIRECTINPUT8 g_pDI = NULL;
|
||||
LPDIRECTINPUTDEVICE8 g_pDevice = NULL;
|
||||
@ -77,11 +76,12 @@ HRESULT SetDeviceForcesXY();
|
||||
struct ff_effect effect;
|
||||
bool CanRumble = false;
|
||||
#endif
|
||||
|
||||
// Standard crap to make wxWidgets happy
|
||||
#ifdef _WIN32
|
||||
HINSTANCE g_hInstance;
|
||||
|
||||
#if defined(HAVE_WX) && HAVE_WX
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// wxWidgets
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
class wxDLLApp : public wxApp
|
||||
{
|
||||
bool OnInit()
|
||||
@ -89,51 +89,61 @@ class wxDLLApp : public wxApp
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
IMPLEMENT_APP_NO_MAIN(wxDLLApp)
|
||||
WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst);
|
||||
IMPLEMENT_APP_NO_MAIN(wxDLLApp)
|
||||
WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst);
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// DllMain
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
BOOL APIENTRY DllMain( HINSTANCE hinstDLL, // DLL module handle
|
||||
DWORD dwReason, // reason called
|
||||
LPVOID lpvReserved) // reserved
|
||||
BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle
|
||||
DWORD dwReason, // reason called
|
||||
LPVOID lpvReserved) // reserved
|
||||
{
|
||||
switch (dwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
{
|
||||
#if defined(HAVE_WX) && HAVE_WX
|
||||
//use wxInitialize() if you don't want GUI instead of the following 12 lines
|
||||
wxSetInstance((HINSTANCE)hinstDLL);
|
||||
int argc = 0;
|
||||
char **argv = NULL;
|
||||
wxEntryStart(argc, argv);
|
||||
|
||||
if ( !wxTheApp || !wxTheApp->CallOnInit() )
|
||||
if (!wxTheApp || !wxTheApp->CallOnInit())
|
||||
return FALSE;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
case DLL_PROCESS_DETACH:
|
||||
#if defined(HAVE_WX) && HAVE_WX
|
||||
wxEntryCleanup(); //use wxUninitialize() if you don't want GUI
|
||||
wxEntryCleanup();
|
||||
#endif
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
nJoy_hInst = hinstDLL;
|
||||
g_hInstance = hinstDLL;
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_WX) && HAVE_WX
|
||||
|
||||
PADConfigDialognJoy4* m_ConfigFrame = NULL;
|
||||
|
||||
wxWindow* GetParentedWxWindow(HWND Parent)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
wxSetInstance((HINSTANCE)g_hInstance);
|
||||
#endif
|
||||
wxWindow *win = new wxWindow();
|
||||
#ifdef _WIN32
|
||||
win->SetHWND((WXHWND)Parent);
|
||||
win->AdoptAttributesFromHWND();
|
||||
#endif
|
||||
return win;
|
||||
}
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Input Plugin Functions (from spec's)
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
@ -167,36 +177,34 @@ void SetDllGlobals(PLUGIN_GLOBALS* _pPluginGlobals)
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void DllConfig(HWND _hParent)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
#ifdef _WIN32
|
||||
if(SDL_Init(SDL_INIT_JOYSTICK ) < 0)
|
||||
{
|
||||
MessageBox(NULL, SDL_GetError(), "Could not initialize SDL!", MB_ICONERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
LoadConfig(); // load settings
|
||||
|
||||
#if defined(HAVE_WX) && HAVE_WX
|
||||
wxWindow win;
|
||||
win.SetHWND(_hParent);
|
||||
ConfigBox frame(&win);
|
||||
frame.ShowModal();
|
||||
win.SetHWND(0);
|
||||
#endif
|
||||
#else
|
||||
#else
|
||||
if(SDL_Init(SDL_INIT_JOYSTICK ) < 0)
|
||||
{
|
||||
printf("Could not initialize SDL! (%s)\n", SDL_GetError());
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
LoadConfig(); // load settings
|
||||
|
||||
#if defined(HAVE_WX) && HAVE_WX
|
||||
ConfigBox frame(NULL);
|
||||
frame.ShowModal();
|
||||
if (!m_ConfigFrame)
|
||||
m_ConfigFrame = new PADConfigDialognJoy4(GetParentedWxWindow(_hParent));
|
||||
else if (!m_ConfigFrame->GetParent()->IsShown())
|
||||
m_ConfigFrame->Close(true);
|
||||
|
||||
// Only allow one open at a time
|
||||
if (!m_ConfigFrame->IsShown())
|
||||
m_ConfigFrame->ShowModal();
|
||||
else
|
||||
m_ConfigFrame->Hide();
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void DllDebugger(HWND _hParent, bool Show) {
|
||||
|
Reference in New Issue
Block a user