diff --git a/Black_Chocobo.pro b/Black_Chocobo.pro index dc171f9b..2f017a17 100644 --- a/Black_Chocobo.pro +++ b/Black_Chocobo.pro @@ -21,6 +21,7 @@ CONFIG += c++1z QT += core gui xml widgets qml SOURCES += \ + bcsettings.cpp \ main.cpp \ mainwindow.cpp \ about.cpp \ @@ -62,6 +63,7 @@ SOURCES += \ ff7tk/data/FF7Achievements.cpp HEADERS += \ + bcsettings.h \ mainwindow.h \ about.h \ bcdialog.h \ diff --git a/CMakeLists.txt b/CMakeLists.txt index d690ff20..ce6e6397 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,6 +47,7 @@ set ( blackchocobo_SRCS errbox.cpp achievementdialog.cpp bcdialog.cpp + bcsettings.cpp qhexedit/chunks.cpp qhexedit/commands.cpp qhexedit/qhexedit.cpp diff --git a/bcdialog.cpp b/bcdialog.cpp index 103a24ba..fb237c61 100644 --- a/bcdialog.cpp +++ b/bcdialog.cpp @@ -14,6 +14,7 @@ // GNU General Public License for more details. // /****************************************************************************/ #include "bcdialog.h" +#include "bcsettings.h" #include "ff7tk/data/FF7Save.h" #include #include @@ -22,13 +23,13 @@ #include #include #include -#include #include #include #include -QRect readGeometry(const QByteArray &geometry) +QRect readGeometry() { + QByteArray geometry = BCSettings::instance()->value(SETTINGS::MAINGEOMETRY).toByteArray(); if (geometry.size() < 4) return QRect(); QDataStream stream(geometry); @@ -62,11 +63,9 @@ QRect readGeometry(const QByteArray &geometry) return restoredGeometry; } -QString BCDialog::getOpenFileName(QWidget *parent, QSettings *settings, const QString &title, const QString &path , const QString &nameFilters, const QString &initSelection) +QString BCDialog::getOpenFileName(QWidget *parent, const QString &title, const QString &path , const QString &nameFilters, const QString &initSelection) { - if (!settings) - return QString(); - const QRect mainRect = readGeometry(settings->value(QStringLiteral("MainGeometry")).toByteArray()); + const QRect mainRect = readGeometry(); QFileDialog dialog(parent, title, path.isEmpty() ? QDir::homePath() : path, nameFilters); int dialogWidth = int(mainRect.width() * 0.80); int dialogHeight = int (mainRect.height() * 0.80); @@ -80,7 +79,7 @@ QString BCDialog::getOpenFileName(QWidget *parent, QSettings *settings, const Q if (!fileName.isEmpty()) dialog.selectFile(fileName); QList sideBarUrls; - for(const QString &url : settings->value("sidebarUrls").toStringList()) + for(const QString &url : BCSettings::instance()->value(SETTINGS::SIDEBARURLS).toStringList()) sideBarUrls.append(QUrl::fromLocalFile(url)); dialog.setSidebarUrls(sideBarUrls); @@ -89,11 +88,9 @@ QString BCDialog::getOpenFileName(QWidget *parent, QSettings *settings, const Q return QString(); } -QString BCDialog::getExistingDirectory(QWidget *parent, QSettings *settings, const QString &title, const QString &path, const QString &initSelection) +QString BCDialog::getExistingDirectory(QWidget *parent, const QString &title, const QString &path, const QString &initSelection) { - if (!settings) - return QString(); - QRect mainRect = readGeometry(settings->value(QStringLiteral("MainGeometry")).toByteArray()); + QRect mainRect = readGeometry(); int dialogWidth = int(mainRect.width() * 0.80); int dialogHeight = int (mainRect.height() * 0.80); QFileDialog dialog(parent, title, path.isEmpty() ? QDir::homePath() : path, initSelection); @@ -109,7 +106,7 @@ QString BCDialog::getExistingDirectory(QWidget *parent, QSettings *settings, con dialog.selectFile(fileName); dialog.setLabelText(QFileDialog::LookIn, QObject::tr("Places")); QList sideBarUrls; - for(const QString &url : settings->value("sidebarUrls").toStringList()) + for(const QString &url : BCSettings::instance()->value(SETTINGS::SIDEBARURLS).toStringList()) sideBarUrls.append(QUrl::fromLocalFile(url)); dialog.setSidebarUrls(sideBarUrls); @@ -118,11 +115,9 @@ QString BCDialog::getExistingDirectory(QWidget *parent, QSettings *settings, con return QString(); } -QString BCDialog::getSaveFileName(QWidget *parent, QSettings *settings, const QString ®ion, const QString &title, const QString &path , const QString &nameFilters, QString * chosenType, const QString &initSelection) +QString BCDialog::getSaveFileName(QWidget *parent, const QString ®ion, const QString &title, const QString &path , const QString &nameFilters, QString * chosenType, const QString &initSelection) { - if (!settings) - return QString(); - QRect mainRect = readGeometry(settings->value(QStringLiteral("MainGeometry")).toByteArray()); + QRect mainRect = readGeometry(); int dialogWidth = int(mainRect.width() * 0.80); int dialogHeight = int (mainRect.height() * 0.80); QFileDialog dialog(parent, title, path.isEmpty() ? QDir::homePath() : path, nameFilters); @@ -134,7 +129,7 @@ QString BCDialog::getSaveFileName(QWidget *parent, QSettings *settings, const Q if (!fileName.isEmpty()) dialog.selectFile(fileName); QList sideBarUrls; - for(const QString &url : settings->value("sidebarUrls").toStringList()) + for(const QString &url : BCSettings::instance()->value(SETTINGS::SIDEBARURLS).toStringList()) sideBarUrls.append(QUrl::fromLocalFile(url)); dialog.setSidebarUrls(sideBarUrls); @@ -187,10 +182,8 @@ QString BCDialog::getSaveFileName(QWidget *parent, QSettings *settings, const Q return QString(); } -void BCDialog::editSideBarPaths(QWidget *parent, QSettings * settings) +void BCDialog::editSideBarPaths(QWidget *parent) { - if (!settings) - return; QDialog dialog(parent); dialog.setWindowTitle(QObject::tr("Edit Places")); dialog.setGeometry(parent->geometry()); @@ -199,13 +192,13 @@ void BCDialog::editSideBarPaths(QWidget *parent, QSettings * settings) QListWidget listWidget; listWidget.setSelectionMode(QListWidget::SingleSelection); listWidget.setDragDropMode(QAbstractItemView::InternalMove); - QStringList urls = settings->value(QStringLiteral("sidebarUrls")).toStringList(); + QStringList urls = BCSettings::instance()->value(SETTINGS::SIDEBARURLS).toStringList(); for (const QString &string : qAsConst(urls)) listWidget.addItem(string); QPushButton btnAdd(QIcon::fromTheme(QStringLiteral("list-add"), QIcon(QStringLiteral(":/icon/list-add"))), QString(), nullptr); btnAdd.setToolTip(QObject::tr("Add a place")); - QObject::connect(&btnAdd, &QPushButton::clicked, [parent, settings, &listWidget]{ - QString fileName = getExistingDirectory(parent, settings, QObject::tr("Select a path to add to places")); + QObject::connect(&btnAdd, &QPushButton::clicked, [parent, &listWidget]{ + QString fileName = getExistingDirectory(parent, QObject::tr("Select a path to add to places")); if (!fileName.isEmpty()) listWidget.addItem(fileName); }); @@ -232,7 +225,7 @@ void BCDialog::editSideBarPaths(QWidget *parent, QSettings * settings) for (QAbstractButton *btn : dialog.findChildren(QString(),Qt::FindChildrenRecursively)) btn->setIconSize(iconSize); - QObject::connect(&btnBox, &QDialogButtonBox::clicked, [&btnBox, &listWidget, &dialog, settings](QAbstractButton *button){ + QObject::connect(&btnBox, &QDialogButtonBox::clicked, [&btnBox, &listWidget, &dialog](QAbstractButton *button){ if (button == btnBox.button(QDialogButtonBox::Save)) dialog.accept(); else if (button == btnBox.button(QDialogButtonBox::Cancel)) @@ -241,17 +234,17 @@ void BCDialog::editSideBarPaths(QWidget *parent, QSettings * settings) listWidget.clear(); listWidget.addItem(QDir::rootPath()); listWidget.addItem(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); - if(!settings->value(QStringLiteral("load_path")).toString().isEmpty()) - listWidget.addItem(settings->value(QStringLiteral("load_path")).toString()); - if(!settings->value(QStringLiteral("save_pc_path")).toString().isEmpty()) - listWidget.addItem(settings->value(QStringLiteral("save_pc_path")).toString()); - if(!settings->value(QStringLiteral("save_emu_path")).toString().isEmpty()) - listWidget.addItem(settings->value(QStringLiteral("save_emu_path")).toString()); - if(!settings->value(QStringLiteral("char_stat_folder")).toString().isEmpty()) - listWidget.addItem(settings->value(QStringLiteral("char_stat_folder")).toString()); + if(!BCSettings::instance()->value(SETTINGS::LOADPATH).toString().isEmpty()) + listWidget.addItem(BCSettings::instance()->value(SETTINGS::LOADPATH).toString()); + if(!BCSettings::instance()->value(SETTINGS::PCSAVEPATH).toString().isEmpty()) + listWidget.addItem(BCSettings::instance()->value(SETTINGS::PCSAVEPATH).toString()); + if(!BCSettings::instance()->value(SETTINGS::EMUSAVEPATH).toString().isEmpty()) + listWidget.addItem(BCSettings::instance()->value(SETTINGS::EMUSAVEPATH).toString()); + if(!BCSettings::instance()->value(SETTINGS::STATFOLDER).toString().isEmpty()) + listWidget.addItem(BCSettings::instance()->value(SETTINGS::STATFOLDER).toString()); } else if (button == btnBox.button(QDialogButtonBox::Reset)) { listWidget.clear(); - for (const QString &string : settings->value(QStringLiteral("sidebarUrls")).toStringList()) + for (const QString &string : BCSettings::instance()->value(SETTINGS::SIDEBARURLS).toStringList()) listWidget.addItem(string); } }); @@ -260,7 +253,7 @@ void BCDialog::editSideBarPaths(QWidget *parent, QSettings * settings) urls.clear(); for ( int i =0; i < listWidget.count(); i++) urls.append(listWidget.item(i)->text()); - settings->setValue(QStringLiteral("sidebarUrls"), urls); + BCSettings::instance()->setValue(SETTINGS::SIDEBARURLS, urls); } } diff --git a/bcdialog.h b/bcdialog.h index dea922e1..d71c07cd 100644 --- a/bcdialog.h +++ b/bcdialog.h @@ -24,9 +24,9 @@ class FF7Save; class BCDialog { public: - static QString getOpenFileName(QWidget *parent = nullptr, QSettings *settings = nullptr, const QString &title = QString(), const QString &path = QDir::homePath(), const QString &nameFilters = QString(), const QString &initSelection = QString()); - static QString getExistingDirectory(QWidget *parent = nullptr, QSettings *settings = nullptr, const QString &title = QString(), const QString &path = QDir::homePath(), const QString &initSelection = QString()); - static QString getSaveFileName(QWidget *parent = nullptr, QSettings *settings = nullptr, const QString ®ion = QString(), const QString &title = QString(), const QString &path = QDir::homePath(), const QString &nameFilters = QString(), QString * chosenType = nullptr, const QString &initSelection = QString()); - static void editSideBarPaths(QWidget *parent= nullptr, QSettings *settings = nullptr); + static QString getOpenFileName(QWidget *parent = nullptr, const QString &title = QString(), const QString &path = QDir::homePath(), const QString &nameFilters = QString(), const QString &initSelection = QString()); + static QString getExistingDirectory(QWidget *parent = nullptr, const QString &title = QString(), const QString &path = QDir::homePath(), const QString &initSelection = QString()); + static QString getSaveFileName(QWidget *parent = nullptr, const QString ®ion = QString(), const QString &title = QString(), const QString &path = QDir::homePath(), const QString &nameFilters = QString(), QString * chosenType = nullptr, const QString &initSelection = QString()); + static void editSideBarPaths(QWidget *parent= nullptr); static int fixTimeDialog(QWidget* parent, bool slotPAL = false); }; diff --git a/bcsettings.cpp b/bcsettings.cpp new file mode 100644 index 00000000..69012c55 --- /dev/null +++ b/bcsettings.cpp @@ -0,0 +1,120 @@ +/****************************************************************************/ +// copyright 2020 Chris Rizzitello // +// // +// This file is part of Black Chocobo. // +// // +// Black Chocobo 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. // +// // +// Black Chocobo 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. // +/****************************************************************************/ +#include "bcsettings.h" +#include +#include +#include +#include +#include + + +BCSettings *BCSettings::instance() +{ + static BCSettings m; + return &m; +} + +BCSettings::BCSettings(QObject *parent) + : QObject(parent) +{ + initSettings(); + cleanSettings(); +} + +void BCSettings::initSettings() +{ +#ifdef STATIC + settings = new QSettings(QStringLiteral("%1/settings.ini").arg(QCoreApplication::applicationDirPath()), QSettings::IniFormat); +#else //STATIC + if (QFile(QStringLiteral("%1/settings.ini").arg(QCoreApplication::applicationDirPath())).exists()) + settings = new QSettings(QStringLiteral("%1/settings.ini").arg(QCoreApplication::applicationDirPath()), QSettings::IniFormat); + else + settings = new QSettings(QSettings::NativeFormat, QSettings::UserScope, QStringLiteral("blackchocobo"), QStringLiteral("settings"), nullptr); +#endif //STATIC +#ifdef Q_OS_UNIX +#ifndef Q_OS_MAC + //check the lang path and if running from /usr/bin (and Unix) then usr copies in /usr/share/blackchocobo + if (QCoreApplication::applicationDirPath().startsWith("/usr/bin")) + settings->setValue(SETTINGS::LANGPATH, QStringLiteral("/usr/share/blackchocobo")); + else + settings->setValue(SETTINGS::LANGPATH, QCoreApplication::applicationDirPath()); +#endif +#else + settings->setValue(SETTINGS::LANGPATH, QCoreApplication::applicationDirPath()); +#endif + if (settings->value(SETTINGS::SIDEBARURLS).isNull()) { + QStringList defaultBarUrls; + defaultBarUrls.append(QDir::rootPath()); + defaultBarUrls.append(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); + if (!settings->value(SETTINGS::LOADPATH).toString().isEmpty()) + defaultBarUrls.append(settings->value(SETTINGS::LOADPATH).toString()); + if (!settings->value(SETTINGS::PCSAVEPATH).toString().isEmpty()) + defaultBarUrls.append(settings->value(SETTINGS::PCSAVEPATH).toString()); + if (!settings->value(SETTINGS::EMUSAVEPATH).toString().isEmpty()) + defaultBarUrls.append(settings->value(SETTINGS::EMUSAVEPATH).toString()); + if (!settings->value(SETTINGS::STATFOLDER).toString().isEmpty()) + defaultBarUrls.append(settings->value(SETTINGS::STATFOLDER).toString()); + settings->setValue(SETTINGS::SIDEBARURLS, defaultBarUrls); + } + if (settings->value(SETTINGS::EDITABLECOMBOS).isNull()) + settings->setValue(SETTINGS::EDITABLECOMBOS, true); + + if (settings->value(SETTINGS::REGION).isNull()) + settings->setValue(SETTINGS::REGION, QStringLiteral("NTSC-U")); +} + +void BCSettings::cleanSettings() +{ + for(const QString &key : settings->allKeys()) { + if(!validSettingsNames.contains(key)) + settings->remove(key); + } +} + +void BCSettings::setValue(const QString &setting, const QVariant &value) +{ + settings->setValue(setting, value); + settings->sync(); + settingsChanged(); +} + +QVariant BCSettings::value(const QString &setting, const QVariant &defaultValue) +{ + return settings->value(setting, defaultValue); +} + +void BCSettings::restoreDefaultSettings() +{ + settings->setValue(SETTINGS::LOADPATH, QString()); + settings->setValue(SETTINGS::LOADPATH, QString()); + settings->setValue(SETTINGS::DEFAULTSAVE, QString()); + settings->setValue(SETTINGS::STATFOLDER, QString()); + settings->setValue(SETTINGS::PCSAVEPATH, QString()); + settings->setValue(SETTINGS::EMUSAVEPATH, QString()); + settings->setValue(SETTINGS::EDITABLECOMBOS, true); + settings->setValue(SETTINGS::CHARADVANCED, false); + settings->setValue(SETTINGS::CHOCOADVANCED, false); + settings->setValue(SETTINGS::LOCVIEWADVANCED, false); + settings->setValue(SETTINGS::ENABLETEST, false); + settings->setValue(SETTINGS::PROGRESSADVANCED, false); + settings->setValue(SETTINGS::ALWAYSSHOWCONTROLLERMAP, false); + settings->setValue(SETTINGS::WORLDMAPADVANCED, false); + settings->setValue(SETTINGS::REGION, QStringLiteral("NTSC-U")); + settings->setValue(SETTINGS::CUSTOMDEFAULTSAVE, false); + settings->setValue(SETTINGS::SCALE, 1.00); + settings->setValue(SETTINGS::AUTOGROWTH, true); + settings->setValue(SETTINGS::USENATIVEDIALOGS, false); +} diff --git a/bcsettings.h b/bcsettings.h new file mode 100644 index 00000000..fcc6cf71 --- /dev/null +++ b/bcsettings.h @@ -0,0 +1,87 @@ +/****************************************************************************/ +// copyright 2020 Chris Rizzitello // +// // +// This file is part of Black Chocobo. // +// // +// Black Chocobo 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. // +// // +// Black Chocobo 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. // +/****************************************************************************/ +#pragma once +#include +#include +#include +namespace SETTINGS { + inline const static QString MAINGEOMETRY = QStringLiteral("MainGeometry"); + inline const static QString AUTOGROWTH = QStringLiteral("autochargrowth"); + inline const static QString CHARADVANCED = QStringLiteral("charEditorAdvanced"); + inline const static QString STATFOLDER = QStringLiteral("char_stat_folder"); + inline const static QString CHOCOADVANCED = QStringLiteral("chocoboEditorAdvanced"); + inline const static QString DEFAULTSAVE = QStringLiteral("default_save"); + inline const static QString EDITABLECOMBOS = QStringLiteral("editableCombos"); + inline const static QString PROGRESSADVANCED = QStringLiteral("gameProgressAdvanced"); + inline const static QString LANG = QStringLiteral("lang"); + inline const static QString LANGPATH = QStringLiteral("langPath"); + inline const static QString LOADPATH = QStringLiteral("load_path"); + inline const static QString LOCVIEWADVANCED = QStringLiteral("locationViewerAdvanced"); + inline const static QString ALWAYSSHOWCONTROLLERMAP = QStringLiteral("optionsShowMapping"); + inline const static QString CUSTOMDEFAULTSAVE = QStringLiteral("override_default_save"); + inline const static QString REGION = QStringLiteral("region"); + inline const static QString EMUSAVEPATH = QStringLiteral("save_emu_path"); + inline const static QString PCSAVEPATH = QStringLiteral("save_pc_path"); + inline const static QString SCALE = QStringLiteral("scale"); + inline const static QString ENABLETEST = QStringLiteral("show_test"); + inline const static QString WORLDMAPADVANCED = QStringLiteral("worldMapAdvanced"); + inline const static QString USENATIVEDIALOGS = QStringLiteral("useNativeDialogs"); + inline const static QString SIDEBARURLS = QStringLiteral("sidebarUrls"); +} + +class BCSettings : public QObject +{ + Q_OBJECT +public: + static BCSettings *instance(); + void setValue(const QString &setting = QString(), const QVariant &value = QVariant()); + QVariant value(const QString &setting = QString(), const QVariant &defaultValue = QVariant()); + void restoreDefaultSettings(); +signals: + void settingsChanged(); +private: + explicit BCSettings(QObject *parent = nullptr); + BCSettings *operator = (BCSettings &other) = delete; + BCSettings(const BCSettings &other) = delete; + ~BCSettings() = default; + void initSettings(); + void cleanSettings(); + QSettings *settings = nullptr; + inline static const QStringList validSettingsNames = { + SETTINGS::MAINGEOMETRY, + SETTINGS::AUTOGROWTH, + SETTINGS::CHARADVANCED, + SETTINGS::STATFOLDER, + SETTINGS::CHOCOADVANCED, + SETTINGS::DEFAULTSAVE, + SETTINGS::EDITABLECOMBOS, + SETTINGS::PROGRESSADVANCED, + SETTINGS::LANG, + SETTINGS::LANGPATH, + SETTINGS::LOADPATH, + SETTINGS::LOCVIEWADVANCED, + SETTINGS::ALWAYSSHOWCONTROLLERMAP, + SETTINGS::CUSTOMDEFAULTSAVE, + SETTINGS::REGION, + SETTINGS::EMUSAVEPATH, + SETTINGS::PCSAVEPATH, + SETTINGS::SCALE, + SETTINGS::ENABLETEST, + SETTINGS::WORLDMAPADVANCED, + SETTINGS::USENATIVEDIALOGS, + SETTINGS::SIDEBARURLS + }; +}; diff --git a/main.cpp b/main.cpp index c05b6495..e2444b71 100644 --- a/main.cpp +++ b/main.cpp @@ -19,7 +19,6 @@ #include #include #include -#include #include "mainwindow.h" #if defined(STATIC) && (QT_VERSION < QT_VERSION_CHECK(5, 0, 0)) diff --git a/mainwindow.cpp b/mainwindow.cpp index 3eb6096d..14fadead 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -21,6 +21,7 @@ #include "ff7tk/data/FF7Item.h" #include "ff7tk/data/FF7Location.h" #include "bcdialog.h" +#include "bcsettings.h" /*~~~~~~~~GUI Set Up~~~~~~~*/ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) @@ -49,7 +50,7 @@ MainWindow::MainWindow(QWidget *parent) loadBasicSettings(); populateLanguageMenu(); initDisplay(); - setScale(settings->value(SETTINGS::SCALE).toDouble()); + setScale(BCSettings::instance()->value(SETTINGS::SCALE).toDouble()); populateCombos(); init_style(); loadChildWidgetSettings(); @@ -62,16 +63,16 @@ MainWindow::MainWindow(QWidget *parent) void MainWindow::populateLanguageMenu() { m_translations.clear(); - QDir dir(QStringLiteral("%1/lang").arg(settings->value(SETTINGS::LANGPATH).toString())); + QDir dir(QStringLiteral("%1/lang").arg(BCSettings::instance()->value(SETTINGS::LANGPATH).toString())); QStringList langList = dir.entryList(QStringList("bchoco_*.qm"), QDir::Files, QDir::Name); for (const QString &translation : langList) { QTranslator *translator = new QTranslator; translator->load(translation, dir.absolutePath()); QString lang = translation.mid(7, 2); m_translations.insert(lang, translator); - bool currentLang = (settings->value(SETTINGS::LANG, QStringLiteral("en")).toString() == lang); + bool currentLang = (BCSettings::instance()->value(SETTINGS::LANG, QStringLiteral("en")).toString() == lang); if (currentLang) { - settings->setValue(SETTINGS::LANG, lang); + BCSettings::instance()->setValue(SETTINGS::LANG, lang); QApplication::installTranslator(translator); } } @@ -112,7 +113,7 @@ void MainWindow::initDisplay() hexLayout->addWidget(hexEditor); ui->group_hexedit->setLayout(hexLayout); - double scale = settings->value(SETTINGS::SCALE).toDouble(); + double scale = BCSettings::instance()->value(SETTINGS::SCALE).toDouble(); char_editor = new CharEditor(scale); QHBoxLayout *char_editor_layout = new QHBoxLayout; char_editor_layout->setContentsMargins(0, 0, 0, 0); @@ -127,7 +128,7 @@ void MainWindow::initDisplay() ui->group_items->setFixedWidth(itemlist->width() + itemlist->contentsMargins().left() + itemlist->contentsMargins().right() + ui->group_items->contentsMargins().left() + ui->group_items->contentsMargins().right()); locationViewer = new LocationViewer(scale); - locationViewer->setTranslationBaseFile(QStringLiteral("%1/lang/bchoco_").arg(settings->value(SETTINGS::LANGPATH).toString())); + locationViewer->setTranslationBaseFile(QStringLiteral("%1/lang/bchoco_").arg(BCSettings::instance()->value(SETTINGS::LANGPATH).toString())); locationViewer->setRegion("BASCUS-94163FF7-S00"); QVBoxLayout *locLayout = new QVBoxLayout; locLayout->setContentsMargins(0, 0, 0, 0); @@ -385,80 +386,39 @@ void MainWindow::init_connections() void MainWindow::loadBasicSettings() { -#ifdef STATIC - settings = new QSettings(QStringLiteral("%1/settings.ini").arg(QCoreApplication::applicationDirPath()), QSettings::IniFormat); -#else //STATIC - if (QFile(QStringLiteral("%1/settings.ini").arg(QCoreApplication::applicationDirPath())).exists()) - settings = new QSettings(QStringLiteral("%1/settings.ini").arg(QCoreApplication::applicationDirPath()), QSettings::IniFormat); - else - settings = new QSettings(QSettings::NativeFormat, QSettings::UserScope, QStringLiteral("blackchocobo"), QStringLiteral("settings"), nullptr); -#endif //STATIC - -#ifdef Q_OS_UNIX + if (BCSettings::instance()->value(SETTINGS::SCALE).isNull()) #ifndef Q_OS_MAC - //check the lang path and if running from /usr/bin (and Unix) then usr copies in /usr/share/blackchocobo - if (QCoreApplication::applicationDirPath().startsWith("/usr/bin")) - settings->setValue(SETTINGS::LANGPATH, QStringLiteral("/usr/share/blackchocobo")); - else - settings->setValue(SETTINGS::LANGPATH, QCoreApplication::applicationDirPath()); -#endif + BCSettings::instance()->setValue(SETTINGS::SCALE, std::max(double(qApp->desktop()->logicalDpiX() / 96.0f), 1.0)); #else - settings->setValue(SETTINGS::LANGPATH, QCoreApplication::applicationDirPath()); + BCSettings::instance()->setValue(SETTINGS::SCALE, std::max(double(qApp->desktop()->logicalDpiX() / 72.0f), 1.0)); #endif - //are any empty? if so set them accordingly. - - if (settings->value(SETTINGS::SIDEBARURLS).isNull()) { - QStringList defaultBarUrls; - defaultBarUrls.append(QDir::rootPath()); - defaultBarUrls.append(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); - if (!settings->value(SETTINGS::LOADPATH).toString().isEmpty()) - defaultBarUrls.append(settings->value(SETTINGS::LOADPATH).toString()); - if (!settings->value(SETTINGS::PCSAVEPATH).toString().isEmpty()) - defaultBarUrls.append(settings->value(SETTINGS::PCSAVEPATH).toString()); - if (!settings->value(SETTINGS::EMUSAVEPATH).toString().isEmpty()) - defaultBarUrls.append(settings->value(SETTINGS::EMUSAVEPATH).toString()); - if (!settings->value(SETTINGS::STATFOLDER).toString().isEmpty()) - defaultBarUrls.append(settings->value(SETTINGS::STATFOLDER).toString()); - settings->setValue(SETTINGS::SIDEBARURLS, defaultBarUrls); - } - if (settings->value(SETTINGS::SCALE).isNull()) -#ifndef Q_OS_MAC - settings->setValue(SETTINGS::SCALE, std::max(double(qApp->desktop()->logicalDpiX() / 96.0f), 1.0)); -#else - settings->setValue(SETTINGS::SCALE, std::max(double(qApp->desktop()->logicalDpiX() / 72.0f), 1.0)); -#endif - if (settings->value(SETTINGS::EDITABLECOMBOS).isNull()) - settings->setValue(SETTINGS::EDITABLECOMBOS, true); - - if (settings->value(SETTINGS::REGION).isNull()) - settings->setValue(SETTINGS::REGION, QStringLiteral("NTSC-U")); - if (settings->value(SETTINGS::MAINGEOMETRY).isNull()) { + if (BCSettings::instance()->value(SETTINGS::MAINGEOMETRY).isNull()) { setGeometry(x(), y(), minimumWidth(), minimumHeight()); saveGeometry(); } - restoreGeometry(settings->value(SETTINGS::MAINGEOMETRY).toByteArray()); + restoreGeometry(BCSettings::instance()->value(SETTINGS::MAINGEOMETRY).toByteArray()); } void MainWindow::loadChildWidgetSettings() { - QApplication::setAttribute(Qt::AA_DontUseNativeDialogs, !settings->value(SETTINGS::USENATIVEDIALOGS, false).toBool()); - for(const QString &url : settings->value(SETTINGS::SIDEBARURLS).toStringList()) + QApplication::setAttribute(Qt::AA_DontUseNativeDialogs, !BCSettings::instance()->value(SETTINGS::USENATIVEDIALOGS, false).toBool()); + for(const QString &url : BCSettings::instance()->value(SETTINGS::SIDEBARURLS).toStringList()) m_sideBarUrls.append(QUrl::fromLocalFile(url)); - char_editor->setEditableComboBoxes(settings->value(SETTINGS::EDITABLECOMBOS, true).toBool()); - materia_editor->setEditableMateriaCombo(settings->value(SETTINGS::EDITABLECOMBOS, true).toBool()); - itemlist->setEditableItemCombo(settings->value(SETTINGS::EDITABLECOMBOS, true).toBool()); - char_editor->setAdvancedMode(settings->value(SETTINGS::CHARADVANCED, false).toBool()); - char_editor->setAutoLevel(settings->value(SETTINGS::AUTOGROWTH, true).toBool()); - char_editor->setAutoStatCalc(settings->value(SETTINGS::AUTOGROWTH, true).toBool()); - chocoboManager->setAdvancedMode(settings->value(SETTINGS::CHOCOADVANCED, false).toBool()); - locationViewer->setAdvancedMode(settings->value(SETTINGS::LOCVIEWADVANCED, false).toBool()); - ui->tabWidget->setTabEnabled(9, settings->value(SETTINGS::ENABLETEST, false).toBool()); + char_editor->setEditableComboBoxes(BCSettings::instance()->value(SETTINGS::EDITABLECOMBOS, true).toBool()); + materia_editor->setEditableMateriaCombo(BCSettings::instance()->value(SETTINGS::EDITABLECOMBOS, true).toBool()); + itemlist->setEditableItemCombo(BCSettings::instance()->value(SETTINGS::EDITABLECOMBOS, true).toBool()); + char_editor->setAdvancedMode(BCSettings::instance()->value(SETTINGS::CHARADVANCED, false).toBool()); + char_editor->setAutoLevel(BCSettings::instance()->value(SETTINGS::AUTOGROWTH, true).toBool()); + char_editor->setAutoStatCalc(BCSettings::instance()->value(SETTINGS::AUTOGROWTH, true).toBool()); + chocoboManager->setAdvancedMode(BCSettings::instance()->value(SETTINGS::CHOCOADVANCED, false).toBool()); + locationViewer->setAdvancedMode(BCSettings::instance()->value(SETTINGS::LOCVIEWADVANCED, false).toBool()); + ui->tabWidget->setTabEnabled(9, BCSettings::instance()->value(SETTINGS::ENABLETEST, false).toBool()); if (ff7->format() == FF7SaveInfo::FORMAT::PC || ff7->format() == FF7SaveInfo::FORMAT::SWITCH || ff7->format() == FF7SaveInfo::FORMAT::UNKNOWN) - setControllerMappingVisible(settings->value(SETTINGS::ALWAYSSHOWCONTROLLERMAP, false).toBool()); - ui->bm_unknown->setVisible(settings->value(SETTINGS::PROGRESSADVANCED, false).toBool()); - ui->bh_id->setVisible(settings->value(SETTINGS::WORLDMAPADVANCED, false).toBool()); - ui->leader_id->setVisible(settings->value(SETTINGS::WORLDMAPADVANCED, false).toBool()); + setControllerMappingVisible(BCSettings::instance()->value(SETTINGS::ALWAYSSHOWCONTROLLERMAP, false).toBool()); + ui->bm_unknown->setVisible(BCSettings::instance()->value(SETTINGS::PROGRESSADVANCED, false).toBool()); + ui->bh_id->setVisible(BCSettings::instance()->value(SETTINGS::WORLDMAPADVANCED, false).toBool()); + ui->leader_id->setVisible(BCSettings::instance()->value(SETTINGS::WORLDMAPADVANCED, false).toBool()); } /*~~~~~~ END GUI SETUP ~~~~~~~*/ MainWindow::~MainWindow() @@ -518,15 +478,15 @@ void MainWindow::closeEvent(QCloseEvent *e) else e->accept(); } - settings->setValue(SETTINGS::MAINGEOMETRY, saveGeometry()); + BCSettings::instance()->setValue(SETTINGS::MAINGEOMETRY, saveGeometry()); } void MainWindow::resizeEvent(QResizeEvent *) { - settings->setValue(SETTINGS::MAINGEOMETRY, saveGeometry()); + BCSettings::instance()->setValue(SETTINGS::MAINGEOMETRY, saveGeometry()); } void MainWindow::moveEvent(QMoveEvent *) { - settings->setValue(SETTINGS::MAINGEOMETRY, saveGeometry()); + BCSettings::instance()->setValue(SETTINGS::MAINGEOMETRY, saveGeometry()); } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~LOAD/SAVE FUNCTIONS~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ void MainWindow::on_actionOpen_Save_File_triggered() @@ -536,7 +496,7 @@ void MainWindow::on_actionOpen_Save_File_triggered() return;//cancel load. } - QString fileName = BCDialog::getOpenFileName(this, settings, tr("Open Final Fantasy 7 Save"), settings->value(SETTINGS::LOADPATH).toString(), FF7SaveInfo::instance()->knownTypesFilter()); + QString fileName = BCDialog::getOpenFileName(this, tr("Open Final Fantasy 7 Save"), BCSettings::instance()->value(SETTINGS::LOADPATH).toString(), FF7SaveInfo::instance()->knownTypesFilter()); if (!fileName.isEmpty()) loadFileFull(fileName, 0); } @@ -581,15 +541,15 @@ void MainWindow::loadFileFull(const QString &fileName, int reload) /*~~~~~~~~~~~~~~~~~IMPORT PSX~~~~~~~~~~~~~~~~~~*/ void MainWindow::on_actionImport_Slot_From_File_triggered() { - QString fileName = BCDialog::getOpenFileName(this, settings, - tr("Open Final Fantasy 7 Save"), settings->value(SETTINGS::LOADPATH).toString(), + QString fileName = BCDialog::getOpenFileName(this, + tr("Open Final Fantasy 7 Save"), BCSettings::instance()->value(SETTINGS::LOADPATH).toString(), FF7SaveInfo::instance()->knownTypesFilter()); if (!fileName.isEmpty()) { FF7Save *tempSave = new FF7Save(); if (tempSave->loadFile(fileName)) { int fileSlot = 0; if (FF7SaveInfo::instance()->slotCount(tempSave->format()) > 1) { - SlotSelect *SSelect = new SlotSelect(settings->value(SETTINGS::SCALE).toDouble(), tempSave, false); + SlotSelect *SSelect = new SlotSelect(BCSettings::instance()->value(SETTINGS::SCALE).toDouble(), tempSave, false); SSelect->move(x() + ((width() - SSelect->width()) / 2), y() + (SSelect->height() /2)); fileSlot = SSelect->exec(); if (fileSlot == -1) { @@ -611,7 +571,7 @@ void MainWindow::on_actionImport_Slot_From_File_triggered() /*~~~~~~~~~~~~~~~~~IMPORT Char~~~~~~~~~~~~~~~~~*/ void MainWindow::on_actionImport_char_triggered() { - QString fileName = BCDialog::getOpenFileName(this, settings, tr("Select FF7 Character Stat File"), settings->value(SETTINGS::STATFOLDER).toString(), tr("FF7 Character Stat File(*.char)")); + QString fileName = BCDialog::getOpenFileName(this, tr("Select FF7 Character Stat File"), BCSettings::instance()->value(SETTINGS::STATFOLDER).toString(), tr("FF7 Character Stat File(*.char)")); if (fileName.isEmpty()) return; QFile file(fileName); @@ -632,8 +592,8 @@ void MainWindow::on_actionImport_char_triggered() void MainWindow::on_actionExport_char_triggered() { - QString fileName = BCDialog::getSaveFileName(this, settings, ff7->region(s), - tr("Save FF7 Character File"), settings->value(SETTINGS::STATFOLDER).toString(), + QString fileName = BCDialog::getSaveFileName(this, ff7->region(s), + tr("Save FF7 Character File"), BCSettings::instance()->value(SETTINGS::STATFOLDER).toString(), tr("FF7 Character Stat File(*.char)")); if (!fileName.isEmpty()) { if (ff7->exportCharacter(s, curchar, fileName)) @@ -666,13 +626,13 @@ bool MainWindow::on_actionSave_File_As_triggered() QString path; if (ff7->format() == FF7SaveInfo::FORMAT::PC) - path = settings->value(SETTINGS::PCSAVEPATH).toString(); + path = BCSettings::instance()->value(SETTINGS::PCSAVEPATH).toString(); else if ((ff7->format() == FF7SaveInfo::FORMAT::VMC) || (ff7->format() == FF7SaveInfo::FORMAT::VGS) || (ff7->format() == FF7SaveInfo::FORMAT::DEX)) - path = settings->value(SETTINGS::EMUSAVEPATH).toString(); + path = BCSettings::instance()->value(SETTINGS::EMUSAVEPATH).toString(); - QString fileName = BCDialog::getSaveFileName(this, settings, ff7->region(s), tr("Select A File to Save As"), path , typeMap.keys().join(";;"), &selectedType, QFile(ff7->fileName()).fileName()); + QString fileName = BCDialog::getSaveFileName(this, ff7->region(s), tr("Select A File to Save As"), path , typeMap.keys().join(";;"), &selectedType, QFile(ff7->fileName()).fileName()); if (fileName.isEmpty()) return false; @@ -710,11 +670,11 @@ bool MainWindow::saveFileFull(const QString &fileName) void MainWindow::on_actionNew_Game_triggered() { - QString save_name = settings->value(SETTINGS::CUSTOMDEFAULTSAVE).toBool() ? - settings->value(SETTINGS::DEFAULTSAVE).toString() : QString(); + QString save_name = BCSettings::instance()->value(SETTINGS::CUSTOMDEFAULTSAVE).toBool() ? + BCSettings::instance()->value(SETTINGS::DEFAULTSAVE).toString() : QString(); QString region = ff7->region(s).isEmpty() ? - settings->value(SETTINGS::REGION).toString() : ff7->region(s); + BCSettings::instance()->value(SETTINGS::REGION).toString() : ff7->region(s); ff7->newGame(s, region, save_name);//call the new game function ui->statusBar->showMessage(tr("New Game Created - Using: %1") @@ -727,8 +687,8 @@ void MainWindow::on_actionNew_Game_triggered() void MainWindow::on_actionNew_Game_Plus_triggered() { QString save_name; - if (settings->value(SETTINGS::CUSTOMDEFAULTSAVE).toBool()) - save_name = settings->value(SETTINGS::DEFAULTSAVE).toString(); + if (BCSettings::instance()->value(SETTINGS::CUSTOMDEFAULTSAVE).toBool()) + save_name = BCSettings::instance()->value(SETTINGS::DEFAULTSAVE).toString(); ff7->newGamePlus(s, ff7->fileName(), save_name); ui->statusBar->showMessage(tr("New Game Plus Created - Using: %1") @@ -780,15 +740,14 @@ void MainWindow::on_actionPaste_Slot_triggered() } void MainWindow::on_actionShow_Options_triggered() { - Options odialog(this, settings); - + Options odialog(this); connect(&odialog, &Options::requestLanguageChange, this, &MainWindow::changeLanguage); connect(&odialog, &Options::requestChangeNativeDialog, this, [] (bool useNative){ QApplication::setAttribute(Qt::AA_DontUseNativeDialogs, !useNative); }); odialog.move(x() + ((width() - odialog.width()) / 2), y() + ((height() - odialog.sizeHint().height()) / 2)); if (odialog.exec()) { - setScale(settings->value(SETTINGS::SCALE).toDouble()); + setScale(BCSettings::instance()->value(SETTINGS::SCALE).toDouble()); loadChildWidgetSettings(); } disconnect(&odialog, nullptr, nullptr, nullptr); @@ -802,7 +761,7 @@ void MainWindow::on_actionCreateNewMetadata_triggered() void MainWindow::on_actionShow_Selection_Dialog_triggered() { - SlotSelect slotselect(settings->value(SETTINGS::SCALE).toDouble(), ff7, true); + SlotSelect slotselect(BCSettings::instance()->value(SETTINGS::SCALE).toDouble(), ff7, true); slotselect.move(x() + ((width() - slotselect.width()) / 2), y() + (slotselect.height() /2)); int i = slotselect.exec(); @@ -821,7 +780,7 @@ void MainWindow::on_actionOpen_Achievement_File_triggered() temp.append(QString("%1achievement.dat").arg(QDir::separator())); QFile tmp(temp); if (!tmp.exists()) - temp = BCDialog::getOpenFileName(this, settings, tr("Select Achievement File"), QDir::homePath(), tr("Dat File (*.dat)")); + temp = BCDialog::getOpenFileName(this, tr("Select Achievement File"), QDir::homePath(), tr("Dat File (*.dat)")); if (temp.isEmpty()) return; @@ -835,7 +794,7 @@ void MainWindow::on_actionOpen_Achievement_File_triggered() void MainWindow::changeLanguage(const QVariant &data) { - settings->setValue(SETTINGS::LANG, data); + BCSettings::instance()->setValue(SETTINGS::LANG, data); if(!m_translations.contains(data.toString())) populateLanguageMenu(); QApplication::installTranslator(m_translations.value(data.toString())); @@ -1068,7 +1027,7 @@ void MainWindow::setmenu(bool newgame) } else { for (int i = 0; i < 9; i++) ui->tabWidget->setTabEnabled(i, true); - ui->tabWidget->setTabEnabled(9, settings->value(SETTINGS::ENABLETEST).toBool()); + ui->tabWidget->setTabEnabled(9, BCSettings::instance()->value(SETTINGS::ENABLETEST).toBool()); } if (!newgame && !ff7->fileName().isEmpty()) { @@ -1260,7 +1219,7 @@ void MainWindow::CheckGame() typeMap[FF7SaveInfo::instance()->typeFilter(FF7SaveInfo::FORMAT::PDA)] = FF7SaveInfo::FORMAT::PDA; QString selectedType = typeMap.key(FF7SaveInfo::FORMAT::PSX); - QString fileName = BCDialog::getSaveFileName(this, settings, ff7->region(s), tr("Select A File to Save As"), QStringLiteral("%1/%2").arg(QDir::homePath(), ff7->region(s)), typeMap.keys().join(";;"), &selectedType); + QString fileName = BCDialog::getSaveFileName(this, ff7->region(s), tr("Select A File to Save As"), QStringLiteral("%1/%2").arg(QDir::homePath(), ff7->region(s)), typeMap.keys().join(";;"), &selectedType); if (fileName.isEmpty()) return; @@ -1506,7 +1465,7 @@ void MainWindow::on_tabWidget_currentChanged(int index) optionsWidget->setInput(i, ff7->controllerMapping(s, i)); } if ((ff7->format() != FF7SaveInfo::FORMAT::PC && ff7->format() != FF7SaveInfo::FORMAT::SWITCH && ff7->format() != FF7SaveInfo::FORMAT::UNKNOWN) - || settings->value(SETTINGS::ALWAYSSHOWCONTROLLERMAP).toBool()) { + || BCSettings::instance()->value(SETTINGS::ALWAYSSHOWCONTROLLERMAP).toBool()) { setControllerMappingVisible(true); if (optionsWidget->verticalScrollBar()->isVisible()) { optionsWidget->setFixedWidth(optionsWidget->width() - 1); diff --git a/mainwindow.h b/mainwindow.h index 447bd29a..5881415b 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -80,7 +80,6 @@ class MainWindow : public QMainWindow bool load; // are we loading data? if so don't save it to the file. //bool showLocPreview; FF7Save *ff7 = nullptr; // our save file struct pointer. - QSettings *settings = nullptr;//Pointer To settings object. int s; //track slot FF7Materia Materias;//FF7Materia Static Data. materia buffer_materia; // buffer for a materia diff --git a/options.cpp b/options.cpp index bcd8a5bc..7c422fcf 100644 --- a/options.cpp +++ b/options.cpp @@ -20,20 +20,17 @@ #include #include "options.h" #include "bcdialog.h" +#include "bcsettings.h" #include "ui_options.h" #include "ff7tk/data/FF7SaveInfo.h" -Options::Options(QWidget *parent, QSettings *config_data) : - QDialog(parent) +Options::Options(QWidget *parent) : QDialog(parent) , ui(new Ui::Options) - , settings(config_data) { + connect(BCSettings::instance(), &BCSettings::settingsChanged, this, &Options::loadSettings); ui->setupUi(this); int fmh = fontMetrics().height(); QSize iconSize(fmh, fmh); - ui->buttonBox->button(QDialogButtonBox::Help)->setText(tr("C&leanup")); - ui->buttonBox->button(QDialogButtonBox::Help)->setIcon(QIcon()); - ui->buttonBox->button(QDialogButtonBox::Help)->setToolTip(tr("Remove invalid entries from the stored settings file")); ui->buttonBox->button(QDialogButtonBox::RestoreDefaults)->setToolTip(tr("Reset values to defaults")); ui->buttonBox->button(QDialogButtonBox::Reset)->setToolTip(tr("Reset values to stored settings")); ui->buttonBox->button(QDialogButtonBox::Apply)->setToolTip(tr("Close and save changes")); @@ -42,14 +39,14 @@ Options::Options(QWidget *parent, QSettings *config_data) : btn->setIconSize(iconSize); ui->lblPixNormal->setPixmap(QPixmap(":/icon/bchoco").scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); ui->lblPixScaled->setPixmap(QPixmap(":/icon/bchoco").scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); - QDir dir(QStringLiteral("%1/lang").arg(settings->value(SETTINGS::LANGPATH).toString())); + QDir dir(QStringLiteral("%1/lang").arg(BCSettings::instance()->value(SETTINGS::LANGPATH).toString())); QStringList langList = dir.entryList(QStringList("bchoco_*.qm"), QDir::Files, QDir::Name); for (const QString &translation : langList) { auto translator = new QTranslator; translator->load(translation, dir.absolutePath()); QString lang = translation.mid(7, 2); ui->comboLanguage->addItem(translator->translate("MainWindow", "TRANSLATE TO YOUR LANGUAGE NAME"), lang); - ui->comboLanguage->setCurrentIndex(ui->comboLanguage->findData(settings->value(SETTINGS::LANG, QStringLiteral("en")))); + ui->comboLanguage->setCurrentIndex(ui->comboLanguage->findData(BCSettings::instance()->value(SETTINGS::LANG, QStringLiteral("en")))); } ui->comboLanguage->setVisible(ui->comboLanguage->count()); ui->lblLanguage->setVisible(ui->comboLanguage->count()); @@ -63,6 +60,7 @@ Options::Options(QWidget *parent, QSettings *config_data) : connect(ui->buttonBox, &QDialogButtonBox::clicked, this, [this](QAbstractButton * button){ if (button == ui->buttonBox->button(QDialogButtonBox::Apply)) { + disconnect(BCSettings::instance(), &BCSettings::settingsChanged, this, &Options::loadSettings); saveSettings(); done(1); } @@ -74,9 +72,6 @@ Options::Options(QWidget *parent, QSettings *config_data) : if (button == ui->buttonBox->button(QDialogButtonBox::RestoreDefaults)) restoreDefaultSettings(); - - if (button == ui->buttonBox->button(QDialogButtonBox::Help)) - cleanSettings(); }); loadSettings(); @@ -102,49 +97,49 @@ void Options::changeEvent(QEvent *e) void Options::loadSettings() { ui->defaultSaveLayout->setVisible(false); - ui->line_default_save->setText(settings->value(SETTINGS::DEFAULTSAVE, QString()).toString()); - ui->line_char_stat_folder->setText(settings->value(SETTINGS::STATFOLDER, QString()).toString()); - ui->line_save_pc->setText(settings->value(SETTINGS::PCSAVEPATH, QString()).toString()); - ui->line_save_emu->setText(settings->value(SETTINGS::EMUSAVEPATH, QString()).toString()); - ui->line_load_path->setText(settings->value(SETTINGS::LOADPATH, QString()).toString()); - ui->cbEditableCombos->setChecked(settings->value(SETTINGS::EDITABLECOMBOS, true).toBool()); - ui->cbCharEditorAdvanced->setChecked(settings->value(SETTINGS::CHARADVANCED, false).toBool()); - ui->cbChocoboEditorAdvanced->setChecked(settings->value(SETTINGS::CHOCOADVANCED, false).toBool()); - ui->cbLocationViewerAdvanced->setChecked(settings->value(SETTINGS::LOCVIEWADVANCED, false).toBool()); - ui->cbTestDataEnabled->setChecked(settings->value(SETTINGS::ENABLETEST, false).toBool()); - ui->cbGameProgressAdvanced->setChecked(settings->value(SETTINGS::PROGRESSADVANCED, false).toBool()); - ui->cbOptionsShowMapping->setChecked(settings->value(SETTINGS::ALWAYSSHOWCONTROLLERMAP, false).toBool()); - ui->cbWorldMapAdvanced->setChecked(settings->value(SETTINGS::WORLDMAPADVANCED, false).toBool()); - ui->comboRegion->setCurrentText(settings->value (SETTINGS::REGION, QStringLiteral("NTSC-U")).toString()); - ui->cb_override_def_save->setChecked(settings->value(SETTINGS::CUSTOMDEFAULTSAVE, false).toBool()); - ui->sliderScale->setValue(int((settings->value(SETTINGS::SCALE, 1.00).toDouble() - 0.50) / 0.25)); - ui->cbAutoGrowth->setChecked(settings->value(SETTINGS::AUTOGROWTH, true).toBool()); - ui->comboLanguage->setCurrentIndex(ui->comboLanguage->findData(settings->value(SETTINGS::LANG))); - ui->cbNativeDialogs->setChecked(settings->value(SETTINGS::USENATIVEDIALOGS).toBool()); + ui->line_default_save->setText(BCSettings::instance()->value(SETTINGS::DEFAULTSAVE, QString()).toString()); + ui->line_char_stat_folder->setText(BCSettings::instance()->value(SETTINGS::STATFOLDER, QString()).toString()); + ui->line_save_pc->setText(BCSettings::instance()->value(SETTINGS::PCSAVEPATH, QString()).toString()); + ui->line_save_emu->setText(BCSettings::instance()->value(SETTINGS::EMUSAVEPATH, QString()).toString()); + ui->line_load_path->setText(BCSettings::instance()->value(SETTINGS::LOADPATH, QString()).toString()); + ui->cbEditableCombos->setChecked(BCSettings::instance()->value(SETTINGS::EDITABLECOMBOS, true).toBool()); + ui->cbCharEditorAdvanced->setChecked(BCSettings::instance()->value(SETTINGS::CHARADVANCED, false).toBool()); + ui->cbChocoboEditorAdvanced->setChecked(BCSettings::instance()->value(SETTINGS::CHOCOADVANCED, false).toBool()); + ui->cbLocationViewerAdvanced->setChecked(BCSettings::instance()->value(SETTINGS::LOCVIEWADVANCED, false).toBool()); + ui->cbTestDataEnabled->setChecked(BCSettings::instance()->value(SETTINGS::ENABLETEST, false).toBool()); + ui->cbGameProgressAdvanced->setChecked(BCSettings::instance()->value(SETTINGS::PROGRESSADVANCED, false).toBool()); + ui->cbOptionsShowMapping->setChecked(BCSettings::instance()->value(SETTINGS::ALWAYSSHOWCONTROLLERMAP, false).toBool()); + ui->cbWorldMapAdvanced->setChecked(BCSettings::instance()->value(SETTINGS::WORLDMAPADVANCED, false).toBool()); + ui->comboRegion->setCurrentText(BCSettings::instance()->value (SETTINGS::REGION, QStringLiteral("NTSC-U")).toString()); + ui->cb_override_def_save->setChecked(BCSettings::instance()->value(SETTINGS::CUSTOMDEFAULTSAVE, false).toBool()); + ui->sliderScale->setValue(int((BCSettings::instance()->value(SETTINGS::SCALE, 1.00).toDouble() - 0.50) / 0.25)); + ui->cbAutoGrowth->setChecked(BCSettings::instance()->value(SETTINGS::AUTOGROWTH, true).toBool()); + ui->comboLanguage->setCurrentIndex(ui->comboLanguage->findData(BCSettings::instance()->value(SETTINGS::LANG))); + ui->cbNativeDialogs->setChecked(BCSettings::instance()->value(SETTINGS::USENATIVEDIALOGS).toBool()); ui->btnEditSideBarItems->setVisible(!ui->cbNativeDialogs->isChecked()); } void Options::saveSettings() { - settings->setValue(SETTINGS::PCSAVEPATH, ui->line_save_pc->text()); - settings->setValue(SETTINGS::EMUSAVEPATH, ui->line_save_emu->text()); - settings->setValue(SETTINGS::LOADPATH, ui->line_load_path->text()); - settings->setValue(SETTINGS::DEFAULTSAVE, ui->line_default_save->text()); - settings->setValue(SETTINGS::STATFOLDER, ui->line_char_stat_folder->text()); - settings->setValue(SETTINGS::CUSTOMDEFAULTSAVE, ui->cb_override_def_save->isChecked()); - settings->setValue(SETTINGS::CHARADVANCED, ui->cbCharEditorAdvanced->isChecked()); - settings->setValue(SETTINGS::CHOCOADVANCED, ui->cbChocoboEditorAdvanced->isChecked()); - settings->setValue(SETTINGS::PROGRESSADVANCED, ui->cbGameProgressAdvanced->isChecked()); - settings->setValue(SETTINGS::ALWAYSSHOWCONTROLLERMAP, ui->cbOptionsShowMapping->isChecked()); - settings->setValue(SETTINGS::ENABLETEST, ui->cbTestDataEnabled->isChecked()); - settings->setValue(SETTINGS::LOCVIEWADVANCED, ui->cbLocationViewerAdvanced->isChecked()); - settings->setValue(SETTINGS::WORLDMAPADVANCED, ui->cbWorldMapAdvanced->isChecked()); - settings->setValue(SETTINGS::EDITABLECOMBOS, ui->cbEditableCombos->isChecked()); - settings->setValue(SETTINGS::REGION, ui->comboRegion->currentText()); - settings->setValue(SETTINGS::SCALE, ((ui->sliderScale->value() * 0.25) + 0.5)); - settings->setValue(SETTINGS::AUTOGROWTH, ui->cbAutoGrowth->isChecked()); - settings->setValue(SETTINGS::LANG, ui->comboLanguage->currentData()); - settings->setValue(SETTINGS::USENATIVEDIALOGS, ui->cbNativeDialogs->isChecked()); + BCSettings::instance()->setValue(SETTINGS::PCSAVEPATH, ui->line_save_pc->text()); + BCSettings::instance()->setValue(SETTINGS::EMUSAVEPATH, ui->line_save_emu->text()); + BCSettings::instance()->setValue(SETTINGS::LOADPATH, ui->line_load_path->text()); + BCSettings::instance()->setValue(SETTINGS::DEFAULTSAVE, ui->line_default_save->text()); + BCSettings::instance()->setValue(SETTINGS::STATFOLDER, ui->line_char_stat_folder->text()); + BCSettings::instance()->setValue(SETTINGS::CUSTOMDEFAULTSAVE, ui->cb_override_def_save->isChecked()); + BCSettings::instance()->setValue(SETTINGS::CHARADVANCED, ui->cbCharEditorAdvanced->isChecked()); + BCSettings::instance()->setValue(SETTINGS::CHOCOADVANCED, ui->cbChocoboEditorAdvanced->isChecked()); + BCSettings::instance()->setValue(SETTINGS::PROGRESSADVANCED, ui->cbGameProgressAdvanced->isChecked()); + BCSettings::instance()->setValue(SETTINGS::ALWAYSSHOWCONTROLLERMAP, ui->cbOptionsShowMapping->isChecked()); + BCSettings::instance()->setValue(SETTINGS::ENABLETEST, ui->cbTestDataEnabled->isChecked()); + BCSettings::instance()->setValue(SETTINGS::LOCVIEWADVANCED, ui->cbLocationViewerAdvanced->isChecked()); + BCSettings::instance()->setValue(SETTINGS::WORLDMAPADVANCED, ui->cbWorldMapAdvanced->isChecked()); + BCSettings::instance()->setValue(SETTINGS::EDITABLECOMBOS, ui->cbEditableCombos->isChecked()); + BCSettings::instance()->setValue(SETTINGS::REGION, ui->comboRegion->currentText()); + BCSettings::instance()->setValue(SETTINGS::SCALE, ((ui->sliderScale->value() * 0.25) + 0.5)); + BCSettings::instance()->setValue(SETTINGS::AUTOGROWTH, ui->cbAutoGrowth->isChecked()); + BCSettings::instance()->setValue(SETTINGS::LANG, ui->comboLanguage->currentData()); + BCSettings::instance()->setValue(SETTINGS::USENATIVEDIALOGS, ui->cbNativeDialogs->isChecked()); } void Options::restoreDefaultSettings() @@ -171,44 +166,37 @@ void Options::restoreDefaultSettings() ui->cbNativeDialogs->setChecked(true); } -void Options::cleanSettings() -{ - for(const QString &key : settings->allKeys()) { - if(!validSettingsNames.contains(key)) - settings->remove(key); - } -} void Options::on_btn_set_save_pc_clicked() { - QString temp = BCDialog::getExistingDirectory(this, settings, tr("Select A Directory To Save FF7 PC Saves"), ui->line_save_pc->text(), ui->line_save_pc->text()); + QString temp = BCDialog::getExistingDirectory(this, tr("Select A Directory To Save FF7 PC Saves"), ui->line_save_pc->text(), ui->line_save_pc->text()); if (!temp.isEmpty()) ui->line_save_pc->setText(temp); } void Options::on_btn_set_save_emu_clicked() { - QString temp = BCDialog::getExistingDirectory(this, settings, tr("Select A Directory To Save mcd/mcr saves"), ui->line_save_emu->text(), ui->line_save_emu->text()); + QString temp = BCDialog::getExistingDirectory(this, tr("Select A Directory To Save mcd/mcr saves"), ui->line_save_emu->text(), ui->line_save_emu->text()); if (!temp.isEmpty()) ui->line_save_emu->setText(temp); } void Options::on_btn_set_load_path_clicked() { - QString temp = BCDialog::getExistingDirectory(this, settings, tr("Select A Directory To Load FF7 PC Saves From"), ui->line_load_path->text(), ui->line_load_path->text()); + QString temp = BCDialog::getExistingDirectory(this, tr("Select A Directory To Load FF7 PC Saves From"), ui->line_load_path->text(), ui->line_load_path->text()); if (!temp.isEmpty()) ui->line_load_path->setText(temp); } void Options::on_btn_set_default_save_clicked() { - QString temp = BCDialog::getOpenFileName(this, settings, tr("Select A Default Save Game (Must Be Raw PSX)"), QFileInfo(settings->value(SETTINGS::DEFAULTSAVE).toString()).path(), FF7SaveInfo::instance()->typeFilter(FF7SaveInfo::FORMAT::PSX), QFile(settings->value(SETTINGS::DEFAULTSAVE).toString()).fileName()); + QString temp = BCDialog::getOpenFileName(this, tr("Select A Default Save Game (Must Be Raw PSX)"), QFileInfo(BCSettings::instance()->value(SETTINGS::DEFAULTSAVE).toString()).path(), FF7SaveInfo::instance()->typeFilter(FF7SaveInfo::FORMAT::PSX), QFile(BCSettings::instance()->value(SETTINGS::DEFAULTSAVE).toString()).fileName()); if(!temp.isEmpty()) ui->line_default_save->setText(temp); } void Options::on_btn_set_char_stat_folder_clicked() { - QString temp = BCDialog::getExistingDirectory(this, settings, tr("Select A Location To Save Character Stat Files"), ui->line_char_stat_folder->text(), ui->line_char_stat_folder->text()); + QString temp = BCDialog::getExistingDirectory(this, tr("Select A Location To Save Character Stat Files"), ui->line_char_stat_folder->text(), ui->line_char_stat_folder->text()); if (!temp.isNull()) ui->line_char_stat_folder->setText(temp); } @@ -232,5 +220,5 @@ void Options::on_cbNativeDialogs_clicked(bool checked) void Options::on_btnEditSideBarItems_clicked() { - BCDialog::editSideBarPaths(this, settings); + BCDialog::editSideBarPaths(this); } diff --git a/options.h b/options.h index 1dcf0511..81c90c89 100644 --- a/options.h +++ b/options.h @@ -24,38 +24,13 @@ namespace Ui class Options; } -namespace SETTINGS { - inline const static QString MAINGEOMETRY = QStringLiteral("MainGeometry"); - inline const static QString AUTOGROWTH = QStringLiteral("autochargrowth"); - inline const static QString CHARADVANCED = QStringLiteral("charEditorAdvanced"); - inline const static QString STATFOLDER = QStringLiteral("char_stat_folder"); - inline const static QString CHOCOADVANCED = QStringLiteral("chocoboEditorAdvanced"); - inline const static QString DEFAULTSAVE = QStringLiteral("default_save"); - inline const static QString EDITABLECOMBOS = QStringLiteral("editableCombos"); - inline const static QString PROGRESSADVANCED = QStringLiteral("gameProgressAdvanced"); - inline const static QString LANG = QStringLiteral("lang"); - inline const static QString LANGPATH = QStringLiteral("langPath"); - inline const static QString LOADPATH = QStringLiteral("load_path"); - inline const static QString LOCVIEWADVANCED = QStringLiteral("locationViewerAdvanced"); - inline const static QString ALWAYSSHOWCONTROLLERMAP = QStringLiteral("optionsShowMapping"); - inline const static QString CUSTOMDEFAULTSAVE = QStringLiteral("override_default_save"); - inline const static QString REGION = QStringLiteral("region"); - inline const static QString EMUSAVEPATH = QStringLiteral("save_emu_path"); - inline const static QString PCSAVEPATH = QStringLiteral("save_pc_path"); - inline const static QString SCALE = QStringLiteral("scale"); - inline const static QString ENABLETEST = QStringLiteral("show_test"); - inline const static QString WORLDMAPADVANCED = QStringLiteral("worldMapAdvanced"); - inline const static QString USENATIVEDIALOGS = QStringLiteral("useNativeDialogs"); - inline const static QString SIDEBARURLS = QStringLiteral("sidebarUrls"); -} - class Options : public QDialog { Q_OBJECT public: - explicit Options(QWidget *parent = nullptr, QSettings *config_data = nullptr); + explicit Options(QWidget *parent = nullptr); ~Options(); protected: @@ -75,33 +50,8 @@ private slots: void on_btnEditSideBarItems_clicked(); private: Ui::Options *ui; - QSettings *settings; void loadSettings(); void saveSettings(); void restoreDefaultSettings(); - void cleanSettings(); - inline static const QStringList validSettingsNames = { - SETTINGS::MAINGEOMETRY, - SETTINGS::AUTOGROWTH, - SETTINGS::CHARADVANCED, - SETTINGS::STATFOLDER, - SETTINGS::CHOCOADVANCED, - SETTINGS::DEFAULTSAVE, - SETTINGS::EDITABLECOMBOS, - SETTINGS::PROGRESSADVANCED, - SETTINGS::LANG, - SETTINGS::LANGPATH, - SETTINGS::LOADPATH, - SETTINGS::LOCVIEWADVANCED, - SETTINGS::ALWAYSSHOWCONTROLLERMAP, - SETTINGS::CUSTOMDEFAULTSAVE, - SETTINGS::REGION, - SETTINGS::EMUSAVEPATH, - SETTINGS::PCSAVEPATH, - SETTINGS::SCALE, - SETTINGS::ENABLETEST, - SETTINGS::WORLDMAPADVANCED, - SETTINGS::USENATIVEDIALOGS, - SETTINGS::SIDEBARURLS - }; + void updateSettings(); }; diff --git a/options.ui b/options.ui index 5a041a97..4b05cddf 100644 --- a/options.ui +++ b/options.ui @@ -930,7 +930,7 @@ Qt::Horizontal - QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Reset|QDialogButtonBox::RestoreDefaults + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Reset|QDialogButtonBox::RestoreDefaults false