diff --git a/src/frontend/qt_sdl/Config.cpp b/src/frontend/qt_sdl/Config.cpp index cf33dbf3..9aa3189a 100644 --- a/src/frontend/qt_sdl/Config.cpp +++ b/src/frontend/qt_sdl/Config.cpp @@ -62,16 +62,6 @@ int GL_ScaleFactor; bool GL_BetterPolygons; bool GL_HiresCoordinates; -bool FirmwareOverrideSettings; -std::string FirmwareUsername; -int FirmwareLanguage; -int FirmwareBirthdayMonth; -int FirmwareBirthdayDay; -int FirmwareFavouriteColour; -std::string FirmwareMessage; -std::string FirmwareMAC; -std::string WifiSettingsPath = "wfcsettings.bin"; // Should this be configurable? - int MPAudioMode; int MPRecvTimeout; diff --git a/src/frontend/qt_sdl/Config.h b/src/frontend/qt_sdl/Config.h index 531e1066..3aca7e13 100644 --- a/src/frontend/qt_sdl/Config.h +++ b/src/frontend/qt_sdl/Config.h @@ -176,16 +176,6 @@ extern int GL_ScaleFactor; extern bool GL_BetterPolygons; extern bool GL_HiresCoordinates; -extern bool FirmwareOverrideSettings; -extern std::string FirmwareUsername; -extern int FirmwareLanguage; -extern int FirmwareBirthdayMonth; -extern int FirmwareBirthdayDay; -extern int FirmwareFavouriteColour; -extern std::string FirmwareMessage; -extern std::string FirmwareMAC; -//extern std::string WifiSettingsPath; - extern int MPAudioMode; extern int MPRecvTimeout; diff --git a/src/frontend/qt_sdl/EmuInstance.cpp b/src/frontend/qt_sdl/EmuInstance.cpp index a8161ef7..52aab91b 100644 --- a/src/frontend/qt_sdl/EmuInstance.cpp +++ b/src/frontend/qt_sdl/EmuInstance.cpp @@ -777,7 +777,7 @@ std::optional EmuInstance::loadFirmware(int type) noexcept return std::nullopt; } - customizeFirmware(firmware, Config::FirmwareOverrideSettings); + customizeFirmware(firmware, localCfg.GetBool("Firmware.OverrideSettings")); return firmware; } @@ -816,29 +816,31 @@ std::optional EmuInstance::loadNAND(const std::array, char16_t>{}; // setting up username - std::u16string username = converter.from_bytes(Config::FirmwareUsername); + std::u16string username = converter.from_bytes(firmcfg.GetString("Username")); size_t usernameLength = std::min(username.length(), (size_t) 10); memset(&settings.Nickname, 0, sizeof(settings.Nickname)); memcpy(&settings.Nickname, username.data(), usernameLength * sizeof(char16_t)); // setting language - settings.Language = static_cast(Config::FirmwareLanguage); + settings.Language = static_cast(firmcfg.GetInt("Language")); // setting up color - settings.FavoriteColor = Config::FirmwareFavouriteColour; + settings.FavoriteColor = firmcfg.GetInt("FavouriteColour"); // setting up birthday - settings.BirthdayMonth = Config::FirmwareBirthdayMonth; - settings.BirthdayDay = Config::FirmwareBirthdayDay; + settings.BirthdayMonth = firmcfg.GetInt("BirthdayMonth"); + settings.BirthdayDay = firmcfg.GetInt("BirthdayDay"); // setup message - std::u16string message = converter.from_bytes(Config::FirmwareMessage); + std::u16string message = converter.from_bytes(firmcfg.GetString("Message")); size_t messageLength = std::min(message.length(), (size_t) 26); memset(&settings.Message, 0, sizeof(settings.Message)); memcpy(&settings.Message, message.data(), messageLength * sizeof(char16_t)); @@ -1328,7 +1330,7 @@ pair, string> EmuInstance::generateDefaultFirmware() bool EmuInstance::parseMacAddress(void* data) { - const std::string& mac_in = Config::FirmwareMAC; + const std::string mac_in = localCfg.GetString("Firmware.MAC"); u8* mac_out = (u8*)data; int o = 0; @@ -1362,8 +1364,10 @@ void EmuInstance::customizeFirmware(Firmware& firmware, bool overridesettings) n { auto ¤tData = firmware.GetEffectiveUserData(); + auto firmcfg = localCfg.GetTable("Firmware"); + // setting up username - std::string orig_username = Config::FirmwareUsername; + std::string orig_username = firmcfg.GetString("Username"); if (!orig_username.empty()) { // If the frontend defines a username, take it. If not, leave the existing one. std::u16string username = std::wstring_convert, char16_t>{}.from_bytes( @@ -1373,7 +1377,7 @@ void EmuInstance::customizeFirmware(Firmware& firmware, bool overridesettings) n memcpy(currentData.Nickname, username.data(), usernameLength * sizeof(char16_t)); } - auto language = static_cast(Config::FirmwareLanguage); + auto language = static_cast(firmcfg.GetInt("Language")); if (language != Firmware::Language::Reserved) { // If the frontend specifies a language (rather than using the existing value)... currentData.Settings &= ~Firmware::Language::Reserved; // ..clear the existing language... @@ -1381,26 +1385,26 @@ void EmuInstance::customizeFirmware(Firmware& firmware, bool overridesettings) n } // setting up color - u8 favoritecolor = Config::FirmwareFavouriteColour; + u8 favoritecolor = firmcfg.GetInt("FavouriteColour"); if (favoritecolor != 0xFF) { currentData.FavoriteColor = favoritecolor; } - u8 birthmonth = Config::FirmwareBirthdayMonth; + u8 birthmonth = firmcfg.GetInt("BirthdayMonth"); if (birthmonth != 0) { // If the frontend specifies a birth month (rather than using the existing value)... currentData.BirthdayMonth = birthmonth; } - u8 birthday = Config::FirmwareBirthdayDay; + u8 birthday = firmcfg.GetInt("BirthdayDay"); if (birthday != 0) { // If the frontend specifies a birthday (rather than using the existing value)... currentData.BirthdayDay = birthday; } // setup message - std::string orig_message = Config::FirmwareMessage; + std::string orig_message = firmcfg.GetString("Message"); if (!orig_message.empty()) { std::u16string message = std::wstring_convert, char16_t>{}.from_bytes( diff --git a/src/frontend/qt_sdl/FirmwareSettingsDialog.cpp b/src/frontend/qt_sdl/FirmwareSettingsDialog.cpp index 1ec2e8c4..5a79391d 100644 --- a/src/frontend/qt_sdl/FirmwareSettingsDialog.cpp +++ b/src/frontend/qt_sdl/FirmwareSettingsDialog.cpp @@ -20,6 +20,7 @@ #include "Platform.h" #include "Config.h" +#include "main.h" #include "FirmwareSettingsDialog.h" #include "ui_FirmwareSettingsDialog.h" @@ -38,10 +39,15 @@ FirmwareSettingsDialog::FirmwareSettingsDialog(QWidget* parent) : QDialog(parent ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose); - ui->usernameEdit->setText(QString::fromStdString(Config::FirmwareUsername)); + emuInstance = ((MainWindow*)parent)->getEmuInstance(); + + auto& cfg = emuInstance->getLocalConfig(); + auto firmcfg = cfg.GetTable("Firmware"); + + ui->usernameEdit->setText(firmcfg.GetQString("Username")); ui->languageBox->addItems(languages); - ui->languageBox->setCurrentIndex(Config::FirmwareLanguage); + ui->languageBox->setCurrentIndex(firmcfg.GetInt("Language")); for (int i = 1; i <= 31; i++) { @@ -49,9 +55,9 @@ FirmwareSettingsDialog::FirmwareSettingsDialog(QWidget* parent) : QDialog(parent } ui->cbxBirthdayMonth->addItems(months); - ui->cbxBirthdayMonth->setCurrentIndex(Config::FirmwareBirthdayMonth - 1); + ui->cbxBirthdayMonth->setCurrentIndex(firmcfg.GetInt("BirthdayMonth") - 1); - ui->cbxBirthdayDay->setCurrentIndex(Config::FirmwareBirthdayDay - 1); + ui->cbxBirthdayDay->setCurrentIndex(firmcfg.GetInt("BirthdayDay") - 1); for (int i = 0; i < 16; i++) { @@ -60,21 +66,31 @@ FirmwareSettingsDialog::FirmwareSettingsDialog(QWidget* parent) : QDialog(parent QIcon icon(QPixmap::fromImage(image.copy())); ui->colorsEdit->addItem(icon, colornames[i]); } - ui->colorsEdit->setCurrentIndex(Config::FirmwareFavouriteColour); + ui->colorsEdit->setCurrentIndex(firmcfg.GetInt("FavouriteColour")); - ui->messageEdit->setText(QString::fromStdString(Config::FirmwareMessage)); + ui->messageEdit->setText(firmcfg.GetQString("Message")); - ui->overrideFirmwareBox->setChecked(Config::FirmwareOverrideSettings); + ui->overrideFirmwareBox->setChecked(firmcfg.GetBool("OverrideSettings")); - ui->txtMAC->setText(QString::fromStdString(Config::FirmwareMAC)); + ui->txtMAC->setText(firmcfg.GetQString("MAC")); on_overrideFirmwareBox_toggled(); - int inst = Platform::InstanceID(); + int inst = emuInstance->getInstanceID(); if (inst > 0) ui->lblInstanceNum->setText(QString("Configuring settings for instance %1").arg(inst+1)); else ui->lblInstanceNum->hide(); + +#define SET_ORIGVAL(type, val) \ + for (type* w : findChildren(nullptr)) \ + w->setProperty("user_originalValue", w->val()); + + SET_ORIGVAL(QLineEdit, text); + SET_ORIGVAL(QComboBox, currentIndex); + SET_ORIGVAL(QCheckBox, isChecked); + +#undef SET_ORIGVAL } FirmwareSettingsDialog::~FirmwareSettingsDialog() @@ -132,25 +148,26 @@ void FirmwareSettingsDialog::done(int r) return; } - bool newOverride = ui->overrideFirmwareBox->isChecked(); + bool modified = false; - std::string newName = ui->usernameEdit->text().toStdString(); - int newLanguage = ui->languageBox->currentIndex(); - int newFavColor = ui->colorsEdit->currentIndex(); - int newBirthdayDay = ui->cbxBirthdayDay->currentIndex() + 1; - int newBirthdayMonth = ui->cbxBirthdayMonth->currentIndex() + 1; - std::string newMessage = ui->messageEdit->text().toStdString(); +#define CHECK_ORIGVAL(type, val) \ + if (!modified) for (type* w : findChildren(nullptr)) \ + { \ + QVariant v = w->val(); \ + if (v != w->property("user_originalValue")) \ + { \ + modified = true; \ + break; \ + }\ + } - std::string newMAC = ui->txtMAC->text().toStdString(); + CHECK_ORIGVAL(QLineEdit, text); + CHECK_ORIGVAL(QComboBox, currentIndex); + CHECK_ORIGVAL(QCheckBox, isChecked); - if ( newOverride != Config::FirmwareOverrideSettings - || newName != Config::FirmwareUsername - || newLanguage != Config::FirmwareLanguage - || newFavColor != Config::FirmwareFavouriteColour - || newBirthdayDay != Config::FirmwareBirthdayDay - || newBirthdayMonth != Config::FirmwareBirthdayMonth - || newMessage != Config::FirmwareMessage - || newMAC != Config::FirmwareMAC) +#undef CHECK_ORIGVAL + + if (modified) { if (RunningSomething && QMessageBox::warning(this, "Reset necessary to apply changes", @@ -158,16 +175,19 @@ void FirmwareSettingsDialog::done(int r) QMessageBox::Ok, QMessageBox::Cancel) != QMessageBox::Ok) return; - Config::FirmwareOverrideSettings = newOverride; + auto& cfg = emuInstance->getLocalConfig(); + auto firmcfg = cfg.GetTable("Firmware"); - Config::FirmwareUsername = newName; - Config::FirmwareLanguage = newLanguage; - Config::FirmwareFavouriteColour = newFavColor; - Config::FirmwareBirthdayDay = newBirthdayDay; - Config::FirmwareBirthdayMonth = newBirthdayMonth; - Config::FirmwareMessage = newMessage; + firmcfg.SetBool("OverrideSettings", ui->overrideFirmwareBox->isChecked()); - Config::FirmwareMAC = newMAC; + firmcfg.SetQString("Username", ui->usernameEdit->text()); + firmcfg.SetInt("Language", ui->languageBox->currentIndex()); + firmcfg.SetInt("FavouriteColour", ui->colorsEdit->currentIndex()); + firmcfg.SetInt("BirthdayDay", ui->cbxBirthdayDay->currentIndex() + 1); + firmcfg.SetInt("BirthdayMonth", ui->cbxBirthdayMonth->currentIndex() + 1); + firmcfg.SetQString("Message", ui->messageEdit->text()); + + firmcfg.SetQString("MAC", ui->txtMAC->text()); Config::Save(); diff --git a/src/frontend/qt_sdl/FirmwareSettingsDialog.h b/src/frontend/qt_sdl/FirmwareSettingsDialog.h index d22ce3a2..13ab6f1f 100644 --- a/src/frontend/qt_sdl/FirmwareSettingsDialog.h +++ b/src/frontend/qt_sdl/FirmwareSettingsDialog.h @@ -25,6 +25,8 @@ namespace Ui { class FirmwareSettingsDialog; } class FirmwareSettingsDialog; +class EmuInstance; + class FirmwareSettingsDialog : public QDialog { Q_OBJECT @@ -129,6 +131,7 @@ private: bool verifyMAC(); Ui::FirmwareSettingsDialog* ui; + EmuInstance* emuInstance; }; #endif // FIRMWARESETTINGSDIALOG_H diff --git a/src/frontend/qt_sdl/Window.cpp b/src/frontend/qt_sdl/Window.cpp index c52b7a3b..d97a637b 100644 --- a/src/frontend/qt_sdl/Window.cpp +++ b/src/frontend/qt_sdl/Window.cpp @@ -600,7 +600,7 @@ MainWindow::MainWindow(int id, EmuInstance* inst, QWidget* parent) : resize(Config::WindowWidth, Config::WindowHeight); - if (Config::FirmwareUsername == "Arisotura") + if (localCfg.GetString("Firmware.Username") == "Arisotura") actMPNewInstance->setText("Fart"); #ifdef Q_OS_MAC @@ -620,7 +620,7 @@ MainWindow::MainWindow(int id, EmuInstance* inst, QWidget* parent) : actEjectCart->setEnabled(false); actEjectGBACart->setEnabled(false); - if (emuInstance->globalCfg.GetInt("Emu.ConsoleType") == 1) + if (globalCfg.GetInt("Emu.ConsoleType") == 1) { actInsertGBACart->setEnabled(false); for (int i = 0; i < 1; i++) @@ -644,7 +644,7 @@ MainWindow::MainWindow(int id, EmuInstance* inst, QWidget* parent) : actPowerManagement->setEnabled(false); actSetupCheats->setEnabled(false); - actTitleManager->setEnabled(!emuInstance->globalCfg.GetString("DSi.NANDPath").empty()); + actTitleManager->setEnabled(!globalCfg.GetString("DSi.NANDPath").empty()); actEnableCheats->setChecked(localCfg.GetBool("EnableCheats")); @@ -1168,7 +1168,7 @@ void MainWindow::updateCartInserted(bool gba) bool inserted; if (gba) { - inserted = emuInstance->gbaCartInserted() && (emuInstance->globalCfg.GetInt("Emu.ConsoleType") == 0); + inserted = emuInstance->gbaCartInserted() && (globalCfg.GetInt("Emu.ConsoleType") == 0); actCurrentGBACart->setText("GBA slot: " + emuInstance->gbaCartLabel()); actEjectGBACart->setEnabled(inserted); } @@ -1702,7 +1702,7 @@ void MainWindow::onEmuSettingsDialogFinished(int res) { emuThread->emuUnpause(); - if (emuInstance->globalCfg.GetInt("Emu.ConsoleType") == 1) + if (globalCfg.GetInt("Emu.ConsoleType") == 1) { actInsertGBACart->setEnabled(false); for (int i = 0; i < 1; i++) @@ -1723,7 +1723,7 @@ void MainWindow::onEmuSettingsDialogFinished(int res) actCurrentGBACart->setText("GBA slot: " + emuInstance->gbaCartLabel()); if (!RunningSomething) - actTitleManager->setEnabled(!emuInstance->globalCfg.GetString("DSi.NANDPath").empty()); + actTitleManager->setEnabled(!globalCfg.GetString("DSi.NANDPath").empty()); } void MainWindow::onOpenInputConfig() @@ -2090,7 +2090,7 @@ void MainWindow::onEmuStop() actDateTime->setEnabled(true); actPowerManagement->setEnabled(false); - actTitleManager->setEnabled(!emuInstance->globalCfg.GetString("DSi.NANDPath").empty()); + actTitleManager->setEnabled(!globalCfg.GetString("DSi.NANDPath").empty()); } void MainWindow::onUpdateVideoSettings(bool glchange)