From 95cc79e0a3a8411cca3b89732731a9f20ebe15a5 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 1 Dec 2024 20:08:47 +0200 Subject: [PATCH] Allow configuring the app icon --- include/panda_qt/config_window.hpp | 13 +++++++++++- src/panda_qt/config_window.cpp | 32 ++++++++++++++++++++++++------ src/panda_qt/main_window.cpp | 3 +-- 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/include/panda_qt/config_window.hpp b/include/panda_qt/config_window.hpp index 7049eb8a..eb1caedc 100644 --- a/include/panda_qt/config_window.hpp +++ b/include/panda_qt/config_window.hpp @@ -21,6 +21,7 @@ class ConfigWindow : public QDialog { private: using ConfigCallback = std::function; + using IconCallback = std::function; enum class Theme : int { System = 0, @@ -30,7 +31,14 @@ class ConfigWindow : public QDialog { Cream = 4, }; + enum class WindowIcon : int { + Rpog = 0, + Rsyn = 1, + }; + Theme currentTheme; + WindowIcon currentIcon; + QTextEdit* helpText = nullptr; QListWidget* widgetList = nullptr; QStackedWidget* widgetContainer = nullptr; @@ -41,13 +49,16 @@ class ConfigWindow : public QDialog { // The config class holds a copy of the emulator config which it edits and sends // over to the emulator in a thread-safe manner EmulatorConfig config; + ConfigCallback updateConfig; + IconCallback updateIcon; void addWidget(QWidget* widget, QString title, QString icon, QString helpText); void setTheme(Theme theme); + void setIcon(WindowIcon icon); public: - ConfigWindow(ConfigCallback callback, const EmulatorConfig& config, QWidget* parent = nullptr); + ConfigWindow(ConfigCallback configCallback, IconCallback iconCallback, const EmulatorConfig& config, QWidget* parent = nullptr); ~ConfigWindow(); EmulatorConfig& getConfig() { return config; } diff --git a/src/panda_qt/config_window.cpp b/src/panda_qt/config_window.cpp index 5b391445..eb5d25f5 100644 --- a/src/panda_qt/config_window.cpp +++ b/src/panda_qt/config_window.cpp @@ -1,11 +1,15 @@ #include "panda_qt/config_window.hpp" -ConfigWindow::ConfigWindow(ConfigCallback callback, const EmulatorConfig& emuConfig, QWidget* parent) : QDialog(parent), config(emuConfig) { +ConfigWindow::ConfigWindow(ConfigCallback configCallback, IconCallback iconCallback, const EmulatorConfig& emuConfig, QWidget* parent) + : QDialog(parent), config(emuConfig) { setWindowTitle(tr("Configuration")); - updateConfig = std::move(callback); + + updateConfig = std::move(configCallback); + updateIcon = std::move(iconCallback); // Set up theme selection setTheme(Theme::Dark); + setIcon(WindowIcon::Rpog); // Initialize the widget list and the widget container widgets widgetList = new QListWidget(this); @@ -37,8 +41,8 @@ ConfigWindow::ConfigWindow(ConfigCallback callback, const EmulatorConfig& emuCon }); }; - QVBoxLayout* mainLayout = new QVBoxLayout; - QHBoxLayout* hLayout = new QHBoxLayout; + QVBoxLayout* mainLayout = new QVBoxLayout(); + QHBoxLayout* hLayout = new QHBoxLayout(); // Set up widget layouts setLayout(mainLayout); @@ -55,7 +59,7 @@ ConfigWindow::ConfigWindow(ConfigCallback callback, const EmulatorConfig& emuCon guiLayout->setHorizontalSpacing(20); guiLayout->setVerticalSpacing(10); - QComboBox* themeSelect = new QComboBox; + QComboBox* themeSelect = new QComboBox(); themeSelect->addItem(tr("System")); themeSelect->addItem(tr("Light")); themeSelect->addItem(tr("Dark")); @@ -67,6 +71,13 @@ ConfigWindow::ConfigWindow(ConfigCallback callback, const EmulatorConfig& emuCon }); guiLayout->addRow(tr("Color theme"), themeSelect); + QComboBox* iconSelect = new QComboBox(); + iconSelect->addItem(tr("Happy panda")); + iconSelect->addItem(tr("Happy panda (colourful)")); + iconSelect->setCurrentIndex(static_cast(currentIcon)); + connect(iconSelect, &QComboBox::currentIndexChanged, this, [&](int index) { setIcon(static_cast(index)); }); + guiLayout->addRow(tr("Window icon"), iconSelect); + QCheckBox* showAppVersion = new QCheckBox(tr("Show version on window title")); showAppVersion->setChecked(config.windowSettings.showAppVersion); connectCheckbox(showAppVersion, config.windowSettings.showAppVersion); @@ -218,7 +229,7 @@ ConfigWindow::ConfigWindow(ConfigCallback callback, const EmulatorConfig& emuCon connectCheckbox(muteAudio, config.audioDeviceConfig.muteAudio); audioLayout->addRow(muteAudio); - QSpinBox* volumeRaw = new QSpinBox; + QSpinBox* volumeRaw = new QSpinBox(); volumeRaw->setRange(0, 200); volumeRaw->setValue(config.audioDeviceConfig.volumeRaw* 100); connect(volumeRaw, &QSpinBox::valueChanged, this, [&](int value) { @@ -375,6 +386,15 @@ void ConfigWindow::setTheme(Theme theme) { } } +void ConfigWindow::setIcon(WindowIcon icon) { + switch (icon) { + case WindowIcon::Rsyn: updateIcon(":/docs/img/rsyn_icon.png"); break; + + case WindowIcon::Rpog: + default: updateIcon(":/docs/img/rpog_icon.png"); break; + } +} + void ConfigWindow::addWidget(QWidget* widget, QString title, QString icon, QString helpText) { const int index = widgetList->count(); diff --git a/src/panda_qt/main_window.cpp b/src/panda_qt/main_window.cpp index a2d585a4..afca8832 100644 --- a/src/panda_qt/main_window.cpp +++ b/src/panda_qt/main_window.cpp @@ -15,7 +15,6 @@ MainWindow::MainWindow(QApplication* app, QWidget* parent) : QMainWindow(parent), keyboardMappings(InputMappings::defaultKeyboardMappings()) { setWindowTitle("Alber"); - setWindowIcon(QIcon(":/docs/img/rpog_icon.png")); // Enable drop events for loading ROMs setAcceptDrops(true); @@ -96,7 +95,7 @@ MainWindow::MainWindow(QApplication* app, QWidget* parent) : QMainWindow(parent) EmulatorMessage message{.type = MessageType::UpdateConfig}; sendMessage(message); }, - emu->getConfig(), this + [&](const QString& icon) { setWindowIcon(QIcon(icon)); }, emu->getConfig(), this ); auto args = QCoreApplication::arguments();