From bcd40dd8605745f4232a6c4ddc2cebeaa1ce2d3d Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Tue, 18 May 2021 19:20:47 +1000 Subject: [PATCH] Qt: Fix autofire button selection in non-English UI --- .../controllersettingswidget.cpp | 9 ++++---- src/duckstation-qt/settingwidgetbinder.h | 22 +++++++++++++++++-- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/duckstation-qt/controllersettingswidget.cpp b/src/duckstation-qt/controllersettingswidget.cpp index 0afb8aeee..b474e7a87 100644 --- a/src/duckstation-qt/controllersettingswidget.cpp +++ b/src/duckstation-qt/controllersettingswidget.cpp @@ -460,10 +460,10 @@ void ControllerSettingsWidget::createPortBindingSettingsUi(int index, PortSettin QGridLayout* autofire_layout = new QGridLayout(); autofire_layout->setContentsMargins(0, 0, 0, 0); - QStringList option_list; - option_list.push_back(QString()); + QVector> option_list; + option_list.push_back({}); for (const auto& [button_name, button_code] : buttons) - option_list.push_back(qApp->translate(cname, button_name.c_str())); + option_list.push_back({qApp->translate(cname, button_name.c_str()), QString::fromStdString(button_name)}); for (u32 autofire_index = 0; autofire_index < QtHostInterface::NUM_CONTROLLER_AUTOFIRE_BUTTONS; autofire_index++) { @@ -471,7 +471,8 @@ void ControllerSettingsWidget::createPortBindingSettingsUi(int index, PortSettin autofire_layout->addWidget(new QLabel(tr("Auto Fire %1").arg(autofire_index + 1), collapsible), autofire_index, 0); QComboBox* button_cb = new QComboBox(collapsible); - button_cb->addItems(option_list); + for (const auto& it : option_list) + button_cb->addItem(it.first, it.second); autofire_layout->addWidget(button_cb, autofire_index, 1); SettingWidgetBinder::BindWidgetToStringSetting( m_host_interface, button_cb, section_name, diff --git a/src/duckstation-qt/settingwidgetbinder.h b/src/duckstation-qt/settingwidgetbinder.h index 635f2f2d4..799208562 100644 --- a/src/duckstation-qt/settingwidgetbinder.h +++ b/src/duckstation-qt/settingwidgetbinder.h @@ -71,8 +71,26 @@ struct SettingAccessor static float getFloatValue(const QComboBox* widget) { return static_cast(widget->currentIndex()); } static void setFloatValue(QComboBox* widget, float value) { widget->setCurrentIndex(static_cast(value)); } - static QString getStringValue(const QComboBox* widget) { return widget->currentText(); } - static void setStringValue(QComboBox* widget, const QString& value) { widget->setCurrentText(value); } + static QString getStringValue(const QComboBox* widget) + { + const QVariant currentData(widget->currentData()); + if (currentData.type() == QVariant::String) + return currentData.toString(); + + return widget->currentText(); + } + + static void setStringValue(QComboBox* widget, const QString& value) + { + const int index = widget->findData(value); + if (index >= 0) + { + widget->setCurrentIndex(index); + return; + } + + widget->setCurrentText(value); + } template static void connectValueChanged(QComboBox* widget, F func)