summaryrefslogtreecommitdiff
path: root/Source/Plugins/InputPluginCommon
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Plugins/InputPluginCommon')
-rw-r--r--Source/Plugins/InputPluginCommon/Src/ConfigDiag.cpp106
-rw-r--r--Source/Plugins/InputPluginCommon/Src/ConfigDiag.h10
-rw-r--r--Source/Plugins/InputPluginCommon/Src/ControllerEmu.cpp50
-rw-r--r--Source/Plugins/InputPluginCommon/Src/ControllerEmu.h2
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)