summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-08-17 12:42:27 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-08-17 12:42:27 -0400
commitdfa15218f33ad06a6e868e8e5f1022026b6530a9 (patch)
tree43fa180b413f3f6431f9329c12db2b0c3cc5e40a /src
parent7cc5f220520ab19940462fb6d2f660d8b7e2d600 (diff)
passes callbacks to QuestionBoxMemory so it doesn't access the ini directly
fixed selected executable being empty after closing the edit dialog put backup_install inside Settings
Diffstat (limited to 'src')
-rw-r--r--src/installationmanager.cpp13
-rw-r--r--src/mainwindow.cpp6
-rw-r--r--src/organizercore.cpp2
-rw-r--r--src/settings.cpp68
-rw-r--r--src/settings.h16
-rw-r--r--src/settingsdialoggeneral.cpp2
6 files changed, 97 insertions, 10 deletions
diff --git a/src/installationmanager.cpp b/src/installationmanager.cpp
index 89d0079f..522489e4 100644
--- a/src/installationmanager.cpp
+++ b/src/installationmanager.cpp
@@ -476,13 +476,18 @@ QString InstallationManager::generateBackupName(const QString &directoryName) co
bool InstallationManager::testOverwrite(GuessedValue<QString> &modName, bool *merge) const
{
QString targetDirectory = QDir::fromNativeSeparators(m_ModsDirectory + "\\" + modName);
+
while (QDir(targetDirectory).exists()) {
Settings &settings(Settings::instance());
- bool backup = settings.directInterface().value("backup_install", false).toBool();
- QueryOverwriteDialog overwriteDialog(m_ParentWidget,
- backup ? QueryOverwriteDialog::BACKUP_YES : QueryOverwriteDialog::BACKUP_NO);
+
+ const bool backup = settings.keepBackupOnInstall();
+ QueryOverwriteDialog overwriteDialog(
+ m_ParentWidget,
+ backup ? QueryOverwriteDialog::BACKUP_YES : QueryOverwriteDialog::BACKUP_NO);
+
if (overwriteDialog.exec()) {
- settings.directInterface().setValue("backup_install", overwriteDialog.backup());
+ settings.setKeepBackupOnInstall(overwriteDialog.backup());
+
if (overwriteDialog.backup()) {
QString backupDirectory = generateBackupName(targetDirectory);
if (!copyDir(targetDirectory, backupDirectory, false)) {
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 6e77f507..2ce6f9d9 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -2340,8 +2340,6 @@ bool MainWindow::modifyExecutablesDialog()
bool result = false;
try {
- const auto oldExecutables = *m_OrganizerCore.executablesList();
-
EditExecutablesDialog dialog(m_OrganizerCore, this);
result = (dialog.exec() == QDialog::Accepted);
@@ -2361,7 +2359,9 @@ void MainWindow::on_executablesListBox_currentIndexChanged(int index)
return;
}
- const int previousIndex = m_OldExecutableIndex;
+ const int previousIndex =
+ (m_OldExecutableIndex > 0 ? m_OldExecutableIndex : 1);
+
m_OldExecutableIndex = index;
if (index == 0) {
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index a2b0fd69..233a631e 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -280,8 +280,6 @@ OrganizerCore::OrganizerCore(Settings &settings)
NexusInterface::instance(m_PluginContainer)->setCacheDirectory(m_Settings.getCacheDirectory());
- MOBase::QuestionBoxMemory::init(m_Settings.directInterface().fileName());
-
m_InstallationManager.setModsDirectory(m_Settings.getModDirectory());
m_InstallationManager.setDownloadDirectory(m_Settings.getDownloadDirectory());
diff --git a/src/settings.cpp b/src/settings.cpp
index af32a082..9001ac65 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -151,10 +151,16 @@ Settings::Settings(const QString& path)
} else {
s_Instance = this;
}
+
+ MOBase::QuestionBoxMemory::setCallbacks(
+ [this](auto&& w, auto&& f){ return getQuestionButton(w, f); },
+ [this](auto&& w, auto&& b){ setQuestionWindowButton(w, b); },
+ [this](auto&& w, auto&& f, auto&& b){ setQuestionFileButton(w, f, b); });
}
Settings::~Settings()
{
+ MOBase::QuestionBoxMemory::setCallbacks({}, {}, {});
s_Instance = nullptr;
}
@@ -980,6 +986,68 @@ void Settings::setTutorialCompleted(const QString& windowName, bool b)
m_Settings.setValue("CompletedWindowTutorials/" + windowName, true);
}
+bool Settings::keepBackupOnInstall() const
+{
+ return getOptional<bool>(m_Settings, "backup_install").value_or(false);
+}
+
+void Settings::setKeepBackupOnInstall(bool b)
+{
+ m_Settings.setValue("backup_install", b);
+}
+
+QuestionBoxMemory::Button Settings::getQuestionButton(
+ const QString& windowName, const QString& filename) const
+{
+ const QString windowSetting("DialogChoices/" + windowName);
+
+ if (!filename.isEmpty()) {
+ const auto fileSetting = windowSetting + "/" + filename;
+
+ if (auto v=getOptional<int>(m_Settings, fileSetting)) {
+ return static_cast<QuestionBoxMemory::Button>(*v);
+ }
+ }
+
+ if (auto v=getOptional<int>(m_Settings, windowSetting)) {
+ return static_cast<QuestionBoxMemory::Button>(*v);
+ }
+
+ return QuestionBoxMemory::NoButton;
+}
+
+void Settings::setQuestionWindowButton(
+ const QString& windowName, QuestionBoxMemory::Button button)
+{
+ const QString settingName("DialogChoices/" + windowName);
+
+ if (button == QuestionBoxMemory::NoButton) {
+ m_Settings.remove(settingName);
+ } else {
+ m_Settings.setValue(settingName, static_cast<int>(button));
+ }
+}
+
+void Settings::setQuestionFileButton(
+ const QString& windowName, const QString& filename,
+ QuestionBoxMemory::Button button)
+{
+ const QString settingName("DialogChoices/" + windowName + "/" + filename);
+
+ if (button == QuestionBoxMemory::NoButton) {
+ m_Settings.remove(settingName);
+ } else {
+ m_Settings.setValue(settingName, static_cast<int>(button));
+ }
+}
+
+void Settings::resetQuestionButtons()
+{
+ m_Settings.beginGroup("DialogChoices");
+ m_Settings.remove("");
+ m_Settings.endGroup();
+}
+
std::optional<int> Settings::getIndex(QComboBox* cb) const
{
return getOptional<int>(m_Settings, indexSettingName(cb));
diff --git a/src/settings.h b/src/settings.h
index 5044af98..d46c358c 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -21,6 +21,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#define SETTINGS_H
#include "loadmechanism.h"
+#include <questionboxmemory.h>
#include <log.h>
namespace MOBase {
@@ -233,6 +234,21 @@ public:
bool isTutorialCompleted(const QString& windowName) const;
void setTutorialCompleted(const QString& windowName, bool b=true);
+ bool keepBackupOnInstall() const;
+ void setKeepBackupOnInstall(bool b);
+
+ MOBase::QuestionBoxMemory::Button getQuestionButton(
+ const QString& windowName, const QString& filename) const;
+
+ void setQuestionWindowButton(
+ const QString& windowName, MOBase::QuestionBoxMemory::Button button);
+
+ void setQuestionFileButton(
+ const QString& windowName, const QString& filename,
+ MOBase::QuestionBoxMemory::Button choice);
+
+ void resetQuestionButtons();
+
std::optional<int> getIndex(QComboBox* cb) const;
void saveIndex(const QComboBox* cb);
void restoreIndex(QComboBox* cb, std::optional<int> def={}) const;
diff --git a/src/settingsdialoggeneral.cpp b/src/settingsdialoggeneral.cpp
index 324dc4f4..fda50220 100644
--- a/src/settingsdialoggeneral.cpp
+++ b/src/settingsdialoggeneral.cpp
@@ -141,7 +141,7 @@ void GeneralSettingsTab::addStyles()
void GeneralSettingsTab::resetDialogs()
{
- QuestionBoxMemory::resetDialogs();
+ m_parent->resetQuestionButtons();
}
void GeneralSettingsTab::setButtonColor(QPushButton *button, const QColor &color)