mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 10:44:49 +01:00 
			
		
		
		
	Merge pull request #6362 from lat9nq/reset-to-defaults
yuzu qt: Add settings reset button to general configuration
This commit is contained in:
		
						commit
						fefc76e5da
					
				| @ -27,6 +27,8 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry, | ||||
| 
 | ||||
|     ui->inputTab->Initialize(input_subsystem); | ||||
| 
 | ||||
|     ui->generalTab->SetResetCallback([&] { this->close(); }); | ||||
| 
 | ||||
|     SetConfiguration(); | ||||
|     PopulateSelectionList(); | ||||
| 
 | ||||
|  | ||||
| @ -2,11 +2,15 @@ | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include <functional> | ||||
| #include <utility> | ||||
| #include <QCheckBox> | ||||
| #include <QMessageBox> | ||||
| #include <QSpinBox> | ||||
| #include "common/settings.h" | ||||
| #include "core/core.h" | ||||
| #include "ui_configure_general.h" | ||||
| #include "yuzu/configuration/config.h" | ||||
| #include "yuzu/configuration/configuration_shared.h" | ||||
| #include "yuzu/configuration/configure_general.h" | ||||
| #include "yuzu/uisettings.h" | ||||
| @ -23,6 +27,9 @@ ConfigureGeneral::ConfigureGeneral(QWidget* parent) | ||||
|         connect(ui->toggle_frame_limit, &QCheckBox::clicked, ui->frame_limit, | ||||
|                 [this]() { ui->frame_limit->setEnabled(ui->toggle_frame_limit->isChecked()); }); | ||||
|     } | ||||
| 
 | ||||
|     connect(ui->button_reset_defaults, &QPushButton::clicked, this, | ||||
|             &ConfigureGeneral::ResetDefaults); | ||||
| } | ||||
| 
 | ||||
