Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ControllerEmu: Split the Setting class #4001

Merged
merged 2 commits into from
Jul 13, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 4 additions & 2 deletions Source/Core/Common/StringUtil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -247,9 +247,11 @@ bool TryParse(const std::string& str, u32* const output)

bool TryParse(const std::string& str, bool* const output)
{
if ("1" == str || !strcasecmp("true", str.c_str()))
float value;
const bool is_valid_float = TryParse(str, &value);
if ((is_valid_float && value == 1) || !strcasecmp("true", str.c_str()))
*output = true;
else if ("0" == str || !strcasecmp("false", str.c_str()))
else if ((is_valid_float && value == 0) || !strcasecmp("false", str.c_str()))
*output = false;
else
return false;
Expand Down
7 changes: 4 additions & 3 deletions Source/Core/Core/HW/GCKeyboardEmu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,10 @@ GCKeyboard::GCKeyboard(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")));
m_options->boolean_settings.emplace_back(
std::make_unique<ControlGroup::BackgroundInputSetting>(_trans("Background Input")));
m_options->boolean_settings.emplace_back(std::make_unique<ControlGroup::BooleanSetting>(
_trans("Iterative Input"), false, ControlGroup::SettingType::VIRTUAL));
}

std::string GCKeyboard::GetName() const
Expand Down
7 changes: 4 additions & 3 deletions Source/Core/Core/HW/GCPadEmu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,10 @@ 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")));
m_options->boolean_settings.emplace_back(
std::make_unique<ControlGroup::BackgroundInputSetting>(_trans("Background Input")));
m_options->boolean_settings.emplace_back(std::make_unique<ControlGroup::BooleanSetting>(
_trans("Iterative Input"), false, ControlGroup::SettingType::VIRTUAL));
}

std::string GCPad::GetName() const
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/Core/HW/WiimoteEmu/Speaker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ void Wiimote::SpeakerData(wm_speaker_data* sd)
}

// Speaker Pan
unsigned int vol = (unsigned int)(m_options->settings[4]->GetValue() * 100);
unsigned int vol = (unsigned int)(m_options->numeric_settings[0]->GetValue() * 100);

unsigned int sample_rate = sample_rate_dividend / m_reg_speaker.sample_rate;
float speaker_volume_ratio = (float)m_reg_speaker.volume / volume_divisor;
Expand Down
35 changes: 20 additions & 15 deletions Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ void Wiimote::Reset()
// 0x33 - 0x43: level 2
// 0x33 - 0x54: level 3
// 0x55 - 0xff: level 4
m_status.battery = (u8)(m_options->settings[5]->GetValue() * 100);
m_status.battery = (u8)(m_options->numeric_settings[1]->GetValue() * 100);

memset(m_shake_step, 0, sizeof(m_shake_step));

Expand Down Expand Up @@ -266,7 +266,8 @@ Wiimote::Wiimote(const unsigned int index)
m_extension->attachments.emplace_back(new WiimoteEmu::Drums(m_reg_ext));
m_extension->attachments.emplace_back(new WiimoteEmu::Turntable(m_reg_ext));

m_extension->settings.emplace_back(new ControlGroup::Setting(_trans("Motion Plus"), 0, 0, 1));
m_extension->boolean_settings.emplace_back(
std::make_unique<ControlGroup::BooleanSetting>(_trans("Motion Plus"), false));

