diff options
| author | Jordan Woyak <jordan.woyak@gmail.com> | 2010-06-05 05:30:23 +0000 |
|---|---|---|
| committer | Jordan Woyak <jordan.woyak@gmail.com> | 2010-06-05 05:30:23 +0000 |
| commit | 656ff26ed8fd2e47ff68e78dcf0bb588ef627865 (patch) | |
| tree | 1018796f312abfdfaf355b1104b9a01b5f050948 /Source/Plugins/InputPluginCommon/Src | |
| parent | 6b872bb81cd2297a3d59ceebb2a75266bf1370af (diff) | |
New GCPad/Wiimote: Enabled SDL 1.2 on the Windows build to support some gamepads that weren't working with DirectInput. Made DirectInput use (and prefer) buffered data rather than polled data (some gamepads should work better). In GUI: Changed all numeric wxChoice to wxSpinCtrl (config dialog opens much faster), removed "+" buttons, made UI more compact. Fixed a few problems that were introduced with the IniFile change. Made minor changes to IniFile.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5619 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Plugins/InputPluginCommon/Src')
4 files changed, 90 insertions, 78 deletions
diff --git a/Source/Plugins/InputPluginCommon/Src/ConfigDiag.cpp b/Source/Plugins/InputPluginCommon/Src/ConfigDiag.cpp index ace72a812f..3413a334e3 100644 --- a/Source/Plugins/InputPluginCommon/Src/ConfigDiag.cpp +++ b/Source/Plugins/InputPluginCommon/Src/ConfigDiag.cpp @@ -1,7 +1,7 @@ #include "ConfigDiag.h" -#define _connect_macro_( b, f, c, s ) (b)->Connect( wxID_ANY, (c), wxCommandEventHandler( f ), (wxObject*)0, (wxEvtHandler*)s ); +#define _connect_macro_( b, f, c, s ) (b)->Connect( wxID_ANY, (c), wxCommandEventHandler( f ), (wxObject*)0, (wxEvtHandler*)s ) static Plugin* g_plugin; @@ -76,31 +76,14 @@ void PadSettingCheckBox::UpdateValue() value = 0.01 * GetValue(); } -PadSettingChoice::PadSettingChoice( wxWindow* const parent, ControllerEmu::ControlGroup::Setting* const setting ) - : wxChoice( parent, -1, wxDefaultPosition, wxSize( 54, -1 ) ) - , value(setting->value) -{ - Append( wxT("0") ); - for ( unsigned int i = setting->low; i<=setting->high; ++i ) - { - std::ostringstream ss; - ss << i; - Append( wxString::FromAscii( ss.str().c_str() ) ); - } - - UpdateGUI(); -} - void PadSettingChoice::UpdateGUI() { - std::ostringstream ss; - ss << int(value * 100); - SetSelection( FindString( wxString::FromAscii( ss.str().c_str() ) ) ); + SetValue(value * 100); } void PadSettingChoice::UpdateValue() { - value = float( atoi( GetStringSelection().mb_str() ) ) / 100; + value = float(GetValue()) / 100; } ControlDialog::ControlDialog( wxWindow* const parent, ControllerInterface::ControlReference* const ref, const std::vector<ControllerInterface::Device*>& devs ) @@ -383,6 +366,20 @@ void GamepadPage::ConfigControl( wxCommandEvent& event ) UpdateGUI(); } +void GamepadPage::ClearControl( wxCommandEvent& event ) +{ + ControlButton* const btn = (ControlButton*)event.GetEventObject(); + btn->control_reference->control_qualifier.name.clear(); + btn->control_reference->device_qualifier = controller->default_device; + + g_plugin->controls_crit.Enter(); + controller->UpdateReferences( g_plugin->controller_interface ); + g_plugin->controls_crit.Leave(); + + // update changes + UpdateGUI(); +} + void ControlDialog::DetectControl( wxCommandEvent& event ) { // some hacks @@ -628,25 +625,27 @@ ControlGroupBox::ControlGroupBox( ControllerEmu::ControlGroup* const group, wxWi ControlButton* const control_button = new ControlButton( parent, group->controls[c]->control_ref, 80 ); control_button->SetFont(m_SmallFont); - ControlButton* adv_button = new ControlButton( parent, group->controls[c]->control_ref, 18, "+" ); - adv_button->SetFont(m_SmallFont); controls.push_back( control_button ); control_buttons.push_back( control_button ); + control_button->SetToolTip(wxT("Right-click for more options.\nMiddle-click to clear.")); + _connect_macro_( control_button, GamepadPage::DetectControl, wxEVT_COMMAND_BUTTON_CLICKED, eventsink ); - _connect_macro_( adv_button, GamepadPage::ConfigControl, wxEVT_COMMAND_BUTTON_CLICKED, eventsink ); + _connect_macro_( control_button, GamepadPage::ConfigControl, wxEVT_RIGHT_UP, eventsink ); + _connect_macro_( control_button, GamepadPage::ClearControl, wxEVT_MIDDLE_DOWN, eventsink ); wxBoxSizer* const control_sizer = new wxBoxSizer( wxHORIZONTAL ); control_sizer->AddStretchSpacer( 1 ); - control_sizer->Add( label, 0, wxCENTER | wxRIGHT, 5 ); + control_sizer->Add( label, 0, wxCENTER | wxRIGHT, 3 ); control_sizer->Add( control_button, 0, 0, 0 ); - control_sizer->Add( adv_button, 0, 0, 5 ); - Add( control_sizer, 0, wxEXPAND|wxLEFT|wxRIGHT, 5 ); + Add( control_sizer, 0, wxEXPAND|wxLEFT|wxRIGHT, 3 ); } + wxMemoryDC dc; + switch ( group->type ) { case GROUP_TYPE_STICK : @@ -655,11 +654,8 @@ ControlGroupBox::ControlGroupBox( ControllerEmu::ControlGroup* const group, wxWi case GROUP_TYPE_FORCE : { wxBitmap bitmap(64, 64); - wxMemoryDC dc; dc.SelectObject(bitmap); dc.Clear(); - dc.SelectObject(wxNullBitmap); - static_bitmap = new wxStaticBitmap( parent, -1, bitmap, wxDefaultPosition, wxDefaultSize, wxBITMAP_TYPE_BMP ); std::vector< ControllerEmu::ControlGroup::Setting* >::const_iterator @@ -670,7 +666,7 @@ ControlGroupBox::ControlGroupBox( ControllerEmu::ControlGroup* const group, wxWi for ( ; i!=e; ++i ) { PadSettingChoice* cbox = new PadSettingChoice( parent, *i ); - _connect_macro_( cbox, GamepadPage::AdjustSetting, wxEVT_COMMAND_CHOICE_SELECTED, eventsink ); + _connect_macro_( cbox, GamepadPage::AdjustSetting, wxEVT_COMMAND_SPINCTRL_UPDATED, eventsink ); options.push_back( cbox ); szr->Add( new wxStaticText( parent, -1, wxString::FromAscii( (*i)->name ) ) ); szr->Add( cbox, 0, wxLEFT, 0 ); @@ -678,31 +674,31 @@ ControlGroupBox::ControlGroupBox( ControllerEmu::ControlGroup* const group, wxWi wxBoxSizer* const h_szr = new wxBoxSizer( wxHORIZONTAL ); h_szr->Add( szr, 1, 0, 5 ); - h_szr->Add( static_bitmap, 0, wxALL|wxCENTER, 5 ); + h_szr->Add( static_bitmap, 0, wxALL|wxCENTER, 3 ); - Add( h_szr, 0, wxEXPAND|wxLEFT|wxCENTER|wxTOP, 5 ); + Add( h_szr, 0, wxEXPAND|wxLEFT|wxCENTER|wxTOP, 3 ); } break; case GROUP_TYPE_BUTTONS : { wxBitmap bitmap(int(12*group->controls.size()+1), 12); - wxMemoryDC dc; dc.SelectObject(bitmap); dc.Clear(); - dc.SelectObject(wxNullBitmap); static_bitmap = new wxStaticBitmap( parent, -1, bitmap, wxDefaultPosition, wxDefaultSize, wxBITMAP_TYPE_BMP ); PadSettingChoice* const threshold_cbox = new PadSettingChoice( parent, group->settings[0] ); - _connect_macro_( threshold_cbox, GamepadPage::AdjustSetting, wxEVT_COMMAND_CHOICE_SELECTED, eventsink ); + _connect_macro_( threshold_cbox, GamepadPage::AdjustSetting, wxEVT_COMMAND_SPINCTRL_UPDATED, eventsink ); + + threshold_cbox->SetToolTip(wxT("Adjust the analog control pressure required to activate buttons.")); options.push_back( threshold_cbox ); wxBoxSizer* const szr = new wxBoxSizer( wxHORIZONTAL ); - szr->Add( new wxStaticText( parent, -1, wxString::FromAscii( group->settings[0]->name ) ), 0, wxCENTER|wxRIGHT, 5 ); - szr->Add( threshold_cbox, 0, wxRIGHT, 5 ); + szr->Add( new wxStaticText( parent, -1, wxString::FromAscii( group->settings[0]->name ) ), 0, wxCENTER|wxRIGHT, 3 ); + szr->Add( threshold_cbox, 0, wxRIGHT, 3 ); - Add( szr, 0, wxALL|wxCENTER, 5 ); - Add( static_bitmap, 0, wxALL|wxCENTER, 5 ); + Add( szr, 0, wxALL|wxCENTER, 3 ); + Add( static_bitmap, 0, wxALL|wxCENTER, 3 ); } break; case GROUP_TYPE_MIXED_TRIGGERS : @@ -716,10 +712,8 @@ ControlGroupBox::ControlGroupBox( ControllerEmu::ControlGroup* const group, wxWi width = 64; } wxBitmap bitmap(width, height+1); - wxMemoryDC dc; dc.SelectObject(bitmap); dc.Clear(); - dc.SelectObject(wxNullBitmap); static_bitmap = new wxStaticBitmap( parent, -1, bitmap, wxDefaultPosition, wxDefaultSize, wxBITMAP_TYPE_BMP ); std::vector<ControllerEmu::ControlGroup::Setting*>::const_iterator @@ -728,15 +722,15 @@ ControlGroupBox::ControlGroupBox( ControllerEmu::ControlGroup* const group, wxWi for ( ; i!=e; ++i ) { PadSettingChoice* cbox = new PadSettingChoice( parent, *i ); - _connect_macro_( cbox, GamepadPage::AdjustSetting, wxEVT_COMMAND_CHOICE_SELECTED, eventsink ); + _connect_macro_( cbox, GamepadPage::AdjustSetting, wxEVT_COMMAND_SPINCTRL_UPDATED, eventsink ); options.push_back( cbox ); wxBoxSizer* const szr = new wxBoxSizer( wxHORIZONTAL ); - szr->Add( new wxStaticText( parent, -1, wxString::FromAscii( (*i)->name ) ), 0, wxCENTER|wxRIGHT, 5 ); - szr->Add( cbox, 0, wxRIGHT, 5 ); - Add( szr, 0, wxALL|wxCENTER, 5 ); + szr->Add( new wxStaticText( parent, -1, wxString::FromAscii( (*i)->name ) ), 0, wxCENTER|wxRIGHT, 3 ); + szr->Add( cbox, 0, wxRIGHT, 3 ); + Add( szr, 0, wxALL|wxCENTER, 3 ); } - Add( static_bitmap, 0, wxALL|wxCENTER, 5 ); + Add( static_bitmap, 0, wxALL|wxCENTER, 3 ); } break; case GROUP_TYPE_EXTENSION : @@ -749,8 +743,8 @@ ControlGroupBox::ControlGroupBox( ControllerEmu::ControlGroup* const group, wxWi _connect_macro_( attachments, GamepadPage::AdjustSetting, wxEVT_COMMAND_CHOICE_SELECTED, eventsink ); _connect_macro_( configure, GamepadPage::ConfigExtension, wxEVT_COMMAND_BUTTON_CLICKED, eventsink ); - Add( attachments, 0, wxTOP|wxLEFT|wxRIGHT|wxEXPAND, 5 ); - Add( configure, 0, wxALL|wxEXPAND, 5 ); + Add( attachments, 0, wxTOP|wxLEFT|wxRIGHT|wxEXPAND, 3 ); + Add( configure, 0, wxALL|wxEXPAND, 3 ); } break; default : @@ -773,6 +767,8 @@ ControlGroupBox::ControlGroupBox( ControllerEmu::ControlGroup* const group, wxWi break; } + dc.SelectObject(wxNullBitmap); + //AddStretchSpacer( 0 ); } @@ -827,12 +823,12 @@ GamepadPage::GamepadPage( wxWindow* parent, const unsigned int pad_num, ConfigDi _connect_macro_( device_cbox, GamepadPage::SetDevice, wxEVT_COMMAND_TEXT_ENTER, this ); _connect_macro_( refresh_button, GamepadPage::RefreshDevices, wxEVT_COMMAND_BUTTON_CLICKED, this ); - device_sbox->Add( device_cbox, 1, wxLEFT|wxRIGHT, 5 ); - device_sbox->Add( refresh_button, 0, wxRIGHT|wxBOTTOM, 5 ); + device_sbox->Add( device_cbox, 1, wxLEFT|wxRIGHT, 3 ); + device_sbox->Add( refresh_button, 0, wxRIGHT|wxBOTTOM, 3 ); wxStaticBoxSizer* const clear_sbox = new wxStaticBoxSizer( wxHORIZONTAL, this, wxT("Clear") ); wxButton* all_button = new wxButton( this, -1, wxT("All"), wxDefaultPosition, wxSize(48,-1) ); - clear_sbox->Add( all_button, 1, wxLEFT|wxRIGHT, 5 ); + clear_sbox->Add( all_button, 1, wxLEFT|wxRIGHT, 3 ); _connect_macro_(all_button, GamepadPage::ClearAll, wxEVT_COMMAND_BUTTON_CLICKED, this); @@ -846,10 +842,10 @@ GamepadPage::GamepadPage( wxWindow* parent, const unsigned int pad_num, ConfigDi _connect_macro_(psave_btn, GamepadPage::SaveProfile, wxEVT_COMMAND_BUTTON_CLICKED, this); _connect_macro_(pdelete_btn, GamepadPage::DeleteProfile, wxEVT_COMMAND_BUTTON_CLICKED, this); - profile_sbox->Add( profile_cbox, 1, wxLEFT, 5 ); - profile_sbox->Add( pload_btn, 0, wxLEFT, 5 ); - profile_sbox->Add( psave_btn, 0, 0, 5 ); - profile_sbox->Add( pdelete_btn, 0, wxRIGHT|wxBOTTOM, 5 ); + profile_sbox->Add( profile_cbox, 1, wxLEFT, 3 ); + profile_sbox->Add( pload_btn, 0, wxLEFT, 3 ); + profile_sbox->Add( psave_btn, 0, 0, 3 ); + profile_sbox->Add( pdelete_btn, 0, wxRIGHT|wxBOTTOM, 3 ); wxBoxSizer* const dio = new wxBoxSizer( wxHORIZONTAL ); dio->Add( device_sbox, 1, wxEXPAND|wxRIGHT, 5 ); diff --git a/Source/Plugins/InputPluginCommon/Src/ConfigDiag.h b/Source/Plugins/InputPluginCommon/Src/ConfigDiag.h index 9a2219b228..d8b28b66f7 100644 --- a/Source/Plugins/InputPluginCommon/Src/ConfigDiag.h +++ b/Source/Plugins/InputPluginCommon/Src/ConfigDiag.h @@ -17,6 +17,7 @@ #include <wx/checkbox.h> #include <wx/notebook.h> #include <wx/panel.h> +#include <wx/spinctrl.h> #include <sstream> #include <vector> @@ -45,10 +46,14 @@ public: ControllerEmu::Extension* const extension; }; -class PadSettingChoice : public wxChoice, public PadSetting +class PadSettingChoice : public wxSpinCtrl, public PadSetting { public: - PadSettingChoice( wxWindow* const parent, ControllerEmu::ControlGroup::Setting* const setting ); + PadSettingChoice( wxWindow* const parent, ControllerEmu::ControlGroup::Setting* const setting ) + : wxSpinCtrl(parent, -1, wxEmptyString, wxDefaultPosition + , wxSize( 54, -1 ), 0, setting->low, setting->high, setting->value * 100) + , value(setting->value) {} + void UpdateGUI(); void UpdateValue(); @@ -167,6 +172,7 @@ public: void DeleteProfile( wxCommandEvent& event ); void ConfigControl( wxCommandEvent& event ); + void ClearControl( wxCommandEvent& event ); void DetectControl( wxCommandEvent& event ); void ConfigExtension( wxCommandEvent& event ); diff --git a/Source/Plugins/InputPluginCommon/Src/ControllerEmu.cpp b/Source/Plugins/InputPluginCommon/Src/ControllerEmu.cpp index a333d3b4c8..e1d433f33f 100644 --- a/Source/Plugins/InputPluginCommon/Src/ControllerEmu.cpp +++ b/Source/Plugins/InputPluginCommon/Src/ControllerEmu.cpp @@ -107,7 +107,10 @@ void ControllerEmu::ControlGroup::LoadConfig(IniFile::Section *sec, const std::s si = settings.begin(), se = settings.end(); for ( ; si!=se; ++si ) - (*si)->value = sec->Get((group+(*si)->name).c_str(), (*si)->default_value*100) / 100; + { + sec->Get((group+(*si)->name).c_str(), &(*si)->value, (*si)->default_value*100); + (*si)->value /= 100; + } // controls std::vector<ControlGroup::Control*>::const_iterator @@ -116,17 +119,18 @@ void ControllerEmu::ControlGroup::LoadConfig(IniFile::Section *sec, const std::s for ( ; ci!=ce; ++ci ) { // control and dev qualifier - (*ci)->control_ref->control_qualifier.name = sec->Get((group + (*ci)->name).c_str(), ""); - (*ci)->control_ref->device_qualifier.FromString( - sec->Get((group+(*ci)->name+"/Device").c_str(), defdev.c_str() ) ); + sec->Get((group + (*ci)->name).c_str(), &(*ci)->control_ref->control_qualifier.name, ""); + std::string dev; + sec->Get((group+(*ci)->name+"/Device").c_str(), &dev, defdev.c_str()); + (*ci)->control_ref->device_qualifier.FromString(dev); // range - (*ci)->control_ref->range = sec->Get( (group+(*ci)->name+"/Range").c_str(), 100.0f ) / 100; + sec->Get( (group+(*ci)->name+"/Range").c_str(), &(*ci)->control_ref->range, 100.0f); + (*ci)->control_ref->range /= 100; // input mode if ( (*ci)->control_ref->is_input ) - ((ControllerInterface::InputReference*)((*ci)->control_ref))->mode - = sec->Get( (group+(*ci)->name+"/Mode").c_str(), 0 ); + sec->Get( (group+(*ci)->name+"/Mode").c_str(), &((ControllerInterface::InputReference*)((*ci)->control_ref))->mode, 0 ); } // extensions @@ -136,7 +140,8 @@ void ControllerEmu::ControlGroup::LoadConfig(IniFile::Section *sec, const std::s ex->switch_extension = 0; unsigned int n = 0; - const std::string extname = sec->Get((base + name).c_str(), ""); + std::string extname; + sec->Get((base + name).c_str(), &extname, ""); std::vector<ControllerEmu*>::const_iterator ai = ((Extension*)this)->attachments.begin(), @@ -157,7 +162,7 @@ void ControllerEmu::LoadConfig( IniFile::Section *sec, const std::string& base ) std::string defdev = default_device.ToString(); if (base.empty()) { - defdev = sec->Get((base + "Device").c_str(), ""); + sec->Get((base + "Device").c_str(), &defdev, ""); default_device.FromString(defdev); } std::vector<ControlGroup*>::const_iterator i = groups.begin(), @@ -175,7 +180,7 @@ void ControllerEmu::ControlGroup::SaveConfig( IniFile::Section *sec, const std:: si = settings.begin(), se = settings.end(); for ( ; si!=se; ++si ) - sec->Set( (group+(*si)->name).c_str(), (*si)->value*100.0f); + sec->Set( (group+(*si)->name).c_str(), (*si)->value*100.0f, (*si)->default_value*100.0f); // controls std::vector<ControlGroup::Control*>::const_iterator @@ -184,23 +189,28 @@ void ControllerEmu::ControlGroup::SaveConfig( IniFile::Section *sec, const std:: for ( ; ci!=ce; ++ci ) { // control and dev qualifier - sec->Set( (group+(*ci)->name).c_str(), (*ci)->control_ref->control_qualifier.name ); - sec->Set( (group+(*ci)->name+"/Device").c_str(), (*ci)->control_ref->device_qualifier.ToString()); + sec->Set( (group+(*ci)->name).c_str(), (*ci)->control_ref->control_qualifier.name, ""); + sec->Set( (group+(*ci)->name+"/Device").c_str(), (*ci)->control_ref->device_qualifier.ToString(), defdev); // range - sec->Set( (group+(*ci)->name+"/Range").c_str(), (*ci)->control_ref->range*100.0f); + sec->Set( (group+(*ci)->name+"/Range").c_str(), (*ci)->control_ref->range*100.0f, 100.0f); // input mode if ( (*ci)->control_ref->is_input ) - sec->Set( (group+(*ci)->name+"/Mode").c_str(), - ((ControllerInterface::InputReference*)((*ci)->control_ref))->mode); + { + const int mode = ((ControllerInterface::InputReference*)((*ci)->control_ref))->mode; + if (mode) + sec->Set((group+(*ci)->name+"/Mode").c_str(), mode); + else + sec->Delete((group+(*ci)->name+"/Mode").c_str()); + } } // extensions if ( GROUP_TYPE_EXTENSION == type ) { Extension* const ext = ((Extension*)this); - sec->Set((base + name).c_str(), ext->attachments[ext->switch_extension]->GetName()); + sec->Set((base + name).c_str(), ext->attachments[ext->switch_extension]->GetName(), "None"); std::vector<ControllerEmu*>::const_iterator ai = ((Extension*)this)->attachments.begin(), @@ -214,7 +224,7 @@ void ControllerEmu::SaveConfig( IniFile::Section *sec, const std::string& base ) { const std::string defdev = default_device.ToString(); if ( base.empty() ) - sec->Set( std::string(" ") + base + "Device", defdev ); + sec->Set( (/*std::string(" ") +*/ base + "Device").c_str(), defdev, ""); std::vector<ControlGroup*>::const_iterator i = groups.begin(), e = groups.end(); @@ -229,7 +239,7 @@ ControllerEmu::AnalogStick::AnalogStick( const char* const _name ) : ControlGrou controls.push_back( new Input( "Modifier" ) ); - settings.push_back( new Setting("Dead Zone", 0, 1, 50 ) ); + settings.push_back( new Setting("Dead Zone", 0, 0, 50 ) ); settings.push_back( new Setting("Square Stick", 0 ) ); } @@ -259,7 +269,7 @@ ControllerEmu::Force::Force( const char* const _name ) : ControlGroup( _name, GR controls.push_back( new Input( "Backward" ) ); controls.push_back( new Input( "Modifier" ) ); - settings.push_back( new Setting("Dead Zone", 0, 1, 50 ) ); + settings.push_back( new Setting("Dead Zone", 0, 0, 50 ) ); } ControllerEmu::Tilt::Tilt( const char* const _name ) : ControlGroup( _name, GROUP_TYPE_TILT ) @@ -273,7 +283,7 @@ ControllerEmu::Tilt::Tilt( const char* const _name ) : ControlGroup( _name, GROU controls.push_back( new Input( "Modifier" ) ); - settings.push_back( new Setting("Dead Zone", 0, 1, 50 ) ); + settings.push_back( new Setting("Dead Zone", 0, 0, 50 ) ); settings.push_back( new Setting("Circle Stick", 0 ) ); } diff --git a/Source/Plugins/InputPluginCommon/Src/ControllerEmu.h b/Source/Plugins/InputPluginCommon/Src/ControllerEmu.h index ee4b689356..8ea5ebf9d2 100644 --- a/Source/Plugins/InputPluginCommon/Src/ControllerEmu.h +++ b/Source/Plugins/InputPluginCommon/Src/ControllerEmu.h @@ -85,7 +85,7 @@ public: public: Setting(const char* const _name, const ControlState def_value - , const unsigned int _low = 1, const unsigned int _high = 100 ) + , const unsigned int _low = 0, const unsigned int _high = 100 ) : name(_name) , value(def_value) , default_value(def_value) |
