From 81e9cf09349119cb84c5f52e2d7b64f0fe2482b8 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Fri, 9 Jun 2023 17:40:25 -0400 Subject: [PATCH] configuration: Document odd widget cases Explain why we need to do things differently at times, to serve as a reference. --- src/yuzu/configuration/configure_audio.cpp | 4 ++++ src/yuzu/configuration/configure_cpu.cpp | 2 ++ src/yuzu/configuration/configure_graphics.cpp | 10 ++++++++++ src/yuzu/configuration/configure_graphics_advanced.cpp | 1 + src/yuzu/configuration/configure_system.cpp | 9 ++++++++- 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/yuzu/configuration/configure_audio.cpp b/src/yuzu/configuration/configure_audio.cpp index 7cc8affb7..9f9e4df8b 100644 --- a/src/yuzu/configuration/configure_audio.cpp +++ b/src/yuzu/configuration/configure_audio.cpp @@ -49,6 +49,7 @@ void ConfigureAudio::Setup() { for (auto* setting : settings) { auto* widget = [&]() { if (setting->Id() == Settings::values.volume.Id()) { + // volume needs to be a slider (default is line edit) return new ConfigurationShared::Widget( setting, translations, combobox_translations, this, runtime_lock, apply_funcs, ConfigurationShared::RequestType::Slider, true, 1.0f, nullptr, @@ -56,6 +57,7 @@ void ConfigureAudio::Setup() { } 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()) { + // These need to be unmanaged comboboxes, so we can populate them ourselves return new ConfigurationShared::Widget( setting, translations, combobox_translations, this, runtime_lock, apply_funcs, ConfigurationShared::RequestType::ComboBox, false); @@ -79,6 +81,8 @@ void ConfigureAudio::Setup() { connect(sink_combo_box, qOverload(&QComboBox::currentIndexChanged), this, &ConfigureAudio::UpdateAudioDevices); } else if (setting->Id() == Settings::values.audio_output_device_id.Id()) { + // Keep track of output (and input) device comboboxes to populate them with system + // devices, which are determined at run time output_device_combo_box = widget->combobox; } else if (setting->Id() == Settings::values.audio_input_device_id.Id()) { input_device_combo_box = widget->combobox; diff --git a/src/yuzu/configuration/configure_cpu.cpp b/src/yuzu/configuration/configure_cpu.cpp index 67b811014..159837ebd 100644 --- a/src/yuzu/configuration/configure_cpu.cpp +++ b/src/yuzu/configuration/configure_cpu.cpp @@ -58,9 +58,11 @@ void ConfigureCpu::Setup() { } if (setting->Id() == Settings::values.cpu_accuracy.Id()) { + // Keep track of cpu_accuracy combobox to display/hide the unsafe settings accuracy_layout->addWidget(widget); accuracy_combobox = widget->combobox; } else { + // Presently, all other settings here are unsafe checkboxes unsafe_hold.insert({setting->GetLabel(), widget}); } } diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp index 1e26267a0..c053da0cd 100644 --- a/src/yuzu/configuration/configure_graphics.cpp +++ b/src/yuzu/configuration/configure_graphics.cpp @@ -231,6 +231,7 @@ void ConfigureGraphics::Setup() { for (const auto setting : Settings::values.linkage.by_category[Settings::Category::Renderer]) { ConfigurationShared::Widget* widget = [&]() { + // Set managed to false on these and set up the comboboxes ourselves if (setting->Id() == Settings::values.vulkan_device.Id() || setting->Id() == Settings::values.shader_backend.Id() || setting->Id() == Settings::values.vsync_mode.Id()) { @@ -238,11 +239,13 @@ void ConfigureGraphics::Setup() { setting, translations, combobox_translations, this, runtime_lock, apply_funcs, ConfigurationShared::RequestType::ComboBox, false); } else if (setting->Id() == Settings::values.fsr_sharpening_slider.Id()) { + // FSR needs a reversed slider return new ConfigurationShared::Widget( 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()) { + // speed_limit needs a checkbox to set use_speed_limit, as well as a spinbox return new ConfigurationShared::Widget( setting, translations, combobox_translations, this, runtime_lock, apply_funcs, ConfigurationShared::RequestType::SpinBox, true, 1.0f, @@ -269,18 +272,23 @@ void ConfigureGraphics::Setup() { [=](bool) { UpdateAPILayout(); }); // Detach API's restore button and place it where we want + // Lets us put it on the side, and it will automatically scale if there's a second + // combobox (shader_backend, vulkan_device) widget->layout()->removeWidget(api_restore_global_button); api_layout->addWidget(api_restore_global_button); } } else if (setting->Id() == Settings::values.vulkan_device.Id()) { + // Keep track of vulkan_device's combobox so we can populate it hold_api.push_front(widget); vulkan_device_combobox = widget->combobox; vulkan_device_widget = widget; } else if (setting->Id() == Settings::values.shader_backend.Id()) { + // Keep track of shader_backend's combobox so we can populate it hold_api.push_front(widget); shader_backend_combobox = widget->combobox; shader_backend_widget = widget; } else if (setting->Id() == Settings::values.vsync_mode.Id()) { + // Keep track of vsync_mode's combobox so we can populate it vsync_mode_combobox = widget->combobox; hold_graphics.emplace(setting->Id(), widget); } else { @@ -296,6 +304,8 @@ void ConfigureGraphics::Setup() { api_grid_layout->addWidget(widget); } + // Background color is too specific to build into the new system, so we manage it here + // (3 settings, all collected into a single widget with a QColor to manage on top) if (Settings::IsConfiguringGlobal()) { apply_funcs.push_front([this](bool powered_on) { Settings::values.bg_red.SetValue(static_cast(bg_color.red())); diff --git a/src/yuzu/configuration/configure_graphics_advanced.cpp b/src/yuzu/configuration/configure_graphics_advanced.cpp index 8c932f10a..843af230b 100644 --- a/src/yuzu/configuration/configure_graphics_advanced.cpp +++ b/src/yuzu/configuration/configure_graphics_advanced.cpp @@ -45,6 +45,7 @@ void ConfigureGraphicsAdvanced::SetConfiguration() { hold.emplace(setting->Id(), widget); + // Keep track of enable_compute_pipelines so we can display it when needed if (setting->Id() == Settings::values.enable_compute_pipelines.Id()) { checkbox_enable_compute_pipelines = widget; } diff --git a/src/yuzu/configuration/configure_system.cpp b/src/yuzu/configuration/configure_system.cpp index 4b0e0a649..ffcbab6d9 100644 --- a/src/yuzu/configuration/configure_system.cpp +++ b/src/yuzu/configuration/configure_system.cpp @@ -126,11 +126,15 @@ void ConfigureSystem::Setup() { [[maybe_unused]] std::string label = setting->GetLabel(); ConfigurationShared::Widget* widget = [=]() { if (setting->Id() == Settings::values.custom_rtc.Id()) { + // custom_rtc needs a DateTimeEdit (default is LineEdit), and a checkbox to manage + // it and custom_rtc_enabled return new ConfigurationShared::Widget( 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()) { + // rng_seed needs a HexEdit (default is LineEdit), and a checkbox to manage + // it and rng_seed_enabled return new ConfigurationShared::Widget( setting, translations, combobox_translations, this, runtime_lock, apply_funcs, ConfigurationShared::RequestType::HexEdit, true, 1.0f, @@ -147,17 +151,20 @@ void ConfigureSystem::Setup() { } if (setting->Id() == Settings::values.rng_seed.Id()) { + // Keep track of rng_seed's widgets to reset it with the checkbox state rng_seed_checkbox = widget->checkbox; rng_seed_edit = widget->line_edit; rng_seed_edit->setEnabled(Settings::values.rng_seed_enabled.GetValue()); } else if (setting->Id() == Settings::values.custom_rtc.Id()) { + // Keep track of custom_rtc's widgets to reset it with the checkbox state custom_rtc_checkbox = widget->checkbox; custom_rtc_edit = widget->date_time_edit; custom_rtc_edit->setEnabled(Settings::values.custom_rtc_enabled.GetValue()); } else if (setting->Id() == Settings::values.region_index.Id()) { - + // Keep track of the region_index (and langauge_index) combobox to validate the selected + // settings combo_region = widget->combobox; } else if (setting->Id() == Settings::values.language_index.Id()) { combo_language = widget->combobox;