From 49d9c63908e772670d05b9913a0f06209696b443 Mon Sep 17 00:00:00 2001 From: rlnilsen <47765059+rlnilsen@users.noreply.github.com> Date: Tue, 29 Oct 2019 21:46:03 +0100 Subject: [PATCH 1/3] Motion Input: DSU Client config UI: Enable server IP address and port fields only when "server enable" is checked. --- .../ControllerInterface/DualShockUDPClientWidget.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp b/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp index 965f2f6879..68e8a75030 100644 --- a/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp +++ b/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp @@ -29,10 +29,12 @@ void DualShockUDPClientWidget::CreateWidgets() m_server_address = new QLineEdit( QString::fromStdString(Config::Get(ciface::DualShockUDPClient::Settings::SERVER_ADDRESS))); + m_server_address->setEnabled(m_server_enabled->isChecked()); m_server_port = new QSpinBox(); m_server_port->setMaximum(65535); m_server_port->setValue(Config::Get(ciface::DualShockUDPClient::Settings::SERVER_PORT)); + m_server_port->setEnabled(m_server_enabled->isChecked()); auto* description = new QLabel(tr("DSU protocol enables the use of input and motion data from compatible " @@ -58,8 +60,10 @@ void DualShockUDPClientWidget::CreateWidgets() void DualShockUDPClientWidget::ConnectWidgets() { connect(m_server_enabled, &QCheckBox::toggled, this, [this] { - Config::SetBaseOrCurrent(ciface::DualShockUDPClient::Settings::SERVER_ENABLED, - m_server_enabled->isChecked()); + bool checked = m_server_enabled->isChecked(); + Config::SetBaseOrCurrent(ciface::DualShockUDPClient::Settings::SERVER_ENABLED, checked); + m_server_address->setEnabled(checked); + m_server_port->setEnabled(checked); }); connect(m_server_address, &QLineEdit::editingFinished, this, [this] { From d67a2304b0f542e21f680265da80efef3e0a83d9 Mon Sep 17 00:00:00 2001 From: rlnilsen <47765059+rlnilsen@users.noreply.github.com> Date: Wed, 30 Oct 2019 02:05:42 +0100 Subject: [PATCH 2/3] Input: Add optional "enable" setting to the ControlGroup class. The setting is exposed as a check box in the QGroupBox instance that visualises the ControlGroup instance. The setting is saved under "[control group name]/Enabled", but only when it is "false". The default value is "true". --- .../Config/Mapping/MappingWidget.cpp | 24 +++++++++++++++++++ .../ControlGroup/ControlGroup.cpp | 18 ++++++++++---- .../ControllerEmu/ControlGroup/ControlGroup.h | 14 +++++++++-- 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp b/Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp index b9149027ea..0268fe908e 100644 --- a/Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp +++ b/Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp @@ -4,8 +4,10 @@ #include "DolphinQt/Config/Mapping/MappingWidget.h" +#include #include #include +#include #include #include @@ -138,6 +140,28 @@ QGroupBox* MappingWidget::CreateGroupBox(const QString& name, ControllerEmu::Con form_layout->addRow(tr(setting->GetUIName()), setting_widget); } + if (group->can_be_disabled) + { + QLabel* group_enable_label = new QLabel(tr("Enable")); + QCheckBox* group_enable_checkbox = new QCheckBox(); + group_enable_checkbox->setChecked(group->enabled); + form_layout->insertRow(0, group_enable_label, group_enable_checkbox); + auto enable_group_by_checkbox = [group, form_layout, group_enable_label, + group_enable_checkbox] { + group->enabled = group_enable_checkbox->isChecked(); + for (int i = 0; i < form_layout->count(); ++i) + { + QWidget* widget = form_layout->itemAt(i)->widget(); + if (widget != nullptr && widget != group_enable_label && widget != group_enable_checkbox) + widget->setEnabled(group->enabled); + } + }; + enable_group_by_checkbox(); + connect(group_enable_checkbox, &QCheckBox::toggled, this, enable_group_by_checkbox); + connect(this, &MappingWidget::ConfigChanged, this, + [group_enable_checkbox, group] { group_enable_checkbox->setChecked(group->enabled); }); + } + return group_box; } diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp index 09370a1f0b..40ccae24f7 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp @@ -15,13 +15,16 @@ namespace ControllerEmu { -ControlGroup::ControlGroup(std::string name_, const GroupType type_) - : name(name_), ui_name(std::move(name_)), type(type_) +ControlGroup::ControlGroup(std::string name_, const GroupType type_, CanBeDisabled can_be_disabled_) + : name(name_), ui_name(std::move(name_)), type(type_), + can_be_disabled(can_be_disabled_ == CanBeDisabled::Yes) { } -ControlGroup::ControlGroup(std::string name_, std::string ui_name_, const GroupType type_) - : name(std::move(name_)), ui_name(std::move(ui_name_)), type(type_) +ControlGroup::ControlGroup(std::string name_, std::string ui_name_, const GroupType type_, + CanBeDisabled can_be_disabled_) + : name(std::move(name_)), ui_name(std::move(ui_name_)), type(type_), + can_be_disabled(can_be_disabled_ == CanBeDisabled::Yes) { } @@ -43,6 +46,10 @@ void ControlGroup::LoadConfig(IniFile::Section* sec, const std::string& defdev, { const std::string group(base + name + "/"); + // enabled + if (can_be_disabled) + sec->Get(group + "Enabled", &enabled, true); + for (auto& setting : numeric_settings) setting->LoadFromIni(*sec, group); @@ -88,6 +95,9 @@ void ControlGroup::SaveConfig(IniFile::Section* sec, const std::string& defdev, { const std::string group(base + name + "/"); + // enabled + sec->Set(group + "Enabled", enabled, true); + for (auto& setting : numeric_settings) setting->SaveToIni(*sec, group); diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.h b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.h index 310df90e30..26b3ce5ad6 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.h +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.h @@ -48,8 +48,16 @@ enum class GroupType class ControlGroup { public: - explicit ControlGroup(std::string name, GroupType type = GroupType::Other); - ControlGroup(std::string name, std::string ui_name, GroupType type = GroupType::Other); + enum class CanBeDisabled + { + No, + Yes, + }; + + explicit ControlGroup(std::string name, GroupType type = GroupType::Other, + CanBeDisabled can_be_disabled = CanBeDisabled::No); + ControlGroup(std::string name, std::string ui_name, GroupType type = GroupType::Other, + CanBeDisabled can_be_disabled = CanBeDisabled::No); virtual ~ControlGroup(); virtual void LoadConfig(IniFile::Section* sec, const std::string& defdev = "", @@ -79,7 +87,9 @@ public: const std::string name; const std::string ui_name; const GroupType type; + const bool can_be_disabled; + bool enabled = true; std::vector> controls; std::vector> numeric_settings; }; From f7a50545e3d6878989886203e202fed4af390f0d Mon Sep 17 00:00:00 2001 From: rlnilsen <47765059+rlnilsen@users.noreply.github.com> Date: Tue, 29 Oct 2019 15:56:36 +0100 Subject: [PATCH 3/3] Motion Input: Add "enable" checkbox for motion controlled cursor. --- Source/Core/Core/HW/WiimoteEmu/Dynamics.cpp | 6 ++++++ .../InputCommon/ControllerEmu/ControlGroup/IMUCursor.cpp | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Source/Core/Core/HW/WiimoteEmu/Dynamics.cpp b/Source/Core/Core/HW/WiimoteEmu/Dynamics.cpp index 00820bf55a..0e33182cf2 100644 --- a/Source/Core/Core/HW/WiimoteEmu/Dynamics.cpp +++ b/Source/Core/Core/HW/WiimoteEmu/Dynamics.cpp @@ -325,6 +325,12 @@ void EmulateIMUCursor(std::optional* state, ControllerEmu::IMUC // Avoid having to double dereference auto& st = *state; + if (!imu_ir_group->enabled) + { + st = std::nullopt; + return; + } + auto accel = imu_accelerometer_group->GetState(); auto ang_vel = imu_gyroscope_group->GetState(); diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/IMUCursor.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/IMUCursor.cpp index 7133a07e59..9eedbf0747 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/IMUCursor.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/IMUCursor.cpp @@ -18,7 +18,8 @@ namespace ControllerEmu { IMUCursor::IMUCursor(std::string name, std::string ui_name) - : ControlGroup(std::move(name), std::move(ui_name), GroupType::IMUCursor) + : ControlGroup(std::move(name), std::move(ui_name), GroupType::IMUCursor, + ControlGroup::CanBeDisabled::Yes) { controls.emplace_back(std::make_unique(Translate, _trans("Recenter")));