summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-08-02 23:24:27 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-08-04 06:09:47 -0400
commitb6b01a52db1877b16531137289641fb9be9833aa (patch)
tree4822150ac91a22ec68fd8f63f29df296691c8f81 /src
parenta7df11a31d684cfc341fc401dc3a9449f2538084 (diff)
removed mentions of QSettings from main.cpp
added necessary member functions in Settings
Diffstat (limited to 'src')
-rw-r--r--src/filedialogmemory.cpp1
-rw-r--r--src/filedialogmemory.h1
-rw-r--r--src/main.cpp185
-rw-r--r--src/mainwindow.cpp6
-rw-r--r--src/mainwindow.h3
-rw-r--r--src/organizercore.cpp4
-rw-r--r--src/organizercore.h2
-rw-r--r--src/settings.cpp77
-rw-r--r--src/settings.h22
9 files changed, 188 insertions, 113 deletions
diff --git a/src/filedialogmemory.cpp b/src/filedialogmemory.cpp
index 0e3e9793..308a175e 100644
--- a/src/filedialogmemory.cpp
+++ b/src/filedialogmemory.cpp
@@ -18,6 +18,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
#include "filedialogmemory.h"
+#include "settings.h"
#include <QFileDialog>
diff --git a/src/filedialogmemory.h b/src/filedialogmemory.h
index 81d7ba40..1a72b289 100644
--- a/src/filedialogmemory.h
+++ b/src/filedialogmemory.h
@@ -26,6 +26,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QSettings>
#include <QFileDialog>
+class Settings;
class FileDialogMemory
{
diff --git a/src/main.cpp b/src/main.cpp
index 911f11c3..720ecbf9 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -245,9 +245,10 @@ static bool HaveWriteAccess(const std::wstring &path)
}
-QString determineProfile(QStringList &arguments, const QSettings &settings)
+QString determineProfile(QStringList &arguments, const Settings &settings)
{
- QString selectedProfileName = QString::fromUtf8(settings.value("selected_profile", "").toByteArray());
+ QString selectedProfileName = settings.getSelectedProfileName();
+
{ // see if there is a profile on the command line
int profileIndex = arguments.indexOf("-p", 1);
if ((profileIndex != -1) && (profileIndex < arguments.size() - 1)) {
@@ -257,6 +258,7 @@ QString determineProfile(QStringList &arguments, const QSettings &settings)
arguments.removeAt(profileIndex);
arguments.removeAt(profileIndex);
}
+
if (selectedProfileName.isEmpty()) {
log::debug("no configured profile");
selectedProfileName = "Default";
@@ -267,46 +269,50 @@ QString determineProfile(QStringList &arguments, const QSettings &settings)
return selectedProfileName;
}
-MOBase::IPluginGame *selectGame(QSettings &settings, QDir const &gamePath, MOBase::IPluginGame *game)
+MOBase::IPluginGame *selectGame(
+ Settings &settings, QDir const &gamePath, MOBase::IPluginGame *game)
{
- settings.setValue("gameName", game->gameName());
- //Sadly, hookdll needs gamePath in order to run. So following code block is
- //commented out
- /*if (gamePath == game->gameDirectory()) {
- settings.remove("gamePath");
- } else*/ {
- QString gameDir = gamePath.absolutePath();
- game->setGamePath(gameDir);
- settings.setValue("gamePath", QDir::toNativeSeparators(gameDir).toUtf8().constData());
- }
- return game; //Woot
+ settings.setManagedGameName(game->gameName());
+
+ QString gameDir = gamePath.absolutePath();
+ game->setGamePath(gameDir);
+
+ settings.setManagedGameDirectory(gameDir);
+
+ return game;
}
-MOBase::IPluginGame *determineCurrentGame(QString const &moPath, QSettings &settings, PluginContainer const &plugins)
+MOBase::IPluginGame *determineCurrentGame(
+ QString const &moPath, Settings &settings, PluginContainer const &plugins)
{
//Determine what game we are running where. Be very paranoid in case the
//user has done something odd.
//If the game name has been set up, try to use that.
- QString gameName = settings.value("gameName", "").toString();
+ const QString gameName = settings.getManagedGameName();
bool gameConfigured = !gameName.isEmpty();
+
if (gameConfigured) {
MOBase::IPluginGame *game = plugins.managedGame(gameName);
if (game == nullptr) {
reportError(QObject::tr("Plugin to handle %1 no longer installed").arg(gameName));
return nullptr;
}
- QString gamePath = QString::fromUtf8(settings.value("gamePath", "").toByteArray());
+
+ QString gamePath = settings.getManagedGameDirectory();
if (gamePath == "") {
gamePath = game->gameDirectory().absolutePath();
}
+
QDir gameDir(gamePath);
QFileInfo directoryInfo(gameDir.path());
+
if (directoryInfo.isSymLink()) {
reportError(QObject::tr("The configured path to the game directory (%1) appears to be a symbolic (or other) link. "
"This setup is incompatible with MO2's VFS and will not run correctly.").arg(gamePath));
}
+
if (game->looksValid(gameDir)) {
return selectGame(settings, gameDir, game);
}
@@ -315,7 +321,7 @@ MOBase::IPluginGame *determineCurrentGame(QString const &moPath, QSettings &sett
//If we've made it this far and the instance is already configured for a game, something has gone wrong.
//Tell the user about it.
if (gameConfigured) {
- QString gamePath = QString::fromUtf8(settings.value("gamePath", "").toByteArray());
+ const QString gamePath = settings.getManagedGameDirectory();
reportError(QObject::tr("Could not use configuration settings for game \"%1\", path \"%2\".").
arg(gameName).arg(gamePath));
}
@@ -480,27 +486,6 @@ static QString getVersionDisplayString()
return createVersionInfo().displayString(3);
}
-void dumpSettings(QSettings& settings)
-{
- static const QStringList ignore({
- "username", "password", "nexus_api_key"
- });
-
- log::debug("settings:");
-
- settings.beginGroup("Settings");
-
- for (auto k : settings.allKeys()) {
- if (ignore.contains(k, Qt::CaseInsensitive)) {
- continue;
- }
-
- log::debug(" . {}={}", k, settings.value(k).toString());
- }
-
- settings.endGroup();
-}
-
void checkMissingFiles()
{
// files that are likely to be eaten
@@ -557,7 +542,7 @@ int runApplication(MOApplication &application, SingleInstance &instance,
log::warn("no ssl support");
}
- QString dataPath = application.property("dataPath").toString();
+ const QString dataPath = application.property("dataPath").toString();
log::info("data path: {}", dataPath);
if (!bootstrap()) {
@@ -573,11 +558,7 @@ int runApplication(MOApplication &application, SingleInstance &instance,
try {
log::info("working directory: {}", QDir::currentPath());
- QSettings initSettings(
- dataPath + "/" + QString::fromStdWString(AppConfig::iniFileName()),
- QSettings::IniFormat);
-
- Settings settings(initSettings);
+ Settings settings(dataPath + "/" + QString::fromStdWString(AppConfig::iniFileName()));
log::getDefault().setLevel(settings.logLevel());
// global crashDumpType sits in OrganizerCore to make a bit less ugly to
@@ -587,7 +568,7 @@ int runApplication(MOApplication &application, SingleInstance &instance,
env::Environment env;
env.dump();
- dumpSettings(initSettings);
+ settings.dump();
sanityChecks(env);
log::debug("initializing core");
@@ -602,7 +583,8 @@ int runApplication(MOApplication &application, SingleInstance &instance,
pluginContainer.loadPlugins();
MOBase::IPluginGame *game = determineCurrentGame(
- application.applicationDirPath(), initSettings, pluginContainer);
+ application.applicationDirPath(), settings, pluginContainer);
+
if (game == nullptr) {
InstanceManager &instance = InstanceManager::instance();
QString instanceName = instance.currentInstance();
@@ -612,6 +594,7 @@ int runApplication(MOApplication &application, SingleInstance &instance,
}
return 1;
}
+
if (splashPath.startsWith(':')) {
// currently using MO splash, see if the plugin contains one
QString pluginSplash
@@ -625,7 +608,7 @@ int runApplication(MOApplication &application, SingleInstance &instance,
organizer.setManagedGame(game);
organizer.createDefaultProfile();
- if (!initSettings.contains("game_edition")) {
+ if (settings.getManagedGameEdition() == "") {
QStringList editions = game->gameVariants();
if (editions.size() > 1) {
SelectionDialog selection(
@@ -641,78 +624,76 @@ int runApplication(MOApplication &application, SingleInstance &instance,
if (selection.exec() == QDialog::Rejected) {
return 1;
} else {
- initSettings.setValue("game_edition", selection.getChoiceString());
+ settings.setManagedGameEdition(selection.getChoiceString());
}
}
}
- game->setGameVariant(initSettings.value("game_edition").toString());
+
+ game->setGameVariant(settings.getManagedGameEdition());
log::info("managing game at {}", game->gameDirectory().absolutePath());
- organizer.updateExecutablesList(initSettings);
+ organizer.updateExecutablesList();
- QString selectedProfileName = determineProfile(arguments, initSettings);
+ QString selectedProfileName = determineProfile(arguments, settings);
organizer.setCurrentProfile(selectedProfileName);
// if we have a command line parameter, it is either a nxm link or
// a binary to start
- if (arguments.size() > 1) {
- if (MOShortcut shortcut{ arguments.at(1) }) {
- if (shortcut.hasExecutable()) {
- try {
- organizer.runShortcut(shortcut);
- return 0;
- }
- catch (const std::exception &e) {
- reportError(
- QObject::tr("failed to start shortcut: %1").arg(e.what()));
- return 1;
- }
- }
- }
- else if (OrganizerCore::isNxmLink(arguments.at(1))) {
- log::debug("starting download from command line: {}", arguments.at(1));
- organizer.externalMessage(arguments.at(1));
- }
- else {
- QString exeName = arguments.at(1);
- log::debug("starting {} from command line", exeName);
- arguments.removeFirst(); // remove application name (ModOrganizer.exe)
- arguments.removeFirst(); // remove binary name
- // pass the remaining parameters to the binary
- try {
- organizer.startApplication(exeName, arguments, QString(), QString());
- return 0;
- }
- catch (const std::exception &e) {
- reportError(
- QObject::tr("failed to start application: %1").arg(e.what()));
- return 1;
- }
- }
- }
+ if (arguments.size() > 1) {
+ if (MOShortcut shortcut{ arguments.at(1) }) {
+ if (shortcut.hasExecutable()) {
+ try {
+ organizer.runShortcut(shortcut);
+ return 0;
+ }
+ catch (const std::exception &e) {
+ reportError(
+ QObject::tr("failed to start shortcut: %1").arg(e.what()));
+ return 1;
+ }
+ }
+ }
+ else if (OrganizerCore::isNxmLink(arguments.at(1))) {
+ log::debug("starting download from command line: {}", arguments.at(1));
+ organizer.externalMessage(arguments.at(1));
+ }
+ else {
+ QString exeName = arguments.at(1);
+ log::debug("starting {} from command line", exeName);
+ arguments.removeFirst(); // remove application name (ModOrganizer.exe)
+ arguments.removeFirst(); // remove binary name
+ // pass the remaining parameters to the binary
+ try {
+ organizer.startApplication(exeName, arguments, QString(), QString());
+ return 0;
+ }
+ catch (const std::exception &e) {
+ reportError(
+ QObject::tr("failed to start application: %1").arg(e.what()));
+ return 1;
+ }
+ }
+ }
QPixmap pixmap(splashPath);
QSplashScreen splash(pixmap);
- if (initSettings.contains("window_monitor")) {
- const int monitor = initSettings.value("window_monitor").toInt();
-
- if (monitor != -1 && QGuiApplication::screens().size() > monitor) {
- QGuiApplication::screens().at(monitor)->geometry().center();
- const QPoint center = QGuiApplication::screens().at(monitor)->geometry().center();
- splash.move(center - splash.rect().center());
- } else {
- const QPoint center = QGuiApplication::primaryScreen()->geometry().center();
- splash.move(center - splash.rect().center());
- }
+ const int monitor = settings.getMainWindowMonitor();
+ if (monitor != -1 && QGuiApplication::screens().size() > monitor) {
+ QGuiApplication::screens().at(monitor)->geometry().center();
+ const QPoint center = QGuiApplication::screens().at(monitor)->geometry().center();
+ splash.move(center - splash.rect().center());
+ } else {
+ const QPoint center = QGuiApplication::primaryScreen()->geometry().center();
+ splash.move(center - splash.rect().center());
}
splash.show();
splash.activateWindow();
QString apiKey;
- if (organizer.settings().getNexusApiKey(apiKey)) {
+ if (settings.getNexusApiKey(apiKey)) {
NexusInterface::instance(&pluginContainer)->getAccessManager()->apiCheck(apiKey);
}
@@ -722,15 +703,15 @@ int runApplication(MOApplication &application, SingleInstance &instance,
+ QString::fromStdWString(AppConfig::tutorialsPath()) + "/",
&organizer);
- if (!application.setStyleFile(initSettings.value("Settings/style", "").toString())) {
+ if (!application.setStyleFile(settings.getStyleName())) {
// disable invalid stylesheet
- initSettings.setValue("Settings/style", "");
+ settings.setStyleName("");
}
int res = 1;
{ // scope to control lifetime of mainwindow
// set up main window and its data structures
- MainWindow mainWindow(initSettings, organizer, pluginContainer);
+ MainWindow mainWindow(settings, organizer, pluginContainer);
NexusInterface::instance(&pluginContainer)
->getAccessManager()->setTopLevelWidget(&mainWindow);
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 28405819..7f7ded80 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -291,7 +291,7 @@ public:
};
-MainWindow::MainWindow(QSettings &initSettings
+MainWindow::MainWindow(Settings &settings
, OrganizerCore &organizerCore
, PluginContainer &pluginContainer
, QWidget *parent)
@@ -540,8 +540,8 @@ MainWindow::MainWindow(QSettings &initSettings
connect(&m_SaveMetaTimer, SIGNAL(timeout()), this, SLOT(saveModMetas()));
m_SaveMetaTimer.start(5000);
- setCategoryListVisible(initSettings.value("categorylist_visible", true).toBool());
- FileDialogMemory::restore(initSettings);
+ setCategoryListVisible(settings.isCategoryListVisible());
+ FileDialogMemory::restore(settings.directInterface());
fixCategories();
diff --git a/src/mainwindow.h b/src/mainwindow.h
index aa49205d..7326425a 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -103,6 +103,7 @@ namespace Ui {
class MainWindow;
}
+class Settings;
class MainWindow : public QMainWindow, public IUserInterface
@@ -113,7 +114,7 @@ class MainWindow : public QMainWindow, public IUserInterface
public:
- explicit MainWindow(QSettings &initSettings,
+ explicit MainWindow(Settings &settings,
OrganizerCore &organizerCore, PluginContainer &pluginContainer,
QWidget *parent = 0);
~MainWindow();
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index 1e164525..72c8dab5 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -480,14 +480,14 @@ return true;
}
-void OrganizerCore::updateExecutablesList(QSettings &settings)
+void OrganizerCore::updateExecutablesList()
{
if (m_PluginContainer == nullptr) {
log::error("can't update executables list now");
return;
}
- m_ExecutablesList.load(managedGame(), settings);
+ m_ExecutablesList.load(managedGame(), m_Settings.directInterface());
// TODO this has nothing to do with executables list move to an appropriate
// function!
diff --git a/src/organizercore.h b/src/organizercore.h
index 2aa7e707..926a21f0 100644
--- a/src/organizercore.h
+++ b/src/organizercore.h
@@ -107,7 +107,7 @@ public:
void setManagedGame(MOBase::IPluginGame *game);
- void updateExecutablesList(QSettings &settings);
+ void updateExecutablesList();
void startMOUpdate();
diff --git a/src/settings.cpp b/src/settings.cpp
index 77db6918..5d103267 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -28,8 +28,8 @@ using namespace MOBase;
Settings *Settings::s_Instance = nullptr;
-Settings::Settings(const QSettings &settingsSource)
- : m_Settings(settingsSource.fileName(), settingsSource.format())
+Settings::Settings(const QString& path)
+ : m_Settings(path, QSettings::IniFormat)
{
if (s_Instance != nullptr) {
throw std::runtime_error("second instance of \"Settings\" created");
@@ -280,7 +280,57 @@ QString Settings::getModDirectory(bool resolve) const
QString Settings::getManagedGameDirectory() const
{
- return m_Settings.value("gamePath", "").toString();
+ return QString::fromUtf8(m_Settings.value("gamePath", "").toByteArray());
+}
+
+void Settings::setManagedGameDirectory(const QString& path)
+{
+ m_Settings.setValue("gamePath", QDir::toNativeSeparators(path).toUtf8());
+}
+
+QString Settings::getManagedGameName() const
+{
+ return m_Settings.value("gameName", "").toString();
+}
+
+void Settings::setManagedGameName(const QString& name)
+{
+ m_Settings.setValue("gameName", name);
+}
+
+QString Settings::getManagedGameEdition() const
+{
+ return m_Settings.value("game_edition", "").toString();
+}
+
+void Settings::setManagedGameEdition(const QString& name)
+{
+ m_Settings.setValue("game_edition", name);
+}
+
+QString Settings::getSelectedProfileName() const
+{
+ return QString::fromUtf8(m_Settings.value("selected_profile", "").toByteArray());
+}
+
+int Settings::getMainWindowMonitor() const
+{
+ return m_Settings.value("window_monitor", -1).toInt();
+}
+
+QString Settings::getStyleName() const
+{
+ return m_Settings.value("Settings/style", "").toString();
+}
+
+void Settings::setStyleName(const QString& name)
+{
+ m_Settings.setValue("Settings/style", name);
+}
+
+bool Settings::isCategoryListVisible() const
+{
+ return m_Settings.value("categorylist_visible", true).toBool();
}
QString Settings::getProfileDirectory(bool resolve) const
@@ -608,3 +658,24 @@ void Settings::writePluginBlacklist()
m_Settings.endArray();
}
+
+void Settings::dump() const
+{
+ static const QStringList ignore({
+ "username", "password", "nexus_api_key"
+ });
+
+ log::debug("settings:");
+
+ m_Settings.beginGroup("Settings");
+
+ for (auto k : m_Settings.allKeys()) {
+ if (ignore.contains(k, Qt::CaseInsensitive)) {
+ continue;
+ }
+
+ log::debug(" . {}={}", k, m_Settings.value(k).toString());
+ }
+
+ m_Settings.endGroup();
+}
diff --git a/src/settings.h b/src/settings.h
index 63718089..f06aece9 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -40,7 +40,7 @@ class Settings : public QObject
Q_OBJECT
public:
- Settings(const QSettings &settingsSource);
+ Settings(const QString& path);
~Settings();
static Settings &instance();
@@ -123,6 +123,24 @@ public:
* retrieve the directory where the managed game is stored (with native separators)
**/
QString getManagedGameDirectory() const;
+ void setManagedGameDirectory(const QString& path);
+
+ QString getManagedGameName() const;
+ void setManagedGameName(const QString& name);
+
+ QString getManagedGameEdition() const;
+ void setManagedGameEdition(const QString& name);
+
+ QString getSelectedProfileName() const;
+
+ // returns -1 if not set
+ //
+ int getMainWindowMonitor() const;
+
+ QString getStyleName() const;
+ void setStyleName(const QString& name);
+
+ bool isCategoryListVisible() const;
/**
* retrieve the directory where profiles stored (with native separators)
@@ -370,6 +388,8 @@ public:
MOBase::IPluginGame const *gamePlugin() { return m_GamePlugin; }
const LoadMechanism& loadMechanism() const { return m_LoadMechanism; }
+ void dump() const;
+
// temp
QMap<QString, QVariantMap> m_PluginSettings;
QMap<QString, QVariantMap> m_PluginDescriptions;