Add infrastructure for Qt settings window

This commit is contained in:
wheremyfoodat 2024-02-23 02:56:09 +02:00
parent d010d95e18
commit ba049fc1c7
4 changed files with 34 additions and 3 deletions

View file

@ -1,16 +1,23 @@
#pragma once
#include <QApplication>
#include <QCheckBox>
#include <QComboBox>
#include <QDialog>
#include <QPalette>
#include <QWidget>
#include <QtWidgets>
#include <functional>
#include <utility>
#include "config.hpp"
class ConfigWindow : public QDialog {
Q_OBJECT
private:
using ConfigCallback = std::function<void()>;
enum class Theme : int {
System = 0,
Light = 1,
@ -21,9 +28,15 @@ class ConfigWindow : public QDialog {
Theme currentTheme;
QComboBox* themeSelect = nullptr;
// The config class holds a copy of the emulator config which it edits and sends
// over to the emulator
EmulatorConfig config;
ConfigCallback updateConfig;
void setTheme(Theme theme);
public:
ConfigWindow(QWidget* parent = nullptr);
ConfigWindow(ConfigCallback callback, const EmulatorConfig& config, QWidget* parent = nullptr);
~ConfigWindow();
EmulatorConfig& getConfig() { return config; }
};

View file

@ -44,6 +44,7 @@ class MainWindow : public QMainWindow {
EditCheat,
PressTouchscreen,
ReleaseTouchscreen,
UpdateConfig
};
// Tagged union representing our message queue messages

View file

@ -1,7 +1,8 @@
#include "panda_qt/config_window.hpp"
ConfigWindow::ConfigWindow(QWidget* parent) : QDialog(parent) {
ConfigWindow::ConfigWindow(ConfigCallback callback, const EmulatorConfig& emuConfig, QWidget* parent) : QDialog(parent), config(emuConfig) {
setWindowTitle(tr("Configuration"));
updateConfig = std::move(callback);
// Set up theme selection
setTheme(Theme::Dark);
@ -15,6 +16,14 @@ ConfigWindow::ConfigWindow(QWidget* parent) : QDialog(parent) {
themeSelect->setGeometry(40, 40, 100, 50);
themeSelect->show();
connect(themeSelect, &QComboBox::currentIndexChanged, this, [&](int index) { setTheme(static_cast<Theme>(index)); });
QCheckBox* useShaderJIT = new QCheckBox(tr("Enable Shader recompiler"), this);
useShaderJIT->setChecked(config.shaderJitEnabled);
connect(useShaderJIT, &QCheckBox::toggled, this, [this, useShaderJIT]() {
config.shaderJitEnabled = useShaderJIT->isChecked();
updateConfig();
});
}
void ConfigWindow::setTheme(Theme theme) {

View file

@ -64,7 +64,14 @@ MainWindow::MainWindow(QApplication* app, QWidget* parent) : QMainWindow(parent)
// Set up misc objects
aboutWindow = new AboutWindow(nullptr);
configWindow = new ConfigWindow(this);
configWindow = new ConfigWindow(
[&]() {
EmulatorMessage message{.type = MessageType::UpdateConfig};
sendMessage(message);
},
emu->getConfig(), this
);
cheatsEditor = new CheatsWindow(emu, {}, this);
luaEditor = new TextEditorWindow(this, "script.lua", "");
@ -282,6 +289,7 @@ void MainWindow::dispatchMessage(const EmulatorMessage& message) {
emu->getServiceManager().getHID().setTouchScreenPress(message.touchscreen.x, message.touchscreen.y);
break;
case MessageType::ReleaseTouchscreen: emu->getServiceManager().getHID().releaseTouchScreen(); break;
case MessageType::UpdateConfig: emu->getConfig() = configWindow->getConfig(); break;
}
}