From 0f4865393506ffedc8c1fb93b891a9249a6c0b2a Mon Sep 17 00:00:00 2001 From: spycrab Date: Mon, 2 Jul 2018 15:16:43 +0200 Subject: [PATCH] Qt/Mapping: Add support for exclusive boolean settings --- Source/Core/DolphinQt2/CMakeLists.txt | 1 + .../Config/Mapping/MappingRadio.cpp | 39 +++++++++++++++++++ .../DolphinQt2/Config/Mapping/MappingRadio.h | 29 ++++++++++++++ .../Config/Mapping/MappingWidget.cpp | 22 +++++++++++ .../DolphinQt2/Config/Mapping/MappingWidget.h | 2 + Source/Core/DolphinQt2/DolphinQt2.vcxproj | 4 +- 6 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 Source/Core/DolphinQt2/Config/Mapping/MappingRadio.cpp create mode 100644 Source/Core/DolphinQt2/Config/Mapping/MappingRadio.h diff --git a/Source/Core/DolphinQt2/CMakeLists.txt b/Source/Core/DolphinQt2/CMakeLists.txt index ebd98f7e95..b45c4c8bec 100644 --- a/Source/Core/DolphinQt2/CMakeLists.txt +++ b/Source/Core/DolphinQt2/CMakeLists.txt @@ -63,6 +63,7 @@ add_executable(dolphin-emu Config/Mapping/MappingCommon.cpp Config/Mapping/MappingIndicator.cpp Config/Mapping/MappingNumeric.cpp + Config/Mapping/MappingRadio.cpp Config/Mapping/MappingWidget.cpp Config/Mapping/MappingWindow.cpp Config/Mapping/WiimoteEmuExtension.cpp diff --git a/Source/Core/DolphinQt2/Config/Mapping/MappingRadio.cpp b/Source/Core/DolphinQt2/Config/Mapping/MappingRadio.cpp new file mode 100644 index 0000000000..4e42224147 --- /dev/null +++ b/Source/Core/DolphinQt2/Config/Mapping/MappingRadio.cpp @@ -0,0 +1,39 @@ +// Copyright 2017 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#include "DolphinQt2/Config/Mapping/MappingRadio.h" + +#include "DolphinQt2/Config/Mapping/MappingWidget.h" + +#include "InputCommon/ControllerEmu/ControllerEmu.h" +#include "InputCommon/ControllerEmu/Setting/BooleanSetting.h" +#include "InputCommon/ControllerInterface/ControllerInterface.h" + +MappingRadio::MappingRadio(MappingWidget* widget, ControllerEmu::BooleanSetting* setting) + : QRadioButton(tr(setting->m_ui_name.c_str())), m_parent(widget), m_setting(setting) +{ + Update(); + Connect(); +} + +void MappingRadio::Connect() +{ + connect(this, &QRadioButton::toggled, this, [this](int value) { + m_setting->SetValue(value); + m_parent->SaveSettings(); + m_parent->GetController()->UpdateReferences(g_controller_interface); + }); +} + +void MappingRadio::Clear() +{ + m_setting->SetValue(false); + m_parent->SaveSettings(); + Update(); +} + +void MappingRadio::Update() +{ + setChecked(m_setting->GetValue()); +} diff --git a/Source/Core/DolphinQt2/Config/Mapping/MappingRadio.h b/Source/Core/DolphinQt2/Config/Mapping/MappingRadio.h new file mode 100644 index 0000000000..8f4974dd5d --- /dev/null +++ b/Source/Core/DolphinQt2/Config/Mapping/MappingRadio.h @@ -0,0 +1,29 @@ +// Copyright 2017 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#pragma once + +#include + +class MappingWidget; + +namespace ControllerEmu +{ +class BooleanSetting; +}; + +class MappingRadio : public QRadioButton +{ +public: + MappingRadio(MappingWidget* widget, ControllerEmu::BooleanSetting* setting); + + void Clear(); + void Update(); + +private: + void Connect(); + + MappingWidget* m_parent; + ControllerEmu::BooleanSetting* m_setting; +}; diff --git a/Source/Core/DolphinQt2/Config/Mapping/MappingWidget.cpp b/Source/Core/DolphinQt2/Config/Mapping/MappingWidget.cpp index 0b6686a687..bfb29eca21 100644 --- a/Source/Core/DolphinQt2/Config/Mapping/MappingWidget.cpp +++ b/Source/Core/DolphinQt2/Config/Mapping/MappingWidget.cpp @@ -13,6 +13,7 @@ #include "DolphinQt2/Config/Mapping/MappingButton.h" #include "DolphinQt2/Config/Mapping/MappingIndicator.h" #include "DolphinQt2/Config/Mapping/MappingNumeric.h" +#include "DolphinQt2/Config/Mapping/MappingRadio.h" #include "DolphinQt2/Config/Mapping/MappingWindow.h" #include "InputCommon/ControlReference/ControlReference.h" @@ -114,7 +115,22 @@ QGroupBox* MappingWidget::CreateGroupBox(const QString& name, ControllerEmu::Con for (auto& boolean : group->boolean_settings) { + if (!boolean->IsExclusive()) + continue; + + auto* checkbox = new MappingRadio(this, boolean.get()); + + form_layout->addRow(checkbox); + m_radio.push_back(checkbox); + } + + for (auto& boolean : group->boolean_settings) + { + if (boolean->IsExclusive()) + continue; + auto* checkbox = new MappingBool(this, boolean.get()); + form_layout->addRow(checkbox); m_bools.push_back(checkbox); } @@ -135,6 +151,9 @@ void MappingWidget::OnClearFields() for (auto* checkbox : m_bools) checkbox->Clear(); + + for (auto* radio : m_radio) + radio->Clear(); } void MappingWidget::Update() @@ -148,6 +167,9 @@ void MappingWidget::Update() for (auto* checkbox : m_bools) checkbox->Update(); + for (auto* radio : m_radio) + radio->Update(); + SaveSettings(); } diff --git a/Source/Core/DolphinQt2/Config/Mapping/MappingWidget.h b/Source/Core/DolphinQt2/Config/Mapping/MappingWidget.h index def4c46ed2..cf0467b1bc 100644 --- a/Source/Core/DolphinQt2/Config/Mapping/MappingWidget.h +++ b/Source/Core/DolphinQt2/Config/Mapping/MappingWidget.h @@ -17,6 +17,7 @@ class MappingBool; class MappingButton; class MappingNumeric; class MappingWindow; +class MappingRadio; class QGroupBox; namespace ControllerEmu @@ -64,6 +65,7 @@ private: MappingWindow* m_parent; bool m_first = true; std::vector m_bools; + std::vector m_radio; std::vector m_buttons; std::vector m_numerics; }; diff --git a/Source/Core/DolphinQt2/DolphinQt2.vcxproj b/Source/Core/DolphinQt2/DolphinQt2.vcxproj index 2ea3ef872e..75d90eac84 100644 --- a/Source/Core/DolphinQt2/DolphinQt2.vcxproj +++ b/Source/Core/DolphinQt2/DolphinQt2.vcxproj @@ -296,6 +296,7 @@ + @@ -368,6 +369,7 @@ + @@ -462,4 +464,4 @@ - + \ No newline at end of file