summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mainwindow.cpp13
-rw-r--r--src/settings.cpp11
-rw-r--r--src/settings.h5
-rw-r--r--src/settingsdialog.cpp10
-rw-r--r--src/settingsdialog.h2
-rw-r--r--src/settingsdialog.ui7
6 files changed, 46 insertions, 2 deletions
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
@@ -161,6 +161,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)
**/
QString getProfileDirectory(bool resolve = true) const;
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
</property>
</widget>
</item>
+ <item row="11" column="2">
+ <widget class="QPushButton" name="browseGameDirBtn">
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
<item>