summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/CMakeLists.txt3
-rw-r--r--src/settings.cpp81
-rw-r--r--src/settings.h17
-rw-r--r--src/settingsdialog.cpp113
-rw-r--r--src/settingsdialog.h14
-rw-r--r--src/settingsdialogpaths.cpp205
-rw-r--r--src/settingsdialogpaths.h33
7 files changed, 243 insertions, 223 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 29c419b5..98d59996 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -38,6 +38,7 @@ SET(organizer_SRCS
singleinstance.cpp
settingsdialog.cpp
settingsdialoggeneral.cpp
+ settingsdialogpaths.cpp
settings.cpp
selfupdater.cpp
selectiondialog.cpp
@@ -153,6 +154,7 @@ SET(organizer_HDRS
singleinstance.h
settingsdialog.h
settingsdialoggeneral.h
+ settingsdialogpaths.h
settings.h
selfupdater.h
selectiondialog.h
@@ -434,6 +436,7 @@ set(settings
settings
settingsdialog
settingsdialoggeneral
+ settingsdialogpaths
)
set(utilities
diff --git a/src/settings.cpp b/src/settings.cpp
index 0911b155..bed8e789 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -23,6 +23,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "serverinfo.h"
#include "settingsdialog.h"
#include "settingsdialoggeneral.h"
+#include "settingsdialogpaths.h"
#include "versioninfo.h"
#include "appconfig.h"
#include "organizercore.h"
@@ -752,86 +753,6 @@ void Settings::query(PluginContainer *pluginContainer, QWidget *parent)
}
-Settings::PathsTab::PathsTab(Settings *parent, SettingsDialog &dialog)
- : SettingsTab(parent, dialog)
- , m_baseDirEdit(m_dialog.findChild<QLineEdit *>("baseDirEdit"))
- , m_downloadDirEdit(m_dialog.findChild<QLineEdit *>("downloadDirEdit"))
- , m_modDirEdit(m_dialog.findChild<QLineEdit *>("modDirEdit"))
- , m_cacheDirEdit(m_dialog.findChild<QLineEdit *>("cacheDirEdit"))
- , m_profilesDirEdit(m_dialog.findChild<QLineEdit *>("profilesDirEdit"))
- , m_overwriteDirEdit(m_dialog.findChild<QLineEdit *>("overwriteDirEdit"))
- , m_managedGameDirEdit(m_dialog.findChild<QLineEdit *>("managedGameDirEdit"))
-{
- m_baseDirEdit->setText(m_parent->getBaseDirectory());
- m_managedGameDirEdit->setText(m_parent->m_GamePlugin->gameDirectory().absoluteFilePath(m_parent->m_GamePlugin->binaryName()));
- QString basePath = parent->getBaseDirectory();
- QDir baseDir(basePath);
- for (const auto &dir : {
- std::make_pair(m_downloadDirEdit, m_parent->getDownloadDirectory(false)),
- std::make_pair(m_modDirEdit, m_parent->getModDirectory(false)),
- std::make_pair(m_cacheDirEdit, m_parent->getCacheDirectory(false)),
- std::make_pair(m_profilesDirEdit, m_parent->getProfileDirectory(false)),
- std::make_pair(m_overwriteDirEdit, m_parent->getOverwriteDirectory(false))
- }) {
- QString storePath = baseDir.relativeFilePath(dir.second);
- storePath = dir.second;
- dir.first->setText(storePath);
- }
-}
-
-void Settings::PathsTab::update()
-{
- typedef std::tuple<QString, QString, std::wstring> Directory;
-
- QString basePath = m_parent->getBaseDirectory();
-
- for (const Directory &dir :{
- Directory{m_downloadDirEdit->text(), "download_directory", AppConfig::downloadPath()},
- Directory{m_cacheDirEdit->text(), "cache_directory", AppConfig::cachePath()},
- Directory{m_modDirEdit->text(), "mod_directory", AppConfig::modsPath()},
- Directory{m_overwriteDirEdit->text(), "overwrite_directory", AppConfig::overwritePath()},
- Directory{m_profilesDirEdit->text(), "profiles_directory", AppConfig::profilesPath()}
- }) {
- QString path, settingsKey;
- std::wstring defaultName;
- std::tie(path, settingsKey, defaultName) = dir;
-
- settingsKey = QString("Settings/%1").arg(settingsKey);
-
- QString realPath = path;
- realPath.replace("%BASE_DIR%", m_baseDirEdit->text());
-
- if (!QDir(realPath).exists()) {
- if (!QDir().mkpath(realPath)) {
- QMessageBox::warning(qApp->activeWindow(), tr("Error"),
- tr("Failed to create \"%1\", you may not have the "
- "necessary permission. path remains unchanged.")
- .arg(realPath));
- }
- }
-
- if (QFileInfo(realPath)
- != QFileInfo(basePath + "/" + QString::fromStdWString(defaultName))) {
- m_Settings.setValue(settingsKey, path);
- } else {
- m_Settings.remove(settingsKey);
- }
- }
-
- if (QFileInfo(m_baseDirEdit->text()) !=
- QFileInfo(qApp->property("dataPath").toString())) {
- m_Settings.setValue("Settings/base_directory", m_baseDirEdit->text());
- } 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)
: SettingsTab(m_parent, m_dialog)
, m_logLevelBox(m_dialog.findChild<QComboBox *>("logLevelBox"))
diff --git a/src/settings.h b/src/settings.h
index e88080ba..6f75562b 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -427,6 +427,7 @@ public:
bool colorSeparatorScrollbar() const;
QSettings& settingsRef() { return m_Settings; }
+ MOBase::IPluginGame const *gamePlugin() { return m_GamePlugin; }
public slots:
@@ -443,22 +444,6 @@ private:
QString getConfigurablePath(const QString &key, const QString &def, bool resolve) const;
- class PathsTab : public SettingsTab
- {
- public:
- PathsTab(Settings *parent, SettingsDialog &dialog);
-
- void update();
-
- private:
- QLineEdit *m_baseDirEdit;
- QLineEdit *m_downloadDirEdit;
- QLineEdit *m_modDirEdit;
- QLineEdit *m_cacheDirEdit;
- QLineEdit *m_profilesDirEdit;
- QLineEdit *m_overwriteDirEdit;
- QLineEdit *m_managedGameDirEdit;
- };
class DiagnosticsTab : public SettingsTab
{
diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp
index f922cfb9..bfa285bf 100644
--- a/src/settingsdialog.cpp
+++ b/src/settingsdialog.cpp
@@ -200,80 +200,6 @@ void SettingsDialog::on_bsaDateBtn_clicked()
dir.absolutePath().toStdWString());
}
-void SettingsDialog::on_browseBaseDirBtn_clicked()
-{
- QString temp = QFileDialog::getExistingDirectory(
- this, tr("Select base directory"), ui->baseDirEdit->text());
- if (!temp.isEmpty()) {
- ui->baseDirEdit->setText(temp);
- }
-}
-
-void SettingsDialog::on_browseDownloadDirBtn_clicked()
-{
- QString searchPath = ui->downloadDirEdit->text();
- searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
-
- QString temp = QFileDialog::getExistingDirectory(this, tr("Select download directory"), searchPath);
- if (!temp.isEmpty()) {
- ui->downloadDirEdit->setText(temp);
- }
-}
-
-void SettingsDialog::on_browseModDirBtn_clicked()
-{
- QString searchPath = ui->modDirEdit->text();
- searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
-
- QString temp = QFileDialog::getExistingDirectory(this, tr("Select mod directory"), searchPath);
- if (!temp.isEmpty()) {
- ui->modDirEdit->setText(temp);
- }
-}
-
-void SettingsDialog::on_browseCacheDirBtn_clicked()
-{
- QString searchPath = ui->cacheDirEdit->text();
- searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
-
- QString temp = QFileDialog::getExistingDirectory(this, tr("Select cache directory"), searchPath);
- if (!temp.isEmpty()) {
- ui->cacheDirEdit->setText(temp);
- }
-}
-
-void SettingsDialog::on_browseProfilesDirBtn_clicked()
-{
- QString searchPath = ui->profilesDirEdit->text();
- searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
-
- QString temp = QFileDialog::getExistingDirectory(this, tr("Select profiles directory"), searchPath);
- if (!temp.isEmpty()) {
- ui->profilesDirEdit->setText(temp);
- }
-}
-
-void SettingsDialog::on_browseOverwriteDirBtn_clicked()
-{
- QString searchPath = ui->overwriteDirEdit->text();
- searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
-
- QString temp = QFileDialog::getExistingDirectory(this, tr("Select overwrite directory"), searchPath);
- if (!temp.isEmpty()) {
- ui->overwriteDirEdit->setText(temp);
- }
-}
-
-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_nexusConnect_clicked()
{
if (m_nexusLogin && m_nexusLogin->isActive()) {
@@ -555,45 +481,6 @@ void SettingsDialog::on_clearCacheButton_clicked()
NexusInterface::instance(m_PluginContainer)->clearCache();
}
-void SettingsDialog::normalizePath(QLineEdit *lineEdit)
-{
- QString text = lineEdit->text();
- while (text.endsWith('/') || text.endsWith('\\')) {
- text.chop(1);
- }
- lineEdit->setText(text);
-}
-
-void SettingsDialog::on_baseDirEdit_editingFinished()
-{
- normalizePath(ui->baseDirEdit);
-}
-
-void SettingsDialog::on_downloadDirEdit_editingFinished()
-{
- normalizePath(ui->downloadDirEdit);
-}
-
-void SettingsDialog::on_modDirEdit_editingFinished()
-{
- normalizePath(ui->modDirEdit);
-}
-
-void SettingsDialog::on_cacheDirEdit_editingFinished()
-{
- normalizePath(ui->cacheDirEdit);
-}
-
-void SettingsDialog::on_profilesDirEdit_editingFinished()
-{
- normalizePath(ui->profilesDirEdit);
-}
-
-void SettingsDialog::on_overwriteDirEdit_editingFinished()
-{
- normalizePath(ui->overwriteDirEdit);
-}
-
void SettingsDialog::on_resetGeometryBtn_clicked()
{
m_GeometriesReset = true;
diff --git a/src/settingsdialog.h b/src/settingsdialog.h
index 01a0afa2..68e72529 100644
--- a/src/settingsdialog.h
+++ b/src/settingsdialog.h
@@ -67,7 +67,6 @@ signals:
private:
void storeSettings(QListWidgetItem *pluginItem);
- void normalizePath(QLineEdit *lineEdit);
public:
QString getExecutableBlacklist() { return m_ExecutableBlacklist; }
@@ -77,26 +76,13 @@ public:
private slots:
void on_associateButton_clicked();
- void on_baseDirEdit_editingFinished();
- void on_browseBaseDirBtn_clicked();
- void on_browseCacheDirBtn_clicked();
- void on_browseDownloadDirBtn_clicked();
- void on_browseGameDirBtn_clicked();
- void on_browseModDirBtn_clicked();
- void on_browseOverwriteDirBtn_clicked();
- void on_browseProfilesDirBtn_clicked();
void on_bsaDateBtn_clicked();
- void on_cacheDirEdit_editingFinished();
void on_clearCacheButton_clicked();
- void on_downloadDirEdit_editingFinished();
void on_execBlacklistBtn_clicked();
- void on_modDirEdit_editingFinished();
void on_nexusConnect_clicked();
void on_nexusDisconnect_clicked();
void on_nexusManualKey_clicked();
- void on_overwriteDirEdit_editingFinished();
void on_pluginsList_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
- void on_profilesDirEdit_editingFinished();
void on_resetGeometryBtn_clicked();
void deleteBlacklistItem();
diff --git a/src/settingsdialogpaths.cpp b/src/settingsdialogpaths.cpp
new file mode 100644
index 00000000..303d1562
--- /dev/null
+++ b/src/settingsdialogpaths.cpp
@@ -0,0 +1,205 @@
+#include "settingsdialogpaths.h"
+#include "ui_settingsdialog.h"
+#include "appconfig.h"
+#include <iplugingame.h>
+
+PathsTab::PathsTab(Settings *parent, SettingsDialog &dialog)
+ : SettingsTab(parent, dialog)
+{
+ ui->baseDirEdit->setText(m_parent->getBaseDirectory());
+ ui->managedGameDirEdit->setText(m_parent->gamePlugin()->gameDirectory().absoluteFilePath(m_parent->gamePlugin()->binaryName()));
+ QString basePath = parent->getBaseDirectory();
+ QDir baseDir(basePath);
+ for (const auto &dir : {
+ std::make_pair(ui->downloadDirEdit, m_parent->getDownloadDirectory(false)),
+ std::make_pair(ui->modDirEdit, m_parent->getModDirectory(false)),
+ std::make_pair(ui->cacheDirEdit, m_parent->getCacheDirectory(false)),
+ std::make_pair(ui->profilesDirEdit, m_parent->getProfileDirectory(false)),
+ std::make_pair(ui->overwriteDirEdit, m_parent->getOverwriteDirectory(false))
+ }) {
+ QString storePath = baseDir.relativeFilePath(dir.second);
+ storePath = dir.second;
+ dir.first->setText(storePath);
+ }
+
+ QObject::connect(ui->browseBaseDirBtn, &QPushButton::clicked, [&]{ on_browseBaseDirBtn_clicked(); });
+ QObject::connect(ui->browseCacheDirBtn, &QPushButton::clicked, [&]{ on_browseCacheDirBtn_clicked(); });
+ QObject::connect(ui->browseDownloadDirBtn, &QPushButton::clicked, [&]{ on_browseDownloadDirBtn_clicked(); });
+ QObject::connect(ui->browseGameDirBtn, &QPushButton::clicked, [&]{ on_browseGameDirBtn_clicked(); });
+ QObject::connect(ui->browseModDirBtn, &QPushButton::clicked, [&]{ on_browseModDirBtn_clicked(); });
+ QObject::connect(ui->browseOverwriteDirBtn, &QPushButton::clicked, [&]{ on_browseOverwriteDirBtn_clicked(); });
+ QObject::connect(ui->browseProfilesDirBtn, &QPushButton::clicked, [&]{ on_browseProfilesDirBtn_clicked(); });
+
+ QObject::connect(ui->baseDirEdit, &QLineEdit::editingFinished, [&]{ on_baseDirEdit_editingFinished(); });
+ QObject::connect(ui->cacheDirEdit, &QLineEdit::editingFinished, [&]{ on_cacheDirEdit_editingFinished(); });
+ QObject::connect(ui->downloadDirEdit, &QLineEdit::editingFinished, [&]{ on_downloadDirEdit_editingFinished(); });
+ QObject::connect(ui->modDirEdit, &QLineEdit::editingFinished, [&]{ on_modDirEdit_editingFinished(); });
+ QObject::connect(ui->overwriteDirEdit, &QLineEdit::editingFinished, [&]{ on_overwriteDirEdit_editingFinished(); });
+ QObject::connect(ui->profilesDirEdit, &QLineEdit::editingFinished, [&]{ on_profilesDirEdit_editingFinished(); });
+}
+
+void PathsTab::update()
+{
+ typedef std::tuple<QString, QString, std::wstring> Directory;
+
+ QString basePath = m_parent->getBaseDirectory();
+
+ for (const Directory &dir :{
+ Directory{ui->downloadDirEdit->text(), "download_directory", AppConfig::downloadPath()},
+ Directory{ui->cacheDirEdit->text(), "cache_directory", AppConfig::cachePath()},
+ Directory{ui->modDirEdit->text(), "mod_directory", AppConfig::modsPath()},
+ Directory{ui->overwriteDirEdit->text(), "overwrite_directory", AppConfig::overwritePath()},
+ Directory{ui->profilesDirEdit->text(), "profiles_directory", AppConfig::profilesPath()}
+ }) {
+ QString path, settingsKey;
+ std::wstring defaultName;
+ std::tie(path, settingsKey, defaultName) = dir;
+
+ settingsKey = QString("Settings/%1").arg(settingsKey);
+
+ QString realPath = path;
+ realPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
+
+ if (!QDir(realPath).exists()) {
+ if (!QDir().mkpath(realPath)) {
+ QMessageBox::warning(qApp->activeWindow(), QObject::tr("Error"),
+ QObject::tr("Failed to create \"%1\", you may not have the "
+ "necessary permission. path remains unchanged.")
+ .arg(realPath));
+ }
+ }
+
+ if (QFileInfo(realPath)
+ != QFileInfo(basePath + "/" + QString::fromStdWString(defaultName))) {
+ m_Settings.setValue(settingsKey, path);
+ } else {
+ m_Settings.remove(settingsKey);
+ }
+ }
+
+ if (QFileInfo(ui->baseDirEdit->text()) !=
+ QFileInfo(qApp->property("dataPath").toString())) {
+ m_Settings.setValue("Settings/base_directory", ui->baseDirEdit->text());
+ } else {
+ m_Settings.remove("Settings/base_directory");
+ }
+
+ QFileInfo oldGameExe(m_parent->gamePlugin()->gameDirectory().absoluteFilePath(m_parent->gamePlugin()->binaryName()));
+ QFileInfo newGameExe(ui->managedGameDirEdit->text());
+ if (oldGameExe != newGameExe) {
+ m_Settings.setValue("gamePath", newGameExe.absolutePath());
+ }
+}
+
+void PathsTab::on_browseBaseDirBtn_clicked()
+{
+ QString temp = QFileDialog::getExistingDirectory(
+ parentWidget(), QObject::tr("Select base directory"), ui->baseDirEdit->text());
+ if (!temp.isEmpty()) {
+ ui->baseDirEdit->setText(temp);
+ }
+}
+
+void PathsTab::on_browseDownloadDirBtn_clicked()
+{
+ QString searchPath = ui->downloadDirEdit->text();
+ searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
+
+ QString temp = QFileDialog::getExistingDirectory(parentWidget(), QObject::tr("Select download directory"), searchPath);
+ if (!temp.isEmpty()) {
+ ui->downloadDirEdit->setText(temp);
+ }
+}
+
+void PathsTab::on_browseModDirBtn_clicked()
+{
+ QString searchPath = ui->modDirEdit->text();
+ searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
+
+ QString temp = QFileDialog::getExistingDirectory(parentWidget(), QObject::tr("Select mod directory"), searchPath);
+ if (!temp.isEmpty()) {
+ ui->modDirEdit->setText(temp);
+ }
+}
+
+void PathsTab::on_browseCacheDirBtn_clicked()
+{
+ QString searchPath = ui->cacheDirEdit->text();
+ searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
+
+ QString temp = QFileDialog::getExistingDirectory(parentWidget(), QObject::tr("Select cache directory"), searchPath);
+ if (!temp.isEmpty()) {
+ ui->cacheDirEdit->setText(temp);
+ }
+}
+
+void PathsTab::on_browseProfilesDirBtn_clicked()
+{
+ QString searchPath = ui->profilesDirEdit->text();
+ searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
+
+ QString temp = QFileDialog::getExistingDirectory(parentWidget(), QObject::tr("Select profiles directory"), searchPath);
+ if (!temp.isEmpty()) {
+ ui->profilesDirEdit->setText(temp);
+ }
+}
+
+void PathsTab::on_browseOverwriteDirBtn_clicked()
+{
+ QString searchPath = ui->overwriteDirEdit->text();
+ searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
+
+ QString temp = QFileDialog::getExistingDirectory(parentWidget(), QObject::tr("Select overwrite directory"), searchPath);
+ if (!temp.isEmpty()) {
+ ui->overwriteDirEdit->setText(temp);
+ }
+}
+
+void PathsTab::on_browseGameDirBtn_clicked()
+{
+ QFileInfo oldGameExe(ui->managedGameDirEdit->text());
+
+ QString temp = QFileDialog::getOpenFileName(parentWidget(), QObject::tr("Select game executable"), oldGameExe.absolutePath(), oldGameExe.fileName());
+ if (!temp.isEmpty()) {
+ ui->managedGameDirEdit->setText(temp);
+ }
+}
+
+void PathsTab::on_baseDirEdit_editingFinished()
+{
+ normalizePath(ui->baseDirEdit);
+}
+
+void PathsTab::on_downloadDirEdit_editingFinished()
+{
+ normalizePath(ui->downloadDirEdit);
+}
+
+void PathsTab::on_modDirEdit_editingFinished()
+{
+ normalizePath(ui->modDirEdit);
+}
+
+void PathsTab::on_cacheDirEdit_editingFinished()
+{
+ normalizePath(ui->cacheDirEdit);
+}
+
+void PathsTab::on_profilesDirEdit_editingFinished()
+{
+ normalizePath(ui->profilesDirEdit);
+}
+
+void PathsTab::on_overwriteDirEdit_editingFinished()
+{
+ normalizePath(ui->overwriteDirEdit);
+}
+
+void PathsTab::normalizePath(QLineEdit *lineEdit)
+{
+ QString text = lineEdit->text();
+ while (text.endsWith('/') || text.endsWith('\\')) {
+ text.chop(1);
+ }
+ lineEdit->setText(text);
+}
diff --git a/src/settingsdialogpaths.h b/src/settingsdialogpaths.h
new file mode 100644
index 00000000..dac402b1
--- /dev/null
+++ b/src/settingsdialogpaths.h
@@ -0,0 +1,33 @@
+#ifndef SETTINGSDIALOGPATHS_H
+#define SETTINGSDIALOGPATHS_H
+
+#include "settings.h"
+#include "settingsdialog.h"
+
+class PathsTab : public SettingsTab
+{
+public:
+ PathsTab(Settings *parent, SettingsDialog &dialog);
+
+ void update();
+
+private:
+ void on_browseBaseDirBtn_clicked();
+ void on_browseCacheDirBtn_clicked();
+ void on_browseDownloadDirBtn_clicked();
+ void on_browseGameDirBtn_clicked();
+ void on_browseModDirBtn_clicked();
+ void on_browseOverwriteDirBtn_clicked();
+ void on_browseProfilesDirBtn_clicked();
+
+ void on_baseDirEdit_editingFinished();
+ void on_cacheDirEdit_editingFinished();
+ void on_downloadDirEdit_editingFinished();
+ void on_modDirEdit_editingFinished();
+ void on_overwriteDirEdit_editingFinished();
+ void on_profilesDirEdit_editingFinished();
+
+ void normalizePath(QLineEdit *lineEdit);
+};
+
+#endif // SETTINGSDIALOGPATHS_H