summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp')
-rw-r--r--Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp106
1 files changed, 59 insertions, 47 deletions
diff --git a/Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp b/Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp
index cfb4b35738..c8fdffc140 100644
--- a/Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp
+++ b/Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp
@@ -103,6 +103,34 @@ QGroupBox* MappingWidget::CreateGroupBox(const QString& name, ControllerEmu::Con
break;
}
+ if (group->HasEnabledSetting())
+ {
+ AddSettingWidget(form_layout, group->enabled_setting.get());
+
+ auto enable_labels = [form_layout](bool enabled) {
+ // Skipping the "Enabled" checkbox row itself.
+ constexpr int start_index = 1;
+ for (int i = start_index; i < form_layout->count(); ++i)
+ {
+ auto* const item = form_layout->itemAt(i, QFormLayout::LabelRole);
+ if (item == nullptr)
+ continue;
+
+ auto* const widget = item->widget();
+ if (widget == nullptr)
+ continue;
+
+ widget->setEnabled(enabled);
+ }
+ };
+
+ connect(this, &MappingWidget::Update, this, [group, enable_labels, enabled = true]() mutable {
+ if (enabled == group->enabled_setting->GetValue())
+ return;
+ enable_labels(enabled = !enabled);
+ });
+ }
+
if (indicator)
{
const auto indicator_layout = new QBoxLayout(QBoxLayout::Direction::Down);
@@ -132,28 +160,6 @@ QGroupBox* MappingWidget::CreateGroupBox(const QString& name, ControllerEmu::Con
AddSettingWidgets(form_layout, group, ControllerEmu::SettingVisibility::Normal);
- if (group->default_value != ControllerEmu::ControlGroup::DefaultValue::AlwaysEnabled)
- {
- 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); });
- }
-
const auto advanced_setting_count =
std::ranges::count(group->numeric_settings, ControllerEmu::SettingVisibility::Advanced,
&ControllerEmu::NumericSettingBase::GetVisibility);
@@ -202,36 +208,42 @@ void MappingWidget::AddSettingWidgets(QFormLayout* layout, ControllerEmu::Contro
if (setting->GetVisibility() != visibility)
continue;
- QWidget* setting_widget = nullptr;
+ AddSettingWidget(layout, setting.get());
+ }
+}
- switch (setting->GetType())
- {
- case ControllerEmu::SettingType::Double:
- setting_widget = new MappingDouble(
- this, static_cast<ControllerEmu::NumericSetting<double>*>(setting.get()));
- break;
-
- case ControllerEmu::SettingType::Bool:
- setting_widget =
- new MappingBool(this, static_cast<ControllerEmu::NumericSetting<bool>*>(setting.get()));
- break;
-
- default:
- // FYI: Widgets for additional types can be implemented as needed.
- break;
- }
+void MappingWidget::AddSettingWidget(QFormLayout* layout,
+ ControllerEmu::NumericSettingBase* setting)
+{
+ QWidget* setting_widget = nullptr;
- if (setting_widget)
- {
- const auto hbox = new QHBoxLayout;
+ switch (setting->GetType())
+ {
+ case ControllerEmu::SettingType::Double:
+ setting_widget =
+ new MappingDouble(this, static_cast<ControllerEmu::NumericSetting<double>*>(setting));
+ break;
- hbox->addWidget(setting_widget);
- setting_widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+ case ControllerEmu::SettingType::Bool:
+ setting_widget =
+ new MappingBool(this, static_cast<ControllerEmu::NumericSetting<bool>*>(setting));
+ break;
- hbox->addWidget(CreateSettingAdvancedMappingButton(*setting));
+ default:
+ // FYI: Widgets for additional types can be implemented as needed.
+ break;
+ }
- layout->addRow(tr(setting->GetUIName()), hbox);
- }
+ if (setting_widget != nullptr)
+ {
+ auto* const hbox = new QHBoxLayout;
+
+ hbox->addWidget(setting_widget);
+ setting_widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+
+ hbox->addWidget(CreateSettingAdvancedMappingButton(*setting));
+
+ layout->addRow(tr(setting->GetUIName()), hbox);
}
}