diff options
| -rw-r--r-- | src/installationmanager.cpp | 13 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 6 | ||||
| -rw-r--r-- | src/organizercore.cpp | 2 | ||||
| -rw-r--r-- | src/settings.cpp | 68 | ||||
| -rw-r--r-- | src/settings.h | 16 | ||||
| -rw-r--r-- | src/settingsdialoggeneral.cpp | 2 |
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) |
