Checkbox for iteration

Added the option to handle whether the user wants to iterate through the
assignment of button mappings or assign them one at a time.

fixed formatting issues and code style.

I excluded this option from the config file. This stopped the check box value and the boolean from becoming offset. Since the option should always start as false.

 This still causes an issue with the Wiimote input, since the class variable that keeps the state will be wiped, but the check box value will stay the same after closing/reopening without closing the entire Wiimote configuration. I am looking for a way to resolve this.

I also reduced wait time to 2.5 seconds vs. the 5  seconds previously. Seemed to be a little long.

These changes apparently did not go through.

This should fix the Wiimote issue.
This commit is contained in:
MikeRavenelle 2014-09-02 11:53:03 -05:00
parent ffa6572116
commit 411c060504
6 changed files with 40 additions and 5 deletions

View File

@ -83,6 +83,7 @@ GCPad::GCPad(const unsigned int index) : m_index(index)
// options
groups.emplace_back(m_options = new ControlGroup(_trans("Options")));
m_options->settings.emplace_back(new ControlGroup::BackgroundInputSetting(_trans("Background Input")));
m_options->settings.emplace_back(new ControlGroup::IterateUI(_trans("Iterative Input")));
}
std::string GCPad::GetName() const

View File

@ -308,6 +308,7 @@ Wiimote::Wiimote( const unsigned int index )
m_options->settings.emplace_back(new ControlGroup::BackgroundInputSetting(_trans("Background Input")));
m_options->settings.emplace_back(new ControlGroup::Setting(_trans("Sideways Wiimote"), false));
m_options->settings.emplace_back(new ControlGroup::Setting(_trans("Upright Wiimote"), false));
m_options->settings.emplace_back(new ControlGroup::IterateUI(_trans("Iterative Input")));
// TODO: This value should probably be re-read if SYSCONF gets changed
m_sensor_bar_on_top = SConfig::GetInstance().m_SYSCONF->GetData<u8>("BT.BAR") != 0;

View File

@ -465,6 +465,13 @@ void GamepadPage::AdjustSetting(wxCommandEvent& event)
((PadSetting*)((wxControl*)event.GetEventObject())->GetClientData())->UpdateValue();
}
void GamepadPage::AdjustSettingUI(wxCommandEvent& event)
{
m_iterate = !m_iterate;
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
((PadSetting*)((wxControl*)event.GetEventObject())->GetClientData())->UpdateValue();
}
void GamepadPage::AdjustControlOption(wxCommandEvent&)
{
std::lock_guard<std::recursive_mutex> lk(m_config.controls_lock);
@ -521,7 +528,7 @@ void ControlDialog::DetectControl(wxCommandEvent& event)
void GamepadPage::DetectControl(wxCommandEvent& event)
{
ControlButton* btn = (ControlButton*)event.GetEventObject();
if (DetectButton(btn))
if (DetectButton(btn) && m_iterate == true)
{
auto it = std::find(control_buttons.begin(), control_buttons.end(), btn);
@ -905,7 +912,15 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
for (auto& groupSetting : group->settings)
{
PadSettingCheckBox* setting_cbox = new PadSettingCheckBox(parent, groupSetting.get());
setting_cbox->wxcontrol->Bind(wxEVT_CHECKBOX, &GamepadPage::AdjustSetting, eventsink);
if (groupSetting.get()->is_iterate == true)
{
setting_cbox->wxcontrol->Bind(wxEVT_CHECKBOX, &GamepadPage::AdjustSettingUI, eventsink);
groupSetting.get()->value = 0;
}
else
{
setting_cbox->wxcontrol->Bind(wxEVT_CHECKBOX, &GamepadPage::AdjustSetting, eventsink);
}
options.push_back(setting_cbox);
Add(setting_cbox->wxcontrol, 0, wxALL|wxLEFT, 5);

View File

@ -5,7 +5,7 @@
#pragma once
#define SLIDER_TICK_COUNT 100
#define DETECT_WAIT_TIME 5000
#define DETECT_WAIT_TIME 2500
#define PREVIEW_UPDATE_TIME 25
// might have to change this setup for wiimote
@ -196,6 +196,7 @@ public:
void AdjustControlOption(wxCommandEvent& event);
void AdjustSetting(wxCommandEvent& event);
void AdjustSettingUI(wxCommandEvent& event);
void GetProfilePath(std::string& path);
@ -215,6 +216,7 @@ private:
InputConfigDialog* const m_config_dialog;
InputConfig& m_config;
bool DetectButton(ControlButton* button);
bool m_iterate = false;
};
class InputConfigDialog : public wxDialog

View File

@ -45,6 +45,8 @@ void ControllerEmu::ControlGroup::LoadConfig(IniFile::Section *sec, const std::s
{
if (s->is_virtual)
continue;
if (s->is_iterate)
continue;
sec->Get(group + s->name, &s->value, s->default_value * 100);
s->value /= 100;
}
@ -104,6 +106,9 @@ void ControllerEmu::ControlGroup::SaveConfig(IniFile::Section *sec, const std::s
{
if (s->is_virtual)
continue;
if (s->is_iterate)
continue;
sec->Set(group + s->name, s->value * 100.0, s->default_value * 100.0);
}

View File

@ -28,7 +28,7 @@ enum
GROUP_TYPE_TILT,
GROUP_TYPE_CURSOR,
GROUP_TYPE_TRIGGERS,
GROUP_TYPE_SLIDER,
GROUP_TYPE_SLIDER
};
enum
@ -93,13 +93,15 @@ public:
, default_value(def_value)
, low(_low)
, high(_high)
, is_virtual(false) {}
, is_virtual(false)
, is_iterate(false) {}
const std::string name;
ControlState value;
const ControlState default_value;
const unsigned int low, high;
bool is_virtual;
bool is_iterate;
virtual void SetValue(ControlState new_value)
{
@ -131,6 +133,15 @@ public:
}
};
class IterateUI : public Setting
{
public:
IterateUI(const std::string &_name) : Setting(_name, false)
{
is_iterate = true;
}
};
ControlGroup(const std::string& _name, const unsigned int _type = GROUP_TYPE_OTHER) : name(_name), type(_type) {}
virtual ~ControlGroup() {}