2009-07-28 21:32:10 +00:00
// Copyright (C) 2003 Dolphin Project.
2008-12-26 09:20:01 +00:00
// 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
}