From d378b0252f0f8ea7a97889e35320a49b9192affc Mon Sep 17 00:00:00 2001 From: Adrian Siekierka Date: Sat, 2 Oct 2021 20:16:27 +0200 Subject: Generate a simple non-bootable firmware when not provided. (v2) (#1175) * Generate a simple non-bootable firmware when not provided. * Expose Username and Language into settings dialog. * Add firmware overrides for more settings. Also make override optionals when a firmware is provided. * Refactor firmware settings into separate dialog. * use usernameLength instead of u16Username.length() (#3) * Fix curly braces code-style. * LoadUserSettingsFromConfig: convert from UTF-8 to UTF-16 via wstring_convert * Fix firmware username capitalization. * cleanup firmware backup logic * Put brace where it should be Co-authored-by: Rayyan Ansari <68647953+RayyanAnsari@users.noreply.github.com> Co-authored-by: Filippo Scognamiglio Co-authored-by: kyandora <71771686+kyandora@users.noreply.github.com> Co-authored-by: Filippo Scognamiglio Co-authored-by: RSDuck Co-authored-by: Rayyan Ansari <68647953+RayyanAnsari@users.noreply.github.com> --- src/frontend/Util_ROM.cpp | 2 +- src/frontend/qt_sdl/CMakeLists.txt | 1 + src/frontend/qt_sdl/EmuSettingsDialog.cpp | 2 + src/frontend/qt_sdl/FirmwareSettingsDialog.cpp | 72 +++++++++++++ src/frontend/qt_sdl/FirmwareSettingsDialog.h | 92 ++++++++++++++++ src/frontend/qt_sdl/FirmwareSettingsDialog.ui | 144 +++++++++++++++++++++++++ src/frontend/qt_sdl/main.cpp | 12 +++ src/frontend/qt_sdl/main.h | 3 + 8 files changed, 327 insertions(+), 1 deletion(-) create mode 100644 src/frontend/qt_sdl/FirmwareSettingsDialog.cpp create mode 100644 src/frontend/qt_sdl/FirmwareSettingsDialog.h create mode 100644 src/frontend/qt_sdl/FirmwareSettingsDialog.ui (limited to 'src/frontend') diff --git a/src/frontend/Util_ROM.cpp b/src/frontend/Util_ROM.cpp index 4d55299..29247e4 100644 --- a/src/frontend/Util_ROM.cpp +++ b/src/frontend/Util_ROM.cpp @@ -165,7 +165,7 @@ int VerifyDSFirmware() long len; f = Platform::OpenLocalFile(Config::FirmwarePath, "rb"); - if (!f) return Load_FirmwareMissing; + if (!f) return Load_FirmwareNotBootable; fseek(f, 0, SEEK_END); len = ftell(f); diff --git a/src/frontend/qt_sdl/CMakeLists.txt b/src/frontend/qt_sdl/CMakeLists.txt index 61a2d20..cb81049 100644 --- a/src/frontend/qt_sdl/CMakeLists.txt +++ b/src/frontend/qt_sdl/CMakeLists.txt @@ -10,6 +10,7 @@ SET(SOURCES_QT_SDL InputConfig/resources/ds.qrc VideoSettingsDialog.cpp AudioSettingsDialog.cpp + FirmwareSettingsDialog.cpp WifiSettingsDialog.cpp InterfaceSettingsDialog.cpp ROMInfoDialog.cpp diff --git a/src/frontend/qt_sdl/EmuSettingsDialog.cpp b/src/frontend/qt_sdl/EmuSettingsDialog.cpp index b7de274..31e2e52 100644 --- a/src/frontend/qt_sdl/EmuSettingsDialog.cpp +++ b/src/frontend/qt_sdl/EmuSettingsDialog.cpp @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include "types.h" #include "Platform.h" diff --git a/src/frontend/qt_sdl/FirmwareSettingsDialog.cpp b/src/frontend/qt_sdl/FirmwareSettingsDialog.cpp new file mode 100644 index 0000000..7857cdc --- /dev/null +++ b/src/frontend/qt_sdl/FirmwareSettingsDialog.cpp @@ -0,0 +1,72 @@ +/* + Copyright 2016-2020 Arisotura + + This file is part of melonDS. + + melonDS is free software: you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + melonDS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with melonDS. If not, see http://www.gnu.org/licenses/. +*/ + +#include "Config.h" +#include "FirmwareSettingsDialog.h" +#include "ui_FirmwareSettingsDialog.h" + +FirmwareSettingsDialog* FirmwareSettingsDialog::currentDlg = nullptr; + +FirmwareSettingsDialog::FirmwareSettingsDialog(QWidget* parent) : QDialog(parent), ui(new Ui::FirmwareSettingsDialog) +{ + ui->setupUi(this); + setAttribute(Qt::WA_DeleteOnClose); + + ui->usernameEdit->setText(Config::FirmwareUsername); + + ui->languageBox->addItems(languages); + ui->languageBox->setCurrentIndex(Config::FirmwareLanguage); + + QDate birthDate = QDate(QDate::currentDate().year(), Config::FirmwareBirthdayMonth, Config::FirmwareBirthdayDay); + ui->birthdayEdit->setDate(birthDate); + + ui->colorsEdit->addItems(colours); + ui->colorsEdit->setCurrentIndex(Config::FirmwareFavouriteColour); + + ui->messageEdit->setText(Config::FirmwareMessage); + + ui->overrideFirmwareBox->setChecked(Config::FirmwareOverrideSettings); +} + +FirmwareSettingsDialog::~FirmwareSettingsDialog() +{ + delete ui; +} + +void FirmwareSettingsDialog::on_dialogButtons_accepted() +{ + std::string newName = ui->usernameEdit->text().toStdString(); + strncpy(Config::FirmwareUsername, newName.c_str(), 63); Config::FirmwareUsername[63] = '\0'; + + Config::FirmwareLanguage = ui->languageBox->currentIndex(); + Config::FirmwareFavouriteColour = ui->colorsEdit->currentIndex(); + Config::FirmwareBirthdayDay = ui->birthdayEdit->date().day(); + Config::FirmwareBirthdayMonth = ui->birthdayEdit->date().month(); + Config::FirmwareOverrideSettings = ui->overrideFirmwareBox->isChecked(); + + std::string newMessage = ui->messageEdit->text().toStdString(); + strncpy(Config::FirmwareMessage, newMessage.c_str(), 1023); Config::FirmwareMessage[1023] = '\0'; + Config::Save(); + + closeDlg(); +} + +void FirmwareSettingsDialog::on_dialogButtons_rejected() +{ + closeDlg(); +} diff --git a/src/frontend/qt_sdl/FirmwareSettingsDialog.h b/src/frontend/qt_sdl/FirmwareSettingsDialog.h new file mode 100644 index 0000000..5f8e5ff --- /dev/null +++ b/src/frontend/qt_sdl/FirmwareSettingsDialog.h @@ -0,0 +1,92 @@ +/* + Copyright 2016-2020 Arisotura + + This file is part of melonDS. + + melonDS is free software: you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + melonDS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with melonDS. If not, see http://www.gnu.org/licenses/. +*/ + +#ifndef FIRMWARESETTINGSDIALOG_H +#define FIRMWARESETTINGSDIALOG_H + +#include +#include + +namespace Ui { class FirmwareSettingsDialog; } +class FirmwareSettingsDialog; + +class FirmwareSettingsDialog : public QDialog +{ + Q_OBJECT + +public: + const QStringList colours + { + "Greyish Blue", + "Brown", + "Red", + "Light Pink", + "Orange", + "Yellow", + "Lime", + "Light Green", + "Dark Green", + "Turqoise", + "Light Blue", + "Blue", + "Dark Blue", + "Dark Purple", + "Light Purple", + "Dark Pink" + }; + + const QStringList languages + { + "Japanese", + "English", + "French", + "German", + "Italian", + "Spanish" + }; + + explicit FirmwareSettingsDialog(QWidget* parent); + ~FirmwareSettingsDialog(); + + static FirmwareSettingsDialog* currentDlg; + static FirmwareSettingsDialog* openDlg(QWidget* parent) + { + if (currentDlg) + { + currentDlg->activateWindow(); + return currentDlg; + } + + currentDlg = new FirmwareSettingsDialog(parent); + currentDlg->show(); + return currentDlg; + } + static void closeDlg() + { + currentDlg = nullptr; + } + +private slots: + void on_dialogButtons_accepted(); + void on_dialogButtons_rejected(); + +private: + Ui::FirmwareSettingsDialog* ui; +}; + +#endif // FIRMWARESETTINGSDIALOG_H diff --git a/src/frontend/qt_sdl/FirmwareSettingsDialog.ui b/src/frontend/qt_sdl/FirmwareSettingsDialog.ui new file mode 100644 index 0000000..2e27946 --- /dev/null +++ b/src/frontend/qt_sdl/FirmwareSettingsDialog.ui @@ -0,0 +1,144 @@ + + + FirmwareSettingsDialog + + + + 0 + 0 + 511 + 272 + + + + + 0 + 0 + + + + Firmware settings - melonDS + + + + QLayout::SetFixedSize + + + + + + + Username + + + + + + + MelonDS + + + 10 + + + false + + + + + + + Language + + + + + + + + + + Birthday + + + + + + + + + + Color + + + + + + + + + + Message + + + + + + + + + + Override firmware settings + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + dialogButtons + accepted() + FirmwareSettingsDialog + accept() + + + 255 + 250 + + + 255 + 135 + + + + + dialogButtons + rejected() + FirmwareSettingsDialog + reject() + + + 255 + 250 + + + 255 + 135 + + + + + diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp index d6acc91..fb1caea 100644 --- a/src/frontend/qt_sdl/main.cpp +++ b/src/frontend/qt_sdl/main.cpp @@ -55,6 +55,7 @@ #include "InputConfig/InputConfigDialog.h" #include "VideoSettingsDialog.h" #include "AudioSettingsDialog.h" +#include "FirmwareSettingsDialog.h" #include "WifiSettingsDialog.h" #include "InterfaceSettingsDialog.h" #include "ROMInfoDialog.h" @@ -1411,6 +1412,9 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) actInterfaceSettings = menu->addAction("Interface settings"); connect(actInterfaceSettings, &QAction::triggered, this, &MainWindow::onOpenInterfaceSettings); + actFirmwareSettings = menu->addAction("Firmware settings"); + connect(actFirmwareSettings, &QAction::triggered, this, &MainWindow::onOpenFirmwareSettings); + { QMenu* submenu = menu->addMenu("Savestate settings"); @@ -2446,6 +2450,14 @@ void MainWindow::onOpenAudioSettings() connect(dlg, &AudioSettingsDialog::finished, this, &MainWindow::onAudioSettingsFinished); } +void MainWindow::onOpenFirmwareSettings() +{ + FirmwareSettingsDialog* dlg = FirmwareSettingsDialog::openDlg(this); + connect(dlg, &FirmwareSettingsDialog::finished, this, &MainWindow::onFirmwareSettingsFinished); +} + +void MainWindow::onFirmwareSettingsFinished(int res) {} + void MainWindow::onUpdateAudioSettings() { SPU::SetInterpolation(Config::AudioInterp); diff --git a/src/frontend/qt_sdl/main.h b/src/frontend/qt_sdl/main.h index 1378417..0f9034f 100644 --- a/src/frontend/qt_sdl/main.h +++ b/src/frontend/qt_sdl/main.h @@ -256,10 +256,12 @@ private slots: void onInputConfigFinished(int res); void onOpenVideoSettings(); void onOpenAudioSettings(); + void onOpenFirmwareSettings(); void onUpdateAudioSettings(); void onAudioSettingsFinished(int res); void onOpenWifiSettings(); void onWifiSettingsFinished(int res); + void onFirmwareSettingsFinished(int res); void onOpenInterfaceSettings(); void onInterfaceSettingsFinished(int res); void onUpdateMouseTimer(); @@ -331,6 +333,7 @@ public: QAction* actVideoSettings; QAction* actAudioSettings; QAction* actWifiSettings; + QAction* actFirmwareSettings; QAction* actInterfaceSettings; QAction* actSavestateSRAMReloc; QAction* actScreenSize[4]; -- cgit v1.2.3