configuration: Simplify applying per-game settings
Originally, every time we add a per-game setting, we'd have to guard for it when setting it on the global config, and use a specific function to do it for the per-game config. This moves the global check into the ApplyPerGameSetting function so that we can use it for changing both the global and per-game states. Less work for the programmer.
This commit is contained in:
		| @@ -13,6 +13,9 @@ | |||||||
| void ConfigurationShared::ApplyPerGameSetting(Settings::Setting<bool>* setting, | void ConfigurationShared::ApplyPerGameSetting(Settings::Setting<bool>* setting, | ||||||
|                                               const QCheckBox* checkbox, |                                               const QCheckBox* checkbox, | ||||||
|                                               const CheckState& tracker) { |                                               const CheckState& tracker) { | ||||||
|  |     if (Settings::IsConfiguringGlobal() && setting->UsingGlobal()) { | ||||||
|  |         setting->SetValue(checkbox->checkState()); | ||||||
|  |     } else if (!Settings::IsConfiguringGlobal()) { | ||||||
|         if (tracker == CheckState::Global) { |         if (tracker == CheckState::Global) { | ||||||
|             setting->SetGlobal(true); |             setting->SetGlobal(true); | ||||||
|         } else { |         } else { | ||||||
| @@ -20,9 +23,13 @@ void ConfigurationShared::ApplyPerGameSetting(Settings::Setting<bool>* setting, | |||||||
|             setting->SetValue(checkbox->checkState()); |             setting->SetValue(checkbox->checkState()); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| void ConfigurationShared::ApplyPerGameSetting(Settings::Setting<int>* setting, | void ConfigurationShared::ApplyPerGameSetting(Settings::Setting<int>* setting, | ||||||
|                                               const QComboBox* combobox) { |                                               const QComboBox* combobox) { | ||||||
|  |     if (Settings::IsConfiguringGlobal() && setting->UsingGlobal()) { | ||||||
|  |         setting->SetValue(combobox->currentIndex()); | ||||||
|  |     } else if (!Settings::IsConfiguringGlobal()) { | ||||||
|         if (combobox->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) { |         if (combobox->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) { | ||||||
|             setting->SetGlobal(true); |             setting->SetGlobal(true); | ||||||
|         } else { |         } else { | ||||||
| @@ -30,9 +37,13 @@ void ConfigurationShared::ApplyPerGameSetting(Settings::Setting<int>* setting, | |||||||
|             setting->SetValue(combobox->currentIndex() - ConfigurationShared::USE_GLOBAL_OFFSET); |             setting->SetValue(combobox->currentIndex() - ConfigurationShared::USE_GLOBAL_OFFSET); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| void ConfigurationShared::ApplyPerGameSetting(Settings::Setting<Settings::RendererBackend>* setting, | void ConfigurationShared::ApplyPerGameSetting(Settings::Setting<Settings::RendererBackend>* setting, | ||||||
|                                               const QComboBox* combobox) { |                                               const QComboBox* combobox) { | ||||||
|  |     if (Settings::IsConfiguringGlobal() && setting->UsingGlobal()) { | ||||||
|  |         setting->SetValue(static_cast<Settings::RendererBackend>(combobox->currentIndex())); | ||||||
|  |     } else if (!Settings::IsConfiguringGlobal()) { | ||||||
|         if (combobox->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) { |         if (combobox->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) { | ||||||
|             setting->SetGlobal(true); |             setting->SetGlobal(true); | ||||||
|         } else { |         } else { | ||||||
| @@ -41,6 +52,7 @@ void ConfigurationShared::ApplyPerGameSetting(Settings::Setting<Settings::Render | |||||||
|                 combobox->currentIndex() - ConfigurationShared::USE_GLOBAL_OFFSET)); |                 combobox->currentIndex() - ConfigurationShared::USE_GLOBAL_OFFSET)); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| void ConfigurationShared::SetPerGameSetting(QCheckBox* checkbox, | void ConfigurationShared::SetPerGameSetting(QCheckBox* checkbox, | ||||||
|                                             const Settings::Setting<bool>* setting) { |                                             const Settings::Setting<bool>* setting) { | ||||||
|   | |||||||
| @@ -99,6 +99,10 @@ void ConfigureAudio::SetVolumeIndicatorText(int percentage) { | |||||||
| } | } | ||||||
|  |  | ||||||
| void ConfigureAudio::ApplyConfiguration() { | void ConfigureAudio::ApplyConfiguration() { | ||||||
|  |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.enable_audio_stretching, | ||||||
|  |                                              ui->toggle_audio_stretching, | ||||||
|  |                                              enable_audio_stretching); | ||||||
|  |  | ||||||
|     if (Settings::IsConfiguringGlobal()) { |     if (Settings::IsConfiguringGlobal()) { | ||||||
|         Settings::values.sink_id = |         Settings::values.sink_id = | ||||||
|             ui->output_sink_combo_box->itemText(ui->output_sink_combo_box->currentIndex()) |             ui->output_sink_combo_box->itemText(ui->output_sink_combo_box->currentIndex()) | ||||||
| @@ -108,19 +112,12 @@ void ConfigureAudio::ApplyConfiguration() { | |||||||
|                 .toStdString(); |                 .toStdString(); | ||||||
|  |  | ||||||
|         // Guard if during game and set to game-specific value |         // Guard if during game and set to game-specific value | ||||||
|         if (Settings::values.enable_audio_stretching.UsingGlobal()) { |  | ||||||
|             Settings::values.enable_audio_stretching.SetValue( |  | ||||||
|                 ui->toggle_audio_stretching->isChecked()); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.volume.UsingGlobal()) { |         if (Settings::values.volume.UsingGlobal()) { | ||||||
|             Settings::values.volume.SetValue( |             Settings::values.volume.SetValue( | ||||||
|                 static_cast<float>(ui->volume_slider->sliderPosition()) / |                 static_cast<float>(ui->volume_slider->sliderPosition()) / | ||||||
|                 ui->volume_slider->maximum()); |                 ui->volume_slider->maximum()); | ||||||
|         } |         } | ||||||
|     } else { |     } else { | ||||||
|         ConfigurationShared::ApplyPerGameSetting(&Settings::values.enable_audio_stretching, |  | ||||||
|                                                  ui->toggle_audio_stretching, |  | ||||||
|                                                  enable_audio_stretching); |  | ||||||
|         if (ui->volume_combo_box->currentIndex() == 0) { |         if (ui->volume_combo_box->currentIndex() == 0) { | ||||||
|             Settings::values.volume.SetGlobal(true); |             Settings::values.volume.SetGlobal(true); | ||||||
|         } else { |         } else { | ||||||
|   | |||||||
| @@ -50,6 +50,9 @@ void ConfigureGeneral::SetConfiguration() { | |||||||
| } | } | ||||||
|  |  | ||||||
| void ConfigureGeneral::ApplyConfiguration() { | void ConfigureGeneral::ApplyConfiguration() { | ||||||
|  |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_multi_core, | ||||||
|  |                                              ui->use_multi_core, use_multi_core); | ||||||
|  |  | ||||||
|     if (Settings::IsConfiguringGlobal()) { |     if (Settings::IsConfiguringGlobal()) { | ||||||
|         UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked(); |         UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked(); | ||||||
|         UISettings::values.select_user_on_boot = ui->toggle_user_on_boot->isChecked(); |         UISettings::values.select_user_on_boot = ui->toggle_user_on_boot->isChecked(); | ||||||
| @@ -62,13 +65,7 @@ void ConfigureGeneral::ApplyConfiguration() { | |||||||
|                                                       Qt::Checked); |                                                       Qt::Checked); | ||||||
|             Settings::values.frame_limit.SetValue(ui->frame_limit->value()); |             Settings::values.frame_limit.SetValue(ui->frame_limit->value()); | ||||||
|         } |         } | ||||||
|         if (Settings::values.use_multi_core.UsingGlobal()) { |  | ||||||
|             Settings::values.use_multi_core.SetValue(ui->use_multi_core->isChecked()); |  | ||||||
|         } |  | ||||||
|     } else { |     } else { | ||||||
|         ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_multi_core, |  | ||||||
|                                                  ui->use_multi_core, use_multi_core); |  | ||||||
|  |  | ||||||
|         bool global_frame_limit = use_frame_limit == ConfigurationShared::CheckState::Global; |         bool global_frame_limit = use_frame_limit == ConfigurationShared::CheckState::Global; | ||||||
|         Settings::values.use_frame_limit.SetGlobal(global_frame_limit); |         Settings::values.use_frame_limit.SetGlobal(global_frame_limit); | ||||||
|         Settings::values.frame_limit.SetGlobal(global_frame_limit); |         Settings::values.frame_limit.SetGlobal(global_frame_limit); | ||||||
| @@ -94,6 +91,9 @@ void ConfigureGeneral::RetranslateUI() { | |||||||
|  |  | ||||||
| void ConfigureGeneral::SetupPerGameUI() { | void ConfigureGeneral::SetupPerGameUI() { | ||||||
|     if (Settings::IsConfiguringGlobal()) { |     if (Settings::IsConfiguringGlobal()) { | ||||||
|  |         // Disables each setting if: | ||||||
|  |         //  - A game is running (thus settings in use), and | ||||||
|  |         //  - A non-global setting is applied. | ||||||
|         ui->toggle_frame_limit->setEnabled(Settings::values.use_frame_limit.UsingGlobal()); |         ui->toggle_frame_limit->setEnabled(Settings::values.use_frame_limit.UsingGlobal()); | ||||||
|         ui->frame_limit->setEnabled(Settings::values.frame_limit.UsingGlobal()); |         ui->frame_limit->setEnabled(Settings::values.frame_limit.UsingGlobal()); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -106,6 +106,19 @@ void ConfigureGraphics::SetConfiguration() { | |||||||
| } | } | ||||||
|  |  | ||||||
| void ConfigureGraphics::ApplyConfiguration() { | void ConfigureGraphics::ApplyConfiguration() { | ||||||
|  |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.fullscreen_mode, | ||||||
|  |                                              ui->fullscreen_mode_combobox); | ||||||
|  |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.aspect_ratio, | ||||||
|  |                                              ui->aspect_ratio_combobox); | ||||||
|  |  | ||||||
|  |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_disk_shader_cache, | ||||||
|  |                                              ui->use_disk_shader_cache, use_disk_shader_cache); | ||||||
|  |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_gpu_emulation, | ||||||
|  |                                              ui->use_asynchronous_gpu_emulation, | ||||||
|  |                                              use_asynchronous_gpu_emulation); | ||||||
|  |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_nvdec_emulation, | ||||||
|  |                                              ui->use_nvdec_emulation, use_nvdec_emulation); | ||||||
|  |  | ||||||
|     if (Settings::IsConfiguringGlobal()) { |     if (Settings::IsConfiguringGlobal()) { | ||||||
|         // Guard if during game and set to game-specific value |         // Guard if during game and set to game-specific value | ||||||
|         if (Settings::values.renderer_backend.UsingGlobal()) { |         if (Settings::values.renderer_backend.UsingGlobal()) { | ||||||
| @@ -114,22 +127,6 @@ void ConfigureGraphics::ApplyConfiguration() { | |||||||
|         if (Settings::values.vulkan_device.UsingGlobal()) { |         if (Settings::values.vulkan_device.UsingGlobal()) { | ||||||
|             Settings::values.vulkan_device.SetValue(vulkan_device); |             Settings::values.vulkan_device.SetValue(vulkan_device); | ||||||
|         } |         } | ||||||
|         if (Settings::values.fullscreen_mode.UsingGlobal()) { |  | ||||||
|             Settings::values.fullscreen_mode.SetValue(ui->fullscreen_mode_combobox->currentIndex()); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.aspect_ratio.UsingGlobal()) { |  | ||||||
|             Settings::values.aspect_ratio.SetValue(ui->aspect_ratio_combobox->currentIndex()); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.use_disk_shader_cache.UsingGlobal()) { |  | ||||||
|             Settings::values.use_disk_shader_cache.SetValue(ui->use_disk_shader_cache->isChecked()); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.use_asynchronous_gpu_emulation.UsingGlobal()) { |  | ||||||
|             Settings::values.use_asynchronous_gpu_emulation.SetValue( |  | ||||||
|                 ui->use_asynchronous_gpu_emulation->isChecked()); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.use_nvdec_emulation.UsingGlobal()) { |  | ||||||
|             Settings::values.use_nvdec_emulation.SetValue(ui->use_nvdec_emulation->isChecked()); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.bg_red.UsingGlobal()) { |         if (Settings::values.bg_red.UsingGlobal()) { | ||||||
|             Settings::values.bg_red.SetValue(static_cast<float>(bg_color.redF())); |             Settings::values.bg_red.SetValue(static_cast<float>(bg_color.redF())); | ||||||
|             Settings::values.bg_green.SetValue(static_cast<float>(bg_color.greenF())); |             Settings::values.bg_green.SetValue(static_cast<float>(bg_color.greenF())); | ||||||
| @@ -150,19 +147,6 @@ void ConfigureGraphics::ApplyConfiguration() { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         ConfigurationShared::ApplyPerGameSetting(&Settings::values.fullscreen_mode, |  | ||||||
|                                                  ui->fullscreen_mode_combobox); |  | ||||||
|         ConfigurationShared::ApplyPerGameSetting(&Settings::values.aspect_ratio, |  | ||||||
|                                                  ui->aspect_ratio_combobox); |  | ||||||
|  |  | ||||||
|         ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_disk_shader_cache, |  | ||||||
|                                                  ui->use_disk_shader_cache, use_disk_shader_cache); |  | ||||||
|         ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_gpu_emulation, |  | ||||||
|                                                  ui->use_asynchronous_gpu_emulation, |  | ||||||
|                                                  use_asynchronous_gpu_emulation); |  | ||||||
|         ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_nvdec_emulation, |  | ||||||
|                                                  ui->use_nvdec_emulation, use_nvdec_emulation); |  | ||||||
|  |  | ||||||
|         if (ui->bg_combobox->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) { |         if (ui->bg_combobox->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) { | ||||||
|             Settings::values.bg_red.SetGlobal(true); |             Settings::values.bg_red.SetGlobal(true); | ||||||
|             Settings::values.bg_green.SetGlobal(true); |             Settings::values.bg_green.SetGlobal(true); | ||||||
|   | |||||||
| @@ -54,33 +54,6 @@ void ConfigureGraphicsAdvanced::ApplyConfiguration() { | |||||||
|         ui->gpu_accuracy->currentIndex() - |         ui->gpu_accuracy->currentIndex() - | ||||||
|         ((Settings::IsConfiguringGlobal()) ? 0 : ConfigurationShared::USE_GLOBAL_OFFSET)); |         ((Settings::IsConfiguringGlobal()) ? 0 : ConfigurationShared::USE_GLOBAL_OFFSET)); | ||||||
|  |  | ||||||
|     if (Settings::IsConfiguringGlobal()) { |  | ||||||
|         // Must guard in case of a during-game configuration when set to be game-specific. |  | ||||||
|         if (Settings::values.gpu_accuracy.UsingGlobal()) { |  | ||||||
|             Settings::values.gpu_accuracy.SetValue(gpu_accuracy); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.use_vsync.UsingGlobal()) { |  | ||||||
|             Settings::values.use_vsync.SetValue(ui->use_vsync->isChecked()); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.use_assembly_shaders.UsingGlobal()) { |  | ||||||
|             Settings::values.use_assembly_shaders.SetValue(ui->use_assembly_shaders->isChecked()); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.use_asynchronous_shaders.UsingGlobal()) { |  | ||||||
|             Settings::values.use_asynchronous_shaders.SetValue( |  | ||||||
|                 ui->use_asynchronous_shaders->isChecked()); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.use_asynchronous_shaders.UsingGlobal()) { |  | ||||||
|             Settings::values.use_asynchronous_shaders.SetValue( |  | ||||||
|                 ui->use_asynchronous_shaders->isChecked()); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.use_fast_gpu_time.UsingGlobal()) { |  | ||||||
|             Settings::values.use_fast_gpu_time.SetValue(ui->use_fast_gpu_time->isChecked()); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.max_anisotropy.UsingGlobal()) { |  | ||||||
|             Settings::values.max_anisotropy.SetValue( |  | ||||||
|                 ui->anisotropic_filtering_combobox->currentIndex()); |  | ||||||
|         } |  | ||||||
|     } else { |  | ||||||
|     ConfigurationShared::ApplyPerGameSetting(&Settings::values.max_anisotropy, |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.max_anisotropy, | ||||||
|                                              ui->anisotropic_filtering_combobox); |                                              ui->anisotropic_filtering_combobox); | ||||||
|     ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_vsync, ui->use_vsync, |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_vsync, ui->use_vsync, | ||||||
| @@ -92,9 +65,13 @@ void ConfigureGraphicsAdvanced::ApplyConfiguration() { | |||||||
|                                              use_asynchronous_shaders); |                                              use_asynchronous_shaders); | ||||||
|     ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_fast_gpu_time, |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_fast_gpu_time, | ||||||
|                                              ui->use_fast_gpu_time, use_fast_gpu_time); |                                              ui->use_fast_gpu_time, use_fast_gpu_time); | ||||||
|         ConfigurationShared::ApplyPerGameSetting(&Settings::values.max_anisotropy, |  | ||||||
|                                                  ui->anisotropic_filtering_combobox); |  | ||||||
|  |  | ||||||
|  |     if (Settings::IsConfiguringGlobal()) { | ||||||
|  |         // Must guard in case of a during-game configuration when set to be game-specific. | ||||||
|  |         if (Settings::values.gpu_accuracy.UsingGlobal()) { | ||||||
|  |             Settings::values.gpu_accuracy.SetValue(gpu_accuracy); | ||||||
|  |         } | ||||||
|  |     } else { | ||||||
|         if (ui->gpu_accuracy->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) { |         if (ui->gpu_accuracy->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) { | ||||||
|             Settings::values.gpu_accuracy.SetGlobal(true); |             Settings::values.gpu_accuracy.SetGlobal(true); | ||||||
|         } else { |         } else { | ||||||
|   | |||||||
| @@ -127,21 +127,15 @@ void ConfigureSystem::ApplyConfiguration() { | |||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.language_index, | ||||||
|  |                                              ui->combo_language); | ||||||
|  |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.region_index, ui->combo_region); | ||||||
|  |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.time_zone_index, | ||||||
|  |                                              ui->combo_time_zone); | ||||||
|  |     ConfigurationShared::ApplyPerGameSetting(&Settings::values.sound_index, ui->combo_sound); | ||||||
|  |  | ||||||
|     if (Settings::IsConfiguringGlobal()) { |     if (Settings::IsConfiguringGlobal()) { | ||||||
|         // Guard if during game and set to game-specific value |         // Guard if during game and set to game-specific value | ||||||
|         if (Settings::values.language_index.UsingGlobal()) { |  | ||||||
|             Settings::values.language_index.SetValue(ui->combo_language->currentIndex()); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.region_index.UsingGlobal()) { |  | ||||||
|             Settings::values.region_index.SetValue(ui->combo_region->currentIndex()); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.time_zone_index.UsingGlobal()) { |  | ||||||
|             Settings::values.time_zone_index.SetValue(ui->combo_time_zone->currentIndex()); |  | ||||||
|         } |  | ||||||
|         if (Settings::values.sound_index.UsingGlobal()) { |  | ||||||
|             Settings::values.sound_index.SetValue(ui->combo_sound->currentIndex()); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         if (Settings::values.rng_seed.UsingGlobal()) { |         if (Settings::values.rng_seed.UsingGlobal()) { | ||||||
|             if (ui->rng_seed_checkbox->isChecked()) { |             if (ui->rng_seed_checkbox->isChecked()) { | ||||||
|                 Settings::values.rng_seed.SetValue( |                 Settings::values.rng_seed.SetValue( | ||||||
| @@ -151,13 +145,6 @@ void ConfigureSystem::ApplyConfiguration() { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } else { |     } else { | ||||||
|         ConfigurationShared::ApplyPerGameSetting(&Settings::values.language_index, |  | ||||||
|                                                  ui->combo_language); |  | ||||||
|         ConfigurationShared::ApplyPerGameSetting(&Settings::values.region_index, ui->combo_region); |  | ||||||
|         ConfigurationShared::ApplyPerGameSetting(&Settings::values.time_zone_index, |  | ||||||
|                                                  ui->combo_time_zone); |  | ||||||
|         ConfigurationShared::ApplyPerGameSetting(&Settings::values.sound_index, ui->combo_sound); |  | ||||||
|  |  | ||||||
|         switch (use_rng_seed) { |         switch (use_rng_seed) { | ||||||
|         case ConfigurationShared::CheckState::On: |         case ConfigurationShared::CheckState::On: | ||||||
|         case ConfigurationShared::CheckState::Off: |         case ConfigurationShared::CheckState::Off: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user