Skip to content

Commit bbab59f

Browse files
committed
fixed handling of base dir in settings dialog (and fixed the tab order in the settings dialog)
1 parent bfbb190 commit bbab59f

File tree

4 files changed

+94
-29
lines changed

4 files changed

+94
-29
lines changed

src/settings.cpp

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,7 @@ QString Settings::getConfigurablePath(const QString &key,
224224
bool resolve) const
225225
{
226226
QString result = QDir::fromNativeSeparators(
227-
m_Settings.value(QString("settings/") + key,
228-
qApp->property("dataPath").toString() + "/" + def)
227+
m_Settings.value(QString("settings/") + key, QString("%BASE_DIR%/") + def)
229228
.toString());
230229
if (resolve) {
231230
result.replace("%BASE_DIR%", getBaseDirectory());
@@ -677,12 +676,7 @@ Settings::PathsTab::PathsTab(Settings *parent, SettingsDialog &dialog)
677676
std::make_pair(m_overwriteDirEdit, m_parent->getOverwriteDirectory(false))
678677
}) {
679678
QString storePath = baseDir.relativeFilePath(dir.second);
680-
qDebug("%s -> %s", qPrintable(dir.second), qPrintable(storePath));
681-
if (storePath.startsWith("..") || QDir::isAbsolutePath(storePath)) {
682-
storePath = dir.second;
683-
} else {
684-
storePath = QString("%BASE_DIR%/") + storePath;
685-
}
679+
storePath = dir.second;
686680
dir.first->setText(storePath);
687681
}
688682
}
@@ -693,20 +687,6 @@ void Settings::PathsTab::update()
693687

694688
QString basePath = m_parent->getBaseDirectory();
695689

696-
if ((QDir::fromNativeSeparators(m_modDirEdit->text())
697-
!= QDir::fromNativeSeparators(m_parent->getModDirectory()))
698-
&& (QMessageBox::question(
699-
nullptr, tr("Confirm"),
700-
tr("Changing the mod directory affects all your profiles! "
701-
"Mods not present (or named differently) in the new location "
702-
"will be disabled in all profiles. "
703-
"There is no way to undo this unless you backed up your "
704-
"profiles manually. Proceed?"),
705-
QMessageBox::Yes | QMessageBox::No)
706-
== QMessageBox::No)) {
707-
m_modDirEdit->setText(m_parent->getModDirectory());
708-
}
709-
710690
for (const Directory &dir :{
711691
Directory{m_downloadDirEdit->text(), "download_directory", AppConfig::downloadPath()},
712692
Directory{m_cacheDirEdit->text(), "cache_directory", AppConfig::cachePath()},
@@ -727,15 +707,20 @@ void Settings::PathsTab::update()
727707
QDir().mkpath(realPath);
728708
}
729709

730-
qDebug("%s -> %s", qPrintable(path), qPrintable(realPath));
731-
732710
if (QFileInfo(realPath)
733711
!= QFileInfo(basePath + "/" + QString::fromStdWString(defaultName))) {
734712
m_Settings.setValue(settingsKey, path);
735713
} else {
736714
m_Settings.remove(settingsKey);
737715
}
738716
}
717+
718+
if (QFileInfo(m_baseDirEdit->text()) !=
719+
QFileInfo(qApp->property("dataPath").toString())) {
720+
m_Settings.setValue("Settings/base_directory", m_baseDirEdit->text());
721+
} else {
722+
m_Settings.remove("Settings/base_directory");
723+
}
739724
}
740725

741726
Settings::NexusTab::NexusTab(Settings *parent, SettingsDialog &dialog)

src/settingsdialog.cpp

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,23 @@ void SettingsDialog::addPlugins(const std::vector<IPlugin*> &plugins)
6565