// rumble
groups.emplace_back(m_rumble = new ControlGroup(_trans("Rumble")));
Expand All @@ -279,14 +280,18 @@ Wiimote::Wiimote(const unsigned int 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::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")));
m_options->settings.emplace_back(new ControlGroup::Setting(_trans("Speaker Pan"), 0, -127, 127));
m_options->settings.emplace_back(
new ControlGroup::Setting(_trans("Battery"), 95.0 / 100, 0, 255));
m_options->boolean_settings.emplace_back(
std::make_unique<ControlGroup::BackgroundInputSetting>(_trans("Background Input")));
m_options->boolean_settings.emplace_back(
std::make_unique<ControlGroup::BooleanSetting>(_trans("Sideways Wiimote"), false));
m_options->boolean_settings.emplace_back(
std::make_unique<ControlGroup::BooleanSetting>(_trans("Upright Wiimote"), false));
m_options->boolean_settings.emplace_back(std::make_unique<ControlGroup::BooleanSetting>(
_trans("Iterative Input"), false, ControlGroup::SettingType::VIRTUAL));
m_options->numeric_settings.emplace_back(
std::make_unique<ControlGroup::NumericSetting>(_trans("Speaker Pan"), 0, -127, 127));
m_options->numeric_settings.emplace_back(
std::make_unique<ControlGroup::NumericSetting>(_trans("Battery"), 95.0 / 100, 0, 255));

// 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;
Expand All @@ -303,7 +308,7 @@ std::string Wiimote::GetName() const
bool Wiimote::Step()
{
// TODO: change this a bit
m_motion_plus_present = m_extension->settings[0]->value != 0;
m_motion_plus_present = m_extension->boolean_settings[0]->GetValue();

m_rumble->controls[0]->control_ref->State(m_rumble_on);

Expand Down Expand Up @@ -356,7 +361,7 @@ void Wiimote::UpdateButtonsStatus()
{
// update buttons in status struct
m_status.buttons.hex = 0;
const bool is_sideways = m_options->settings[1]->value != 0;
const bool is_sideways = m_options->boolean_settings[1]->GetValue();
m_buttons->GetState(&m_status.buttons.hex, button_bitmasks);
m_dpad->GetState(&m_status.buttons.hex, is_sideways ? dpad_sideways_bitmasks : dpad_bitmasks);
}
Expand All @@ -375,8 +380,8 @@ void Wiimote::GetButtonData(u8* const data)

void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)
{
const bool is_sideways = m_options->settings[1]->value != 0;
const bool is_upright = m_options->settings[2]->value != 0;
const bool is_sideways = m_options->boolean_settings[1]->GetValue();
const bool is_upright = m_options->boolean_settings[2]->GetValue();

EmulateTilt(&m_accel, m_tilt, is_sideways, is_upright);
EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);
Expand Down Expand Up @@ -626,7 +631,7 @@ void Wiimote::Update()

Movie::SetPolledDevice();

m_status.battery = (u8)(m_options->settings[5]->GetValue() * 100);
m_status.battery = (u8)(m_options->numeric_settings[1]->GetValue() * 100);

const ReportFeatures& rptf = reporting_mode_features[m_reporting_mode - WM_REPORT_CORE];
s8 rptf_size = rptf.size;
Expand Down
7 changes: 4 additions & 3 deletions Source/Core/Core/HotkeyManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -222,9 +222,10 @@ HotkeyManager::HotkeyManager()
}

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")));
m_options->boolean_settings.emplace_back(
std::make_unique<ControlGroup::BackgroundInputSetting>(_trans("Background Input")));
m_options->boolean_settings.emplace_back(std::make_unique<ControlGroup::BooleanSetting>(
_trans("Iterative Input"), false, ControlGroup::SettingType::VIRTUAL));
}

HotkeyManager::~HotkeyManager()
Expand Down
74 changes: 36 additions & 38 deletions Source/Core/DolphinWX/InputConfigDiag.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,22 +100,21 @@ void PadSettingExtension::UpdateValue()
}

PadSettingCheckBox::PadSettingCheckBox(wxWindow* const parent,
ControllerEmu::ControlGroup::Setting* const _setting)
: PadSetting(new wxCheckBox(parent, wxID_ANY, wxGetTranslation(StrToWxStr(_setting->name)))),
ControllerEmu::ControlGroup::BooleanSetting* const _setting)
: PadSetting(new wxCheckBox(parent, wxID_ANY, wxGetTranslation(StrToWxStr(_setting->m_name)))),
setting(_setting)
{
UpdateGUI();
}

void PadSettingCheckBox::UpdateGUI()
{
((wxCheckBox*)wxcontrol)->SetValue(!!setting->GetValue());
((wxCheckBox*)wxcontrol)->SetValue(setting->GetValue());
}

void PadSettingCheckBox::UpdateValue()
{
// 0.01 so its saved to the ini file as just 1. :(
setting->SetValue(0.01 * ((wxCheckBox*)wxcontrol)->GetValue());
setting->SetValue(((wxCheckBox*)wxcontrol)->GetValue());
}

void PadSettingSpin::UpdateGUI()
Expand Down Expand Up @@ -827,13 +826,13 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
wxBITMAP_TYPE_BMP);

wxBoxSizer* const szr = new wxBoxSizer(wxVERTICAL);
for (auto& groupSetting : group->settings)
for (auto& groupSetting : group->numeric_settings)
{
PadSettingSpin* setting = new PadSettingSpin(parent, groupSetting.get());
setting->wxcontrol->Bind(wxEVT_SPINCTRL, &GamepadPage::AdjustSetting, eventsink);
options.push_back(setting);
szr->Add(
new wxStaticText(parent, wxID_ANY, wxGetTranslation(StrToWxStr(groupSetting->name))));
new wxStaticText(parent, wxID_ANY, wxGetTranslation(StrToWxStr(groupSetting->m_name))));
szr->Add(setting->wxcontrol, 0, wxLEFT, 0);
}

Expand All @@ -856,7 +855,7 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
static_bitmap = new wxStaticBitmap(parent, wxID_ANY, bitmap, wxDefaultPosition, wxDefaultSize,
wxBITMAP_TYPE_BMP);