| ConfigureGeneral::~ConfigureGeneral() = default; | ||||
| @ -41,6 +48,8 @@ void ConfigureGeneral::SetConfiguration() { | ||||
|     ui->toggle_frame_limit->setChecked(Settings::values.use_frame_limit.GetValue()); | ||||
|     ui->frame_limit->setValue(Settings::values.frame_limit.GetValue()); | ||||
| 
 | ||||
|     ui->button_reset_defaults->setEnabled(runtime_lock); | ||||
| 
 | ||||
|     if (Settings::IsConfiguringGlobal()) { | ||||
|         ui->frame_limit->setEnabled(Settings::values.use_frame_limit.GetValue()); | ||||
|     } else { | ||||
| @ -49,6 +58,25 @@ void ConfigureGeneral::SetConfiguration() { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // Called to set the callback when resetting settings to defaults
 | ||||
| void ConfigureGeneral::SetResetCallback(std::function<void()> callback) { | ||||
|     reset_callback = std::move(callback); | ||||
| } | ||||
| 
 | ||||
| void ConfigureGeneral::ResetDefaults() { | ||||
|     QMessageBox::StandardButton answer = QMessageBox::question( | ||||
|         this, tr("yuzu"), | ||||
|         tr("This reset all settings and remove all per-game configurations. This will not delete " | ||||
|            "game directories, profiles, or input profiles. Proceed?"), | ||||
|         QMessageBox::Yes | QMessageBox::No, QMessageBox::No); | ||||
|     if (answer == QMessageBox::No) { | ||||
|         return; | ||||
|     } | ||||
|     UISettings::values.reset_to_defaults = true; | ||||
|     UISettings::values.is_game_list_reload_pending.exchange(true); | ||||
|     reset_callback(); | ||||
| } | ||||
| 
 | ||||
| void ConfigureGeneral::ApplyConfiguration() { | ||||
|     ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_multi_core, ui->use_multi_core, | ||||
|                                              use_multi_core); | ||||
| @ -105,6 +133,8 @@ void ConfigureGeneral::SetupPerGameUI() { | ||||
|     ui->toggle_background_pause->setVisible(false); | ||||
|     ui->toggle_hide_mouse->setVisible(false); | ||||
| 
 | ||||
|     ui->button_reset_defaults->setVisible(false); | ||||
| 
 | ||||
|     ConfigurationShared::SetColoredTristate(ui->toggle_frame_limit, | ||||
|                                             Settings::values.use_frame_limit, use_frame_limit); | ||||
|     ConfigurationShared::SetColoredTristate(ui->use_multi_core, Settings::values.use_multi_core, | ||||
|  | ||||
| @ -4,9 +4,12 @@ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <functional> | ||||
| #include <memory> | ||||
| #include <QWidget> | ||||
| 
 | ||||
| class ConfigureDialog; | ||||
| 
 | ||||
| namespace ConfigurationShared { | ||||
| enum class CheckState; | ||||
| } | ||||
| @ -24,6 +27,8 @@ public: | ||||
|     explicit ConfigureGeneral(QWidget* parent = nullptr); | ||||
|     ~ConfigureGeneral() override; | ||||
| 
 | ||||
|     void SetResetCallback(std::function<void()> callback); | ||||
|     void ResetDefaults(); | ||||
|     void ApplyConfiguration(); | ||||
| 
 | ||||
| private: | ||||
| @ -34,6 +39,8 @@ private: | ||||
| 
 | ||||
|     void SetupPerGameUI(); | ||||
| 
 | ||||
|     std::function<void()> reset_callback; | ||||
| 
 | ||||
|     std::unique_ptr<Ui::ConfigureGeneral> ui; | ||||
| 
 | ||||
|     ConfigurationShared::CheckState use_frame_limit; | ||||
|  | ||||
| @ -6,7 +6,7 @@ | ||||
|    <rect> | ||||
|     <x>0</x> | ||||
|     <y>0</y> | ||||
|     <width>300</width> | ||||
|     <width>329</width> | ||||
|     <height>407</height> | ||||
|    </rect> | ||||
|   </property> | ||||
| @ -104,6 +104,45 @@ | ||||
|        </property> | ||||
|       </spacer> | ||||
|      </item> | ||||
|      <item> | ||||
|       <layout class="QHBoxLayout" name="layout_reset"> | ||||
|        <property name="spacing"> | ||||
|         <number>6</number> | ||||
|        </property> | ||||
|        <property name="leftMargin"> | ||||
|         <number>5</number> | ||||
|        </property> | ||||
|        <property name="topMargin"> | ||||
|         <number>5</number> | ||||
|        </property> | ||||
|        <property name="rightMargin"> | ||||
|         <number>5</number> | ||||
|        </property> | ||||
|        <property name="bottomMargin"> | ||||
|         <number>5</number> | ||||
|        </property> | ||||
|        <item> | ||||
|         <widget class="QPushButton" name="button_reset_defaults"> | ||||
|          <property name="text"> | ||||
|           <string>Reset All Settings</string> | ||||
|          </property> | ||||
|         </widget> | ||||
|        </item> | ||||
|        <item> | ||||
|         <spacer name="spacer_reset"> | ||||
|          <property name="orientation"> | ||||
|           <enum>Qt::Horizontal</enum> | ||||
|          </property> | ||||
|          <property name="sizeHint" stdset="0"> | ||||
|           <size> | ||||
|            <width>40</width> | ||||
|            <height>20</height> | ||||
|           </size> | ||||
|          </property> | ||||
|         </spacer> | ||||
|        </item> | ||||
|       </layout> | ||||
|      </item> | ||||
|     </layout> | ||||
|    </item> | ||||
|   </layout> | ||||
|  | ||||
| @ -2596,13 +2596,53 @@ void GMainWindow::OnConfigure() { | ||||
|             &GMainWindow::OnLanguageChanged); | ||||
| 
 | ||||
|     const auto result = configure_dialog.exec(); | ||||
|     if (result != QDialog::Accepted && !UISettings::values.configuration_applied) { | ||||
|     if (result != QDialog::Accepted && !UISettings::values.configuration_applied && | ||||
|         !UISettings::values.reset_to_defaults) { | ||||
|         // Runs if the user hit Cancel or closed the window, and did not ever press the Apply button
 | ||||
|         // or `Reset to Defaults` button
 | ||||
|         return; | ||||
|     } else if (result == QDialog::Accepted) { | ||||
|         // Only apply new changes if user hit Okay
 | ||||
|         // This is here to avoid applying changes if the user hit Apply, made some changes, then hit
 | ||||
|         // Cancel
 | ||||
|         configure_dialog.ApplyConfiguration(); | ||||
|         controller_dialog->refreshConfiguration(); | ||||
|     } else if (UISettings::values.reset_to_defaults) { | ||||
|         LOG_INFO(Frontend, "Resetting all settings to defaults"); | ||||
|         if (!Common::FS::RemoveFile(config->GetConfigFilePath())) { | ||||
|             LOG_WARNING(Frontend, "Failed to remove configuration file"); | ||||
|         } | ||||
|         if (!Common::FS::RemoveDirContentsRecursively( | ||||
|                 Common::FS::GetYuzuPath(Common::FS::YuzuPath::ConfigDir) / "custom")) { | ||||
|             LOG_WARNING(Frontend, "Failed to remove custom configuration files"); | ||||
|         } | ||||
|         if (!Common::FS::RemoveDirRecursively( | ||||
|                 Common::FS::GetYuzuPath(Common::FS::YuzuPath::CacheDir) / "game_list")) { | ||||
|             LOG_WARNING(Frontend, "Failed to remove game metadata cache files"); | ||||
|         } | ||||
| 
 | ||||
|         // Explicitly save the game directories, since reinitializing config does not explicitly do
 | ||||
|         // so.
 | ||||
|         QVector<UISettings::GameDir> old_game_dirs = std::move(UISettings::values.game_dirs); | ||||
|         QVector<u64> old_favorited_ids = std::move(UISettings::values.favorited_ids); | ||||
| 
 | ||||
|         Settings::values.disabled_addons.clear(); | ||||
| 
 | ||||
|         config = std::make_unique<Config>(); | ||||
|         UISettings::values.reset_to_defaults = false; | ||||
| 
 | ||||
|         UISettings::values.game_dirs = std::move(old_game_dirs); | ||||
|         UISettings::values.favorited_ids = std::move(old_favorited_ids); | ||||
| 
 | ||||
|         InitializeRecentFileMenuActions(); | ||||
| 
 | ||||
|         SetDefaultUIGeometry(); | ||||
|         RestoreUIState(); | ||||
| 
 | ||||
|         ShowTelemetryCallout(); | ||||
|     } | ||||
|     controller_dialog->refreshConfiguration(); | ||||
|     InitializeHotkeys(); | ||||
| 
 | ||||
|     if (UISettings::values.theme != old_theme) { | ||||
|         UpdateUITheme(); | ||||
|     } | ||||
|  | ||||
| @ -97,6 +97,7 @@ struct Values { | ||||
|     bool cache_game_list; | ||||
| 
 | ||||
|     bool configuration_applied; | ||||
|     bool reset_to_defaults; | ||||
| }; | ||||
| 
 | ||||
| extern Values values; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user