diff options
Diffstat (limited to 'Source/Plugins/InputPluginCommon')
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) |
