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