port FirmwareSettings
This commit is contained in:
parent
b5996f5ab6
commit
449d3b342a
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -777,7 +777,7 @@ std::optional<Firmware> 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<DSi_NAND::NANDImage> EmuInstance::loadNAND(const std::array<u8, DS
|
|||
}
|
||||
|
||||
// override user settings, if needed
|
||||
if (Config::FirmwareOverrideSettings)
|
||||
if (localCfg.GetBool("Firmware.OverrideSettings"))
|
||||
{
|
||||
auto firmcfg = localCfg.GetTable("Firmware");
|
||||
|
||||
// we store relevant strings as UTF-8, so we need to convert them to UTF-16
|
||||
auto converter = wstring_convert<std::codecvt_utf8_utf16<char16_t>, 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<Firmware::Language>(Config::FirmwareLanguage);
|
||||
settings.Language = static_cast<Firmware::Language>(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<unique_ptr<Firmware>, 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<std::codecvt_utf8_utf16<char16_t>, 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<Firmware::Language>(Config::FirmwareLanguage);
|
||||
auto language = static_cast<Firmware::Language>(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<std::codecvt_utf8_utf16<char16_t>, char16_t>{}.from_bytes(
|
||||
|
|
|
@ -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<type*>(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<type*>(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();
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue