configure_general: Generate UI using containers

This leaves per-game config's General tab empty?
This commit is contained in:
lat9nq 2023-05-09 01:38:01 -04:00
parent c530532de7
commit 827082c5ac
5 changed files with 41 additions and 163 deletions

View file

@ -38,7 +38,7 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry_,
cpu_tab{std::make_unique<ConfigureCpu>(system_, nullptr, this)}, cpu_tab{std::make_unique<ConfigureCpu>(system_, nullptr, this)},
debug_tab_tab{std::make_unique<ConfigureDebugTab>(system_, this)}, debug_tab_tab{std::make_unique<ConfigureDebugTab>(system_, this)},
filesystem_tab{std::make_unique<ConfigureFilesystem>(this)}, filesystem_tab{std::make_unique<ConfigureFilesystem>(this)},
general_tab{std::make_unique<ConfigureGeneral>(system_, nullptr, this)}, general_tab{std::make_unique<ConfigureGeneral>(system_, nullptr, *translations, this)},
graphics_advanced_tab{ graphics_advanced_tab{
std::make_unique<ConfigureGraphicsAdvanced>(system_, nullptr, *translations, this)}, std::make_unique<ConfigureGraphicsAdvanced>(system_, nullptr, *translations, this)},
graphics_tab{std::make_unique<ConfigureGraphics>( graphics_tab{std::make_unique<ConfigureGraphics>(

View file

@ -9,23 +9,19 @@
#include "ui_configure_general.h" #include "ui_configure_general.h"
#include "yuzu/configuration/configuration_shared.h" #include "yuzu/configuration/configuration_shared.h"
#include "yuzu/configuration/configure_general.h" #include "yuzu/configuration/configure_general.h"
#include "yuzu/configuration/shared_widget.h"
#include "yuzu/uisettings.h" #include "yuzu/uisettings.h"
ConfigureGeneral::ConfigureGeneral( ConfigureGeneral::ConfigureGeneral(
const Core::System& system_, const Core::System& system_,
std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group, QWidget* parent) std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
: Tab(group, parent), ui{std::make_unique<Ui::ConfigureGeneral>()}, system{system_} { const ConfigurationShared::TranslationMap& translations_, QWidget* parent)
: Tab(group, parent), ui{std::make_unique<Ui::ConfigureGeneral>()}, system{system_},
translations{translations_} {
ui->setupUi(this); ui->setupUi(this);
SetupPerGameUI();
SetConfiguration(); SetConfiguration();
// if (Settings::IsConfiguringGlobal()) {
// connect(ui->toggle_speed_limit, &QCheckBox::clicked, ui->speed_limit,
// [this]() { ui->speed_limit->setEnabled(ui->toggle_speed_limit->isChecked()); });
// }
connect(ui->button_reset_defaults, &QPushButton::clicked, this, connect(ui->button_reset_defaults, &QPushButton::clicked, this,
&ConfigureGeneral::ResetDefaults); &ConfigureGeneral::ResetDefaults);
} }
@ -34,29 +30,20 @@ ConfigureGeneral::~ConfigureGeneral() = default;
void ConfigureGeneral::SetConfiguration() { void ConfigureGeneral::SetConfiguration() {
const bool runtime_lock = !system.IsPoweredOn(); const bool runtime_lock = !system.IsPoweredOn();
QLayout& layout = *ui->general_widget->layout();
ui->use_multi_core->setEnabled(runtime_lock); for (const auto setting :
ui->use_multi_core->setChecked(Settings::values.use_multi_core.GetValue()); UISettings::values.linkage.by_category[Settings::Category::UiGeneral]) {
ConfigurationShared::Widget* widget =
new ConfigurationShared::Widget(setting, translations, this, runtime_lock, apply_funcs);
ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing.GetValue()); if (!widget->Valid()) {
ui->toggle_user_on_boot->setChecked(UISettings::values.select_user_on_boot.GetValue()); delete widget;
ui->toggle_background_pause->setChecked(UISettings::values.pause_when_in_background.GetValue()); continue;
ui->toggle_hide_mouse->setChecked(UISettings::values.hide_mouse.GetValue()); }
ui->toggle_controller_applet_disabled->setEnabled(runtime_lock);
ui->toggle_controller_applet_disabled->setChecked(
UISettings::values.controller_applet_disabled.GetValue());
// ui->toggle_speed_limit->setChecked(Settings::values.use_speed_limit.GetValue()); layout.addWidget(widget);
// ui->speed_limit->setValue(Settings::values.speed_limit.GetValue()); }
ui->button_reset_defaults->setEnabled(runtime_lock);
// if (Settings::IsConfiguringGlobal()) {
// ui->speed_limit->setEnabled(Settings::values.use_speed_limit.GetValue());
// } else {
// ui->speed_limit->setEnabled(Settings::values.use_speed_limit.GetValue() &&
// use_speed_limit != ConfigurationShared::CheckState::Global);
// }
} }
// Called to set the callback when resetting settings to defaults // Called to set the callback when resetting settings to defaults
@ -79,32 +66,9 @@ void ConfigureGeneral::ResetDefaults() {
} }
void ConfigureGeneral::ApplyConfiguration() { void ConfigureGeneral::ApplyConfiguration() {
ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_multi_core, ui->use_multi_core, bool powered_on = system.IsPoweredOn();
use_multi_core); for (const auto& func : apply_funcs) {
func(powered_on);
if (Settings::IsConfiguringGlobal()) {
UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked();
UISettings::values.select_user_on_boot = ui->toggle_user_on_boot->isChecked();
UISettings::values.pause_when_in_background = ui->toggle_background_pause->isChecked();
UISettings::values.hide_mouse = ui->toggle_hide_mouse->isChecked();
UISettings::values.controller_applet_disabled =
ui->toggle_controller_applet_disabled->isChecked();
// Guard if during game and set to game-specific value
// if (Settings::values.use_speed_limit.UsingGlobal()) {
// Settings::values.use_speed_limit.SetValue(ui->toggle_speed_limit->checkState() ==
// Qt::Checked);
// Settings::values.speed_limit.SetValue(ui->speed_limit->value());
// }
} else {
// bool global_speed_limit = use_speed_limit == ConfigurationShared::CheckState::Global;
// Settings::values.use_speed_limit.SetGlobal(global_speed_limit);
// Settings::values.speed_limit.SetGlobal(global_speed_limit);
// if (!global_speed_limit) {
// Settings::values.use_speed_limit.SetValue(ui->toggle_speed_limit->checkState() ==
// Qt::Checked);
// Settings::values.speed_limit.SetValue(ui->speed_limit->value());
// }
} }
} }
@ -119,34 +83,3 @@ void ConfigureGeneral::changeEvent(QEvent* event) {
void ConfigureGeneral::RetranslateUI() { void ConfigureGeneral::RetranslateUI() {
ui->retranslateUi(this); ui->retranslateUi(this);
} }
void ConfigureGeneral::SetupPerGameUI() {
if (Settings::IsConfiguringGlobal()) {
// Disables each setting if:
// - A game is running (thus settings in use), and
// - A non-global setting is applied.
// ui->toggle_speed_limit->setEnabled(Settings::values.use_speed_limit.UsingGlobal());
// ui->speed_limit->setEnabled(Settings::values.speed_limit.UsingGlobal());
return;
}
ui->toggle_check_exit->setVisible(false);
ui->toggle_user_on_boot->setVisible(false);
ui->toggle_background_pause->setVisible(false);
ui->toggle_hide_mouse->setVisible(false);
ui->toggle_controller_applet_disabled->setVisible(false);
ui->button_reset_defaults->setVisible(false);
// ConfigurationShared::SetColoredTristate(ui->toggle_speed_limit,
// Settings::values.use_speed_limit, use_speed_limit);
ConfigurationShared::SetColoredTristate(ui->use_multi_core, Settings::values.use_multi_core,
use_multi_core);
// connect(ui->toggle_speed_limit, &QCheckBox::clicked, ui->speed_limit, [this]() {
// ui->speed_limit->setEnabled(ui->toggle_speed_limit->isChecked() &&
// (use_speed_limit !=
// ConfigurationShared::CheckState::Global));
// });
}

View file

@ -7,6 +7,7 @@
#include <memory> #include <memory>
#include <QWidget> #include <QWidget>
#include "yuzu/configuration/configuration_shared.h" #include "yuzu/configuration/configuration_shared.h"
#include "yuzu/configuration/shared_widget.h"
namespace Core { namespace Core {
class System; class System;
@ -23,6 +24,7 @@ class ConfigureGeneral : public ConfigurationShared::Tab {
public: public:
explicit ConfigureGeneral(const Core::System& system_, explicit ConfigureGeneral(const Core::System& system_,
std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group, std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
const ConfigurationShared::TranslationMap& translations_,
QWidget* parent = nullptr); QWidget* parent = nullptr);
~ConfigureGeneral() override; ~ConfigureGeneral() override;
@ -35,14 +37,12 @@ private:
void changeEvent(QEvent* event) override; void changeEvent(QEvent* event) override;
void RetranslateUI(); void RetranslateUI();
void SetupPerGameUI();
std::function<void()> reset_callback; std::function<void()> reset_callback;
std::unique_ptr<Ui::ConfigureGeneral> ui; std::unique_ptr<Ui::ConfigureGeneral> ui;
ConfigurationShared::CheckState use_speed_limit; std::forward_list<std::function<void(bool)>> apply_funcs{};
ConfigurationShared::CheckState use_multi_core;
const Core::System& system; const Core::System& system;
const ConfigurationShared::TranslationMap& translations;
}; };

View file

@ -26,77 +26,22 @@
</property> </property>
<layout class="QHBoxLayout" name="GeneralHorizontalLayout"> <layout class="QHBoxLayout" name="GeneralHorizontalLayout">
<item> <item>
<layout class="QVBoxLayout" name="GeneralVerticalLayout"> <widget class="QWidget" name="general_widget" native="true">
<item> <layout class="QVBoxLayout" name="GeneralVerticalLayout">
<layout class="QHBoxLayout" name="horizontalLayout_2"> <property name="leftMargin">
<item> <number>0</number>
<widget class="QCheckBox" name="toggle_speed_limit"> </property>
<property name="text"> <property name="topMargin">
<string>Limit Speed Percent</string> <number>0</number>
</property> </property>
</widget> <property name="rightMargin">
</item> <number>0</number>
<item> </property>
<widget class="QSpinBox" name="speed_limit"> <property name="bottomMargin">
<property name="suffix"> <number>0</number>
<string>%</string> </property>
</property> </layout>
<property name="minimum"> </widget>
<number>1</number>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="value">
<number>100</number>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="use_multi_core">
<property name="text">
<string>Multicore CPU Emulation</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="toggle_check_exit">
<property name="text">
<string>Confirm exit while emulation is running</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="toggle_user_on_boot">
<property name="text">
<string>Prompt for user on game boot</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="toggle_background_pause">
<property name="text">
<string>Pause emulation when in background</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="toggle_hide_mouse">
<property name="text">
<string>Hide mouse on inactivity</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="toggle_controller_applet_disabled">
<property name="text">
<string>Disable controller applet</string>
</property>
</widget>
</item>
</layout>
</item> </item>
</layout> </layout>
</widget> </widget>

View file

@ -53,7 +53,7 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const std::st
addons_tab = std::make_unique<ConfigurePerGameAddons>(system_, this); addons_tab = std::make_unique<ConfigurePerGameAddons>(system_, this);
audio_tab = std::make_unique<ConfigureAudio>(system_, tab_group, this); audio_tab = std::make_unique<ConfigureAudio>(system_, tab_group, this);
cpu_tab = std::make_unique<ConfigureCpu>(system_, tab_group, this); cpu_tab = std::make_unique<ConfigureCpu>(system_, tab_group, this);
general_tab = std::make_unique<ConfigureGeneral>(system_, tab_group, this); general_tab = std::make_unique<ConfigureGeneral>(system_, tab_group, *translations, this);
graphics_advanced_tab = graphics_advanced_tab =
std::make_unique<ConfigureGraphicsAdvanced>(system_, tab_group, *translations, this); std::make_unique<ConfigureGraphicsAdvanced>(system_, tab_group, *translations, this);
graphics_tab = std::make_unique<ConfigureGraphics>( graphics_tab = std::make_unique<ConfigureGraphics>(