From a4a5d3ef798ac2eca6b1459630557e112cbbb170 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sun, 22 Mar 2020 13:16:32 +1000 Subject: [PATCH] Qt: Split some console settings out into general settings --- src/duckstation-qt/CMakeLists.txt | 3 + src/duckstation-qt/consolesettingswidget.cpp | 26 ---- src/duckstation-qt/consolesettingswidget.h | 2 - src/duckstation-qt/consolesettingswidget.ui | 97 ------------- src/duckstation-qt/duckstation-qt.vcxproj | 6 + src/duckstation-qt/generalsettingswidget.cpp | 39 +++++ src/duckstation-qt/generalsettingswidget.h | 25 ++++ src/duckstation-qt/generalsettingswidget.ui | 145 +++++++++++++++++++ src/duckstation-qt/mainwindow.cpp | 2 + src/duckstation-qt/mainwindow.ui | 10 ++ src/duckstation-qt/settingsdialog.cpp | 15 +- src/duckstation-qt/settingsdialog.h | 4 + src/duckstation-qt/settingsdialog.ui | 9 ++ 13 files changed, 252 insertions(+), 131 deletions(-) create mode 100644 src/duckstation-qt/generalsettingswidget.cpp create mode 100644 src/duckstation-qt/generalsettingswidget.h create mode 100644 src/duckstation-qt/generalsettingswidget.ui diff --git a/src/duckstation-qt/CMakeLists.txt b/src/duckstation-qt/CMakeLists.txt index 66f4d5b7e..12b6a0bfa 100644 --- a/src/duckstation-qt/CMakeLists.txt +++ b/src/duckstation-qt/CMakeLists.txt @@ -15,6 +15,9 @@ add_executable(duckstation-qt gamelistsettingswidget.ui gamelistwidget.cpp gamelistwidget.h + generalsettingswidget.cpp + generalsettingswidget.h + generalsettingswidget.ui gpusettingswidget.cpp gpusettingswidget.h gpusettingswidget.ui diff --git a/src/duckstation-qt/consolesettingswidget.cpp b/src/duckstation-qt/consolesettingswidget.cpp index 181a33a12..0f5bf0ce7 100644 --- a/src/duckstation-qt/consolesettingswidget.cpp +++ b/src/duckstation-qt/consolesettingswidget.cpp @@ -20,27 +20,11 @@ ConsoleSettingsWidget::ConsoleSettingsWidget(QtHostInterface* host_interface, QW SettingWidgetBinder::BindWidgetToStringSetting(m_host_interface, m_ui.biosPath, "BIOS/Path"); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.enableTTYOutput, "BIOS/PatchTTYEnable"); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.fastBoot, "BIOS/PatchFastBoot"); - SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.enableSpeedLimiter, "Main/SpeedLimiterEnabled"); - SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.increaseTimerResolution, - "Main/IncreaseTimerResolution"); - SettingWidgetBinder::BindWidgetToNormalizedSetting(m_host_interface, m_ui.emulationSpeed, "Main/EmulationSpeed", - 100.0f); - SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.pauseOnStart, "Main/StartPaused"); - SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.startFullscreen, "Main/StartFullscreen"); - SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.saveStateOnExit, "Main/SaveStateOnExit"); - SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.confirmPowerOff, "Main/ConfirmPowerOff"); SettingWidgetBinder::BindWidgetToEnumSetting(m_host_interface, m_ui.cpuExecutionMode, "CPU/ExecutionMode", &Settings::ParseCPUExecutionMode, &Settings::GetCPUExecutionModeName); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.cdromReadThread, "CDROM/ReadThread"); connect(m_ui.biosPathBrowse, &QPushButton::pressed, this, &ConsoleSettingsWidget::onBrowseBIOSPathButtonClicked); - - connect(m_ui.enableSpeedLimiter, &QCheckBox::stateChanged, this, - &ConsoleSettingsWidget::onEnableSpeedLimiterStateChanged); - connect(m_ui.emulationSpeed, &QSlider::valueChanged, this, &ConsoleSettingsWidget::onEmulationSpeedValueChanged); - - onEnableSpeedLimiterStateChanged(); - onEmulationSpeedValueChanged(m_ui.emulationSpeed->value()); } ConsoleSettingsWidget::~ConsoleSettingsWidget() = default; @@ -56,13 +40,3 @@ void ConsoleSettingsWidget::onBrowseBIOSPathButtonClicked() m_host_interface->putSettingValue("BIOS/Path", path); m_host_interface->applySettings(); } - -void ConsoleSettingsWidget::onEnableSpeedLimiterStateChanged() -{ - m_ui.emulationSpeed->setDisabled(!m_ui.enableSpeedLimiter->isChecked()); -} - -void ConsoleSettingsWidget::onEmulationSpeedValueChanged(int value) -{ - m_ui.emulationSpeedLabel->setText(tr("%1%").arg(value)); -} diff --git a/src/duckstation-qt/consolesettingswidget.h b/src/duckstation-qt/consolesettingswidget.h index a4f56c5ab..dd8fba125 100644 --- a/src/duckstation-qt/consolesettingswidget.h +++ b/src/duckstation-qt/consolesettingswidget.h @@ -16,8 +16,6 @@ public: private Q_SLOTS: void onBrowseBIOSPathButtonClicked(); - void onEnableSpeedLimiterStateChanged(); - void onEmulationSpeedValueChanged(int value); private: Ui::ConsoleSettingsWidget m_ui; diff --git a/src/duckstation-qt/consolesettingswidget.ui b/src/duckstation-qt/consolesettingswidget.ui index 03ad78461..bae6d6c50 100644 --- a/src/duckstation-qt/consolesettingswidget.ui +++ b/src/duckstation-qt/consolesettingswidget.ui @@ -80,103 +80,6 @@ - - - - Behaviour - - - - - - Emulation Speed: - - - - - - - - - 25 - - - 500 - - - 25 - - - 25 - - - 100 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 25 - - - - - - - 100% - - - - - - - - - Enable Speed Limiter - - - - - - - Increase Timer Resolution - - - - - - - Pause On Start - - - - - - - Start Fullscreen - - - - - - - Save State On Exit - - - - - - - Confirm Power Off - - - - - - diff --git a/src/duckstation-qt/duckstation-qt.vcxproj b/src/duckstation-qt/duckstation-qt.vcxproj index 1f7507dcf..9546a8ee1 100644 --- a/src/duckstation-qt/duckstation-qt.vcxproj +++ b/src/duckstation-qt/duckstation-qt.vcxproj @@ -38,6 +38,7 @@ + @@ -58,6 +59,7 @@ + @@ -104,6 +106,9 @@ Document + + Document + Document @@ -122,6 +127,7 @@ + diff --git a/src/duckstation-qt/generalsettingswidget.cpp b/src/duckstation-qt/generalsettingswidget.cpp new file mode 100644 index 000000000..429db58ff --- /dev/null +++ b/src/duckstation-qt/generalsettingswidget.cpp @@ -0,0 +1,39 @@ +#include "generalsettingswidget.h" +#include "settingwidgetbinder.h" + +static constexpr char BIOS_IMAGE_FILTER[] = "Binary Images (*.bin);;All Files (*.*)"; + +GeneralSettingsWidget::GeneralSettingsWidget(QtHostInterface* host_interface, QWidget* parent /* = nullptr */) + : QWidget(parent), m_host_interface(host_interface) +{ + m_ui.setupUi(this); + + SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.enableSpeedLimiter, "Main/SpeedLimiterEnabled"); + SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.increaseTimerResolution, + "Main/IncreaseTimerResolution"); + SettingWidgetBinder::BindWidgetToNormalizedSetting(m_host_interface, m_ui.emulationSpeed, "Main/EmulationSpeed", + 100.0f); + SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.pauseOnStart, "Main/StartPaused"); + SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.startFullscreen, "Main/StartFullscreen"); + SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.saveStateOnExit, "Main/SaveStateOnExit"); + SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.confirmPowerOff, "Main/ConfirmPowerOff"); + + connect(m_ui.enableSpeedLimiter, &QCheckBox::stateChanged, this, + &GeneralSettingsWidget::onEnableSpeedLimiterStateChanged); + connect(m_ui.emulationSpeed, &QSlider::valueChanged, this, &GeneralSettingsWidget::onEmulationSpeedValueChanged); + + onEnableSpeedLimiterStateChanged(); + onEmulationSpeedValueChanged(m_ui.emulationSpeed->value()); +} + +GeneralSettingsWidget::~GeneralSettingsWidget() = default; + +void GeneralSettingsWidget::onEnableSpeedLimiterStateChanged() +{ + m_ui.emulationSpeed->setDisabled(!m_ui.enableSpeedLimiter->isChecked()); +} + +void GeneralSettingsWidget::onEmulationSpeedValueChanged(int value) +{ + m_ui.emulationSpeedLabel->setText(tr("%1%").arg(value)); +} diff --git a/src/duckstation-qt/generalsettingswidget.h b/src/duckstation-qt/generalsettingswidget.h new file mode 100644 index 000000000..c97ca4ee2 --- /dev/null +++ b/src/duckstation-qt/generalsettingswidget.h @@ -0,0 +1,25 @@ +#pragma once + +#include + +#include "ui_generalsettingswidget.h" + +class QtHostInterface; + +class GeneralSettingsWidget : public QWidget +{ + Q_OBJECT + +public: + explicit GeneralSettingsWidget(QtHostInterface* host_interface, QWidget* parent = nullptr); + ~GeneralSettingsWidget(); + +private Q_SLOTS: + void onEnableSpeedLimiterStateChanged(); + void onEmulationSpeedValueChanged(int value); + +private: + Ui::GeneralSettingsWidget m_ui; + + QtHostInterface* m_host_interface; +}; diff --git a/src/duckstation-qt/generalsettingswidget.ui b/src/duckstation-qt/generalsettingswidget.ui new file mode 100644 index 000000000..287a99330 --- /dev/null +++ b/src/duckstation-qt/generalsettingswidget.ui @@ -0,0 +1,145 @@ + + + GeneralSettingsWidget + + + + 0 + 0 + 502 + 358 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Behaviour + + + + + + Emulation Speed: + + + + + + + + + 25 + + + 500 + + + 25 + + + 25 + + + 100 + + + Qt::Horizontal + + + QSlider::TicksBelow + + + 25 + + + + + + + 100% + + + + + + + + + Enable Speed Limiter + + + + + + + Increase Timer Resolution + + + + + + + Pause On Start + + + + + + + Start Fullscreen + + + + + + + Save State On Exit + + + + + + + Confirm Power Off + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + diff --git a/src/duckstation-qt/mainwindow.cpp b/src/duckstation-qt/mainwindow.cpp index af36016c4..21b877fb8 100644 --- a/src/duckstation-qt/mainwindow.cpp +++ b/src/duckstation-qt/mainwindow.cpp @@ -443,6 +443,8 @@ void MainWindow::connectSignals() connect(m_ui.actionExit, &QAction::triggered, this, &MainWindow::close); connect(m_ui.actionFullscreen, &QAction::triggered, this, &MainWindow::toggleFullscreen); connect(m_ui.actionSettings, &QAction::triggered, [this]() { doSettings(SettingsDialog::Category::Count); }); + connect(m_ui.actionGeneralSettings, &QAction::triggered, + [this]() { doSettings(SettingsDialog::Category::GeneralSettings); }); connect(m_ui.actionConsoleSettings, &QAction::triggered, [this]() { doSettings(SettingsDialog::Category::ConsoleSettings); }); connect(m_ui.actionGameListSettings, &QAction::triggered, diff --git a/src/duckstation-qt/mainwindow.ui b/src/duckstation-qt/mainwindow.ui index 8e560685e..1d7b603c3 100644 --- a/src/duckstation-qt/mainwindow.ui +++ b/src/duckstation-qt/mainwindow.ui @@ -85,6 +85,7 @@ + @@ -345,6 +346,15 @@ Game List Settings... + + + + :/icons/applications-system.png:/icons/applications-system.png + + + General Settings... + + diff --git a/src/duckstation-qt/settingsdialog.cpp b/src/duckstation-qt/settingsdialog.cpp index b69011202..4fc1f22f9 100644 --- a/src/duckstation-qt/settingsdialog.cpp +++ b/src/duckstation-qt/settingsdialog.cpp @@ -2,6 +2,7 @@ #include "audiosettingswidget.h" #include "consolesettingswidget.h" #include "gamelistsettingswidget.h" +#include "generalsettingswidget.h" #include "gpusettingswidget.h" #include "hotkeysettingswidget.h" #include "portsettingswidget.h" @@ -13,6 +14,7 @@ SettingsDialog::SettingsDialog(QtHostInterface* host_interface, QWidget* parent { m_ui.setupUi(this); + m_general_settings = new GeneralSettingsWidget(host_interface, m_ui.settingsContainer); m_console_settings = new ConsoleSettingsWidget(host_interface, m_ui.settingsContainer); m_game_list_settings = new GameListSettingsWidget(host_interface, m_ui.settingsContainer); m_hotkey_settings = new HotkeySettingsWidget(host_interface, m_ui.settingsContainer); @@ -20,12 +22,13 @@ SettingsDialog::SettingsDialog(QtHostInterface* host_interface, QWidget* parent m_gpu_settings = new GPUSettingsWidget(host_interface, m_ui.settingsContainer); m_audio_settings = new AudioSettingsWidget(host_interface, m_ui.settingsContainer); - m_ui.settingsContainer->insertWidget(0, m_console_settings); - m_ui.settingsContainer->insertWidget(1, m_game_list_settings); - m_ui.settingsContainer->insertWidget(2, m_hotkey_settings); - m_ui.settingsContainer->insertWidget(3, m_port_settings); - m_ui.settingsContainer->insertWidget(4, m_gpu_settings); - m_ui.settingsContainer->insertWidget(5, m_audio_settings); + m_ui.settingsContainer->insertWidget(static_cast(Category::GeneralSettings), m_general_settings); + m_ui.settingsContainer->insertWidget(static_cast(Category::ConsoleSettings), m_console_settings); + m_ui.settingsContainer->insertWidget(static_cast(Category::GameListSettings), m_game_list_settings); + m_ui.settingsContainer->insertWidget(static_cast(Category::HotkeySettings), m_hotkey_settings); + m_ui.settingsContainer->insertWidget(static_cast(Category::PortSettings), m_port_settings); + m_ui.settingsContainer->insertWidget(static_cast(Category::GPUSettings), m_gpu_settings); + m_ui.settingsContainer->insertWidget(static_cast(Category::AudioSettings), m_audio_settings); m_ui.settingsCategory->setCurrentRow(0); m_ui.settingsContainer->setCurrentIndex(0); diff --git a/src/duckstation-qt/settingsdialog.h b/src/duckstation-qt/settingsdialog.h index c7d1f9bc5..900ca154d 100644 --- a/src/duckstation-qt/settingsdialog.h +++ b/src/duckstation-qt/settingsdialog.h @@ -5,6 +5,7 @@ class QtHostInterface; +class GeneralSettingsWidget; class GameListSettingsWidget; class HotkeySettingsWidget; class ConsoleSettingsWidget; @@ -19,6 +20,7 @@ class SettingsDialog : public QDialog public: enum class Category { + GeneralSettings, ConsoleSettings, GameListSettings, HotkeySettings, @@ -31,6 +33,7 @@ public: SettingsDialog(QtHostInterface* host_interface, QWidget* parent = nullptr); ~SettingsDialog(); + GeneralSettingsWidget* getGeneralSettingsWidget() const { return m_general_settings; } ConsoleSettingsWidget* getConsoleSettingsWidget() const { return m_console_settings; } GameListSettingsWidget* getGameListSettingsWidget() const { return m_game_list_settings; } HotkeySettingsWidget* getHotkeySettingsWidget() const { return m_hotkey_settings; } @@ -49,6 +52,7 @@ private: QtHostInterface* m_host_interface; + GeneralSettingsWidget* m_general_settings = nullptr; ConsoleSettingsWidget* m_console_settings = nullptr; GameListSettingsWidget* m_game_list_settings = nullptr; HotkeySettingsWidget* m_hotkey_settings = nullptr; diff --git a/src/duckstation-qt/settingsdialog.ui b/src/duckstation-qt/settingsdialog.ui index 565f36663..8c8099cf6 100644 --- a/src/duckstation-qt/settingsdialog.ui +++ b/src/duckstation-qt/settingsdialog.ui @@ -40,6 +40,15 @@ 32 + + + General Settings + + + + :/icons/applications-system.png:/icons/applications-system.png + + Console Settings