2008-12-26 09:20:01 +00:00
// 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 "../PadSimple.h"
2008-12-30 22:43:45 +00:00
#include "EventHandler.h"
2008-12-26 09:20:01 +00:00
BEGIN_EVENT_TABLE ( ConfigDialog , wxDialog )
EVT_CLOSE ( ConfigDialog :: OnClose )
EVT_BUTTON ( ID_CLOSE , ConfigDialog :: OnCloseClick )
EVT_BUTTON ( ID_PAD_ABOUT , ConfigDialog :: DllAbout )
2009-01-15 06:48:15 +00:00
EVT_CHECKBOX ( ID_ATTACHED , ConfigDialog :: ControllerSettingsChanged )
2008-12-26 09:20:01 +00:00
EVT_CHECKBOX ( ID_X360PAD , ConfigDialog :: ControllerSettingsChanged )
EVT_CHOICE ( ID_X360PAD_CHOICE , ConfigDialog :: ControllerSettingsChanged )
EVT_CHECKBOX ( ID_RUMBLE , ConfigDialog :: ControllerSettingsChanged )
EVT_CHECKBOX ( ID_DISABLE , ConfigDialog :: ControllerSettingsChanged )
EVT_BUTTON ( CTL_A , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_B , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_X , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_Y , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_Z , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_START , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_L , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_R , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_MAINUP , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_MAINDOWN , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_MAINLEFT , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_MAINRIGHT , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_SUBUP , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_SUBDOWN , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_SUBLEFT , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_SUBRIGHT , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_DPADUP , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_DPADDOWN , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_DPADLEFT , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_DPADRIGHT , ConfigDialog :: OnButtonClick )
EVT_BUTTON ( CTL_HALFPRESS , ConfigDialog :: OnButtonClick )
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 )
{
clickedButton = NULL ;
CreateGUIControls ();
Fit ();
}
ConfigDialog ::~ ConfigDialog ()
{
}
inline void AddControl ( wxPanel * pan , wxButton ** button , wxStaticBoxSizer * sizer ,
2009-01-04 22:58:20 +00:00
const char * name , int ctl , int controller ) {
wxBoxSizer * hButton = new wxBoxSizer ( wxHORIZONTAL );
char keyStr [ 10 ] = { 0 };
2009-01-15 06:48:15 +00:00
hButton -> Add ( new wxStaticText ( pan , 0 , wxString :: FromAscii ( name ),
2009-01-04 22:58:20 +00:00
wxDefaultPosition , wxDefaultSize ), 0 ,
wxALIGN_CENTER_VERTICAL | wxALL );
2009-01-08 23:42:18 +00:00
(( EventHandler * ) globals -> eventHandler ) -> SFKeyToString
( pad [ controller ]. keyForControl [ ctl ], keyStr );
2009-01-04 22:58:20 +00:00
2009-01-15 06:48:15 +00:00
* button = new wxButton ( pan , ctl , wxString :: FromAscii ( keyStr ),
2009-01-04 22:58:20 +00:00
wxDefaultPosition , wxDefaultSize , wxWANTS_CHARS );
hButton -> Add ( * button , 0 , wxALIGN_RIGHT | wxALL );
sizer -> Add ( hButton , 0 , wxALIGN_RIGHT | wxALL );
2008-12-26 09:20:01 +00:00
}
2009-01-04 22:58:20 +00:00
void ConfigDialog :: CreateGUIControls () {
// Notebook
m_Notebook = new wxNotebook ( this , ID_NOTEBOOK , wxDefaultPosition , wxDefaultSize );
// Controller pages
m_Controller [ 0 ] = new wxPanel ( m_Notebook , ID_CONTROLLERPAGE1 , wxDefaultPosition , wxDefaultSize );
m_Notebook -> AddPage ( m_Controller [ 0 ], wxT ( "Controller 1" ));
m_Controller [ 1 ] = new wxPanel ( m_Notebook , ID_CONTROLLERPAGE2 , wxDefaultPosition , wxDefaultSize );
m_Notebook -> AddPage ( m_Controller [ 1 ], wxT ( "Controller 2" ));
m_Controller [ 2 ] = new wxPanel ( m_Notebook , ID_CONTROLLERPAGE3 , wxDefaultPosition , wxDefaultSize );
m_Notebook -> AddPage ( m_Controller [ 2 ], wxT ( "Controller 3" ));
m_Controller [ 3 ] = new wxPanel ( m_Notebook , ID_CONTROLLERPAGE4 , wxDefaultPosition , wxDefaultSize );
m_Notebook -> AddPage ( m_Controller [ 3 ], wxT ( "Controller 4" ));
// Standard buttons
m_Close = new wxButton ( this , ID_CLOSE , wxT ( "Close" ), wxDefaultPosition , wxDefaultSize , 0 , wxDefaultValidator );
m_About = new wxButton ( this , ID_PAD_ABOUT , wxT ( "About" ), wxDefaultPosition , wxDefaultSize , 0 , wxDefaultValidator );
// Put notebook and standard buttons in sizers
wxBoxSizer * sSButtons ;
sSButtons = new wxBoxSizer ( wxHORIZONTAL );
sSButtons -> Add ( m_About , 0 , wxALL , 5 );
sSButtons -> Add ( 0 , 0 , 1 , wxEXPAND , 5 );
sSButtons -> Add ( m_Close , 0 , wxALL , 5 );
wxBoxSizer * sMain ;
sMain = new wxBoxSizer ( wxVERTICAL );
sMain -> Add ( m_Notebook , 1 , wxEXPAND | wxALL , 5 );
sMain -> Add ( sSButtons , 0 , wxEXPAND , 5 );
this -> SetSizer ( sMain );
this -> Layout ();
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
for ( int i = 0 ; i < 4 ; i ++ ) {
sbDevice [ i ] = new wxStaticBoxSizer ( wxVERTICAL , m_Controller [ i ], wxT ( "Controller Settings" ));
sDevice [ i ] = new wxBoxSizer ( wxHORIZONTAL );
m_Attached [ i ] = new wxCheckBox ( m_Controller [ i ], ID_ATTACHED , wxT ( "Controller attached" ), wxDefaultPosition , wxDefaultSize , 0 , wxDefaultValidator );
m_Disable [ i ] = new wxCheckBox ( m_Controller [ i ], ID_DISABLE , wxT ( "Disable when Dolphin is not in focus" ), wxDefaultPosition , wxDefaultSize , 0 , wxDefaultValidator );
m_Attached [ i ] -> SetValue ( pad [ i ]. bAttached );
m_Disable [ i ] -> SetValue ( pad [ i ]. bDisable );
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
sDevice [ i ] -> Add ( m_Attached [ i ], 0 , wxEXPAND | wxALL , 1 );
sDevice [ i ] -> AddStretchSpacer ();
sDevice [ i ] -> Add ( m_Disable [ i ], 0 , wxEXPAND | wxALL , 1 );
sbDevice [ i ] -> Add ( sDevice [ i ], 0 , wxEXPAND | wxALL , 1 );
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
sButtons [ i ] = new wxStaticBoxSizer ( wxVERTICAL , m_Controller [ i ], wxT ( "Buttons" ));
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
AddControl ( m_Controller [ i ], & ( m_ButtonA [ i ]), sButtons [ i ], "A: " , CTL_A , i );
AddControl ( m_Controller [ i ], & ( m_ButtonB [ i ]), sButtons [ i ], "B: " , CTL_B , i );
AddControl ( m_Controller [ i ], & ( m_ButtonX [ i ]), sButtons [ i ], "X: " , CTL_X , i );
AddControl ( m_Controller [ i ], & ( m_ButtonY [ i ]), sButtons [ i ], "Y: " , CTL_Y , i );
AddControl ( m_Controller [ i ], & ( m_ButtonZ [ i ]), sButtons [ i ], "Z: " , CTL_Z , i );
AddControl ( m_Controller [ i ], & ( m_ButtonStart [ i ]), sButtons [ i ], "Start: " , CTL_START , i );
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
sTriggers [ i ] = new wxStaticBoxSizer ( wxVERTICAL , m_Controller [ i ], wxT ( "Triggers" ));
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
AddControl ( m_Controller [ i ], & ( m_ButtonL [ i ]), sTriggers [ i ], " L: " , CTL_L , i );
AddControl ( m_Controller [ i ], & ( m_ButtonR [ i ]), sTriggers [ i ], " R: " , CTL_R , i );
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
sModifiers [ i ] = new wxStaticBoxSizer ( wxVERTICAL , m_Controller [ i ], wxT ( "Modifiers" ));
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
AddControl ( m_Controller [ i ], & ( m_HalfPress [ i ]), sModifiers [ i ], "1/2 Press: " , CTL_HALFPRESS , i );
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
sStick [ i ] = new wxStaticBoxSizer ( wxVERTICAL , m_Controller [ i ], wxT ( "Main Stick" ));
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
AddControl ( m_Controller [ i ], & ( m_StickUp [ i ]), sStick [ i ], "Up: " , CTL_MAINUP , i );
AddControl ( m_Controller [ i ], & ( m_StickDown [ i ]), sStick [ i ], "Down: " , CTL_MAINDOWN , i );
AddControl ( m_Controller [ i ], & ( m_StickLeft [ i ]), sStick [ i ], "Left: " , CTL_MAINLEFT , i );
AddControl ( m_Controller [ i ], & ( m_StickRight [ i ]), sStick [ i ], "Right: " , CTL_MAINRIGHT , i );
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
sDPad [ i ] = new wxStaticBoxSizer ( wxVERTICAL , m_Controller [ i ], wxT ( "D-Pad" ));
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
AddControl ( m_Controller [ i ], & ( m_DPadUp [ i ]), sDPad [ i ], "Up: " , CTL_DPADUP , i );
AddControl ( m_Controller [ i ], & ( m_DPadDown [ i ]), sDPad [ i ], "Down: " , CTL_DPADDOWN , i );
AddControl ( m_Controller [ i ], & ( m_DPadLeft [ i ]), sDPad [ i ], "Left: " , CTL_DPADLEFT , i );
AddControl ( m_Controller [ i ], & ( m_DPadRight [ i ]), sDPad [ i ], "Right: " , CTL_DPADRIGHT , i );
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
sCStick [ i ] = new wxStaticBoxSizer ( wxVERTICAL , m_Controller [ i ], wxT ( "C-Stick" ));
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
AddControl ( m_Controller [ i ], & ( m_CStickUp [ i ]), sCStick [ i ], "Up: " , CTL_SUBUP , i );
AddControl ( m_Controller [ i ], & ( m_CStickDown [ i ]), sCStick [ i ], "Down: " , CTL_SUBDOWN , i );
AddControl ( m_Controller [ i ], & ( m_CStickLeft [ i ]), sCStick [ i ], "Left: " , CTL_SUBLEFT , i );
AddControl ( m_Controller [ i ], & ( m_CStickRight [ i ]), sCStick [ i ], "Right: " , CTL_SUBRIGHT , i );
2009-01-15 06:48:15 +00:00
2009-01-04 22:58:20 +00:00
sPage [ i ] = new wxGridBagSizer ( 0 , 0 );
sPage [ i ] -> SetFlexibleDirection ( wxBOTH );
sPage [ i ] -> SetNonFlexibleGrowMode ( wxFLEX_GROWMODE_SPECIFIED );
sPage [ i ] -> Add ( sbDevice [ i ], wxGBPosition ( 0 , 0 ), wxGBSpan ( 1 , 5 ), wxEXPAND | wxALL , 1 );
sPage [ i ] -> Add ( sButtons [ i ], wxGBPosition ( 1 , 0 ), wxGBSpan ( 2 , 1 ), wxALL , 1 );
sPage [ i ] -> Add ( sTriggers [ i ], wxGBPosition ( 1 , 1 ), wxGBSpan ( 1 , 1 ), wxEXPAND | wxALL , 1 );
sPage [ i ] -> Add ( sModifiers [ i ], wxGBPosition ( 2 , 1 ), wxGBSpan ( 1 , 1 ), wxALL , 1 );
sPage [ i ] -> Add ( sStick [ i ], wxGBPosition ( 1 , 2 ), wxGBSpan ( 2 , 1 ), wxALL , 1 );
sPage [ i ] -> Add ( sDPad [ i ], wxGBPosition ( 1 , 3 ), wxGBSpan ( 2 , 1 ), wxALL , 1 );
sPage [ i ] -> Add ( sCStick [ i ], wxGBPosition ( 1 , 4 ), wxGBSpan ( 2 , 1 ), wxALL , 1 );
m_Controller [ i ] -> SetSizer ( sPage [ i ]);
sPage [ i ] -> Layout ();
}
2008-12-26 09:20:01 +00:00
}
2009-01-04 22:58:20 +00:00
void ConfigDialog :: OnClose ( wxCloseEvent & event ) {
EndModal ( 0 );
2008-12-26 09:20:01 +00:00
}
2009-01-04 22:58:20 +00:00
void ConfigDialog :: OnKeyDown ( wxKeyEvent & event ) {
2009-01-01 10:52:20 +00:00
if ( clickedButton != NULL ) {
int page = m_Notebook -> GetSelection ();
2009-01-15 06:48:15 +00:00
EventHandler * eventHandler = ( EventHandler * ) globals -> eventHandler ;
fprintf ( stderr , "Got key code %d \n " , event . GetKeyCode ());
2009-01-08 23:42:18 +00:00
sf :: Key :: Code sfcode = eventHandler -> wxCharCodeToSF ( event . GetKeyCode ());
2009-01-01 10:52:20 +00:00
char sfstr [ 100 ];
2009-01-08 23:42:18 +00:00
eventHandler -> SFKeyToString ( sfcode , sfstr );
2009-01-15 06:48:15 +00:00
2009-01-02 14:10:52 +00:00
if ( registerKey ( page , clickedButton -> GetId (), sfcode ))
clickedButton -> SetLabel ( wxString :: FromAscii ( sfstr ));
2009-01-01 10:52:20 +00:00
clickedButton -> Disconnect ();
}
clickedButton = NULL ;
event . Skip ();
2008-12-26 09:20:01 +00:00
}
void ConfigDialog :: OnCloseClick ( wxCommandEvent & event )
{
2009-01-04 22:58:20 +00:00
Close ();
2008-12-26 09:20:01 +00:00
}
void ConfigDialog :: ControllerSettingsChanged ( wxCommandEvent & event )
{
2009-01-04 22:58:20 +00:00
int page = m_Notebook -> GetSelection ();
switch ( event . GetId ()) {
case ID_ATTACHED :
pad [ page ]. bAttached = m_Attached [ page ] -> GetValue ();
break ;
case ID_DISABLE :
pad [ page ]. bDisable = m_Disable [ page ] -> GetValue ();
break ;
}
2008-12-26 09:20:01 +00:00
}
void ConfigDialog :: OnButtonClick ( wxCommandEvent & event )
{
2009-01-04 22:58:20 +00:00
if ( clickedButton ) {
clickedButton -> SetLabel ( oldLabel );
}
clickedButton = ( wxButton * ) event . GetEventObject ();
oldLabel = clickedButton -> GetLabel ();
clickedButton -> SetLabel ( _ ( "Press Key" ));
2008-12-26 09:20:01 +00:00
clickedButton -> Connect ( wxID_ANY , wxEVT_KEY_DOWN ,
2009-01-04 22:58:20 +00:00
wxKeyEventHandler ( ConfigDialog :: OnKeyDown ),
( wxObject * ) NULL , this );
2008-12-26 09:20:01 +00:00
}
void ConfigDialog :: DllAbout ( wxCommandEvent & event )
{
wxString message ;
message = _ ( "A simple keyboard plugin for dolphin." );
2008-12-30 22:43:45 +00:00
wxMessageBox ( _T ( "Dolphin PadSimple Event Plugin \n By ector and F|RES \n\n " + message ),
_T ( "Dolphin PadSimple Event" ), wxOK , this );
2008-12-26 09:20:01 +00:00
}