summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/yuzu/configuration/configure_audio.cpp21
-rw-r--r--src/yuzu/configuration/configure_audio.h11
-rw-r--r--src/yuzu/configuration/configure_dialog.cpp16
-rw-r--r--src/yuzu/configuration/configure_dialog.h1
-rw-r--r--src/yuzu/configuration/configure_general.cpp9
-rw-r--r--src/yuzu/configuration/configure_general.h11
-rw-r--r--src/yuzu/configuration/configure_graphics.cpp45
-rw-r--r--src/yuzu/configuration/configure_graphics.h17
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.cpp9
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.h5
-rw-r--r--src/yuzu/configuration/configure_per_game.cpp13
-rw-r--r--src/yuzu/configuration/configure_per_game.h1
-rw-r--r--src/yuzu/configuration/configure_system.cpp14
-rw-r--r--src/yuzu/configuration/configure_system.h12
-rw-r--r--src/yuzu/configuration/shared_translation.cpp320
-rw-r--r--src/yuzu/configuration/shared_translation.h6
-rw-r--r--src/yuzu/configuration/shared_widget.cpp65
-rw-r--r--src/yuzu/configuration/shared_widget.h8
18 files changed, 355 insertions, 229 deletions
diff --git a/src/yuzu/configuration/configure_audio.cpp b/src/yuzu/configuration/configure_audio.cpp
index dd9eb4dc1..1cafeaa31 100644
--- a/src/yuzu/configuration/configure_audio.cpp
+++ b/src/yuzu/configuration/configure_audio.cpp
@@ -15,12 +15,13 @@
#include "yuzu/configuration/shared_widget.h"
#include "yuzu/uisettings.h"
-ConfigureAudio::ConfigureAudio(const Core::System& system_,
- std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
- const ConfigurationShared::TranslationMap& translations_,
- QWidget* parent)
- : Tab(group, parent),
- ui(std::make_unique<Ui::ConfigureAudio>()), system{system_}, translations{translations_} {
+ConfigureAudio::ConfigureAudio(
+ const Core::System& system_,
+ std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
+ const ConfigurationShared::TranslationMap& translations_,
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations_, QWidget* parent)
+ : Tab(group, parent), ui(std::make_unique<Ui::ConfigureAudio>()), system{system_},
+ translations{translations_}, combobox_translations{combobox_translations_} {
ui->setupUi(this);
Setup();
@@ -48,18 +49,18 @@ void ConfigureAudio::Setup() {
auto* widget = [&]() {
if (setting->Id() == Settings::values.volume.Id()) {
return new ConfigurationShared::Widget(
- setting, translations, this, runtime_lock, apply_funcs,
+ setting, translations, combobox_translations, this, runtime_lock, apply_funcs,
ConfigurationShared::RequestType::Slider, true, 1.0f, nullptr,
tr("%1%", "Volume percentage (e.g. 50%)"));
} else if (setting->Id() == Settings::values.audio_output_device_id.Id() ||
setting->Id() == Settings::values.audio_input_device_id.Id() ||
setting->Id() == Settings::values.sink_id.Id()) {
return new ConfigurationShared::Widget(
- setting, translations, this, runtime_lock, apply_funcs,
+ setting, translations, combobox_translations, this, runtime_lock, apply_funcs,
ConfigurationShared::RequestType::ComboBox, false);
} else {
- return new ConfigurationShared::Widget(setting, translations, this, runtime_lock,
- apply_funcs);
+ return new ConfigurationShared::Widget(setting, translations, combobox_translations,
+ this, runtime_lock, apply_funcs);
}
}();
diff --git a/src/yuzu/configuration/configure_audio.h b/src/yuzu/configuration/configure_audio.h
index 170e0bce8..a9b005433 100644
--- a/src/yuzu/configuration/configure_audio.h
+++ b/src/yuzu/configuration/configure_audio.h
@@ -22,10 +22,12 @@ class ConfigureAudio;
class ConfigureAudio : public ConfigurationShared::Tab {
public:
- explicit ConfigureAudio(const Core::System& system_,
- std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
- const ConfigurationShared::TranslationMap& translations_,
- QWidget* parent = nullptr);
+ explicit ConfigureAudio(
+ const Core::System& system_,
+ std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
+ const ConfigurationShared::TranslationMap& translations_,
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations_,
+ QWidget* parent = nullptr);
~ConfigureAudio() override;
void ApplyConfiguration() override;
@@ -49,6 +51,7 @@ private:
const Core::System& system;
const ConfigurationShared::TranslationMap& translations;
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations;
std::forward_list<std::function<void(bool)>> apply_funcs{};
diff --git a/src/yuzu/configuration/configure_dialog.cpp b/src/yuzu/configuration/configure_dialog.cpp
index f0f00be83..1a339a227 100644
--- a/src/yuzu/configuration/configure_dialog.cpp
+++ b/src/yuzu/configuration/configure_dialog.cpp
@@ -34,21 +34,25 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry_,
: QDialog(parent), ui{std::make_unique<Ui::ConfigureDialog>()},
registry(registry_), system{system_},
translations{ConfigurationShared::InitializeTranslations(this)},
- audio_tab{std::make_unique<ConfigureAudio>(system_, nullptr, *translations, this)},
+ combobox_translations{ConfigurationShared::ComboboxEnumeration(this)},
+ audio_tab{std::make_unique<ConfigureAudio>(system_, nullptr, *translations,
+ *combobox_translations, this)},
cpu_tab{std::make_unique<ConfigureCpu>(system_, nullptr, this)},
debug_tab_tab{std::make_unique<ConfigureDebugTab>(system_, this)},
filesystem_tab{std::make_unique<ConfigureFilesystem>(this)},
- general_tab{std::make_unique<ConfigureGeneral>(system_, nullptr, *translations, this)},
- graphics_advanced_tab{
- std::make_unique<ConfigureGraphicsAdvanced>(system_, nullptr, *translations, this)},
+ general_tab{std::make_unique<ConfigureGeneral>(system_, nullptr, *translations,
+ *combobox_translations, this)},
+ graphics_advanced_tab{std::make_unique<ConfigureGraphicsAdvanced>(
+ system_, nullptr, *translations, *combobox_translations, this)},
graphics_tab{std::make_unique<ConfigureGraphics>(
system_, vk_device_records, [&]() { graphics_advanced_tab->ExposeComputeOption(); },
- nullptr, *translations, this)},
+ nullptr, *translations, *combobox_translations, this)},
hotkeys_tab{std::make_unique<ConfigureHotkeys>(system_.HIDCore(), this)},
input_tab{std::make_unique<ConfigureInput>(system_, this)},
network_tab{std::make_unique<ConfigureNetwork>(system_, this)},
profile_tab{std::make_unique<ConfigureProfileManager>(system_, this)},
- system_tab{std::make_unique<ConfigureSystem>(system_, nullptr, *translations, this)},
+ system_tab{std::make_unique<ConfigureSystem>(system_, nullptr, *translations,
+ *combobox_translations, this)},
ui_tab{std::make_unique<ConfigureUi>(system_, this)}, web_tab{std::make_unique<ConfigureWeb>(
this)} {
Settings::SetConfiguringGlobal(true);
diff --git a/src/yuzu/configuration/configure_dialog.h b/src/yuzu/configuration/configure_dialog.h
index 0416b01d9..4f8c1912f 100644
--- a/src/yuzu/configuration/configure_dialog.h
+++ b/src/yuzu/configuration/configure_dialog.h
@@ -72,6 +72,7 @@ private:
Core::System& system;
std::unique_ptr<ConfigurationShared::TranslationMap> translations;
+ std::unique_ptr<ConfigurationShared::ComboboxTranslationMap> combobox_translations;
std::forward_list<ConfigurationShared::Tab*> tab_group;
std::unique_ptr<ConfigureAudio> audio_tab;
diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp
index 7eb6cb9ec..fdae83c64 100644
--- a/src/yuzu/configuration/configure_general.cpp
+++ b/src/yuzu/configuration/configure_general.cpp
@@ -15,9 +15,10 @@
ConfigureGeneral::ConfigureGeneral(
const Core::System& system_,
std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
- const ConfigurationShared::TranslationMap& translations_, QWidget* parent)
+ const ConfigurationShared::TranslationMap& translations_,
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations_, QWidget* parent)
: Tab(group, parent), ui{std::make_unique<Ui::ConfigureGeneral>()}, system{system_},
- translations{translations_} {
+ translations{translations_}, combobox_translations{combobox_translations_} {
ui->setupUi(this);
SetConfiguration();
@@ -40,8 +41,8 @@ void ConfigureGeneral::SetConfiguration() {
for (const auto setting :
UISettings::values.linkage.by_category[Settings::Category::UiGeneral]) {
- auto* widget =
- new ConfigurationShared::Widget(setting, translations, this, runtime_lock, apply_funcs);
+ auto* widget = new ConfigurationShared::Widget(setting, translations, combobox_translations,
+ this, runtime_lock, apply_funcs);
if (!widget->Valid()) {
delete widget;
diff --git a/src/yuzu/configuration/configure_general.h b/src/yuzu/configuration/configure_general.h
index 7692c16da..864dc3d2e 100644
--- a/src/yuzu/configuration/configure_general.h
+++ b/src/yuzu/configuration/configure_general.h
@@ -22,10 +22,12 @@ class ConfigureGeneral;
class ConfigureGeneral : public ConfigurationShared::Tab {
public:
- explicit ConfigureGeneral(const Core::System& system_,
- std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
- const ConfigurationShared::TranslationMap& translations_,
- QWidget* parent = nullptr);
+ explicit ConfigureGeneral(
+ const Core::System& system_,
+ std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
+ const ConfigurationShared::TranslationMap& translations_,
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations_,
+ QWidget* parent = nullptr);
~ConfigureGeneral() override;
void SetResetCallback(std::function<void()> callback);
@@ -45,4 +47,5 @@ private:
const Core::System& system;
const ConfigurationShared::TranslationMap& translations;
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations;
};
diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp
index 45a4db430..a4dac659f 100644
--- a/src/yuzu/configuration/configure_graphics.cpp
+++ b/src/yuzu/configuration/configure_graphics.cpp
@@ -79,10 +79,12 @@ ConfigureGraphics::ConfigureGraphics(
const Core::System& system_, std::vector<VkDeviceInfo::Record>& records_,
const std::function<void()>& expose_compute_option_,
std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
- const ConfigurationShared::TranslationMap& translations_, QWidget* parent)
+ const ConfigurationShared::TranslationMap& translations_,
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations_, QWidget* parent)
: ConfigurationShared::Tab(group, parent), ui{std::make_unique<Ui::ConfigureGraphics>()},
records{records_}, expose_compute_option{expose_compute_option_}, system{system_},
- translations{translations_} {
+ translations{translations_}, combobox_translations{combobox_translations_},
+ shader_mapping{combobox_translations.at(typeid(Settings::ShaderBackend))} {
vulkan_device = Settings::values.vulkan_device.GetValue();
RetrieveVulkanDevices();
@@ -235,22 +237,22 @@ void ConfigureGraphics::Setup() {
setting->Id() == Settings::values.shader_backend.Id() ||
setting->Id() == Settings::values.vsync_mode.Id()) {
return new ConfigurationShared::Widget(
- setting, translations, this, runtime_lock, apply_funcs,
+ setting, translations, combobox_translations, this, runtime_lock, apply_funcs,
ConfigurationShared::RequestType::ComboBox, false);
} else if (setting->Id() == Settings::values.fsr_sharpening_slider.Id()) {
return new ConfigurationShared::Widget(
- setting, translations, this, runtime_lock, apply_funcs,
+ setting, translations, combobox_translations, this, runtime_lock, apply_funcs,
ConfigurationShared::RequestType::ReverseSlider, true, 0.5f, nullptr,
tr("%1%", "FSR sharpening percentage (e.g. 50%)"));
} else if (setting->Id() == Settings::values.speed_limit.Id()) {
return new ConfigurationShared::Widget(
- setting, translations, this, runtime_lock, apply_funcs,
+ setting, translations, combobox_translations, this, runtime_lock, apply_funcs,
ConfigurationShared::RequestType::SpinBox, true, 1.0f,
&Settings::values.use_speed_limit,
tr("%", "Limit speed percentage (e.g. 50%)"));
} else {
- return new ConfigurationShared::Widget(setting, translations, this, runtime_lock,
- apply_funcs);
+ return new ConfigurationShared::Widget(setting, translations, combobox_translations,
+ this, runtime_lock, apply_funcs);
}
}();
@@ -360,6 +362,15 @@ const QString ConfigureGraphics::TranslateVSyncMode(VkPresentModeKHR mode,
}
}
+int ConfigureGraphics::FindIndex(std::type_index enumeration, int value) const {
+ for (u32 i = 0; i < combobox_translations.at(enumeration).size(); i++) {
+ if (combobox_translations.at(enumeration)[i].first == static_cast<u32>(value)) {
+ return i;
+ }
+ }
+ return -1;
+}
+
void ConfigureGraphics::ApplyConfiguration() {
const bool powered_on = system.IsPoweredOn();
for (const auto& func : apply_funcs) {
@@ -374,13 +385,17 @@ void ConfigureGraphics::ApplyConfiguration() {
Settings::values.shader_backend.SetGlobal(true);
Settings::values.vulkan_device.SetGlobal(true);
- if (!Settings::IsConfiguringGlobal() && api_restore_global_button->isEnabled()) {
- auto backend = static_cast<Settings::RendererBackend>(api_combobox->currentIndex());
+ if (Settings::IsConfiguringGlobal() ||
+ (!Settings::IsConfiguringGlobal() && api_restore_global_button->isEnabled())) {
+ auto backend = static_cast<Settings::RendererBackend>(
+ combobox_translations
+ .at(typeid(Settings::RendererBackend))[api_combobox->currentIndex()]
+ .first);
switch (backend) {
case Settings::RendererBackend::OpenGL:
Settings::values.shader_backend.SetGlobal(false);
- Settings::values.shader_backend.SetValue(
- static_cast<Settings::ShaderBackend>(shader_backend_combobox->currentIndex()));
+ Settings::values.shader_backend.SetValue(static_cast<Settings::ShaderBackend>(
+ shader_mapping[shader_backend_combobox->currentIndex()].first));
break;
case Settings::RendererBackend::Vulkan:
Settings::values.vulkan_device.SetGlobal(false);
@@ -430,7 +445,8 @@ void ConfigureGraphics::UpdateAPILayout() {
switch (GetCurrentGraphicsBackend()) {
case Settings::RendererBackend::OpenGL:
- shader_backend_combobox->setCurrentIndex(static_cast<u32>(shader_backend));
+ shader_backend_combobox->setCurrentIndex(
+ FindIndex(typeid(Settings::ShaderBackend), static_cast<int>(shader_backend)));
vulkan_device_widget->setVisible(false);
shader_backend_widget->setVisible(true);
break;
@@ -467,5 +483,8 @@ Settings::RendererBackend ConfigureGraphics::GetCurrentGraphicsBackend() const {
if (!Settings::IsConfiguringGlobal() && !api_restore_global_button->isEnabled()) {
return Settings::values.renderer_backend.GetValue(true);
}
- return static_cast<Settings::RendererBackend>(api_combobox->currentIndex());
+ return static_cast<Settings::RendererBackend>(
+ combobox_translations.at(typeid(Settings::RendererBackend))
+ .at(api_combobox->currentIndex())
+ .first);
}
diff --git a/src/yuzu/configuration/configure_graphics.h b/src/yuzu/configuration/configure_graphics.h
index f36495ed3..9e421d024 100644
--- a/src/yuzu/configuration/configure_graphics.h
+++ b/src/yuzu/configuration/configure_graphics.h
@@ -36,12 +36,13 @@ class ConfigureGraphics;
class ConfigureGraphics : public ConfigurationShared::Tab {
public:
- explicit ConfigureGraphics(const Core::System& system_,
- std::vector<VkDeviceInfo::Record>& records,
- const std::function<void()>& expose_compute_option_,
- std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
- const ConfigurationShared::TranslationMap& translations_,
- QWidget* parent = nullptr);
+ explicit ConfigureGraphics(
+ const Core::System& system_, std::vector<VkDeviceInfo::Record>& records,
+ const std::function<void()>& expose_compute_option_,
+ std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
+ const ConfigurationShared::TranslationMap& translations_,
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations_,
+ QWidget* parent = nullptr);
~ConfigureGraphics() override;
void ApplyConfiguration() override;
@@ -68,6 +69,8 @@ private:
Settings::RendererBackend GetCurrentGraphicsBackend() const;
+ int FindIndex(std::type_index enumeration, int value) const;
+
std::unique_ptr<Ui::ConfigureGraphics> ui;
QColor bg_color;
@@ -85,6 +88,8 @@ private:
const Core::System& system;
const ConfigurationShared::TranslationMap& translations;
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations;
+ const std::vector<std::pair<u32, QString>>& shader_mapping;
QPushButton* api_restore_global_button;
QComboBox* vulkan_device_combobox;
diff --git a/src/yuzu/configuration/configure_graphics_advanced.cpp b/src/yuzu/configuration/configure_graphics_advanced.cpp
index 4f57a7ae6..61e9b3d69 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.cpp
+++ b/src/yuzu/configuration/configure_graphics_advanced.cpp
@@ -13,9 +13,10 @@
ConfigureGraphicsAdvanced::ConfigureGraphicsAdvanced(
const Core::System& system_,
std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
- const ConfigurationShared::TranslationMap& translations_, QWidget* parent)
+ const ConfigurationShared::TranslationMap& translations_,
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations_, QWidget* parent)
: Tab(group, parent), ui{std::make_unique<Ui::ConfigureGraphicsAdvanced>()}, system{system_},
- translations{translations_} {
+ translations{translations_}, combobox_translations{combobox_translations_} {
ui->setupUi(this);
@@ -33,8 +34,8 @@ void ConfigureGraphicsAdvanced::SetConfiguration() {
for (auto setting :
Settings::values.linkage.by_category[Settings::Category::RendererAdvanced]) {
- ConfigurationShared::Widget* widget =
- new ConfigurationShared::Widget(setting, translations, this, runtime_lock, apply_funcs);
+ ConfigurationShared::Widget* widget = new ConfigurationShared::Widget(
+ setting, translations, combobox_translations, this, runtime_lock, apply_funcs);
if (!widget->Valid()) {
delete widget;
diff --git a/src/yuzu/configuration/configure_graphics_advanced.h b/src/yuzu/configuration/configure_graphics_advanced.h
index 327134ee6..42634d3ff 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.h
+++ b/src/yuzu/configuration/configure_graphics_advanced.h
@@ -20,7 +20,9 @@ public:
explicit ConfigureGraphicsAdvanced(
const Core::System& system_,
std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
- const ConfigurationShared::TranslationMap& translations_, QWidget* parent = nullptr);
+ const ConfigurationShared::TranslationMap& translations_,
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations_,
+ QWidget* parent = nullptr);
~ConfigureGraphicsAdvanced() override;
void ApplyConfiguration() override;
@@ -36,6 +38,7 @@ private:
const Core::System& system;
const ConfigurationShared::TranslationMap& translations;
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations;
std::forward_list<std::function<void(bool)>> apply_funcs;
QWidget* checkbox_enable_compute_pipelines{};
diff --git a/src/yuzu/configuration/configure_per_game.cpp b/src/yuzu/configuration/configure_per_game.cpp
index 2ee0a8ffa..845ffeeb8 100644
--- a/src/yuzu/configuration/configure_per_game.cpp
+++ b/src/yuzu/configuration/configure_per_game.cpp
@@ -43,6 +43,7 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const std::st
: QDialog(parent),
ui(std::make_unique<Ui::ConfigurePerGame>()), title_id{title_id_}, system{system_},
translations{ConfigurationShared::InitializeTranslations(this)},
+ combobox_translations{ConfigurationShared::ComboboxEnumeration(this)},
tab_group{std::make_shared<std::forward_list<ConfigurationShared::Tab*>>()} {
const auto file_path = std::filesystem::path(Common::FS::ToU8String(file_name));
const auto config_file_name = title_id == 0 ? Common::FS::PathToUTF8String(file_path.filename())
@@ -50,15 +51,17 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const std::st
game_config = std::make_unique<Config>(config_file_name, Config::ConfigType::PerGameConfig);
addons_tab = std::make_unique<ConfigurePerGameAddons>(system_, this);
- audio_tab = std::make_unique<ConfigureAudio>(system_, tab_group, *translations, this);
+ audio_tab = std::make_unique<ConfigureAudio>(system_, tab_group, *translations,
+ *combobox_translations, this);
cpu_tab = std::make_unique<ConfigureCpu>(system_, tab_group, this);
- graphics_advanced_tab =
- std::make_unique<ConfigureGraphicsAdvanced>(system_, tab_group, *translations, this);
+ graphics_advanced_tab = std::make_unique<ConfigureGraphicsAdvanced>(
+ system_, tab_group, *translations, *combobox_translations, this);
graphics_tab = std::make_unique<ConfigureGraphics>(
system_, vk_device_records, [&]() { graphics_advanced_tab->ExposeComputeOption(); },
- tab_group, *translations, this);
+ tab_group, *translations, *combobox_translations, this);
input_tab = std::make_unique<ConfigureInputPerGame>(system_, game_config.get(), this);
- system_tab = std::make_unique<ConfigureSystem>(system_, tab_group, *translations, this);
+ system_tab = std::make_unique<ConfigureSystem>(system_, tab_group, *translations,
+ *combobox_translations, this);
ui->setupUi(this);
diff --git a/src/yuzu/configuration/configure_per_game.h b/src/yuzu/configuration/configure_per_game.h
index 32217c1f1..e43d4df94 100644
--- a/src/yuzu/configuration/configure_per_game.h
+++ b/src/yuzu/configuration/configure_per_game.h
@@ -75,6 +75,7 @@ private:
Core::System& system;
std::unique_ptr<ConfigurationShared::TranslationMap> translations;
+ std::unique_ptr<ConfigurationShared::ComboboxTranslationMap> combobox_translations;
std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> tab_group;
std::unique_ptr<ConfigurePerGameAddons> addons_tab;
diff --git a/src/yuzu/configuration/configure_system.cpp b/src/yuzu/configuration/configure_system.cpp
index 128860800..40d0be8ca 100644
--- a/src/yuzu/configuration/configure_system.cpp
+++ b/src/yuzu/configuration/configure_system.cpp
@@ -44,9 +44,10 @@ static bool IsValidLocale(u32 region_index, u32 language_index) {
ConfigureSystem::ConfigureSystem(
Core::System& system_, std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
- ConfigurationShared::TranslationMap& translations_, QWidget* parent)
+ const ConfigurationShared::TranslationMap& translations_,
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations_, QWidget* parent)
: Tab(group, parent), ui{std::make_unique<Ui::ConfigureSystem>()}, system{system_},
- translations{translations_} {
+ translations{translations_}, combobox_translations{combobox_translations_} {
ui->setupUi(this);
Setup();
@@ -121,18 +122,17 @@ void ConfigureSystem::Setup() {
ConfigurationShared::Widget* widget = [=]() {
if (setting->Id() == Settings::values.custom_rtc.Id()) {
return new ConfigurationShared::Widget(
- setting, translations, this, runtime_lock, apply_funcs,
+ setting, translations, combobox_translations, this, runtime_lock, apply_funcs,
ConfigurationShared::RequestType::DateTimeEdit, true, 1.0f,
&Settings::values.custom_rtc_enabled);
} else if (setting->Id() == Settings::values.rng_seed.Id()) {
return new ConfigurationShared::Widget(
- setting, translations, this, runtime_lock, apply_funcs,
+ setting, translations, combobox_translations, this, runtime_lock, apply_funcs,
ConfigurationShared::RequestType::HexEdit, true, 1.0f,
&Settings::values.rng_seed_enabled);
} else {
- return new ConfigurationShared::Widget(setting, translations, this, runtime_lock,
-
- apply_funcs);
+ return new ConfigurationShared::Widget(setting, translations, combobox_translations,
+ this, runtime_lock, apply_funcs);
}
}();
diff --git a/src/yuzu/configuration/configure_system.h b/src/yuzu/configuration/configure_system.h
index 87b575060..c598c07f3 100644
--- a/src/yuzu/configuration/configure_system.h
+++ b/src/yuzu/configuration/configure_system.h
@@ -22,10 +22,11 @@ class ConfigureSystem;
class ConfigureSystem : public ConfigurationShared::Tab {
public:
- explicit ConfigureSystem(Core::System& system_,
- std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
- ConfigurationShared::TranslationMap& translations,
- QWidget* parent = nullptr);
+ explicit ConfigureSystem(
+ Core::System& system_, std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
+ const ConfigurationShared::TranslationMap& translations,
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations,
+ QWidget* parent = nullptr);
~ConfigureSystem() override;
void ApplyConfiguration() override;
@@ -46,7 +47,8 @@ private:
ConfigurationShared::CheckState use_unsafe_extended_memory_layout;
Core::System& system;
- ConfigurationShared::TranslationMap& translations;
+ const ConfigurationShared::TranslationMap& translations;
+ const ConfigurationShared::ComboboxTranslationMap& combobox_translations;
QCheckBox* rng_seed_checkbox;
QLineEdit* rng_seed_edit;
diff --git a/src/yuzu/configuration/shared_translation.cpp b/src/yuzu/configuration/shared_translation.cpp
index c3b38f776..8fd8f3076 100644
--- a/src/yuzu/configuration/shared_translation.cpp
+++ b/src/yuzu/configuration/shared_translation.cpp
@@ -152,134 +152,204 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QWidget* parent) {
return translations;
}
-std::forward_list<QString> ComboboxEnumeration(std::type_index type, QWidget* parent) {
+std::unique_ptr<ComboboxTranslationMap> ComboboxEnumeration(QWidget* parent) {
+ std::unique_ptr<ComboboxTranslationMap> translations =
+ std::make_unique<ComboboxTranslationMap>();
const auto& tr = [&](const char* text) { return parent->tr(text); };
// Intentionally skipping VSyncMode to let the UI fill that one out
- if (type == typeid(Settings::AstcDecodeMode)) {
- return {
- tr("CPU"),
- tr("GPU"),
- tr("CPU Asynchronous"),
- };
- } else if (type == typeid(Settings::RendererBackend)) {
- return {
- tr("OpenGL"),
- tr("Vulkan"),
- tr("Null"),
- };
- } else if (type == typeid(Settings::ShaderBackend)) {
- return {
- tr("GLSL"),
- tr("GLASM (Assembly Shaders, NVIDIA Only)"),
- tr("SPIR-V (Experimental, Mesa Only)"),
- };
- } else if (type == typeid(Settings::GPUAccuracy)) {
- return {
- tr("Normal"),
- tr("High"),
- tr("Extreme"),
- };
- } else if (type == typeid(Settings::CPUAccuracy)) {
- return {
- tr("Auto"),
- tr("Accurate"),
- tr("Unsafe"),
- tr("Paranoid (disables most optimizations)"),
- };
- } else if (type == typeid(Settings::FullscreenMode)) {
- return {
- tr("Borderless Windowed"),
- tr("Exclusive Fullscreen"),
- };
- } else if (type == typeid(Settings::NvdecEmulation)) {
- return {
- tr("No Video Output"),
- tr("CPU Video Decoding"),
- tr("GPU Video Decoding (Default)"),
- };
- } else if (type == typeid(Settings::ResolutionSetup)) {
- return {
- tr("0.5X (360p/540p) [EXPERIMENTAL]"),
- tr("0.75X (540p/810p) [EXPERIMENTAL]"),
- tr("1X (720p/1080p)"),
- tr("1.5X (1080p/1620p) [EXPERIMENTAL]"),
- tr("2X (1440p/2160p)"),
- tr("3X (2160p/3240p)"),
- tr("4X (2880p/4320p)"),
- tr("5X (3600p/5400p)"),
- tr("6X (4320p/6480p)"),
- tr("7X (5040p/7560p)"),
- tr("8X (5760p/8640p)"),
- };
- } else if (type == typeid(Settings::ScalingFilter)) {
- return {
- tr("Nearest Neighbor"), tr("Bilinear"), tr("Bicubic"),
- tr("Gaussian"), tr("ScaleForce"), tr("AMD FidelityFX™️ Super Resolution"),
- };
- } else if (type == typeid(Settings::AntiAliasing)) {
- return {
- tr("None"),
- tr("FXAA"),
- tr("SMAA"),
- };
- } else if (type == typeid(Settings::AspectRatio)) {
- return {
- tr("Default (16:9)"), tr("Force 4:3"), tr("Force 21:9"),
- tr("Force 16:10"), tr("Stretch to Window"),
- };
- } else if (type == typeid(Settings::AnisotropyMode)) {
- return {
- tr("Automatic"), tr("Default"), tr("2x"), tr("4x"), tr("8x"), tr("16x"),
- };
- } else if (type == typeid(Settings::Language)) {
- return {
- tr("Japanese (日本語)"),
- tr("American English"),
- tr("French (français)"),
- tr("German (Deutsch)"),
- tr("Italian (italiano)"),
- tr("Spanish (español)"),
- tr("Chinese"),
- tr("Korean (한국어)"),
- tr("Dutch (Nederlands)"),
- tr("Portuguese (português)"),
- tr("Russian (Русский)"),
- tr("Taiwanese"),
- tr("British English"),
- tr("Canadian French"),
- tr("Latin American Spanish"),
- tr("Simplified Chinese"),
- tr("Traditional Chinese (正體中文)"),
- tr("Brazilian Portuguese (português do Brasil)"),
- };
- } else if (type == typeid(Settings::Region)) {
- return {
- tr("Japan"), tr("USA"), tr("Europe"), tr("Australia"),
- tr("China"), tr("Korea"), tr("Taiwan"),
- };
- } else if (type == typeid(Settings::TimeZone)) {
- return {
- tr("Auto"), tr("Default"), tr("CET"), tr("CST6CDT"), tr("Cuba"),
- tr("EET"), tr("Egypt"), tr("Eire"), tr("EST"), tr("EST5EDT"),
- tr("GB"), tr("GB-Eire"), tr("GMT"), tr("GMT+0"), tr("GMT-0"),
- tr("GMT0"), tr("Greenwich"), tr("Hongkong"), tr("HST"), tr("Iceland"),
- tr("Iran"), tr("Israel"), tr("Jamaica"), tr("Kwajalein"), tr("Libya"),
- tr("MET"), tr("MST"), tr("MST7MDT"), tr("Navajo"), tr("NZ"),
- tr("NZ-CHAT"), tr("Poland"), tr("Portugal"), tr("PRC"), tr("PST8PDT"),
- tr("ROC"), tr("ROK"), tr("Singapore"), tr("Turkey"), tr("UCT"),
- tr("W-SU"), tr("WET"), tr("Zulu"),
- };
- } else if (type == typeid(Settings::AudioMode)) {
- return {
- tr("Mono"),
- tr("Stereo"),
- tr("Surround"),
- };
- }
-
- return {};
-}
+ translations->insert(
+ {typeid(Settings::AstcDecodeMode),
+ {
+ {static_cast<u32>(Settings::AstcDecodeMode::CPU), tr("CPU")},
+ {static_cast<u32>(Settings::AstcDecodeMode::GPU), tr("GPU")},
+ {static_cast<u32>(Settings::AstcDecodeMode::CPUAsynchronous), tr("CPU Asynchronous")},
+ }});
+ translations->insert({typeid(Settings::RendererBackend),
+ {
+#ifdef HAS_OPENGL
+ {static_cast<u32>(Settings::RendererBackend::OpenGL), tr("OpenGL")},
+#endif
+ {static_cast<u32>(Settings::RendererBackend::Vulkan), tr("Vulkan")},
+ {static_cast<u32>(Settings::RendererBackend::Null), tr("Null")},
+ }});
+ translations->insert({typeid(Settings::ShaderBackend),
+ {
+ {static_cast<u32>(Settings::ShaderBackend::GLSL), tr("GLSL")},
+ {static_cast<u32>(Settings::ShaderBackend::GLASM),
+ tr("GLASM (Assembly Shaders, NVIDIA Only)")},
+ {static_cast<u32>(Settings::ShaderBackend::SPIRV),
+ tr("SPIR-V (Experimental, Mesa Only)")},
+ }});
+ translations->insert({typeid(Settings::GPUAccuracy),
+ {
+ {static_cast<u32>(Settings::GPUAccuracy::Normal), tr("Normal")},
+ {static_cast<u32>(Settings::GPUAccuracy::High), tr("High")},
+ {static_cast<u32>(Settings::GPUAccuracy::Extreme), tr("Extreme")},
+ }});
+ translations->insert({typeid(Settings::CPUAccuracy),
+ {
+ {static_cast<u32>(Settings::CPUAccuracy::Auto), tr("Auto")},
+ {static_cast<u32>(Settings::CPUAccuracy::Accurate), tr("Accurate")},
+ {static_cast<u32>(Settings::CPUAccuracy::Unsafe), tr("Unsafe")},
+ {static_cast<u32>(Settings::CPUAccuracy::Paranoid),
+ tr("Paranoid (disables most optimizations)")},
+ }});
+ translations->insert(
+ {typeid(Settings::FullscreenMode),
+ {
+ {static_cast<u32>(Settings::FullscreenMode::Borderless), tr("Borderless Windowed")},
+ {static_cast<u32>(Settings::FullscreenMode::Exclusive), tr("Exclusive Fullscreen")},
+ }});
+ translations->insert(
+ {typeid(Settings::NvdecEmulation),
+ {
+ {static_cast<u32>(Settings::NvdecEmulation::Off), tr("No Video Output")},
+ {static_cast<u32>(Settings::NvdecEmulation::CPU), tr("CPU Video Decoding")},
+ {static_cast<u32>(Settings::NvdecEmulation::GPU), tr("GPU Video Decoding (Default)")},
+ }});
+ translations->insert(
+ {typeid(Settings::ResolutionSetup),
+ {
+ {static_cast<u32>(Settings::ResolutionSetup::Res1_2X),
+ tr("0.5X (360p/540p) [EXPERIMENTAL]")},
+ {static_cast<u32>(Settings::ResolutionSetup::Res3_4X),
+ tr("0.75X (540p/810p) [EXPERIMENTAL]")},
+ {static_cast<u32>(Settings::ResolutionSetup::Res1X), tr("1X (720p/1080p)")},
+ {static_cast<u32>(Settings::ResolutionSetup::Res3_2X),
+ tr("1.5X (1080p/1620p) [EXPERIMENTAL]")},
+ {static_cast<u32>(Settings::ResolutionSetup::Res2X), tr("2X (1440p/2160p)")},
+ {static_cast<u32>(Settings::ResolutionSetup::Res3X), tr("3X (2160p/3240p)")},
+ {static_cast<u32>(Settings::ResolutionSetup::Res4X), tr("4X (2880p/4320p)")},
+ {static_cast<u32>(Settings::ResolutionSetup::Res5X), tr("5X (3600p/5400p)")},
+ {static_cast<u32>(Settings::ResolutionSetup::Res6X), tr("6X (4320p/6480p)")},
+ {static_cast<u32>(Settings::ResolutionSetup::Res7X), tr("7X (5040p/7560p)")},
+ {static_cast<u32>(Settings::ResolutionSetup::Res8X), tr("8X (5760p/8640p)")},
+ }});
+ translations->insert(
+ {typeid(Settings::ScalingFilter),
+ {
+ {static_cast<u32>(Settings::ScalingFilter::NearestNeighbor), tr("Nearest Neighbor")},
+ {static_cast<u32>(Settings::ScalingFilter::Bilinear), tr("Bilinear")},
+ {static_cast<u32>(Settings::ScalingFilter::Bicubic), tr("Bicubic")},
+ {static_cast<u32>(Settings::ScalingFilter::Gaussian), tr("Gaussian")},
+ {static_cast<u32>(Settings::ScalingFilter::ScaleForce), tr("ScaleForce")},
+ {static_cast<u32>(Settings::ScalingFilter::Fsr),
+ tr("AMD FidelityFX™️ Super Resolution")},
+ }});
+ translations->insert({typeid(Settings::AntiAliasing),
+ {
+ {static_cast<u32>(Settings::AntiAliasing::None), tr("None")},
+ {static_cast<u32>(Settings::AntiAliasing::Fxaa), tr("FXAA")},
+ {static_cast<u32>(Settings::AntiAliasing::Smaa), tr("SMAA")},
+ }});
+ translations->insert(
+ {typeid(Settings::AspectRatio),
+ {
+ {static_cast<u32>(Settings::AspectRatio::R16_9), tr("Default (16:9)")},
+ {static_cast<u32>(Settings::AspectRatio::R4_3), tr("Force 4:3")},
+ {static_cast<u32>(Settings::AspectRatio::R21_9), tr("Force 21:9")},
+ {static_cast<u32>(Settings::AspectRatio::R16_10), tr("Force 16:10")},
+ {static_cast<u32>(Settings::AspectRatio::Stretch), tr("Stretch to Window")},
+ }});
+ translations->insert(
+ {typeid(Settings::AnisotropyMode),
+ {
+ {static_cast<u32>(Settings::AnisotropyMode::Automatic), tr("Automatic")},
+ {static_cast<u32>(Settings::AnisotropyMode::Default), tr("Default")},
+ {static_cast<u32>(Settings::AnisotropyMode::X2), tr("2x")},
+ {static_cast<u32>(Settings::AnisotropyMode::X4), tr("4x")},
+ {static_cast<u32>(Settings::AnisotropyMode::X8), tr("8x")},
+ {static_cast<u32>(Settings::AnisotropyMode::X16), tr("16x")},
+ }});
+ translations->insert(
+ {typeid(Settings::Language),
+ {
+ {static_cast<u32>(Settings::Language::Japanese), tr("Japanese (日本語)")},
+ {static_cast<u32>(Settings::Language::EnglishAmerican), tr("American English")},
+ {static_cast<u32>(Settings::Language::French), tr("French (français)")},
+ {static_cast<u32>(Settings::Language::German), tr("German (Deutsch)")},
+ {static_cast<u32>(Settings::Language::Italian), tr("Italian (italiano)")},
+ {static_cast<u32>(Settings::Language::Spanish), tr("Spanish (español)")},
+ {static_cast<u32>(Settings::Language::Chinese), tr("Chinese")},
+ {static_cast<u32>(Settings::Language::Korean), tr("Korean (한국어)")},
+ {static_cast<u32>(Settings::Language::Dutch), tr("Dutch (Nederlands)")},
+ {static_cast<u32>(Settings::Language::Portuguese), tr("Portuguese (português)")},
+ {static_cast<u32>(Settings::Language::Russian), tr("Russian (Русский)")},
+ {static_cast<u32>(Settings::Language::Taiwanese), tr("Taiwanese")},
+ {static_cast<u32>(Settings::Language::EnglishBritish), tr("British English")},
+ {static_cast<u32>(Settings::Language::FrenchCanadian), tr("Canadian French")},
+ {static_cast<u32>(Settings::Language::SpanishLatin), tr("Latin American Spanish")},
+ {static_cast<u32>(Settings::Language::ChineseSimplified), tr("Simplified Chinese")},
+ {static_cast<u32>(Settings::Language::ChineseTraditional),
+ tr("Traditional Chinese (正體中文)")},
+ {static_cast<u32>(Settings::Language::PortugueseBrazilian),
+ tr("Brazilian Portuguese (português do Brasil)")},
+ }});
+ translations->insert({typeid(Settings::Region),
+ {
+ {static_cast<u32>(Settings::Region::Japan), tr("Japan")},
+ {static_cast<u32>(Settings::Region::USA), tr("USA")},
+ {static_cast<u32>(Settings::Region::Europe), tr("Europe")},
+ {static_cast<u32>(Settings::Region::Australia), tr("Australia")},
+ {static_cast<u32>(Settings::Region::China), tr("China")},
+ {static_cast<u32>(Settings::Region::Korea), tr("Korea")},
+ {static_cast<u32>(Settings::Region::Taiwan), tr("Taiwan")},
+ }});
+ translations->insert({typeid(Settings::TimeZone),
+ {
+ {static_cast<u32>(Settings::TimeZone::Auto), tr("Auto")},
+ {static_cast<u32>(Settings::TimeZone::Default), tr("Default")},
+ {static_cast<u32>(Settings::TimeZone::CET), tr("CET")},
+ {static_cast<u32>(Settings::TimeZone::CST6CDT), tr("CST6CDT")},
+ {static_cast<u32>(Settings::TimeZone::Cuba), tr("Cuba")},
+ {static_cast<u32>(Settings::TimeZone::EET), tr("EET")},
+ {static_cast<u32>(Settings::TimeZone::Egypt), tr("Egypt")},
+ {static_cast<u32>(Settings::TimeZone::Eire), tr("Eire")},
+ {static_cast<u32>(Settings::TimeZone::EST), tr("EST")},
+ {static_cast<u32>(Settings::TimeZone::EST5EDT), tr("EST5EDT")},
+ {static_cast<u32>(Settings::TimeZone::GB), tr("GB")},
+ {static_cast<u32>(Settings::TimeZone::GBEire), tr("GB-Eire")},
+ {static_cast<u32>(Settings::TimeZone::GMT), tr("GMT")},
+ {static_cast<u32>(Settings::TimeZone::GMTPlusZero), tr("GMT+0")},
+ {static_cast<u32>(Settings::TimeZone::GMTMinusZero), tr("GMT-0")},
+ {static_cast<u32>(Settings::TimeZone::GMTZero), tr("GMT0")},
+ {static_cast<u32>(Settings::TimeZone::Greenwich), tr("Greenwich")},
+ {static_cast<u32>(Settings::TimeZone::Hongkong), tr("Hongkong")},
+ {static_cast<u32>(Settings::TimeZone::HST), tr("HST")},
+ {static_cast<u32>(Settings::TimeZone::Iceland), tr("Iceland")},
+ {static_cast<u32>(Settings::TimeZone::Iran), tr("Iran")},
+ {static_cast<u32>(Settings::TimeZone::Israel), tr("Israel")},
+ {static_cast<u32>(Settings::TimeZone::Jamaica), tr("Jamaica")},
+ {static_cast<u32>(Settings::TimeZone::Kwajalein), tr("Kwajalein")},
+ {static_cast<u32>(Settings::TimeZone::Libya), tr("Libya")},
+ {static_cast<u32>(Settings::TimeZone::MET), tr("MET")},
+ {static_cast<u32>(Settings::TimeZone::MST), tr("MST")},
+ {static_cast<u32>(Settings::TimeZone::MST7MDT), tr("MST7MDT")},
+ {static_cast<u32>(Settings::TimeZone::Navajo), tr("Navajo")},
+ {static_cast<u32>(Settings::TimeZone::NZ), tr("NZ")},
+ {static_cast<u32>(Settings::TimeZone::NZCHAT), tr("NZ-CHAT")},
+ {static_cast<u32>(Settings::TimeZone::Poland), tr("Poland")},
+ {static_cast<u32>(Settings::TimeZone::Portugal), tr("Portugal")},
+ {static_cast<u32>(Settings::TimeZone::PRC), tr("PRC")},
+ {static_cast<u32>(Settings::TimeZone::PST8PDT), tr("PST8PDT")},
+ {static_cast<u32>(Settings::TimeZone::ROC), tr("ROC")},
+ {static_cast<u32>(Settings::TimeZone::ROK), tr("ROK")},
+ {static_cast<u32>(Settings::TimeZone::Singapore), tr("Singapore")},
+ {static_cast<u32>(Settings::TimeZone::Turkey), tr("Turkey")},
+ {static_cast<u32>(Settings::TimeZone::UCT), tr("UCT")},
+ {static_cast<u32>(Settings::TimeZone::W_SU), tr("W-SU")},
+ {static_cast<u32>(Settings::TimeZone::WET), tr("WET")},
+ {static_cast<u32>(Settings::TimeZone::Zulu), tr("Zulu")},
+ }});
+ translations->insert({typeid(Settings::AudioMode),
+ {
+ {static_cast<u32>(Settings::AudioMode::Mono), tr("Mono")},
+ {static_cast<u32>(Settings::AudioMode::Stereo), tr("Stereo")},
+ {static_cast<u32>(Settings::AudioMode::Surround), tr("Surround")},
+ }});
+ return translations;
+}
} // namespace ConfigurationShared
diff --git a/src/yuzu/configuration/shared_translation.h b/src/yuzu/configuration/shared_translation.h
index fcf638ea5..abe9c89b1 100644
--- a/src/yuzu/configuration/shared_translation.h
+++ b/src/yuzu/configuration/shared_translation.h
@@ -1,21 +1,23 @@
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
-#include <forward_list>
#include <map>
#include <memory>
#include <string>
#include <typeindex>
#include <utility>
+#include <vector>
#include <QString>
class QWidget;
namespace ConfigurationShared {
using TranslationMap = std::map<u32, std::pair<QString, QString>>;
+using ComboboxTranslations = std::vector<std::pair<u32, QString>>;
+using ComboboxTranslationMap = std::map<std::type_index, ComboboxTranslations>;
std::unique_ptr<TranslationMap> InitializeTranslations(QWidget* parent);
-std::forward_list<QString> ComboboxEnumeration(std::type_index type, QWidget* parent);
+std::unique_ptr<ComboboxTranslationMap> ComboboxEnumeration(QWidget* parent);
} // namespace ConfigurationShared
diff --git a/src/yuzu/configuration/shared_widget.cpp b/src/yuzu/configuration/shared_widget.cpp
index 4b21e5be8..64e1d90ad 100644
--- a/src/yuzu/configuration/shared_widget.cpp
+++ b/src/yuzu/configuration/shared_widget.cpp
@@ -113,40 +113,51 @@ void Widget::CreateCombobox(const QString& label, std::function<void()>& load_fu
QLabel* qt_label = new QLabel(label, this);
combobox = new QComboBox(this);
- std::forward_list<QString> combobox_enumerations = ComboboxEnumeration(type, this);
- for (const auto& item : combobox_enumerations) {
- combobox->addItem(item);
- }
-
layout->addWidget(qt_label);
layout->addWidget(combobox);
layout->setSpacing(6);
layout->setContentsMargins(0, 0, 0, 0);
- if (!managed) {
- return;
+ const ComboboxTranslations* enumeration{nullptr};
+ if (combobox_enumerations.contains(type)) {
+ enumeration = &combobox_enumerations.at(type);
+ for (const auto& [id, name] : *enumeration) {
+ combobox->addItem(name);
+ }
}
- // TODO: Remove audio engine specialization
- if (setting.TypeId() != typeid(Settings::AudioEngine)) {
- combobox->setCurrentIndex(std::stoi(setting.ToString()));
- } else {
- combobox->setCurrentIndex(
- static_cast<u32>(Settings::ToEnum<Settings::AudioEngine>(setting.ToString())));
+ if (!managed || enumeration == nullptr) {
+ return;
}
+ const auto find_index = [=](u32 value) -> int {
+ for (u32 i = 0; i < enumeration->size(); i++) {
+ if (enumeration->at(i).first == value) {
+ return i;
+ }
+ }
+ return -1;
+ };
+
+ const u32 setting_value = std::stoi(setting.ToString());
+ combobox->setCurrentIndex(find_index(setting_value));
+
if (Settings::IsConfiguringGlobal()) {
- load_func = [=]() { setting.LoadString(std::to_string(combobox->currentIndex())); };
+ load_func = [=]() {
+ int current = combobox->currentIndex();
+ setting.LoadString(std::to_string(enumeration->at(current).first));
+ };
} else {
restore_button = CreateRestoreGlobalButton(setting.UsingGlobal(), this);
layout->addWidget(restore_button);
- QObject::connect(restore_button, &QAbstractButton::clicked, [&](bool) {
+ QObject::connect(restore_button, &QAbstractButton::clicked, [=](bool) {
restore_button->setEnabled(false);
restore_button->setVisible(false);
- combobox->setCurrentIndex(std::stoi(setting.ToStringGlobal()));
+ const u32 global_value = std::stoi(setting.ToStringGlobal());
+ combobox->setCurrentIndex(find_index(global_value));
});
QObject::connect(combobox, QOverload<int>::of(&QComboBox::activated), [=](int) {
@@ -158,7 +169,8 @@ void Widget::CreateCombobox(const QString& label, std::function<void()>& load_fu
bool using_global = !restore_button->isEnabled();
setting.SetGlobal(using_global);
if (!using_global) {
- setting.LoadString(std::to_string(combobox->currentIndex()));
+ int current = combobox->currentIndex();
+ setting.LoadString(std::to_string(enumeration->at(current).first));
}
};
}
@@ -523,17 +535,13 @@ bool Widget::Valid() {
Widget::~Widget() = default;
Widget::Widget(Settings::BasicSetting* setting_, const TranslationMap& translations_,
- QWidget* parent_, std::forward_list<std::function<void(bool)>>& apply_funcs_)
- : QWidget(parent_), parent{parent_}, translations{translations_}, setting{*setting_},
- apply_funcs{apply_funcs_} {}
-
-Widget::Widget(Settings::BasicSetting* setting_, const TranslationMap& translations_,
- QWidget* parent_, bool runtime_lock_,
- std::forward_list<std::function<void(bool)>>& apply_funcs_, RequestType request,
- bool managed, float multiplier, Settings::BasicSetting* other_setting,
- const QString& string)
- : QWidget(parent_), parent{parent_}, translations{translations_}, setting{*setting_},
- apply_funcs{apply_funcs_}, runtime_lock{runtime_lock_} {
+ const ComboboxTranslationMap& combobox_translations_, QWidget* parent_,
+ bool runtime_lock_, std::forward_list<std::function<void(bool)>>& apply_funcs_,
+ RequestType request, bool managed, float multiplier,
+ Settings::BasicSetting* other_setting, const QString& string)
+ : QWidget(parent_), parent{parent_}, translations{translations_},
+ combobox_enumerations{combobox_translations_}, setting{*setting_}, apply_funcs{apply_funcs_},
+ runtime_lock{runtime_lock_} {
if (!Settings::IsConfiguringGlobal() && !setting.Switchable()) {
LOG_DEBUG(Frontend, "\"{}\" is not switchable, skipping...", setting.GetLabel());
return;
@@ -632,5 +640,4 @@ Widget::Widget(Settings::BasicSetting* setting_, const TranslationMap& translati
this->setToolTip(tooltip);
}
-
} // namespace ConfigurationShared
diff --git a/src/yuzu/configuration/shared_widget.h b/src/yuzu/configuration/shared_widget.h
index 331316040..6077f045d 100644
--- a/src/yuzu/configuration/shared_widget.h
+++ b/src/yuzu/configuration/shared_widget.h
@@ -35,13 +35,12 @@ class Widget : public QWidget {
Q_OBJECT
public:
- Widget(Settings::BasicSetting* setting, const TranslationMap& translations, QWidget* parent,
- bool runtime_lock, std::forward_list<std::function<void(bool)>>& apply_funcs_,
+ Widget(Settings::BasicSetting* setting, const TranslationMap& translations,
+ const ComboboxTranslationMap& combobox_translations, QWidget* parent, bool runtime_lock,
+ std::forward_list<std::function<void(bool)>>& apply_funcs_,
RequestType request = RequestType::Default, bool managed = true, float multiplier = 1.0f,
Settings::BasicSetting* other_setting = nullptr,
const QString& string = QStringLiteral(""));
- Widget(Settings::BasicSetting* setting_, const TranslationMap& translations_, QWidget* parent_,
- std::forward_list<std::function<void(bool)>>& apply_funcs_);
virtual ~Widget();
bool Valid();
@@ -77,6 +76,7 @@ private:
QWidget* parent;
const TranslationMap& translations;
+ const ComboboxTranslationMap& combobox_enumerations;
Settings::BasicSetting& setting;
std::forward_list<std::function<void(bool)>>& apply_funcs;