From 1266e13921812ac647e1b788fab5eb04e8267ec9 Mon Sep 17 00:00:00 2001 From: LostDragonist Date: Tue, 11 Dec 2018 01:52:53 -0600 Subject: Add the ability to change the managed game directory --- src/mainwindow.cpp | 13 +++++++++++-- src/settings.cpp | 11 +++++++++++ src/settings.h | 5 +++++ src/settingsdialog.cpp | 10 ++++++++++ src/settingsdialog.h | 2 ++ src/settingsdialog.ui | 7 +++++++ 6 files changed, 46 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 2551aa2a..834a1fce 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -4178,11 +4178,22 @@ void MainWindow::on_actionSettings_triggered() QString oldModDirectory(settings.getModDirectory()); QString oldCacheDirectory(settings.getCacheDirectory()); QString oldProfilesDirectory(settings.getProfileDirectory()); + QString oldManagedGameDirectory(settings.getManagedGameDirectory()); bool oldDisplayForeign(settings.displayForeign()); bool proxy = settings.useProxy(); + DownloadManager *dlManager = m_OrganizerCore.downloadManager(); settings.query(&m_PluginContainer, this); + if (oldManagedGameDirectory != settings.getManagedGameDirectory()) { + QMessageBox::about(this, tr("Restarting MO"), + tr("Changing the managed game directory requires restarting MO.\n" + "Any pending downloads will be paused.\n\n" + "Click OK to restart MO now.")); + dlManager->pauseAll(); + qApp->exit(INT_MAX); + } + InstallationManager *instManager = m_OrganizerCore.installationManager(); instManager->setModsDirectory(settings.getModDirectory()); instManager->setDownloadDirectory(settings.getDownloadDirectory()); @@ -4194,8 +4205,6 @@ void MainWindow::on_actionSettings_triggered() refreshProfiles(); } - DownloadManager *dlManager = m_OrganizerCore.downloadManager(); - if (dlManager->getOutputDirectory() != settings.getDownloadDirectory()) { if (dlManager->downloadsInProgress()) { MessageDialog::showMessage(tr("Can't change download directory while " diff --git a/src/settings.cpp b/src/settings.cpp index b067106f..5db656d8 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -298,6 +298,11 @@ QString Settings::getModDirectory(bool resolve) const return getConfigurablePath("mod_directory", ToQString(AppConfig::modsPath()), resolve); } +QString Settings::getManagedGameDirectory() const +{ + return m_Settings.value("gamePath", "").toString(); +} + QString Settings::getProfileDirectory(bool resolve) const { return getConfigurablePath("profiles_directory", ToQString(AppConfig::profilesPath()), resolve); @@ -882,6 +887,12 @@ void Settings::PathsTab::update() } else { m_Settings.remove("Settings/base_directory"); } + + QFileInfo oldGameExe(m_parent->m_GamePlugin->gameDirectory().absoluteFilePath(m_parent->m_GamePlugin->binaryName())); + QFileInfo newGameExe(m_managedGameDirEdit->text()); + if (oldGameExe != newGameExe) { + m_Settings.setValue("gamePath", newGameExe.absolutePath()); + } } Settings::DiagnosticsTab::DiagnosticsTab(Settings *m_parent, SettingsDialog &m_dialog) diff --git a/src/settings.h b/src/settings.h index 2b8186f3..4009d4a3 100644 --- a/src/settings.h +++ b/src/settings.h @@ -160,6 +160,11 @@ public: **/ QString getCacheDirectory(bool resolve = true) const; + /** + * retrieve the directory where the managed game is stored (with native separators) + **/ + QString getManagedGameDirectory() const; + /** * retrieve the directory where profiles stored (with native separators) **/ diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index dec2532c..0d96e63a 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -220,6 +220,16 @@ void SettingsDialog::on_browseOverwriteDirBtn_clicked() } } +void SettingsDialog::on_browseGameDirBtn_clicked() +{ + QFileInfo oldGameExe(ui->managedGameDirEdit->text()); + + QString temp = QFileDialog::getOpenFileName(this, tr("Select game executable"), oldGameExe.absolutePath(), oldGameExe.fileName()); + if (!temp.isEmpty()) { + ui->managedGameDirEdit->setText(temp); + } +} + void SettingsDialog::on_containsBtn_clicked() { QColor result = QColorDialog::getColor(m_ContainsColor, this); diff --git a/src/settingsdialog.h b/src/settingsdialog.h index 95ed288f..f0567d87 100644 --- a/src/settingsdialog.h +++ b/src/settingsdialog.h @@ -110,6 +110,8 @@ private slots: void on_browseProfilesDirBtn_clicked(); + void on_browseGameDirBtn_clicked(); + void on_overwritingBtn_clicked(); void on_overwrittenBtn_clicked(); diff --git a/src/settingsdialog.ui b/src/settingsdialog.ui index 203078a6..80a6a0e7 100644 --- a/src/settingsdialog.ui +++ b/src/settingsdialog.ui @@ -386,6 +386,13 @@ If you use pre-releases, never contact me directly by e-mail or via private mess + + + + ... + + + -- cgit v1.3.1