diff --git a/src/GLideNUI/ConfigDialog.cpp b/src/GLideNUI/ConfigDialog.cpp index ee5d040e..5c2efa4c 100644 --- a/src/GLideNUI/ConfigDialog.cpp +++ b/src/GLideNUI/ConfigDialog.cpp @@ -799,7 +799,7 @@ void ConfigDialog::on_buttonBox_clicked(QAbstractButton *button) msgBox.setButtonText(QMessageBox::Cancel, tr("Cancel")); if (msgBox.exec() == QMessageBox::RestoreDefaults) { const u32 enableCustomSettings = config.generalEmulation.enableCustomSettings; - config.resetToDefaults(); + resetSettings(m_strIniPath); config.generalEmulation.enableCustomSettings = enableCustomSettings; setTitle(); setRomName(m_romName); diff --git a/src/GLideNUI/Settings.cpp b/src/GLideNUI/Settings.cpp index b374fa66..cee4ef13 100644 --- a/src/GLideNUI/Settings.cpp +++ b/src/GLideNUI/Settings.cpp @@ -1,5 +1,6 @@ #include #include +#include #ifdef OS_WINDOWS #include @@ -12,6 +13,7 @@ #include "Settings.h" static const char * strIniFileName = "GLideN64.ini"; +static const char * strDefaultIniFileName = "GLideN64.default.ini"; static const char * strCustomSettingsFileName = "GLideN64.custom.ini"; static QString strUserProfile("User"); @@ -153,54 +155,11 @@ void _loadSettings(QSettings & settings) settings.endGroup(); } -void loadSettings(const QString & _strIniFolder) -{ - bool rewriteSettings = false; - { - const u32 hacks = config.generalEmulation.hacks; - QSettings settings(_strIniFolder + "/" + strIniFileName, QSettings::IniFormat); - const u32 configVersion = settings.value("version", 0).toInt(); - QString configTranslationFile = settings.value("translation", config.translationFile.c_str()).toString(); - config.resetToDefaults(); - config.generalEmulation.hacks = hacks; - config.translationFile = configTranslationFile.toLocal8Bit().constData(); - if (configVersion < CONFIG_WITH_PROFILES) { - _loadSettings(settings); - config.version = CONFIG_VERSION_CURRENT; - settings.clear(); - settings.setValue("version", CONFIG_VERSION_CURRENT); - settings.setValue("profile", strUserProfile); - settings.setValue("translation", config.translationFile.c_str()); - settings.beginGroup(strUserProfile); - writeSettings(_strIniFolder); - settings.endGroup(); - } - QString profile = settings.value("profile", strUserProfile).toString(); - if (settings.childGroups().indexOf(profile) >= 0) { - settings.beginGroup(profile); - _loadSettings(settings); - settings.endGroup(); - } else - rewriteSettings = true; - if (config.version != CONFIG_VERSION_CURRENT) - rewriteSettings = true; - } - if (rewriteSettings) { - // Keep settings up-to-date - { - QSettings settings(_strIniFolder + "/" + strIniFileName, QSettings::IniFormat); - QString profile = settings.value("profile", strUserProfile).toString(); - settings.remove(profile); - } - config.version = CONFIG_VERSION_CURRENT; - writeSettings(_strIniFolder); - } -} - -void writeSettings(const QString & _strIniFolder) +static +void _writeSettingsToFile(const QString & filename) { // QSettings settings("Emulation", "GLideN64"); - QSettings settings(_strIniFolder + "/" + strIniFileName, QSettings::IniFormat); + QSettings settings(filename, QSettings::IniFormat); settings.setValue("version", config.version); settings.setValue("translation", config.translationFile.c_str()); QString profile = settings.value("profile", strUserProfile).toString(); @@ -331,6 +290,72 @@ void writeSettings(const QString & _strIniFolder) settings.endGroup(); } +static +void _loadSettingsFromFile(const QString & filename) +{ + bool rewriteSettings = false; + { + const u32 hacks = config.generalEmulation.hacks; + QSettings settings(filename, QSettings::IniFormat); + const u32 configVersion = settings.value("version", 0).toInt(); + QString configTranslationFile = settings.value("translation", config.translationFile.c_str()).toString(); + config.resetToDefaults(); + config.generalEmulation.hacks = hacks; + config.translationFile = configTranslationFile.toLocal8Bit().constData(); + if (configVersion < CONFIG_WITH_PROFILES) { + _loadSettings(settings); + config.version = CONFIG_VERSION_CURRENT; + settings.clear(); + settings.setValue("version", CONFIG_VERSION_CURRENT); + settings.setValue("profile", strUserProfile); + settings.setValue("translation", config.translationFile.c_str()); + settings.beginGroup(strUserProfile); + _writeSettingsToFile(filename); + settings.endGroup(); + } + QString profile = settings.value("profile", strUserProfile).toString(); + if (settings.childGroups().indexOf(profile) >= 0) { + settings.beginGroup(profile); + _loadSettings(settings); + settings.endGroup(); + } else + rewriteSettings = true; + if (config.version != CONFIG_VERSION_CURRENT) + rewriteSettings = true; + } + if (rewriteSettings) { + // Keep settings up-to-date + { + QSettings settings(filename, QSettings::IniFormat); + QString profile = settings.value("profile", strUserProfile).toString(); + settings.remove(profile); + } + config.version = CONFIG_VERSION_CURRENT; + _writeSettingsToFile(filename); + } +} + +void loadSettings(const QString & _strIniFolder) +{ + _loadSettingsFromFile(_strIniFolder + "/" + strIniFileName); +} + +void writeSettings(const QString & _strIniFolder) +{ + _writeSettingsToFile(_strIniFolder + "/" + strIniFileName); +} + +void resetSettings(const QString & _strIniFolder) +{ + QString defaultSettingsFilename = _strIniFolder + "/" + strDefaultIniFileName; + QFile defaultFile(defaultSettingsFilename); + if (defaultFile.exists()) { + _loadSettingsFromFile(defaultSettingsFilename); + } else { + config.resetToDefaults(); + } +} + static u32 Adler32(u32 crc, const void *buffer, u32 count) { diff --git a/src/GLideNUI/Settings.h b/src/GLideNUI/Settings.h index c4e6a459..966c34e3 100644 --- a/src/GLideNUI/Settings.h +++ b/src/GLideNUI/Settings.h @@ -3,6 +3,7 @@ void loadSettings(const QString & _strIniFolder); void writeSettings(const QString & _strIniFolder); +void resetSettings(const QString & _strIniFolder); void loadCustomRomSettings(const QString & _strIniFolder, const char * _strRomName); void saveCustomRomSettings(const QString & _strIniFolder, const char * _strRomName); QString getTranslationFile();