6666
void SettingsDialog::accept()
6767
{
68+
QString newModPath = ui->modDirEdit->text();
69+
newModPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
70+
71+
if ((QDir::fromNativeSeparators(newModPath) !=
72+
QDir::fromNativeSeparators(
73+
Settings::instance().getModDirectory(true))) &&
74+
(QMessageBox::question(
75+
nullptr, tr("Confirm"),
76+
tr("Changing the mod directory affects all your profiles! "
77+
"Mods not present (or named differently) in the new location "
78+
"will be disabled in all profiles. "
79+
"There is no way to undo this unless you backed up your "
80+
"profiles manually. Proceed?"),
81+
QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)) {
82+
return;
83+
}
84+
6885
storeSettings(ui->pluginsList->currentItem());
6986
TutorableDialog::accept();
7087
}
@@ -112,39 +129,54 @@ void SettingsDialog::on_browseBaseDirBtn_clicked()
112129

113130
void SettingsDialog::on_browseDownloadDirBtn_clicked()
114131
{
115-
QString temp = QFileDialog::getExistingDirectory(this, tr("Select download directory"), ui->downloadDirEdit->text());
132+
QString searchPath = ui->downloadDirEdit->text();
133+
searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
134+
135+
QString temp = QFileDialog::getExistingDirectory(this, tr("Select download directory"), searchPath);
116136
if (!temp.isEmpty()) {
117137
ui->downloadDirEdit->setText(temp);
118138
}
119139
}
120140

121141
void SettingsDialog::on_browseModDirBtn_clicked()
122142
{
123-
QString temp = QFileDialog::getExistingDirectory(this, tr("Select mod directory"), ui->modDirEdit->text());
143+
QString searchPath = ui->modDirEdit->text();
144+
searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
145+
146+
QString temp = QFileDialog::getExistingDirectory(this, tr("Select mod directory"), searchPath);
124147
if (!temp.isEmpty()) {
125148
ui->modDirEdit->setText(temp);
126149
}
127150
}
128151

129152
void SettingsDialog::on_browseCacheDirBtn_clicked()
130153
{
131-
QString temp = QFileDialog::getExistingDirectory(this, tr("Select cache directory"), ui->cacheDirEdit->text());
154+
QString searchPath = ui->cacheDirEdit->text();
155+
searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
156+
157+
QString temp = QFileDialog::getExistingDirectory(this, tr("Select cache directory"), searchPath);
132158
if (!temp.isEmpty()) {
133159
ui->cacheDirEdit->setText(temp);
134160
}
135161
}
136162

137163
void SettingsDialog::on_browseProfilesDirBtn_clicked()
138164
{
139-
QString temp = QFileDialog::getExistingDirectory(this, tr("Select profiles directory"), ui->profilesDirEdit->text());
165+
QString searchPath = ui->profilesDirEdit->text();
166+
searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
167+
168+
QString temp = QFileDialog::getExistingDirectory(this, tr("Select profiles directory"), searchPath);
140169
if (!temp.isEmpty()) {
141170
ui->profilesDirEdit->setText(temp);
142171
}
143172
}
144173

145174
void SettingsDialog::on_browseOverwriteDirBtn_clicked()
146175
{
147-
QString temp = QFileDialog::getExistingDirectory(this, tr("Select overwrite directory"), ui->overwriteDirEdit->text());
176+
QString searchPath = ui->overwriteDirEdit->text();
177+
searchPath.replace("%BASE_DIR%", ui->baseDirEdit->text());
178+
179+
QString temp = QFileDialog::getExistingDirectory(this, tr("Select overwrite directory"), searchPath);
148180
if (!temp.isEmpty()) {
149181
ui->overwriteDirEdit->setText(temp);
150182
}
@@ -222,3 +254,4 @@ void SettingsDialog::on_clearCacheButton_clicked()
222254
QDir(Settings::instance().getCacheDirectory()).removeRecursively();
223255
NexusInterface::instance()->clearCache();
224256
}
257+

src/settingsdialog.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ private slots:
8787

8888
private:
8989
Ui::SettingsDialog *ui;
90+
9091
};
9192

93+
94+
9295
#endif // WORKAROUNDDIALOG_H

src/settingsdialog.ui

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,6 +1026,50 @@ For the other games this is not a sufficient replacement for AI!</string>
10261026
</item>
10271027
</layout>
10281028
</widget>
1029+
<tabstops>
1030+
<tabstop>languageBox</tabstop>
1031+
<tabstop>styleBox</tabstop>
1032+
<tabstop>logLevelBox</tabstop>
1033+
<tabstop>usePrereleaseBox</tabstop>
1034+
<tabstop>compactBox</tabstop>
1035+
<tabstop>showMetaBox</tabstop>
1036+
<tabstop>resetDialogsButton</tabstop>
1037+
<tabstop>categoriesBtn</tabstop>
1038+
<tabstop>baseDirEdit</tabstop>
1039+
<tabstop>browseBaseDirBtn</tabstop>
1040+
<tabstop>downloadDirEdit</tabstop>
1041+
<tabstop>browseDownloadDirBtn</tabstop>
1042+
<tabstop>modDirEdit</tabstop>
1043+
<tabstop>browseModDirBtn</tabstop>
1044+
<tabstop>cacheDirEdit</tabstop>
1045+
<tabstop>browseCacheDirBtn</tabstop>
1046+
<tabstop>profilesDirEdit</tabstop>
1047+
<tabstop>browseProfilesDirBtn</tabstop>
1048+
<tabstop>overwriteDirEdit</tabstop>
1049+
<tabstop>browseOverwriteDirBtn</tabstop>
1050+
<tabstop>loginCheckBox</tabstop>
1051+
<tabstop>usernameEdit</tabstop>
1052+
<tabstop>passwordEdit</tabstop>
1053+
<tabstop>clearCacheButton</tabstop>
1054+
<tabstop>offlineBox</tabstop>
1055+
<tabstop>proxyBox</tabstop>
1056+
<tabstop>associateButton</tabstop>
1057+
<tabstop>knownServersList</tabstop>
1058+
<tabstop>preferredServersList</tabstop>
1059+
<tabstop>steamUserEdit</tabstop>
1060+
<tabstop>steamPassEdit</tabstop>
1061+
<tabstop>pluginsList</tabstop>
1062+
<tabstop>pluginSettingsList</tabstop>
1063+
<tabstop>pluginBlacklist</tabstop>
1064+
<tabstop>appIDEdit</tabstop>
1065+
<tabstop>mechanismBox</tabstop>
1066+
<tabstop>nmmVersionEdit</tabstop>
1067+
<tabstop>hideUncheckedBox</tabstop>
1068+
<tabstop>forceEnableBox</tabstop>
1069+
<tabstop>displayForeignBox</tabstop>
1070+
<tabstop>bsaDateBtn</tabstop>
1071+
<tabstop>tabWidget</tabstop>
1072+
</tabstops>
10291073
<resources>
10301074
<include location="resources.qrc"/>
10311075
</resources>

0 commit comments

Comments
 (0)