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:
Shawn Hoffman
2009-07-03 03:01:58 +00:00
parent 1cb3fe7521
commit 518d3854ba
14 changed files with 270 additions and 244 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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) {