diff options
Diffstat (limited to 'src/yuzu/configuration')
| -rw-r--r-- | src/yuzu/configuration/configuration_shared.cpp | 74 | ||||
| -rw-r--r-- | src/yuzu/configuration/configuration_shared.h | 20 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_audio.cpp | 23 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_audio.h | 6 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_audio.ui | 151 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_general.cpp | 37 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_general.h | 7 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics.cpp | 54 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics.h | 7 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics.ui | 282 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics_advanced.cpp | 66 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics_advanced.h | 10 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics_advanced.ui | 154 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_system.cpp | 115 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_system.h | 7 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_system.ui | 972 | 
16 files changed, 1116 insertions, 869 deletions
| diff --git a/src/yuzu/configuration/configuration_shared.cpp b/src/yuzu/configuration/configuration_shared.cpp index bb47c3933..f9becab6e 100644 --- a/src/yuzu/configuration/configuration_shared.cpp +++ b/src/yuzu/configuration/configuration_shared.cpp @@ -4,17 +4,20 @@  #include <QCheckBox>  #include <QComboBox> +#include <QObject> +#include <QString>  #include "core/settings.h"  #include "yuzu/configuration/configuration_shared.h"  #include "yuzu/configuration/configure_per_game.h"  void ConfigurationShared::ApplyPerGameSetting(Settings::Setting<bool>* setting, -                                              const QCheckBox* checkbox) { -    if (checkbox->checkState() == Qt::PartiallyChecked) { +                                              const QCheckBox* checkbox, +                                              const CheckState& tracker) { +    if (tracker == CheckState::Global) {          setting->SetGlobal(true);      } else {          setting->SetGlobal(false); -        setting->SetValue(checkbox->checkState() == Qt::Checked); +        setting->SetValue(checkbox->checkState());      }  } @@ -69,8 +72,69 @@ void ConfigurationShared::SetPerGameSetting(                                                             ConfigurationShared::USE_GLOBAL_OFFSET);  } -void ConfigurationShared::InsertGlobalItem(QComboBox* combobox) { -    const QString use_global_text = ConfigurePerGame::tr("Use global configuration"); +void ConfigurationShared::SetHighlight(QWidget* widget, const std::string& name, bool highlighted) { +    if (highlighted) { +        widget->setStyleSheet(QStringLiteral("QWidget#%1 { background-color:rgba(0,203,255,0.5) }") +                                  .arg(QString::fromStdString(name))); +    } else { +        widget->setStyleSheet(QStringLiteral("QWidget#%1 { background-color:rgba(0,0,0,0) }") +                                  .arg(QString::fromStdString(name))); +    } +    widget->show(); +} + +void ConfigurationShared::SetColoredTristate(QCheckBox* checkbox, const std::string& name, +                                             const Settings::Setting<bool>& setting, +                                             CheckState& tracker) { +    if (setting.UsingGlobal()) { +        tracker = CheckState::Global; +    } else { +        tracker = (setting.GetValue() == setting.GetValue(true)) ? CheckState::On : CheckState::Off; +    } +    SetHighlight(checkbox, name, tracker != CheckState::Global); +    QObject::connect(checkbox, &QCheckBox::clicked, checkbox, +                     [checkbox, name, setting, &tracker]() { +                         tracker = static_cast<CheckState>((static_cast<int>(tracker) + 1) % +                                                           static_cast<int>(CheckState::Count)); +                         if (tracker == CheckState::Global) { +                             checkbox->setChecked(setting.GetValue(true)); +                         } +                         SetHighlight(checkbox, name, tracker != CheckState::Global); +                     }); +} + +void ConfigurationShared::SetColoredTristate(QCheckBox* checkbox, const std::string& name, +                                             bool global, bool state, bool global_state, +                                             CheckState& tracker) { +    if (global) { +        tracker = CheckState::Global; +    } else { +        tracker = (state == global_state) ? CheckState::On : CheckState::Off; +    } +    SetHighlight(checkbox, name, tracker != CheckState::Global); +    QObject::connect(checkbox, &QCheckBox::clicked, checkbox, +                     [checkbox, name, global_state, &tracker]() { +                         tracker = static_cast<CheckState>((static_cast<int>(tracker) + 1) % +                                                           static_cast<int>(CheckState::Count)); +                         if (tracker == CheckState::Global) { +                             checkbox->setChecked(global_state); +                         } +                         SetHighlight(checkbox, name, tracker != CheckState::Global); +                     }); +} + +void ConfigurationShared::SetColoredComboBox(QComboBox* combobox, QWidget* target, +                                             const std::string& target_name, int global) { +    InsertGlobalItem(combobox, global); +    QObject::connect(combobox, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), target, +                     [target, target_name](int index) { +                         ConfigurationShared::SetHighlight(target, target_name, index != 0); +                     }); +} + +void ConfigurationShared::InsertGlobalItem(QComboBox* combobox, int global_index) { +    const QString use_global_text = +        ConfigurePerGame::tr("Use global configuration (%1)").arg(combobox->itemText(global_index));      combobox->insertItem(ConfigurationShared::USE_GLOBAL_INDEX, use_global_text);      combobox->insertSeparator(ConfigurationShared::USE_GLOBAL_SEPARATOR_INDEX);  } diff --git a/src/yuzu/configuration/configuration_shared.h b/src/yuzu/configuration/configuration_shared.h index b11b1b950..003148c68 100644 --- a/src/yuzu/configuration/configuration_shared.h +++ b/src/yuzu/configuration/configuration_shared.h @@ -15,9 +15,17 @@ constexpr int USE_GLOBAL_INDEX = 0;  constexpr int USE_GLOBAL_SEPARATOR_INDEX = 1;  constexpr int USE_GLOBAL_OFFSET = 2; +enum class CheckState { +    Off, +    On, +    Global, +    Count, +}; +  // Global-aware apply and set functions -void ApplyPerGameSetting(Settings::Setting<bool>* setting, const QCheckBox* checkbox); +void ApplyPerGameSetting(Settings::Setting<bool>* setting, const QCheckBox* checkbox, +                         const CheckState& tracker);  void ApplyPerGameSetting(Settings::Setting<int>* setting, const QComboBox* combobox);  void ApplyPerGameSetting(Settings::Setting<Settings::RendererBackend>* setting,                           const QComboBox* combobox); @@ -31,6 +39,14 @@ void SetPerGameSetting(QComboBox* combobox,  void SetPerGameSetting(QComboBox* combobox,                         const Settings::Setting<Settings::GPUAccuracy>* setting); -void InsertGlobalItem(QComboBox* combobox); +void SetHighlight(QWidget* widget, const std::string& name, bool highlighted); +void SetColoredTristate(QCheckBox* checkbox, const std::string& name, +                        const Settings::Setting<bool>& setting, CheckState& tracker); +void SetColoredTristate(QCheckBox* checkbox, const std::string& name, bool global, bool state, +                        bool global_state, CheckState& tracker); +void SetColoredComboBox(QComboBox* combobox, QWidget* target, const std::string& target_name, +                        int global); + +void InsertGlobalItem(QComboBox* combobox, int global_index);  } // namespace ConfigurationShared diff --git a/src/yuzu/configuration/configure_audio.cpp b/src/yuzu/configuration/configure_audio.cpp index cc021beec..fea632531 100644 --- a/src/yuzu/configuration/configure_audio.cpp +++ b/src/yuzu/configuration/configure_audio.cpp @@ -49,12 +49,9 @@ void ConfigureAudio::SetConfiguration() {      ui->volume_slider->setValue(Settings::values.volume.GetValue() * ui->volume_slider->maximum()); -    if (Settings::configuring_global) { -        ui->toggle_audio_stretching->setChecked( -            Settings::values.enable_audio_stretching.GetValue()); -    } else { -        ConfigurationShared::SetPerGameSetting(ui->toggle_audio_stretching, -                                               &Settings::values.enable_audio_stretching); +    ui->toggle_audio_stretching->setChecked(Settings::values.enable_audio_stretching.GetValue()); + +    if (!Settings::configuring_global) {          if (Settings::values.volume.UsingGlobal()) {              ui->volume_combo_box->setCurrentIndex(0);              ui->volume_slider->setEnabled(false); @@ -62,6 +59,8 @@ void ConfigureAudio::SetConfiguration() {              ui->volume_combo_box->setCurrentIndex(1);              ui->volume_slider->setEnabled(true);          } +        ConfigurationShared::SetHighlight(ui->volume_layout, "volume_layout", +                                          !Settings::values.volume.UsingGlobal());      }      SetVolumeIndicatorText(ui->volume_slider->sliderPosition());  } @@ -120,7 +119,8 @@ void ConfigureAudio::ApplyConfiguration() {          }      } else {          ConfigurationShared::ApplyPerGameSetting(&Settings::values.enable_audio_stretching, -                                                 ui->toggle_audio_stretching); +                                                 ui->toggle_audio_stretching, +                                                 enable_audio_stretching);          if (ui->volume_combo_box->currentIndex() == 0) {              Settings::values.volume.SetGlobal(true);          } else { @@ -173,9 +173,14 @@ void ConfigureAudio::SetupPerGameUI() {          return;      } -    ui->toggle_audio_stretching->setTristate(true); +    ConfigurationShared::SetColoredTristate(ui->toggle_audio_stretching, "toggle_audio_stretching", +                                            Settings::values.enable_audio_stretching, +                                            enable_audio_stretching);      connect(ui->volume_combo_box, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), -            this, [this](int index) { ui->volume_slider->setEnabled(index == 1); }); +            this, [this](int index) { +                ui->volume_slider->setEnabled(index == 1); +                ConfigurationShared::SetHighlight(ui->volume_layout, "volume_layout", index == 1); +            });      ui->output_sink_combo_box->setVisible(false);      ui->output_sink_label->setVisible(false); diff --git a/src/yuzu/configuration/configure_audio.h b/src/yuzu/configuration/configure_audio.h index d84f4a682..9dbd3d93e 100644 --- a/src/yuzu/configuration/configure_audio.h +++ b/src/yuzu/configuration/configure_audio.h @@ -7,6 +7,10 @@  #include <memory>  #include <QWidget> +namespace ConfigurationShared { +enum class CheckState; +} +  namespace Ui {  class ConfigureAudio;  } @@ -37,4 +41,6 @@ private:      void SetupPerGameUI();      std::unique_ptr<Ui::ConfigureAudio> ui; + +    ConfigurationShared::CheckState enable_audio_stretching;  }; diff --git a/src/yuzu/configuration/configure_audio.ui b/src/yuzu/configuration/configure_audio.ui index 862ccb988..9bd0cca96 100644 --- a/src/yuzu/configuration/configure_audio.ui +++ b/src/yuzu/configuration/configure_audio.ui @@ -56,80 +56,91 @@         </layout>        </item>        <item> -       <layout class="QHBoxLayout" name="horizontalLayout_2"> -        <property name="topMargin"> -         <number>0</number> -        </property> -        <item> -         <widget class="QComboBox" name="volume_combo_box"> -          <item> +       <widget class="QWidget" name="volume_layout" native="true"> +        <layout class="QHBoxLayout" name="horizontalLayout_2"> +         <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> +         <item> +          <widget class="QComboBox" name="volume_combo_box"> +           <item> +            <property name="text"> +             <string>Use global volume</string> +            </property> +           </item> +           <item> +            <property name="text"> +             <string>Set volume:</string> +            </property> +           </item> +          </widget> +         </item> +         <item> +          <widget class="QLabel" name="volume_label">             <property name="text"> -            <string>Use global volume</string> +            <string>Volume:</string> +           </property> +          </widget> +         </item> +         <item> +          <spacer name="horizontalSpacer"> +           <property name="orientation"> +            <enum>Qt::Horizontal</enum> +           </property> +           <property name="sizeHint" stdset="0"> +            <size> +             <width>30</width> +             <height>20</height> +            </size> +           </property> +          </spacer> +         </item> +         <item> +          <widget class="QSlider" name="volume_slider"> +           <property name="sizePolicy"> +            <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> +             <horstretch>0</horstretch> +             <verstretch>0</verstretch> +            </sizepolicy> +           </property> +           <property name="maximum"> +            <number>100</number> +           </property> +           <property name="pageStep"> +            <number>10</number> +           </property> +           <property name="orientation"> +            <enum>Qt::Horizontal</enum> +           </property> +          </widget> +         </item> +         <item> +          <widget class="QLabel" name="volume_indicator"> +           <property name="minimumSize"> +            <size> +             <width>32</width> +             <height>0</height> +            </size>             </property> -          </item> -          <item>             <property name="text"> -            <string>Set volume:</string> +            <string>0 %</string>             </property> -          </item> -         </widget> -        </item> -        <item> -         <widget class="QLabel" name="volume_label"> -          <property name="text"> -           <string>Volume:</string> -          </property> -         </widget> -        </item> -        <item> -         <spacer name="horizontalSpacer"> -          <property name="orientation"> -           <enum>Qt::Horizontal</enum> -          </property> -          <property name="sizeHint" stdset="0"> -           <size> -            <width>30</width> -            <height>20</height> -           </size> -          </property> -         </spacer> -        </item> -        <item> -         <widget class="QSlider" name="volume_slider"> -          <property name="sizePolicy"> -           <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -          <property name="maximum"> -           <number>100</number> -          </property> -          <property name="pageStep"> -           <number>10</number> -          </property> -          <property name="orientation"> -           <enum>Qt::Horizontal</enum> -          </property> -         </widget> -        </item> -        <item> -         <widget class="QLabel" name="volume_indicator"> -          <property name="minimumSize"> -           <size> -            <width>32</width> -            <height>0</height> -           </size> -          </property> -          <property name="text"> -           <string>0 %</string> -          </property> -          <property name="alignment"> -           <set>Qt::AlignCenter</set> -          </property> -         </widget> -        </item> -       </layout> +           <property name="alignment"> +            <set>Qt::AlignCenter</set> +           </property> +          </widget> +         </item> +        </layout> +       </widget>        </item>       </layout>      </widget> diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp index 20316c9cc..c0dbd9855 100644 --- a/src/yuzu/configuration/configure_general.cpp +++ b/src/yuzu/configuration/configure_general.cpp @@ -19,9 +19,10 @@ ConfigureGeneral::ConfigureGeneral(QWidget* parent)      SetConfiguration(); -    connect(ui->toggle_frame_limit, &QCheckBox::stateChanged, ui->frame_limit, [this]() { -        ui->frame_limit->setEnabled(ui->toggle_frame_limit->checkState() == Qt::Checked); -    }); +    if (Settings::configuring_global) { +        connect(ui->toggle_frame_limit, &QCheckBox::clicked, ui->frame_limit, +                [this]() { ui->frame_limit->setEnabled(ui->toggle_frame_limit->isChecked()); }); +    }  }  ConfigureGeneral::~ConfigureGeneral() = default; @@ -40,17 +41,12 @@ void ConfigureGeneral::SetConfiguration() {      ui->toggle_frame_limit->setChecked(Settings::values.use_frame_limit.GetValue());      ui->frame_limit->setValue(Settings::values.frame_limit.GetValue()); -    if (!Settings::configuring_global) { -        if (Settings::values.use_multi_core.UsingGlobal()) { -            ui->use_multi_core->setCheckState(Qt::PartiallyChecked); -        } -        if (Settings::values.use_frame_limit.UsingGlobal()) { -            ui->toggle_frame_limit->setCheckState(Qt::PartiallyChecked); -        } +    if (Settings::configuring_global) { +        ui->frame_limit->setEnabled(Settings::values.use_frame_limit.GetValue()); +    } else { +        ui->frame_limit->setEnabled(Settings::values.use_frame_limit.GetValue() && +                                    use_frame_limit != ConfigurationShared::CheckState::Global);      } - -    ui->frame_limit->setEnabled(ui->toggle_frame_limit->checkState() == Qt::Checked && -                                ui->toggle_frame_limit->isEnabled());  }  void ConfigureGeneral::ApplyConfiguration() { @@ -71,9 +67,9 @@ void ConfigureGeneral::ApplyConfiguration() {          }      } else {          ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_multi_core, -                                                 ui->use_multi_core); +                                                 ui->use_multi_core, use_multi_core); -        bool global_frame_limit = ui->toggle_frame_limit->checkState() == Qt::PartiallyChecked; +        bool global_frame_limit = use_frame_limit == ConfigurationShared::CheckState::Global;          Settings::values.use_frame_limit.SetGlobal(global_frame_limit);          Settings::values.frame_limit.SetGlobal(global_frame_limit);          if (!global_frame_limit) { @@ -109,6 +105,13 @@ void ConfigureGeneral::SetupPerGameUI() {      ui->toggle_background_pause->setVisible(false);      ui->toggle_hide_mouse->setVisible(false); -    ui->toggle_frame_limit->setTristate(true); -    ui->use_multi_core->setTristate(true); +    ConfigurationShared::SetColoredTristate(ui->toggle_frame_limit, "toggle_frame_limit", +                                            Settings::values.use_frame_limit, use_frame_limit); +    ConfigurationShared::SetColoredTristate(ui->use_multi_core, "use_multi_core", +                                            Settings::values.use_multi_core, use_multi_core); + +    connect(ui->toggle_frame_limit, &QCheckBox::clicked, ui->frame_limit, [this]() { +        ui->frame_limit->setEnabled(ui->toggle_frame_limit->isChecked() && +                                    (use_frame_limit != ConfigurationShared::CheckState::Global)); +    });  } diff --git a/src/yuzu/configuration/configure_general.h b/src/yuzu/configuration/configure_general.h index 9c785c22e..323ffbd8f 100644 --- a/src/yuzu/configuration/configure_general.h +++ b/src/yuzu/configuration/configure_general.h @@ -7,6 +7,10 @@  #include <memory>  #include <QWidget> +namespace ConfigurationShared { +enum class CheckState; +} +  class HotkeyRegistry;  namespace Ui { @@ -31,4 +35,7 @@ private:      void SetupPerGameUI();      std::unique_ptr<Ui::ConfigureGeneral> ui; + +    ConfigurationShared::CheckState use_frame_limit; +    ConfigurationShared::CheckState use_multi_core;  }; diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp index cb4706bd6..3e42531c3 100644 --- a/src/yuzu/configuration/configure_graphics.cpp +++ b/src/yuzu/configuration/configure_graphics.cpp @@ -31,8 +31,14 @@ ConfigureGraphics::ConfigureGraphics(QWidget* parent)      SetConfiguration(); -    connect(ui->api, qOverload<int>(&QComboBox::currentIndexChanged), this, -            [this] { UpdateDeviceComboBox(); }); +    connect(ui->api, qOverload<int>(&QComboBox::currentIndexChanged), this, [this] { +        UpdateDeviceComboBox(); +        if (!Settings::configuring_global) { +            ConfigurationShared::SetHighlight(ui->api_layout, "api_layout", +                                              ui->api->currentIndex() != +                                                  ConfigurationShared::USE_GLOBAL_INDEX); +        } +    });      connect(ui->device, qOverload<int>(&QComboBox::activated), this,              [this](int device) { UpdateDeviceSelection(device); }); @@ -65,25 +71,26 @@ void ConfigureGraphics::SetConfiguration() {      ui->api->setEnabled(runtime_lock);      ui->use_asynchronous_gpu_emulation->setEnabled(runtime_lock);      ui->use_disk_shader_cache->setEnabled(runtime_lock); +    ui->use_disk_shader_cache->setChecked(Settings::values.use_disk_shader_cache.GetValue()); +    ui->use_asynchronous_gpu_emulation->setChecked( +        Settings::values.use_asynchronous_gpu_emulation.GetValue());      if (Settings::configuring_global) {          ui->api->setCurrentIndex(static_cast<int>(Settings::values.renderer_backend.GetValue()));          ui->aspect_ratio_combobox->setCurrentIndex(Settings::values.aspect_ratio.GetValue()); -        ui->use_disk_shader_cache->setChecked(Settings::values.use_disk_shader_cache.GetValue()); -        ui->use_asynchronous_gpu_emulation->setChecked( -            Settings::values.use_asynchronous_gpu_emulation.GetValue());      } else { -        ConfigurationShared::SetPerGameSetting(ui->use_disk_shader_cache, -                                               &Settings::values.use_disk_shader_cache); -        ConfigurationShared::SetPerGameSetting(ui->use_asynchronous_gpu_emulation, -                                               &Settings::values.use_asynchronous_gpu_emulation); -          ConfigurationShared::SetPerGameSetting(ui->api, &Settings::values.renderer_backend); +        ConfigurationShared::SetHighlight(ui->api_layout, "api_layout", +                                          !Settings::values.renderer_backend.UsingGlobal());          ConfigurationShared::SetPerGameSetting(ui->aspect_ratio_combobox,                                                 &Settings::values.aspect_ratio);          ui->bg_combobox->setCurrentIndex(Settings::values.bg_red.UsingGlobal() ? 0 : 1);          ui->bg_button->setEnabled(!Settings::values.bg_red.UsingGlobal()); +        ConfigurationShared::SetHighlight(ui->ar_label, "ar_label", +                                          !Settings::values.aspect_ratio.UsingGlobal()); +        ConfigurationShared::SetHighlight(ui->bg_layout, "bg_layout", +                                          !Settings::values.bg_red.UsingGlobal());      }      UpdateBackgroundColorButton(QColor::fromRgbF(Settings::values.bg_red.GetValue(), @@ -135,9 +142,10 @@ void ConfigureGraphics::ApplyConfiguration() {                                                   ui->aspect_ratio_combobox);          ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_disk_shader_cache, -                                                 ui->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); +                                                 ui->use_asynchronous_gpu_emulation, +                                                 use_asynchronous_gpu_emulation);          if (ui->bg_combobox->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) {              Settings::values.bg_red.SetGlobal(true); @@ -241,10 +249,20 @@ void ConfigureGraphics::SetupPerGameUI() {      }      connect(ui->bg_combobox, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, -            [this](int index) { ui->bg_button->setEnabled(index == 1); }); - -    ui->use_disk_shader_cache->setTristate(true); -    ui->use_asynchronous_gpu_emulation->setTristate(true); -    ConfigurationShared::InsertGlobalItem(ui->aspect_ratio_combobox); -    ConfigurationShared::InsertGlobalItem(ui->api); +            [this](int index) { +                ui->bg_button->setEnabled(index == 1); +                ConfigurationShared::SetHighlight(ui->bg_layout, "bg_layout", index == 1); +            }); + +    ConfigurationShared::SetColoredTristate(ui->use_disk_shader_cache, "use_disk_shader_cache", +                                            Settings::values.use_disk_shader_cache, +                                            use_disk_shader_cache); +    ConfigurationShared::SetColoredTristate( +        ui->use_asynchronous_gpu_emulation, "use_asynchronous_gpu_emulation", +        Settings::values.use_asynchronous_gpu_emulation, use_asynchronous_gpu_emulation); + +    ConfigurationShared::SetColoredComboBox(ui->aspect_ratio_combobox, ui->ar_label, "ar_label", +                                            Settings::values.aspect_ratio.GetValue(true)); +    ConfigurationShared::InsertGlobalItem( +        ui->api, static_cast<int>(Settings::values.renderer_backend.GetValue(true)));  } diff --git a/src/yuzu/configuration/configure_graphics.h b/src/yuzu/configuration/configure_graphics.h index 24f01c739..b4961f719 100644 --- a/src/yuzu/configuration/configure_graphics.h +++ b/src/yuzu/configuration/configure_graphics.h @@ -10,6 +10,10 @@  #include <QWidget>  #include "core/settings.h" +namespace ConfigurationShared { +enum class CheckState; +} +  namespace Ui {  class ConfigureGraphics;  } @@ -42,6 +46,9 @@ private:      std::unique_ptr<Ui::ConfigureGraphics> ui;      QColor bg_color; +    ConfigurationShared::CheckState use_disk_shader_cache; +    ConfigurationShared::CheckState use_asynchronous_gpu_emulation; +      std::vector<QString> vulkan_devices;      u32 vulkan_device{};  }; diff --git a/src/yuzu/configuration/configure_graphics.ui b/src/yuzu/configuration/configure_graphics.ui index 62418fc14..62aa337e7 100644 --- a/src/yuzu/configuration/configure_graphics.ui +++ b/src/yuzu/configuration/configure_graphics.ui @@ -6,7 +6,7 @@     <rect>      <x>0</x>      <y>0</y> -    <width>400</width> +    <width>437</width>      <height>321</height>     </rect>    </property> @@ -23,43 +23,56 @@         </property>         <layout class="QVBoxLayout" name="verticalLayout_3">          <item> -         <layout class="QHBoxLayout" name="horizontalLayout_4"> -          <item> -           <widget class="QLabel" name="label_2"> -            <property name="text"> -             <string>API:</string> -            </property> -           </widget> -          </item> -          <item> -           <widget class="QComboBox" name="api"> -            <item> +         <widget class="QWidget" name="api_layout" native="true"> +          <layout class="QGridLayout" name="gridLayout"> +           <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> +           <property name="horizontalSpacing"> +            <number>6</number> +           </property> +           <item row="0" column="0"> +            <widget class="QLabel" name="api_label">               <property name="text"> -              <string notr="true">OpenGL</string> +              <string>API:</string>               </property> -            </item> -            <item> +            </widget> +           </item> +           <item row="0" column="1"> +            <widget class="QComboBox" name="api"> +             <item> +              <property name="text"> +               <string notr="true">OpenGL</string> +              </property> +             </item> +             <item> +              <property name="text"> +               <string notr="true">Vulkan</string> +              </property> +             </item> +            </widget> +           </item> +           <item row="1" column="0"> +            <widget class="QLabel" name="device_label">               <property name="text"> -              <string notr="true">Vulkan</string> +              <string>Device:</string>               </property> -            </item> -           </widget> -          </item> -         </layout> -        </item> -        <item> -         <layout class="QHBoxLayout" name="horizontalLayout_5"> -          <item> -           <widget class="QLabel" name="label_3"> -            <property name="text"> -             <string>Device:</string> -            </property> -           </widget> -          </item> -          <item> -           <widget class="QComboBox" name="device"/> -          </item> -         </layout> +            </widget> +           </item> +           <item row="1" column="1"> +            <widget class="QComboBox" name="device"/> +           </item> +          </layout> +         </widget>          </item>         </layout>        </widget> @@ -85,96 +98,133 @@           </widget>          </item>          <item> -         <layout class="QHBoxLayout" name="horizontalLayout_6"> -          <item> -           <widget class="QLabel" name="ar_label"> -            <property name="text"> -             <string>Aspect Ratio:</string> -            </property> -           </widget> -          </item> -          <item> -           <widget class="QComboBox" name="aspect_ratio_combobox"> -            <item> -             <property name="text"> -              <string>Default (16:9)</string> -             </property> -            </item> -            <item> -             <property name="text"> -              <string>Force 4:3</string> -             </property> -            </item> -            <item> -             <property name="text"> -              <string>Force 21:9</string> -             </property> -            </item> -            <item> +         <widget class="QWidget" name="aspect_ratio_layout" native="true"> +          <layout class="QHBoxLayout" name="horizontalLayout_6"> +           <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> +           <item> +            <widget class="QLabel" name="ar_label">               <property name="text"> -              <string>Stretch to Window</string> +              <string>Aspect Ratio:</string>               </property> -            </item> -           </widget> -          </item> -         </layout> +            </widget> +           </item> +           <item> +            <widget class="QComboBox" name="aspect_ratio_combobox"> +             <item> +              <property name="text"> +               <string>Default (16:9)</string> +              </property> +             </item> +             <item> +              <property name="text"> +               <string>Force 4:3</string> +              </property> +             </item> +             <item> +              <property name="text"> +               <string>Force 21:9</string> +              </property> +             </item> +             <item> +              <property name="text"> +               <string>Stretch to Window</string> +              </property> +             </item> +            </widget> +           </item> +          </layout> +         </widget>          </item>          <item> -         <layout class="QHBoxLayout" name="horizontalLayout_3"> -          <item> -           <widget class="QComboBox" name="bg_combobox"> -            <property name="currentText"> -             <string>Use global background color</string> -            </property> -            <property name="currentIndex"> -             <number>0</number> -            </property> -            <property name="maxVisibleItems"> -             <number>10</number> -            </property> -            <item> -             <property name="text"> +         <widget class="QWidget" name="bg_layout" native="true"> +          <property name="sizePolicy"> +           <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +            <horstretch>0</horstretch> +            <verstretch>0</verstretch> +           </sizepolicy> +          </property> +          <layout class="QHBoxLayout" name="horizontalLayout_3"> +           <property name="spacing"> +            <number>6</number> +           </property> +           <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> +           <item> +            <widget class="QComboBox" name="bg_combobox"> +             <property name="currentText">                <string>Use global background color</string>               </property> -            </item> -            <item> +             <property name="currentIndex"> +              <number>0</number> +             </property> +             <property name="maxVisibleItems"> +              <number>10</number> +             </property> +             <item> +              <property name="text"> +               <string>Use global background color</string> +              </property> +             </item> +             <item> +              <property name="text"> +               <string>Set background color:</string> +              </property> +             </item> +            </widget> +           </item> +           <item> +            <widget class="QLabel" name="bg_label">               <property name="text"> -              <string>Set background color:</string> +              <string>Background Color:</string>               </property> -            </item> -           </widget> -          </item> -          <item> -           <widget class="QLabel" name="bg_label"> -            <property name="text"> -             <string>Background Color:</string> -            </property> -           </widget> -          </item> -          <item> -           <spacer name="horizontalSpacer"> -            <property name="orientation"> -             <enum>Qt::Horizontal</enum> -            </property> -            <property name="sizeHint" stdset="0"> -             <size> -              <width>40</width> -              <height>20</height> -             </size> -            </property> -           </spacer> -          </item> -          <item> -           <widget class="QPushButton" name="bg_button"> -            <property name="maximumSize"> -             <size> -              <width>40</width> -              <height>16777215</height> -             </size> -            </property> -           </widget> -          </item> -         </layout> +            </widget> +           </item> +           <item> +            <spacer name="horizontalSpacer"> +             <property name="orientation"> +              <enum>Qt::Horizontal</enum> +             </property> +             <property name="sizeHint" stdset="0"> +              <size> +               <width>40</width> +               <height>20</height> +              </size> +             </property> +            </spacer> +           </item> +           <item> +            <widget class="QPushButton" name="bg_button"> +             <property name="maximumSize"> +              <size> +               <width>40</width> +               <height>16777215</height> +              </size> +             </property> +            </widget> +           </item> +          </layout> +         </widget>          </item>         </layout>        </widget> diff --git a/src/yuzu/configuration/configure_graphics_advanced.cpp b/src/yuzu/configuration/configure_graphics_advanced.cpp index ce30188cd..8b9180811 100644 --- a/src/yuzu/configuration/configure_graphics_advanced.cpp +++ b/src/yuzu/configuration/configure_graphics_advanced.cpp @@ -28,32 +28,25 @@ void ConfigureGraphicsAdvanced::SetConfiguration() {      ui->force_30fps_mode->setEnabled(runtime_lock);      ui->anisotropic_filtering_combobox->setEnabled(runtime_lock); +    ui->use_vsync->setChecked(Settings::values.use_vsync.GetValue()); +    ui->use_assembly_shaders->setChecked(Settings::values.use_assembly_shaders.GetValue()); +    ui->use_asynchronous_shaders->setChecked(Settings::values.use_asynchronous_shaders.GetValue()); +    ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time.GetValue()); +    ui->force_30fps_mode->setChecked(Settings::values.force_30fps_mode.GetValue()); +      if (Settings::configuring_global) {          ui->gpu_accuracy->setCurrentIndex(              static_cast<int>(Settings::values.gpu_accuracy.GetValue())); -        ui->use_vsync->setChecked(Settings::values.use_vsync.GetValue()); -        ui->use_assembly_shaders->setChecked(Settings::values.use_assembly_shaders.GetValue()); -        ui->use_asynchronous_shaders->setChecked( -            Settings::values.use_asynchronous_shaders.GetValue()); -        ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time.GetValue()); -        ui->force_30fps_mode->setChecked(Settings::values.force_30fps_mode.GetValue());          ui->anisotropic_filtering_combobox->setCurrentIndex(              Settings::values.max_anisotropy.GetValue());      } else {          ConfigurationShared::SetPerGameSetting(ui->gpu_accuracy, &Settings::values.gpu_accuracy); -        ConfigurationShared::SetPerGameSetting(ui->use_vsync, &Settings::values.use_vsync); -        ConfigurationShared::SetPerGameSetting(ui->use_assembly_shaders, -                                               &Settings::values.use_assembly_shaders); -        ConfigurationShared::SetPerGameSetting(ui->use_asynchronous_shaders, -                                               &Settings::values.use_asynchronous_shaders); -        ConfigurationShared::SetPerGameSetting(ui->use_asynchronous_shaders, -                                               &Settings::values.use_asynchronous_shaders); -        ConfigurationShared::SetPerGameSetting(ui->use_fast_gpu_time, -                                               &Settings::values.use_fast_gpu_time); -        ConfigurationShared::SetPerGameSetting(ui->force_30fps_mode, -                                               &Settings::values.force_30fps_mode);          ConfigurationShared::SetPerGameSetting(ui->anisotropic_filtering_combobox,                                                 &Settings::values.max_anisotropy); +        ConfigurationShared::SetHighlight(ui->label_gpu_accuracy, "label_gpu_accuracy", +                                          !Settings::values.gpu_accuracy.UsingGlobal()); +        ConfigurationShared::SetHighlight(ui->af_label, "af_label", +                                          !Settings::values.max_anisotropy.UsingGlobal());      }  } @@ -95,17 +88,17 @@ void ConfigureGraphicsAdvanced::ApplyConfiguration() {      } else {          ConfigurationShared::ApplyPerGameSetting(&Settings::values.max_anisotropy,                                                   ui->anisotropic_filtering_combobox); -        ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_vsync, ui->use_vsync); +        ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_vsync, ui->use_vsync, +                                                 use_vsync);          ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_assembly_shaders, -                                                 ui->use_assembly_shaders); -        ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_shaders, -                                                 ui->use_asynchronous_shaders); +                                                 ui->use_assembly_shaders, use_assembly_shaders);          ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_shaders, -                                                 ui->use_asynchronous_shaders); +                                                 ui->use_asynchronous_shaders, +                                                 use_asynchronous_shaders);          ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_fast_gpu_time, -                                                 ui->use_fast_gpu_time); +                                                 ui->use_fast_gpu_time, use_fast_gpu_time);          ConfigurationShared::ApplyPerGameSetting(&Settings::values.force_30fps_mode, -                                                 ui->force_30fps_mode); +                                                 ui->force_30fps_mode, force_30fps_mode);          ConfigurationShared::ApplyPerGameSetting(&Settings::values.max_anisotropy,                                                   ui->anisotropic_filtering_combobox); @@ -146,11 +139,22 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() {          return;      } -    ConfigurationShared::InsertGlobalItem(ui->gpu_accuracy); -    ui->use_vsync->setTristate(true); -    ui->use_assembly_shaders->setTristate(true); -    ui->use_asynchronous_shaders->setTristate(true); -    ui->use_fast_gpu_time->setTristate(true); -    ui->force_30fps_mode->setTristate(true); -    ConfigurationShared::InsertGlobalItem(ui->anisotropic_filtering_combobox); +    ConfigurationShared::SetColoredTristate(ui->use_vsync, "use_vsync", Settings::values.use_vsync, +                                            use_vsync); +    ConfigurationShared::SetColoredTristate(ui->use_assembly_shaders, "use_assembly_shaders", +                                            Settings::values.use_assembly_shaders, +                                            use_assembly_shaders); +    ConfigurationShared::SetColoredTristate( +        ui->use_asynchronous_shaders, "use_asynchronous_shaders", +        Settings::values.use_asynchronous_shaders, use_asynchronous_shaders); +    ConfigurationShared::SetColoredTristate(ui->use_fast_gpu_time, "use_fast_gpu_time", +                                            Settings::values.use_fast_gpu_time, use_fast_gpu_time); +    ConfigurationShared::SetColoredTristate(ui->force_30fps_mode, "force_30fps_mode", +                                            Settings::values.force_30fps_mode, force_30fps_mode); +    ConfigurationShared::SetColoredComboBox( +        ui->gpu_accuracy, ui->label_gpu_accuracy, "label_gpu_accuracy", +        static_cast<int>(Settings::values.gpu_accuracy.GetValue(true))); +    ConfigurationShared::SetColoredComboBox( +        ui->anisotropic_filtering_combobox, ui->af_label, "af_label", +        static_cast<int>(Settings::values.max_anisotropy.GetValue(true)));  } diff --git a/src/yuzu/configuration/configure_graphics_advanced.h b/src/yuzu/configuration/configure_graphics_advanced.h index c043588ff..3c4f6f7bb 100644 --- a/src/yuzu/configuration/configure_graphics_advanced.h +++ b/src/yuzu/configuration/configure_graphics_advanced.h @@ -7,6 +7,10 @@  #include <memory>  #include <QWidget> +namespace ConfigurationShared { +enum class CheckState; +} +  namespace Ui {  class ConfigureGraphicsAdvanced;  } @@ -29,4 +33,10 @@ private:      void SetupPerGameUI();      std::unique_ptr<Ui::ConfigureGraphicsAdvanced> ui; + +    ConfigurationShared::CheckState use_vsync; +    ConfigurationShared::CheckState use_assembly_shaders; +    ConfigurationShared::CheckState use_asynchronous_shaders; +    ConfigurationShared::CheckState use_fast_gpu_time; +    ConfigurationShared::CheckState force_30fps_mode;  }; diff --git a/src/yuzu/configuration/configure_graphics_advanced.ui b/src/yuzu/configuration/configure_graphics_advanced.ui index 71e7dfe5e..6a0d29c27 100644 --- a/src/yuzu/configuration/configure_graphics_advanced.ui +++ b/src/yuzu/configuration/configure_graphics_advanced.ui @@ -6,7 +6,7 @@     <rect>      <x>0</x>      <y>0</y> -    <width>400</width> +    <width>404</width>      <height>321</height>     </rect>    </property> @@ -23,34 +23,48 @@         </property>         <layout class="QVBoxLayout" name="verticalLayout_3">          <item> -         <layout class="QHBoxLayout" name="horizontalLayout_2"> -          <item> -           <widget class="QLabel" name="label_gpu_accuracy"> -            <property name="text"> -             <string>Accuracy Level:</string> -            </property> -           </widget> -          </item> -          <item> -           <widget class="QComboBox" name="gpu_accuracy"> -            <item> +         <widget class="QWidget" name="gpu_accuracy_layout" native="true"> +          <layout class="QHBoxLayout" name="horizontalLayout_2"> +           <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> +           <item> +            <widget class="QLabel" name="label_gpu_accuracy">               <property name="text"> -              <string notr="true">Normal</string> +              <string>Accuracy Level:</string>               </property> -            </item> -            <item> -             <property name="text"> -              <string notr="true">High</string> -             </property> -            </item> -            <item> -             <property name="text"> -              <string notr="true">Extreme(very slow)</string> -             </property> -            </item> -           </widget> -          </item> -         </layout> +            </widget> +           </item> +           <item> +            <widget class="QComboBox" name="gpu_accuracy"> +             <item> +              <property name="text"> +               <string notr="true">Normal</string> +              </property> +             </item> +             <item> +              <property name="text"> +               <string notr="true">High</string> +              </property> +             </item> +             <item> +              <property name="text"> +               <string notr="true">Extreme(very slow)</string> +              </property> +             </item> +            </widget> +           </item> +          </layout> +         </widget>          </item>          <item>           <widget class="QCheckBox" name="use_vsync"> @@ -97,44 +111,58 @@           </widget>          </item>          <item> -         <layout class="QHBoxLayout" name="horizontalLayout_1"> -          <item> -           <widget class="QLabel" name="af_label"> -            <property name="text"> -             <string>Anisotropic Filtering:</string> -            </property> -           </widget> -          </item> -          <item> -           <widget class="QComboBox" name="anisotropic_filtering_combobox"> -            <item> -             <property name="text"> -              <string>Default</string> -             </property> -            </item> -            <item> +         <widget class="QWidget" name="af_layout" native="true"> +          <layout class="QHBoxLayout" name="horizontalLayout_1"> +           <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> +           <item> +            <widget class="QLabel" name="af_label">               <property name="text"> -              <string>2x</string> +              <string>Anisotropic Filtering:</string>               </property> -            </item> -            <item> -             <property name="text"> -              <string>4x</string> -             </property> -            </item> -            <item> -             <property name="text"> -              <string>8x</string> -             </property> -            </item> -            <item> -             <property name="text"> -              <string>16x</string> -             </property> -            </item> -           </widget> -          </item> -         </layout> +            </widget> +           </item> +           <item> +            <widget class="QComboBox" name="anisotropic_filtering_combobox"> +             <item> +              <property name="text"> +               <string>Default</string> +              </property> +             </item> +             <item> +              <property name="text"> +               <string>2x</string> +              </property> +             </item> +             <item> +              <property name="text"> +               <string>4x</string> +              </property> +             </item> +             <item> +              <property name="text"> +               <string>8x</string> +              </property> +             </item> +             <item> +              <property name="text"> +               <string>16x</string> +              </property> +             </item> +            </widget> +           </item> +          </layout> +         </widget>          </item>         </layout>        </widget> diff --git a/src/yuzu/configuration/configure_system.cpp b/src/yuzu/configuration/configure_system.cpp index 68e02738b..0c4daf147 100644 --- a/src/yuzu/configuration/configure_system.cpp +++ b/src/yuzu/configuration/configure_system.cpp @@ -67,21 +67,21 @@ void ConfigureSystem::SetConfiguration() {      const auto rtc_time = Settings::values.custom_rtc.GetValue().value_or(          std::chrono::seconds(QDateTime::currentSecsSinceEpoch())); +    ui->rng_seed_checkbox->setChecked(Settings::values.rng_seed.GetValue().has_value()); +    ui->rng_seed_edit->setEnabled(Settings::values.rng_seed.GetValue().has_value() && +                                  Settings::values.rng_seed.UsingGlobal()); +    ui->rng_seed_edit->setText(rng_seed); + +    ui->custom_rtc_checkbox->setChecked(Settings::values.custom_rtc.GetValue().has_value()); +    ui->custom_rtc_edit->setEnabled(Settings::values.custom_rtc.GetValue().has_value() && +                                    Settings::values.rng_seed.UsingGlobal()); +    ui->custom_rtc_edit->setDateTime(QDateTime::fromSecsSinceEpoch(rtc_time.count())); +      if (Settings::configuring_global) {          ui->combo_language->setCurrentIndex(Settings::values.language_index.GetValue());          ui->combo_region->setCurrentIndex(Settings::values.region_index.GetValue());          ui->combo_time_zone->setCurrentIndex(Settings::values.time_zone_index.GetValue());          ui->combo_sound->setCurrentIndex(Settings::values.sound_index.GetValue()); - -        ui->rng_seed_checkbox->setChecked(Settings::values.rng_seed.GetValue().has_value()); -        ui->rng_seed_edit->setEnabled(Settings::values.rng_seed.GetValue().has_value() && -                                      Settings::values.rng_seed.UsingGlobal()); -        ui->rng_seed_edit->setText(rng_seed); - -        ui->custom_rtc_checkbox->setChecked(Settings::values.custom_rtc.GetValue().has_value()); -        ui->custom_rtc_edit->setEnabled(Settings::values.custom_rtc.GetValue().has_value() && -                                        Settings::values.rng_seed.UsingGlobal()); -        ui->custom_rtc_edit->setDateTime(QDateTime::fromSecsSinceEpoch(rtc_time.count()));      } else {          ConfigurationShared::SetPerGameSetting(ui->combo_language,                                                 &Settings::values.language_index); @@ -90,27 +90,14 @@ void ConfigureSystem::SetConfiguration() {                                                 &Settings::values.time_zone_index);          ConfigurationShared::SetPerGameSetting(ui->combo_sound, &Settings::values.sound_index); -        if (Settings::values.rng_seed.UsingGlobal()) { -            ui->rng_seed_checkbox->setCheckState(Qt::PartiallyChecked); -        } else { -            ui->rng_seed_checkbox->setCheckState( -                Settings::values.rng_seed.GetValue().has_value() ? Qt::Checked : Qt::Unchecked); -            ui->rng_seed_edit->setEnabled(Settings::values.rng_seed.GetValue().has_value()); -            if (Settings::values.rng_seed.GetValue().has_value()) { -                ui->rng_seed_edit->setText(rng_seed); -            } -        } - -        if (Settings::values.custom_rtc.UsingGlobal()) { -            ui->custom_rtc_checkbox->setCheckState(Qt::PartiallyChecked); -        } else { -            ui->custom_rtc_checkbox->setCheckState( -                Settings::values.custom_rtc.GetValue().has_value() ? Qt::Checked : Qt::Unchecked); -            ui->custom_rtc_edit->setEnabled(Settings::values.custom_rtc.GetValue().has_value()); -            if (Settings::values.custom_rtc.GetValue().has_value()) { -                ui->custom_rtc_edit->setDateTime(QDateTime::fromSecsSinceEpoch(rtc_time.count())); -            } -        } +        ConfigurationShared::SetHighlight(ui->label_language, "label_language", +                                          !Settings::values.language_index.UsingGlobal()); +        ConfigurationShared::SetHighlight(ui->label_region, "label_region", +                                          !Settings::values.region_index.UsingGlobal()); +        ConfigurationShared::SetHighlight(ui->label_timezone, "label_timezone", +                                          !Settings::values.time_zone_index.UsingGlobal()); +        ConfigurationShared::SetHighlight(ui->label_sound, "label_sound", +                                          !Settings::values.sound_index.UsingGlobal());      }  } @@ -161,37 +148,44 @@ void ConfigureSystem::ApplyConfiguration() {                                                   ui->combo_time_zone);          ConfigurationShared::ApplyPerGameSetting(&Settings::values.sound_index, ui->combo_sound); -        switch (ui->rng_seed_checkbox->checkState()) { -        case Qt::Checked: -            Settings::values.rng_seed.SetGlobal(false); -            Settings::values.rng_seed.SetValue(ui->rng_seed_edit->text().toULongLong(nullptr, 16)); -            break; -        case Qt::Unchecked: +        switch (use_rng_seed) { +        case ConfigurationShared::CheckState::On: +        case ConfigurationShared::CheckState::Off:              Settings::values.rng_seed.SetGlobal(false); -            Settings::values.rng_seed.SetValue(std::nullopt); +            if (ui->rng_seed_checkbox->isChecked()) { +                Settings::values.rng_seed.SetValue( +                    ui->rng_seed_edit->text().toULongLong(nullptr, 16)); +            } else { +                Settings::values.rng_seed.SetValue(std::nullopt); +            }              break; -        case Qt::PartiallyChecked: +        case ConfigurationShared::CheckState::Global:              Settings::values.rng_seed.SetGlobal(false);              Settings::values.rng_seed.SetValue(std::nullopt);              Settings::values.rng_seed.SetGlobal(true);              break; +        case ConfigurationShared::CheckState::Count: +            break;          } -        switch (ui->custom_rtc_checkbox->checkState()) { -        case Qt::Checked: -            Settings::values.custom_rtc.SetGlobal(false); -            Settings::values.custom_rtc.SetValue( -                std::chrono::seconds(ui->custom_rtc_edit->dateTime().toSecsSinceEpoch())); -            break; -        case Qt::Unchecked: +        switch (use_custom_rtc) { +        case ConfigurationShared::CheckState::On: +        case ConfigurationShared::CheckState::Off:              Settings::values.custom_rtc.SetGlobal(false); -            Settings::values.custom_rtc.SetValue(std::nullopt); +            if (ui->custom_rtc_checkbox->isChecked()) { +                Settings::values.custom_rtc.SetValue( +                    std::chrono::seconds(ui->custom_rtc_edit->dateTime().toSecsSinceEpoch())); +            } else { +                Settings::values.custom_rtc.SetValue(std::nullopt); +            }              break; -        case Qt::PartiallyChecked: +        case ConfigurationShared::CheckState::Global:              Settings::values.custom_rtc.SetGlobal(false);              Settings::values.custom_rtc.SetValue(std::nullopt);              Settings::values.custom_rtc.SetGlobal(true);              break; +        case ConfigurationShared::CheckState::Count: +            break;          }      } @@ -229,10 +223,23 @@ void ConfigureSystem::SetupPerGameUI() {          return;      } -    ConfigurationShared::InsertGlobalItem(ui->combo_language); -    ConfigurationShared::InsertGlobalItem(ui->combo_region); -    ConfigurationShared::InsertGlobalItem(ui->combo_time_zone); -    ConfigurationShared::InsertGlobalItem(ui->combo_sound); -    ui->rng_seed_checkbox->setTristate(true); -    ui->custom_rtc_checkbox->setTristate(true); +    ConfigurationShared::SetColoredComboBox(ui->combo_language, ui->label_language, +                                            "label_language", +                                            Settings::values.language_index.GetValue(true)); +    ConfigurationShared::SetColoredComboBox(ui->combo_region, ui->label_region, "label_region", +                                            Settings::values.region_index.GetValue(true)); +    ConfigurationShared::SetColoredComboBox(ui->combo_time_zone, ui->label_timezone, +                                            "label_timezone", +                                            Settings::values.time_zone_index.GetValue(true)); +    ConfigurationShared::SetColoredComboBox(ui->combo_sound, ui->label_sound, "label_sound", +                                            Settings::values.sound_index.GetValue(true)); + +    ConfigurationShared::SetColoredTristate( +        ui->rng_seed_checkbox, "rng_seed_checkbox", Settings::values.rng_seed.UsingGlobal(), +        Settings::values.rng_seed.GetValue().has_value(), +        Settings::values.rng_seed.GetValue(true).has_value(), use_rng_seed); +    ConfigurationShared::SetColoredTristate( +        ui->custom_rtc_checkbox, "custom_rtc_checkbox", Settings::values.custom_rtc.UsingGlobal(), +        Settings::values.custom_rtc.GetValue().has_value(), +        Settings::values.custom_rtc.GetValue(true).has_value(), use_custom_rtc);  } diff --git a/src/yuzu/configuration/configure_system.h b/src/yuzu/configuration/configure_system.h index f317ef8b5..fc5cd2945 100644 --- a/src/yuzu/configuration/configure_system.h +++ b/src/yuzu/configuration/configure_system.h @@ -9,6 +9,10 @@  #include <QList>  #include <QWidget> +namespace ConfigurationShared { +enum class CheckState; +} +  namespace Ui {  class ConfigureSystem;  } @@ -41,4 +45,7 @@ private:      int region_index = 0;      int time_zone_index = 0;      int sound_index = 0; + +    ConfigurationShared::CheckState use_rng_seed; +    ConfigurationShared::CheckState use_custom_rtc;  }; diff --git a/src/yuzu/configuration/configure_system.ui b/src/yuzu/configuration/configure_system.ui index 9c8cca6dc..53b95658b 100644 --- a/src/yuzu/configuration/configure_system.ui +++ b/src/yuzu/configuration/configure_system.ui @@ -21,490 +21,494 @@         <property name="title">          <string>System Settings</string>         </property> -       <layout class="QGridLayout" name="gridLayout"> -        <item row="3" column="0"> -         <widget class="QLabel" name="label_sound"> -          <property name="text"> -           <string>Sound output mode</string> -          </property> -         </widget> -        </item> -        <item row="4" column="0"> -         <widget class="QLabel" name="label_console_id"> -          <property name="text"> -           <string>Console ID:</string> -          </property> -         </widget> -        </item> -        <item row="0" column="1"> -         <widget class="QComboBox" name="combo_language"> -          <property name="toolTip"> -           <string>Note: this can be overridden when region setting is auto-select</string> -          </property> -          <item> -           <property name="text"> -            <string>Japanese (日本語)</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>English</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>French (français)</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>German (Deutsch)</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Italian (italiano)</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Spanish (español)</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Chinese</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Korean (한국어)</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Dutch (Nederlands)</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Portuguese (português)</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Russian (Русский)</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Taiwanese</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>British English</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Canadian French</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Latin American Spanish</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Simplified Chinese</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Traditional Chinese (正體中文)</string> -           </property> -          </item> -         </widget> -        </item> -        <item row="1" column="0"> -         <widget class="QLabel" name="label_region"> -          <property name="text"> -           <string>Region:</string> -          </property> -         </widget> -        </item> -        <item row="1" column="1"> -         <widget class="QComboBox" name="combo_region"> -          <item> -           <property name="text"> -            <string>Japan</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>USA</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Europe</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Australia</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>China</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Korea</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Taiwan</string> -           </property> -          </item> -         </widget> -        </item> -        <item row="2" column="0"> -         <widget class="QLabel" name="label_timezone"> -          <property name="text"> -           <string>Time Zone:</string> -          </property> -         </widget> -        </item> -        <item row="2" column="1"> -         <widget class="QComboBox" name="combo_time_zone"> -          <item> -           <property name="text"> -            <string>Auto</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Default</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>CET</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>CST6CDT</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Cuba</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>EET</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Egypt</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Eire</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>EST</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>EST5EDT</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>GB</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>GB-Eire</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>GMT</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>GMT+0</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>GMT-0</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>GMT0</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Greenwich</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Hongkong</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>HST</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Iceland</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Iran</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Israel</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Jamaica</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Japan</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Kwajalein</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Libya</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>MET</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>MST</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>MST7MDT</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Navajo</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>NZ</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>NZ-CHAT</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Poland</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Portugal</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>PRC</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>PST8PDT</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>ROC</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>ROK</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Singapore</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Turkey</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>UCT</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Universal</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>UTC</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>W-SU</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>WET</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Zulu</string> -           </property> -          </item> -         </widget> -        </item> -        <item row="6" column="0"> -         <widget class="QCheckBox" name="rng_seed_checkbox"> -          <property name="text"> -           <string>RNG Seed</string> -          </property> -         </widget> -        </item> -        <item row="3" column="1"> -         <widget class="QComboBox" name="combo_sound"> -          <item> -           <property name="text"> -            <string>Mono</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Stereo</string> -           </property> -          </item> -          <item> -           <property name="text"> -            <string>Surround</string> -           </property> -          </item> -         </widget> -        </item> -        <item row="0" column="0"> -         <widget class="QLabel" name="label_language"> -          <property name="text"> -           <string>Language</string> -          </property> -         </widget> -        </item> -        <item row="4" column="1"> -         <widget class="QPushButton" name="button_regenerate_console_id"> -          <property name="sizePolicy"> -           <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -          <property name="layoutDirection"> -           <enum>Qt::RightToLeft</enum> -          </property> -          <property name="text"> -           <string>Regenerate</string> -          </property> -         </widget> -        </item> -        <item row="5" column="0"> -         <widget class="QCheckBox" name="custom_rtc_checkbox"> -          <property name="text"> -           <string>Custom RTC</string> -          </property> -         </widget> -        </item> -        <item row="5" column="1"> -         <widget class="QDateTimeEdit" name="custom_rtc_edit"> -          <property name="minimumDate"> -           <date> -            <year>1970</year> -            <month>1</month> -            <day>1</day> -           </date> -          </property> -          <property name="displayFormat"> -           <string>d MMM yyyy h:mm:ss AP</string> -          </property> -         </widget> -        </item> -        <item row="6" column="1"> -         <widget class="QLineEdit" name="rng_seed_edit"> -          <property name="sizePolicy"> -           <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -          <property name="font"> -           <font> -            <family>Lucida Console</family> -           </font> -          </property> -          <property name="inputMask"> -           <string notr="true">HHHHHHHH</string> -          </property> -          <property name="maxLength"> -           <number>8</number> -          </property> -         </widget> +       <layout class="QVBoxLayout" name="verticalLayout_2"> +        <item> +         <layout class="QGridLayout" name="gridLayout_2"> +          <item row="1" column="0"> +           <widget class="QLabel" name="label_region"> +            <property name="text"> +             <string>Region:</string> +            </property> +           </widget> +          </item> +          <item row="2" column="1"> +           <widget class="QComboBox" name="combo_time_zone"> +            <item> +             <property name="text"> +              <string>Auto</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Default</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>CET</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>CST6CDT</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Cuba</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>EET</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Egypt</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Eire</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>EST</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>EST5EDT</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>GB</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>GB-Eire</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>GMT</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>GMT+0</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>GMT-0</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>GMT0</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Greenwich</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Hongkong</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>HST</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Iceland</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Iran</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Israel</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Jamaica</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Japan</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Kwajalein</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Libya</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>MET</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>MST</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>MST7MDT</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Navajo</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>NZ</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>NZ-CHAT</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Poland</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Portugal</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>PRC</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>PST8PDT</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>ROC</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>ROK</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Singapore</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Turkey</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>UCT</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Universal</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>UTC</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>W-SU</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>WET</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Zulu</string> +             </property> +            </item> +           </widget> +          </item> +          <item row="1" column="1"> +           <widget class="QComboBox" name="combo_region"> +            <item> +             <property name="text"> +              <string>Japan</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>USA</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Europe</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Australia</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>China</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Korea</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Taiwan</string> +             </property> +            </item> +           </widget> +          </item> +          <item row="2" column="0"> +           <widget class="QLabel" name="label_timezone"> +            <property name="text"> +             <string>Time Zone:</string> +            </property> +           </widget> +          </item> +          <item row="0" column="1"> +           <widget class="QComboBox" name="combo_language"> +            <property name="toolTip"> +             <string>Note: this can be overridden when region setting is auto-select</string> +            </property> +            <item> +             <property name="text"> +              <string>Japanese (日本語)</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>English</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>French (français)</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>German (Deutsch)</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Italian (italiano)</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Spanish (español)</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Chinese</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Korean (한국어)</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Dutch (Nederlands)</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Portuguese (português)</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Russian (Русский)</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Taiwanese</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>British English</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Canadian French</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Latin American Spanish</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Simplified Chinese</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Traditional Chinese (正體中文)</string> +             </property> +            </item> +           </widget> +          </item> +          <item row="5" column="0"> +           <widget class="QCheckBox" name="custom_rtc_checkbox"> +            <property name="text"> +             <string>Custom RTC</string> +            </property> +           </widget> +          </item> +          <item row="0" column="0"> +           <widget class="QLabel" name="label_language"> +            <property name="text"> +             <string>Language</string> +            </property> +           </widget> +          </item> +          <item row="6" column="0"> +           <widget class="QCheckBox" name="rng_seed_checkbox"> +            <property name="text"> +             <string>RNG Seed</string> +            </property> +           </widget> +          </item> +          <item row="3" column="1"> +           <widget class="QComboBox" name="combo_sound"> +            <item> +             <property name="text"> +              <string>Mono</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Stereo</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Surround</string> +             </property> +            </item> +           </widget> +          </item> +          <item row="4" column="0"> +           <widget class="QLabel" name="label_console_id"> +            <property name="text"> +             <string>Console ID:</string> +            </property> +           </widget> +          </item> +          <item row="3" column="0"> +           <widget class="QLabel" name="label_sound"> +            <property name="text"> +             <string>Sound output mode</string> +            </property> +           </widget> +          </item> +          <item row="5" column="1"> +           <widget class="QDateTimeEdit" name="custom_rtc_edit"> +            <property name="minimumDate"> +             <date> +              <year>1970</year> +              <month>1</month> +              <day>1</day> +             </date> +            </property> +            <property name="displayFormat"> +             <string>d MMM yyyy h:mm:ss AP</string> +            </property> +           </widget> +          </item> +          <item row="6" column="1"> +           <widget class="QLineEdit" name="rng_seed_edit"> +            <property name="sizePolicy"> +             <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +            <property name="font"> +             <font> +              <family>Lucida Console</family> +             </font> +            </property> +            <property name="inputMask"> +             <string notr="true">HHHHHHHH</string> +            </property> +            <property name="maxLength"> +             <number>8</number> +            </property> +           </widget> +          </item> +          <item row="4" column="1"> +           <widget class="QPushButton" name="button_regenerate_console_id"> +            <property name="sizePolicy"> +             <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +            <property name="layoutDirection"> +             <enum>Qt::RightToLeft</enum> +            </property> +            <property name="text"> +             <string>Regenerate</string> +            </property> +           </widget> +          </item> +         </layout>          </item>         </layout>        </widget> | 
