From c614476a60b59548fc868bd734ab5f914ea514c9 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sat, 6 Aug 2022 00:10:00 +1000 Subject: [PATCH] Qt: Fix resetting controller type-specific settings --- .../controllerbindingwidgets.cpp | 55 ++++++++++--------- src/duckstation-qt/controllerbindingwidgets.h | 8 ++- 2 files changed, 35 insertions(+), 28 deletions(-) diff --git a/src/duckstation-qt/controllerbindingwidgets.cpp b/src/duckstation-qt/controllerbindingwidgets.cpp index 09351229a..1838ce61c 100644 --- a/src/duckstation-qt/controllerbindingwidgets.cpp +++ b/src/duckstation-qt/controllerbindingwidgets.cpp @@ -361,6 +361,9 @@ ControllerMacroEditWidget::ControllerMacroEditWidget(ControllerMacroWidget* pare for (u32 i = 0; i < cinfo->num_bindings; i++) { const Controller::ControllerBindingInfo& bi = cinfo->bindings[i]; + if (bi.type == Controller::ControllerBindingType::Motor) + continue; + QListWidgetItem* item = new QListWidgetItem(); item->setText(QString::fromUtf8(bi.display_name)); item->setCheckState((std::find(m_binds.begin(), m_binds.end(), &bi) != m_binds.end()) ? Qt::Checked : @@ -438,9 +441,15 @@ void ControllerMacroEditWidget::updateBinds() return; std::vector new_binds; - for (u32 i = 0; i < cinfo->num_bindings; i++) + for (u32 i = 0, bind_index = 0; i < cinfo->num_bindings; i++) { - const QListWidgetItem* item = m_ui.bindList->item(static_cast(i)); + const Controller::ControllerBindingInfo& bi = cinfo->bindings[i]; + if (bi.type == Controller::ControllerBindingType::Motor) + continue; + + const QListWidgetItem* item = m_ui.bindList->item(static_cast(bind_index)); + bind_index++; + if (!item) { // shouldn't happen @@ -475,36 +484,36 @@ void ControllerMacroEditWidget::updateBinds() ////////////////////////////////////////////////////////////////////////// -ControllerCustomSettingsWidget::ControllerCustomSettingsWidget(ControllerBindingWidget* parent) : QWidget(parent) +ControllerCustomSettingsWidget::ControllerCustomSettingsWidget(ControllerBindingWidget* parent) + : QWidget(parent), m_parent(parent) { - QGridLayout* layout = new QGridLayout(this); + const Controller::ControllerInfo* cinfo = Controller::GetControllerInfo(parent->getControllerType()); + if (!cinfo || cinfo->num_settings == 0) + return; - int row = createSettingWidgets(parent, layout); + QGroupBox* gbox = new QGroupBox(tr("%1 Settings").arg(qApp->translate("ControllerType", cinfo->display_name)), this); + QGridLayout* gbox_layout = new QGridLayout(gbox); + createSettingWidgets(parent, gbox, gbox_layout, cinfo); + + QVBoxLayout* layout = new QVBoxLayout(this); + layout->setContentsMargins(0, 0, 0, 0); + layout->addWidget(gbox); - QVBoxLayout* bottom_layout = new QVBoxLayout(); - bottom_layout->setContentsMargins(0, 0, 0, 0); QHBoxLayout* bottom_hlayout = new QHBoxLayout(); - bottom_hlayout->setContentsMargins(0, 0, 0, 0); QPushButton* restore_defaults = new QPushButton(tr("Restore Default Settings"), this); restore_defaults->setIcon(QIcon::fromTheme(QStringLiteral("restart-line"))); connect(restore_defaults, &QPushButton::clicked, this, &ControllerCustomSettingsWidget::restoreDefaults); - bottom_hlayout->addWidget(restore_defaults); bottom_hlayout->addStretch(1); - bottom_layout->addLayout(bottom_hlayout); - bottom_layout->addStretch(1); - layout->addLayout(bottom_layout, row++, 0, 1, 4); + bottom_hlayout->addWidget(restore_defaults); + layout->addLayout(bottom_hlayout); + layout->addStretch(1); } ControllerCustomSettingsWidget::~ControllerCustomSettingsWidget() {} -int ControllerCustomSettingsWidget::createSettingWidgets(ControllerBindingWidget* parent, QGridLayout* layout) +void ControllerCustomSettingsWidget::createSettingWidgets(ControllerBindingWidget* parent, QWidget* parent_widget, + QGridLayout* layout, const Controller::ControllerInfo* cinfo) { - const Controller::ControllerInfo* cinfo = Controller::GetControllerInfo(parent->getControllerType()); - if (!cinfo || cinfo->num_settings == 0) - return 0; - - setWindowTitle(tr("%1 Settings").arg(qApp->translate("ControllerType", cinfo->display_name))); - const std::string& section = parent->getConfigSection(); SettingsInterface* sif = parent->getDialog()->getProfileSettingsInterface(); int current_row = 0; @@ -595,17 +604,11 @@ int ControllerCustomSettingsWidget::createSettingWidgets(ControllerBindingWidget layout->addItem(new QSpacerItem(1, 10, QSizePolicy::Minimum, QSizePolicy::Fixed), current_row++, 0, 1, 4); } - - resize(600, 100); - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::MinimumExpanding); - - return current_row; } void ControllerCustomSettingsWidget::restoreDefaults() { - ControllerBindingWidget* parent = static_cast(this->parent()); - const Controller::ControllerInfo* cinfo = Controller::GetControllerInfo(parent->getControllerType()); + const Controller::ControllerInfo* cinfo = Controller::GetControllerInfo(m_parent->getControllerType()); if (!cinfo || cinfo->num_settings == 0) return; diff --git a/src/duckstation-qt/controllerbindingwidgets.h b/src/duckstation-qt/controllerbindingwidgets.h index d05424507..be0d66bcf 100644 --- a/src/duckstation-qt/controllerbindingwidgets.h +++ b/src/duckstation-qt/controllerbindingwidgets.h @@ -12,8 +12,8 @@ #include "ui_controllerbindingwidget_digital_controller.h" #include "ui_controllerbindingwidget_guncon.h" #include "ui_controllerbindingwidget_negcon.h" -#include "ui_controllermacrowidget.h" #include "ui_controllermacroeditwidget.h" +#include "ui_controllermacrowidget.h" class QVBoxLayout; @@ -132,10 +132,14 @@ public: ControllerCustomSettingsWidget(ControllerBindingWidget* parent); ~ControllerCustomSettingsWidget(); - int createSettingWidgets(ControllerBindingWidget* parent, QGridLayout* layout); + void createSettingWidgets(ControllerBindingWidget* parent, QWidget* parent_widget, QGridLayout* layout, + const Controller::ControllerInfo* cinfo); private Q_SLOTS: void restoreDefaults(); + +private: + ControllerBindingWidget* m_parent; }; //////////////////////////////////////////////////////////////////////////