PadSettingSpin* const threshold_cbox = new PadSettingSpin(parent, group->settings[0].get());
auto* const threshold_cbox = new PadSettingSpin(parent, group->numeric_settings[0].get());
threshold_cbox->wxcontrol->Bind(wxEVT_SPINCTRL, &GamepadPage::AdjustSetting, eventsink);

threshold_cbox->wxcontrol->SetToolTip(
Expand All @@ -865,9 +864,9 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
options.push_back(threshold_cbox);

wxBoxSizer* const szr = new wxBoxSizer(wxHORIZONTAL);
szr->Add(
new wxStaticText(parent, wxID_ANY, wxGetTranslation(StrToWxStr(group->settings[0]->name))),
0, wxCENTER | wxRIGHT, 3);
szr->Add(new wxStaticText(parent, wxID_ANY,
wxGetTranslation(StrToWxStr(group->numeric_settings[0]->m_name))),
0, wxCENTER | wxRIGHT, 3);
szr->Add(threshold_cbox->wxcontrol, 0, wxRIGHT, 3);

Add(szr, 0, wxALL | wxCENTER, 3);
Expand All @@ -893,14 +892,15 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
static_bitmap = new wxStaticBitmap(parent, wxID_ANY, bitmap, wxDefaultPosition, wxDefaultSize,
wxBITMAP_TYPE_BMP);

for (auto& groupSetting : group->settings)
for (auto& groupSetting : group->numeric_settings)
{
PadSettingSpin* setting = new PadSettingSpin(parent, groupSetting.get());
setting->wxcontrol->Bind(wxEVT_SPINCTRL, &GamepadPage::AdjustSetting, eventsink);
options.push_back(setting);
wxBoxSizer* const szr = new wxBoxSizer(wxHORIZONTAL);
szr->Add(new wxStaticText(parent, wxID_ANY, wxGetTranslation(StrToWxStr(groupSetting->name))),
0, wxCENTER | wxRIGHT, 3);
szr->Add(
new wxStaticText(parent, wxID_ANY, wxGetTranslation(StrToWxStr(groupSetting->m_name))), 0,
wxCENTER | wxRIGHT, 3);
szr->Add(setting->wxcontrol, 0, wxRIGHT, 3);
Add(szr, 0, wxALL | wxCENTER, 3);
}
Expand All @@ -926,35 +926,32 @@ ControlGroupBox::ControlGroupBox(ControllerEmu::ControlGroup* const group, wxWin
default:
{
// options
for (auto& groupSetting : group->settings)
for (auto& groupSetting : group->boolean_settings)
{
if (groupSetting->high == DEFAULT_HIGH_VALUE)
PadSettingCheckBox* setting_cbox = new PadSettingCheckBox(parent, groupSetting.get());
if (groupSetting->m_name == "Iterative Input")
{
PadSettingCheckBox* setting_cbox = new PadSettingCheckBox(parent, groupSetting.get());
if (groupSetting->is_iterate == true)
{
setting_cbox->wxcontrol->Bind(wxEVT_CHECKBOX, &GamepadPage::AdjustSettingUI, eventsink);
groupSetting->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);
setting_cbox->wxcontrol->Bind(wxEVT_CHECKBOX, &GamepadPage::AdjustSettingUI, eventsink);
groupSetting->SetValue(false);
}
else
{
PadSettingSpin* setting = new PadSettingSpin(parent, groupSetting.get());
setting->wxcontrol->Bind(wxEVT_SPINCTRL, &GamepadPage::AdjustSetting, eventsink);
options.push_back(setting);
wxBoxSizer* const szr = new wxBoxSizer(wxHORIZONTAL);
szr->Add(
new wxStaticText(parent, wxID_ANY, wxGetTranslation(StrToWxStr(groupSetting->name))), 0,
wxCENTER | wxRIGHT, 3);
szr->Add(setting->wxcontrol, 0, wxRIGHT, 3);
Add(szr, 0, wxALL | wxCENTER, 3);
setting_cbox->wxcontrol->Bind(wxEVT_CHECKBOX, &GamepadPage::AdjustSetting, eventsink);
}
options.push_back(setting_cbox);
Add(setting_cbox->wxcontrol, 0, wxALL | wxLEFT, 5);
}
for (auto& groupSetting : group->numeric_settings)
{
PadSettingSpin* setting = new PadSettingSpin(parent, groupSetting.get());
setting->wxcontrol->Bind(wxEVT_SPINCTRL, &GamepadPage::AdjustSetting, eventsink);
options.push_back(setting);
wxBoxSizer* const szr = new wxBoxSizer(wxHORIZONTAL);
szr->Add(
new wxStaticText(parent, wxID_ANY, wxGetTranslation(StrToWxStr(groupSetting->m_name))), 0,
wxCENTER | wxRIGHT, 3);
szr->Add(setting->wxcontrol, 0, wxRIGHT, 3);
Add(szr, 0, wxALL | wxCENTER, 3);
}
}
break;
Expand All @@ -980,7 +977,8 @@ ControlGroupsSizer::ControlGroupsSizer(ControllerEmu* const controller, wxWindow
new wxStaticBoxSizer(wxVERTICAL, parent, wxGetTranslation(StrToWxStr(group->ui_name)));
control_group->Add(control_group_box);

const size_t grp_size = group->controls.size() + group->settings.size();
const size_t grp_size =
group->controls.size() + group->numeric_settings.size() + group->boolean_settings.size();
col_size += grp_size;
if (col_size > 8 || nullptr == stacked_groups)
{
Expand Down
14 changes: 8 additions & 6 deletions Source/Core/DolphinWX/InputConfigDiag.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,28 +61,30 @@ class PadSettingExtension : public PadSetting
class PadSettingSpin : public PadSetting
{
public:
PadSettingSpin(wxWindow* const parent, ControllerEmu::ControlGroup::Setting* const _setting)
PadSettingSpin(wxWindow* const parent,
ControllerEmu::ControlGroup::NumericSetting* const _setting)
: PadSetting(new wxSpinCtrl(parent, wxID_ANY, wxEmptyString, wxDefaultPosition,
wxSize(54, -1), 0, _setting->low, _setting->high,
(int)(_setting->value * 100))),
wxSize(54, -1), 0, _setting->m_low, _setting->m_high,
(int)(_setting->GetValue() * 100))),
setting(_setting)
{
}

void UpdateGUI() override;
void UpdateValue() override;

ControllerEmu::ControlGroup::Setting* const setting;
ControllerEmu::ControlGroup::NumericSetting* const setting;
};

class PadSettingCheckBox : public PadSetting
{
public:
PadSettingCheckBox(wxWindow* const parent, ControllerEmu::ControlGroup::Setting* const setting);
PadSettingCheckBox(wxWindow* const parent,
ControllerEmu::ControlGroup::BooleanSetting* const setting);
void UpdateGUI() override;
void UpdateValue() override;

ControllerEmu::ControlGroup::Setting* const setting;
ControllerEmu::ControlGroup::BooleanSetting* const setting;
};

class InputEventFilter : public wxEventFilter
Expand Down
10 changes: 5 additions & 5 deletions Source/Core/DolphinWX/InputConfigDiagBitmaps.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ static void DrawControlGroupBox(wxDC& dc, ControlGroupBox* g)
{
// deadzone circle
dc.SetBrush(*wxLIGHT_GREY_BRUSH);
dc.DrawCircle(32, 32, g->control_group->settings[SETTING_DEADZONE]->value * 32);
dc.DrawCircle(32, 32, g->control_group->numeric_settings[SETTING_DEADZONE]->GetValue() * 32);
}

// raw dot
Expand Down Expand Up @@ -259,7 +259,7 @@ static void DrawControlGroupBox(wxDC& dc, ControlGroupBox* g)
{
ControlState raw_dot[3];
ControlState adj_dot[3];
const ControlState deadzone = g->control_group->settings[0]->value;
const ControlState deadzone = g->control_group->numeric_settings[0]->GetValue();

// adjusted
((ControllerEmu::Force*)g->control_group)->GetState(adj_dot);
Expand Down Expand Up @@ -358,7 +358,7 @@ static void DrawControlGroupBox(wxDC& dc, ControlGroupBox* g)

// draw the shit
dc.SetPen(*wxGREY_PEN);
ControlState deadzone = g->control_group->settings[0]->value;
ControlState deadzone = g->control_group->numeric_settings[0]->GetValue();

ControlState* const trigs = new ControlState[trigger_count];
((ControllerEmu::Triggers*)g->control_group)->GetState(trigs);
Expand Down Expand Up @@ -398,7 +398,7 @@ static void DrawControlGroupBox(wxDC& dc, ControlGroupBox* g)

// draw the shit
dc.SetPen(*wxGREY_PEN);
ControlState thresh = g->control_group->settings[0]->value;
ControlState thresh = g->control_group->numeric_settings[0]->GetValue();

for (unsigned int n = 0; n < trigger_count; ++n)
{
Expand Down Expand Up @@ -428,7 +428,7 @@ static void DrawControlGroupBox(wxDC& dc, ControlGroupBox* g)
break;
case GROUP_TYPE_SLIDER:
{
const ControlState deadzone = g->control_group->settings[0]->value;
const ControlState deadzone = g->control_group->numeric_settings[0]->GetValue();

ControlState state = g->control_group->controls[1]->control_ref->State() -
g->control_group->controls[0]->control_ref->State();
Expand Down