Skip to content

Commit

Permalink
Move all settings to Singleton
Browse files Browse the repository at this point in the history
  • Loading branch information
sithlord48 committed Feb 8, 2020
1 parent 98d2f31 commit a6f751b
Show file tree
Hide file tree
Showing 12 changed files with 347 additions and 249 deletions.
2 changes: 2 additions & 0 deletions Black_Chocobo.pro
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ CONFIG += c++1z
QT += core gui xml widgets qml

SOURCES += \
bcsettings.cpp \
main.cpp \
mainwindow.cpp \
about.cpp \
Expand Down Expand Up @@ -62,6 +63,7 @@ SOURCES += \
ff7tk/data/FF7Achievements.cpp

HEADERS += \
bcsettings.h \
mainwindow.h \
about.h \
bcdialog.h \
Expand Down
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ set ( blackchocobo_SRCS
errbox.cpp
achievementdialog.cpp
bcdialog.cpp
bcsettings.cpp
qhexedit/chunks.cpp
qhexedit/commands.cpp
qhexedit/qhexedit.cpp
Expand Down
61 changes: 27 additions & 34 deletions bcdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
// GNU General Public License for more details. //
/****************************************************************************/
#include "bcdialog.h"
#include "bcsettings.h"
#include "ff7tk/data/FF7Save.h"
#include <QAction>
#include <QDialogButtonBox>
Expand All @@ -22,13 +23,13 @@
#include <QInputDialog>
#include <QListWidget>
#include <QPushButton>
#include <QSettings>
#include <QStandardPaths>
#include <QDebug>
#include <QMessageBox>

QRect readGeometry(const QByteArray &geometry)
QRect readGeometry()
{
QByteArray geometry = BCSettings::instance()->value(SETTINGS::MAINGEOMETRY).toByteArray();
if (geometry.size() < 4)
return QRect();
QDataStream stream(geometry);
Expand Down Expand Up @@ -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);
Expand All @@ -80,7 +79,7 @@ QString BCDialog::getOpenFileName(QWidget *parent, QSettings *settings, const Q
if (!fileName.isEmpty())
dialog.selectFile(fileName);
QList<QUrl> 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);

Expand All @@ -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);
Expand All @@ -109,7 +106,7 @@ QString BCDialog::getExistingDirectory(QWidget *parent, QSettings *settings, con
dialog.selectFile(fileName);
dialog.setLabelText(QFileDialog::LookIn, QObject::tr("Places"));
QList<QUrl> 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);

Expand All @@ -118,11 +115,9 @@ QString BCDialog::getExistingDirectory(QWidget *parent, QSettings *settings, con
return QString();
}

QString BCDialog::getSaveFileName(QWidget *parent, QSettings *settings, const QString &region, const QString &title, const QString &path , const QString &nameFilters, QString * chosenType, const QString &initSelection)
QString BCDialog::getSaveFileName(QWidget *parent, const QString &region, 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);
Expand All @@ -134,7 +129,7 @@ QString BCDialog::getSaveFileName(QWidget *parent, QSettings *settings, const Q
if (!fileName.isEmpty())
dialog.selectFile(fileName);
QList<QUrl> 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);

Expand Down Expand Up @@ -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());
Expand All @@ -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);
});
Expand All @@ -232,7 +225,7 @@ void BCDialog::editSideBarPaths(QWidget *parent, QSettings * settings)
for (QAbstractButton *btn : dialog.findChildren<QAbstractButton *>(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))
Expand All @@ -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);
}
});
Expand All @@ -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);
}
}

Expand Down
8 changes: 4 additions & 4 deletions bcdialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 &region = 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 &region = 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);
};
120 changes: 120 additions & 0 deletions bcsettings.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
/****************************************************************************/
// copyright 2020 Chris Rizzitello <[email protected]> //
// //
// 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 <QSettings>
#include <QCoreApplication>
#include <QFile>
#include <QStandardPaths>
#include <QDir>


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);
}
Loading

0 comments on commit a6f751b

Please sign in to comment.