From d96eb90144828e187e14086f8b9ae22360c55cab Mon Sep 17 00:00:00 2001 From: lat9nq Date: Wed, 17 Jun 2020 14:16:17 -0400 Subject: [PATCH] configuration: setup global configuration checkbox Global config checkbox now enables/disables the appropriate tabs in the game properties dialog. The use global configuration setting is now saved to the config, defaulting to true. This also addresses some changes requested in the PR. --- src/core/settings.h | 7 +- src/yuzu/configuration/config.cpp | 5 + src/yuzu/configuration/configure_per_game.cpp | 31 +- src/yuzu/configuration/configure_per_game.h | 2 + src/yuzu/configuration/configure_per_game.ui | 371 ++++++++++++++++++ .../configure_per_game_addons.cpp | 5 +- .../configuration/configure_per_game_addons.h | 2 +- 7 files changed, 414 insertions(+), 9 deletions(-) create mode 100644 src/yuzu/configuration/configure_per_game.ui diff --git a/src/core/settings.h b/src/core/settings.h index c53297187d..fcd8d8db4d 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -382,7 +382,7 @@ enum class GPUAccuracy : u32 { Extreme = 2, }; -typedef struct Values_t { +struct Values { // System bool use_docked_mode; std::optional rng_seed; @@ -489,7 +489,10 @@ typedef struct Values_t { // Add-Ons std::map> disabled_addons; -} Values; + + // Per-Game Settings + bool use_global_values; +}; extern Values global_values; extern Values game_values; diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 6294b27cfb..353bf23b1a 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -579,6 +579,9 @@ void Config::ReadMiscellaneousValues() { .toString() .toStdString(); Settings::values->use_dev_keys = ReadSetting(QStringLiteral("use_dev_keys"), false).toBool(); + Settings::values->use_global_values = + ReadSetting(QStringLiteral("use_global_values"), true).toBool() || + Settings::values == &Settings::global_values; qt_config->endGroup(); } @@ -1051,6 +1054,8 @@ void Config::SaveMiscellaneousValues() { WriteSetting(QStringLiteral("log_filter"), QString::fromStdString(Settings::values->log_filter), QStringLiteral("*:Info")); WriteSetting(QStringLiteral("use_dev_keys"), Settings::values->use_dev_keys, false); + WriteSetting(QStringLiteral("use_global_values"), Settings::values->use_global_values || + Settings::values == &Settings::global_values, true); qt_config->endGroup(); } diff --git a/src/yuzu/configuration/configure_per_game.cpp b/src/yuzu/configuration/configure_per_game.cpp index 57d200d260..a9a1641300 100644 --- a/src/yuzu/configuration/configure_per_game.cpp +++ b/src/yuzu/configuration/configure_per_game.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -33,18 +34,28 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id) setFocusPolicy(Qt::ClickFocus); setWindowTitle(tr("Properties")); - ui->tabAddons->SetTitleId(title_id); + ui->addonsTab->SetTitleId(title_id); scene = new QGraphicsScene; ui->icon_view->setScene(scene); + connect(ui->checkGlobal, &QCheckBox::stateChanged, this, &ConfigurePerGame::UpdateVisibleTabs); + LoadConfiguration(); } ConfigurePerGame::~ConfigurePerGame() = default; void ConfigurePerGame::ApplyConfiguration() { - ui->tabAddons->ApplyConfiguration(); + ui->addonsTab->ApplyConfiguration(); + ui->generalTab->ApplyConfiguration(); + ui->systemTab->ApplyConfiguration(); + ui->graphicsTab->ApplyConfiguration(); + ui->graphicsAdvancedTab->ApplyConfiguration(); + ui->audioTab->ApplyConfiguration(); + ui->inputTab->ApplyConfiguration(); + Settings::Apply(); + Settings::LogSettings(); } void ConfigurePerGame::changeEvent(QEvent* event) { @@ -69,7 +80,9 @@ void ConfigurePerGame::LoadConfiguration() { return; } - ui->tabAddons->LoadFromFile(file); + ui->checkGlobal->setChecked(Settings::values->use_global_values); + + ui->addonsTab->LoadFromFile(file); ui->display_title_id->setText(QString::fromStdString(fmt::format("{:016X}", title_id))); @@ -122,4 +135,16 @@ void ConfigurePerGame::LoadConfiguration() { const auto valueText = ReadableByteSize(file->GetSize()); ui->display_size->setText(valueText); + + UpdateVisibleTabs(); +} + +void ConfigurePerGame::UpdateVisibleTabs() { + bool visible = !ui->checkGlobal->isChecked(); + ui->generalTab->setEnabled(visible); + ui->systemTab->setEnabled(visible); + ui->graphicsTab->setEnabled(visible); + ui->graphicsAdvancedTab->setEnabled(visible); + ui->audioTab->setEnabled(visible); + ui->inputTab->setEnabled(visible); } diff --git a/src/yuzu/configuration/configure_per_game.h b/src/yuzu/configuration/configure_per_game.h index 099b570269..d8cdde305a 100644 --- a/src/yuzu/configuration/configure_per_game.h +++ b/src/yuzu/configuration/configure_per_game.h @@ -40,6 +40,8 @@ private: void LoadConfiguration(); + void UpdateVisibleTabs(); + std::unique_ptr ui; FileSys::VirtualFile file; u64 title_id; diff --git a/src/yuzu/configuration/configure_per_game.ui b/src/yuzu/configuration/configure_per_game.ui new file mode 100644 index 0000000000..fc0fa604fa --- /dev/null +++ b/src/yuzu/configuration/configure_per_game.ui @@ -0,0 +1,371 @@ + + + ConfigurePerGame + + + + 0 + 0 + 800 + 600 + + + + Dialog + + + + + + + + + 0 + 0 + + + + Info + + + + + + + 0 + 0 + + + + + 256 + 256 + + + + + 256 + 256 + + + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOff + + + false + + + + + + + + + true + + + true + + + + + + + true + + + true + + + + + + + Name + + + + + + + Title ID + + + + + + + true + + + true + + + + + + + true + + + true + + + + + + + true + + + true + + + + + + + Filename + + + + + + + true + + + true + + + + + + + true + + + true + + + + + + + Format + + + + + + + Version + + + + + + + Size + + + + + + + Developer + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + + Use global configuration + + + false + + + + + + + true + + + 0 + + + true + + + false + + + false + + + + Add-Ons + + + + + General + + + + + System + + + + + Graphics + + + + + Adv. Graphics + + + + + Audio + + + + + Input + + + + + + + + + + + + + 0 + 0 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + ConfigureGeneral + QWidget +
configuration/configure_general.h
+ 1 +
+ + ConfigureSystem + QWidget +
configuration/configure_system.h
+ 1 +
+ + ConfigureAudio + QWidget +
configuration/configure_audio.h
+ 1 +
+ + ConfigureGraphics + QWidget +
configuration/configure_graphics.h
+ 1 +
+ + ConfigureGraphicsAdvanced + QWidget +
configuration/configure_graphics_advanced.h
+ 1 +
+ + ConfigurePerGameAddons + QWidget +
configuration/configure_per_game_addons.h
+ 1 +
+ + ConfigureInputSimple + QWidget +
configuration/configure_input_simple.h
+ 1 +
+
+ + + + buttonBox + accepted() + ConfigurePerGame + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + ConfigurePerGame + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/src/yuzu/configuration/configure_per_game_addons.cpp b/src/yuzu/configuration/configure_per_game_addons.cpp index 93a7a71278..1f55cecc28 100644 --- a/src/yuzu/configuration/configure_per_game_addons.cpp +++ b/src/yuzu/configuration/configure_per_game_addons.cpp @@ -15,7 +15,6 @@ #include "common/common_paths.h" #include "common/file_util.h" -//~ #include "core/file_sys/control_metadata.h" #include "core/file_sys/patch_manager.h" #include "core/file_sys/xts_archive.h" #include "core/loader/loader.h" @@ -89,8 +88,8 @@ void ConfigurePerGameAddons::LoadFromFile(FileSys::VirtualFile file) { LoadConfiguration(); } -void ConfigurePerGameAddons::SetTitleId(u64 t_id) { - this->title_id = t_id; +void ConfigurePerGameAddons::SetTitleId(u64 id) { + this->title_id = id; } void ConfigurePerGameAddons::changeEvent(QEvent* event) { diff --git a/src/yuzu/configuration/configure_per_game_addons.h b/src/yuzu/configuration/configure_per_game_addons.h index 32eb6cbedb..a00ec35390 100644 --- a/src/yuzu/configuration/configure_per_game_addons.h +++ b/src/yuzu/configuration/configure_per_game_addons.h @@ -33,7 +33,7 @@ public: void LoadFromFile(FileSys::VirtualFile file); - void SetTitleId(u64 t_id); + void SetTitleId(u64 id); private: void changeEvent(QEvent* event) override;