mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-03 16:39:01 -06:00 
			
		
		
		
	configure_general: Generate UI using containers
This leaves per-game config's General tab empty?
This commit is contained in:
		@@ -38,7 +38,7 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry_,
 | 
			
		||||
      cpu_tab{std::make_unique<ConfigureCpu>(system_, nullptr, this)},
 | 
			
		||||
      debug_tab_tab{std::make_unique<ConfigureDebugTab>(system_, 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{
 | 
			
		||||
          std::make_unique<ConfigureGraphicsAdvanced>(system_, nullptr, *translations, this)},
 | 
			
		||||
      graphics_tab{std::make_unique<ConfigureGraphics>(
 | 
			
		||||
 
 | 
			
		||||
@@ -9,23 +9,19 @@
 | 
			
		||||
#include "ui_configure_general.h"
 | 
			
		||||
#include "yuzu/configuration/configuration_shared.h"
 | 
			
		||||
#include "yuzu/configuration/configure_general.h"
 | 
			
		||||
#include "yuzu/configuration/shared_widget.h"
 | 
			
		||||
#include "yuzu/uisettings.h"
 | 
			
		||||
 | 
			
		||||
ConfigureGeneral::ConfigureGeneral(
 | 
			
		||||
    const Core::System& system_,
 | 
			
		||||
    std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group, QWidget* parent)
 | 
			
		||||
    : Tab(group, parent), ui{std::make_unique<Ui::ConfigureGeneral>()}, system{system_} {
 | 
			
		||||
    std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
 | 
			
		||||
    const ConfigurationShared::TranslationMap& translations_, QWidget* parent)
 | 
			
		||||
    : Tab(group, parent), ui{std::make_unique<Ui::ConfigureGeneral>()}, system{system_},
 | 
			
		||||
      translations{translations_} {
 | 
			
		||||
    ui->setupUi(this);
 | 
			
		||||
 | 
			
		||||
    SetupPerGameUI();
 | 
			
		||||
 | 
			
		||||
    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,
 | 
			
		||||
            &ConfigureGeneral::ResetDefaults);
 | 
			
		||||
}
 | 
			
		||||
@@ -34,29 +30,20 @@ ConfigureGeneral::~ConfigureGeneral() = default;
 | 
			
		||||
 | 
			
		||||
void ConfigureGeneral::SetConfiguration() {
 | 
			
		||||
    const bool runtime_lock = !system.IsPoweredOn();
 | 
			
		||||
    QLayout& layout = *ui->general_widget->layout();
 | 
			
		||||
 | 
			
		||||
    ui->use_multi_core->setEnabled(runtime_lock);
 | 
			
		||||
    ui->use_multi_core->setChecked(Settings::values.use_multi_core.GetValue());
 | 
			
		||||
    for (const auto setting :
 | 
			
		||||
         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());
 | 
			
		||||
    ui->toggle_user_on_boot->setChecked(UISettings::values.select_user_on_boot.GetValue());
 | 
			
		||||
    ui->toggle_background_pause->setChecked(UISettings::values.pause_when_in_background.GetValue());
 | 
			
		||||
    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());
 | 
			
		||||
        if (!widget->Valid()) {
 | 
			
		||||
            delete widget;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    // ui->toggle_speed_limit->setChecked(Settings::values.use_speed_limit.GetValue());
 | 
			
		||||
    // 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);
 | 
			
		||||
    // }
 | 
			
		||||
        layout.addWidget(widget);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Called to set the callback when resetting settings to defaults
 | 
			
		||||
@@ -79,32 +66,9 @@ void ConfigureGeneral::ResetDefaults() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ConfigureGeneral::ApplyConfiguration() {
 | 
			
		||||
    ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_multi_core, ui->use_multi_core,
 | 
			
		||||
                                             use_multi_core);
 | 
			
		||||
 | 
			
		||||
    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());
 | 
			
		||||
        // }
 | 
			
		||||
    bool powered_on = system.IsPoweredOn();
 | 
			
		||||
    for (const auto& func : apply_funcs) {
 | 
			
		||||
        func(powered_on);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -119,34 +83,3 @@ void ConfigureGeneral::changeEvent(QEvent* event) {
 | 
			
		||||
void ConfigureGeneral::RetranslateUI() {
 | 
			
		||||
    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));
 | 
			
		||||
    // });
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@
 | 
			
		||||
#include <memory>
 | 
			
		||||
#include <QWidget>
 | 
			
		||||
#include "yuzu/configuration/configuration_shared.h"
 | 
			
		||||
#include "yuzu/configuration/shared_widget.h"
 | 
			
		||||
 | 
			
		||||
namespace Core {
 | 
			
		||||
class System;
 | 
			
		||||
@@ -23,6 +24,7 @@ class ConfigureGeneral : public ConfigurationShared::Tab {
 | 
			
		||||
public:
 | 
			
		||||
    explicit ConfigureGeneral(const Core::System& system_,
 | 
			
		||||
                              std::shared_ptr<std::forward_list<ConfigurationShared::Tab*>> group,
 | 
			
		||||
                              const ConfigurationShared::TranslationMap& translations_,
 | 
			
		||||
                              QWidget* parent = nullptr);
 | 
			
		||||
    ~ConfigureGeneral() override;
 | 
			
		||||
 | 
			
		||||
@@ -35,14 +37,12 @@ private:
 | 
			
		||||
    void changeEvent(QEvent* event) override;
 | 
			
		||||
    void RetranslateUI();
 | 
			
		||||
 | 
			
		||||
    void SetupPerGameUI();
 | 
			
		||||
 | 
			
		||||
    std::function<void()> reset_callback;
 | 
			
		||||
 | 
			
		||||
    std::unique_ptr<Ui::ConfigureGeneral> ui;
 | 
			
		||||
 | 
			
		||||
    ConfigurationShared::CheckState use_speed_limit;
 | 
			
		||||
    ConfigurationShared::CheckState use_multi_core;
 | 
			
		||||
    std::forward_list<std::function<void(bool)>> apply_funcs{};
 | 
			
		||||
 | 
			
		||||
    const Core::System& system;
 | 
			
		||||
    const ConfigurationShared::TranslationMap& translations;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -26,77 +26,22 @@
 | 
			
		||||
       </property>
 | 
			
		||||
       <layout class="QHBoxLayout" name="GeneralHorizontalLayout">
 | 
			
		||||
        <item>
 | 
			
		||||
         <layout class="QVBoxLayout" name="GeneralVerticalLayout">
 | 
			
		||||
          <item>
 | 
			
		||||
           <layout class="QHBoxLayout" name="horizontalLayout_2">
 | 
			
		||||
            <item>
 | 
			
		||||
             <widget class="QCheckBox" name="toggle_speed_limit">
 | 
			
		||||
              <property name="text">
 | 
			
		||||
               <string>Limit Speed Percent</string>
 | 
			
		||||
              </property>
 | 
			
		||||
             </widget>
 | 
			
		||||
            </item>
 | 
			
		||||
            <item>
 | 
			
		||||
             <widget class="QSpinBox" name="speed_limit">
 | 
			
		||||
              <property name="suffix">
 | 
			
		||||
               <string>%</string>
 | 
			
		||||
              </property>
 | 
			
		||||
              <property name="minimum">
 | 
			
		||||
               <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>
 | 
			
		||||
         <widget class="QWidget" name="general_widget" native="true">
 | 
			
		||||
          <layout class="QVBoxLayout" name="GeneralVerticalLayout">
 | 
			
		||||
           <property name="leftMargin">
 | 
			
		||||
            <number>0</number>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="topMargin">
 | 
			
		||||
            <number>0</number>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="rightMargin">
 | 
			
		||||
            <number>0</number>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="bottomMargin">
 | 
			
		||||
            <number>0</number>
 | 
			
		||||
           </property>
 | 
			
		||||
          </layout>
 | 
			
		||||
         </widget>
 | 
			
		||||
        </item>
 | 
			
		||||
       </layout>
 | 
			
		||||
      </widget>
 | 
			
		||||
 
 | 
			
		||||
@@ -53,7 +53,7 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const std::st
 | 
			
		||||
    addons_tab = std::make_unique<ConfigurePerGameAddons>(system_, this);
 | 
			
		||||
    audio_tab = std::make_unique<ConfigureAudio>(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 =
 | 
			
		||||
        std::make_unique<ConfigureGraphicsAdvanced>(system_, tab_group, *translations, this);
 | 
			
		||||
    graphics_tab = std::make_unique<ConfigureGraphics>(
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user