diff --git a/src/blackgui/components/settingssimulatorbasicscomponent.cpp b/src/blackgui/components/settingssimulatorbasicscomponent.cpp
index 6818b82ec..84ce5720e 100644
--- a/src/blackgui/components/settingssimulatorbasicscomponent.cpp
+++ b/src/blackgui/components/settingssimulatorbasicscomponent.cpp
@@ -37,7 +37,6 @@ namespace BlackGui
connect(ui->pb_Reset, &QPushButton::clicked, this, &CSettingsSimulatorBasicsComponent::ps_reset);
connect(ui->pb_CopyDefaults, &QPushButton::clicked, this, &CSettingsSimulatorBasicsComponent::ps_copyDefaults);
connect(ui->comp_SimulatorSelector, &CSimulatorSelector::changed, this, &CSettingsSimulatorBasicsComponent::ps_simulatorChanged);
- connect(ui->le_ModelDirectory, &QLineEdit::returnPressed, this, &CSettingsSimulatorBasicsComponent::ps_modelDirectoryEntered);
connect(ui->le_SimulatorDirectory, &QLineEdit::returnPressed, this, &CSettingsSimulatorBasicsComponent::ps_simulatorDirectoryEntered);
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
@@ -67,7 +66,7 @@ namespace BlackGui
void CSettingsSimulatorBasicsComponent::ps_simulatorFileDialog()
{
- const QString startDirectory = this->getBestCurrentSimulatorDirectory();
+ const QString startDirectory = this->getFileBrowserSimulatorDirectory();
const QString dir = QFileDialog::getExistingDirectory(this, tr("Simulator directory"), startDirectory,
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if (dir.isEmpty()) { return; }
@@ -76,20 +75,22 @@ namespace BlackGui
void CSettingsSimulatorBasicsComponent::ps_modelFileDialog()
{
- const QString startDirectory = this->getBestCurrentModelDirectory();
+ const QString startDirectory = this->getFileBrowserModelDirectory();
const QString dir = QFileDialog::getExistingDirectory(this, tr("Model directory"), startDirectory,
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if (dir.isEmpty()) { return; }
- ui->le_ModelDirectory->setText(CFileUtils::normalizeFilePathToQtStandard(dir));
+ const QStringList newDirs = this->addDirectory(dir, this->parseDirectories(ui->pte_ModelDirectories->toPlainText()));
+ this->displayModelDirectories(newDirs);
}
void CSettingsSimulatorBasicsComponent::ps_excludeFileDialog()
{
- const QString startDirectory = this->getBestCurrentModelDirectory();
+ const QString startDirectory = this->getFileBrowserModelDirectory();
const QString dir = QFileDialog::getExistingDirectory(this, tr("Exclude directory"), startDirectory,
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if (dir.isEmpty()) { return; }
- this->addExcludeDirectoryPattern(dir);
+ const QStringList newDirs = this->addDirectory(dir, this->parseDirectories(ui->pte_ExcludeDirectories->toPlainText()));
+ this->displayExcludeDirectoryPatterns(newDirs);
}
void CSettingsSimulatorBasicsComponent::ps_simulatorDirectoryEntered()
@@ -100,24 +101,16 @@ namespace BlackGui
this->displayDefaultValuesAsPlaceholder(simulator);
}
- void CSettingsSimulatorBasicsComponent::ps_modelDirectoryEntered()
- {
- const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
- const QString md = CFileUtils::normalizeFilePathToQtStandard(ui->le_ModelDirectory->text().trimmed());
- ui->le_ModelDirectory->setText(md);
- this->displayDefaultValuesAsPlaceholder(simulator);
- }
-
void CSettingsSimulatorBasicsComponent::ps_save()
{
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
CSettingsSimulator s = this->getSettings(simulator);
const QString sd(ui->le_SimulatorDirectory->text().trimmed());
- const QString md(ui->le_ModelDirectory->text().trimmed());
- const QStringList ed(this->parseExcludeDirectories());
- const QStringList red = CFileUtils::makeDirectoriesRelative(ed, this->getBestCurrentModelDirectory(), this->m_fileCaseSensitivity);
+ const QStringList md(this->parseDirectories(ui->pte_ModelDirectories->toPlainText()));
+ const QStringList ed(this->parseDirectories(ui->pte_ExcludeDirectories->toPlainText()));
+ const QStringList red = CFileUtils::makeDirectoriesRelative(ed, this->getFileBrowserModelDirectory(), this->m_fileCaseSensitivity);
s.setSimulatorDirectory(sd);
- s.setModelDirectory(md);
+ s.setModelDirectories(md);
s.setModelExcludeDirectories(red);
const CStatusMessage m = this->m_settings.setAndSaveSettings(s, simulator);
if (!m.isEmpty())
@@ -134,20 +127,21 @@ namespace BlackGui
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
const QString sd(this->m_settings.getDefaultSimulatorDirectory(simulator));
ui->le_SimulatorDirectory->setText(CFileUtils::normalizeFilePathToQtStandard(sd));
- const QString md(this->m_settings.getDefaultModelDirectory(simulator));
- ui->le_ModelDirectory->setText(CFileUtils::normalizeFilePathToQtStandard(md));
+ const QStringList md(this->m_settings.getDefaultModelDirectories(simulator));
+ this->displayModelDirectories(md);
const QStringList excludes(this->m_settings.getDefaultModelExcludeDirectoryPatterns(simulator));
- this->displayExcludeDirectoryPatterns(excludes, md);
+ this->displayExcludeDirectoryPatterns(excludes);
}
void CSettingsSimulatorBasicsComponent::ps_reset()
{
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
+ this->m_settings.resetToDefaults(simulator);
ui->le_SimulatorDirectory->clear();
- ui->le_ModelDirectory->clear();
+ ui->pte_ModelDirectories->clear();
ui->pte_ExcludeDirectories->clear();
this->displayDefaultValuesAsPlaceholder(simulator);
- this->m_settings.resetToDefaults(simulator);
+
CLogMessage(this).info("Reset values for settings of %1") << simulator.toQString(true);
}
@@ -158,44 +152,48 @@ namespace BlackGui
this->displaySettings(simulator);
}
- QStringList CSettingsSimulatorBasicsComponent::parseExcludeDirectories() const
+ QStringList CSettingsSimulatorBasicsComponent::parseDirectories(const QString &rawString) const
{
- const QString raw = ui->pte_ExcludeDirectories->toPlainText().trimmed();
+ const QString raw = rawString.trimmed();
if (raw.isEmpty()) { return QStringList(); }
- QStringList rawLines = raw.split(QRegExp("\n|\r\n|\r"));
QStringList dirs;
+ const QStringList rawLines = raw.split(QRegExp("\n|\r\n|\r"));
for (const QString &l : rawLines)
{
const QString normalized = CFileUtils::normalizeFilePathToQtStandard(l);
if (normalized.isEmpty()) { continue; }
dirs.push_back(normalized);
}
- dirs.removeDuplicates();
- dirs.sort(this->m_fileCaseSensitivity);
+ dirs = CFileUtils::removeSubDirectories(dirs);
return dirs;
}
- void CSettingsSimulatorBasicsComponent::addExcludeDirectoryPattern(const QString &excludeDirectoryPattern)
+ QStringList CSettingsSimulatorBasicsComponent::addDirectory(const QString &directory, const QStringList &existingDirs)
{
- const QString d(CFileUtils::normalizeFilePathToQtStandard(excludeDirectoryPattern));
- if (d.isEmpty()) { return; }
- QStringList dirs = this->parseExcludeDirectories();
+ const QString d(CFileUtils::normalizeFilePathToQtStandard(directory));
+ QStringList dirs(existingDirs);
+ if (d.isEmpty()) { return existingDirs; }
if (!dirs.contains(d, this->m_fileCaseSensitivity))
{
dirs.push_back(d);
}
dirs.removeDuplicates();
dirs.sort(this->m_fileCaseSensitivity);
- this->displayExcludeDirectoryPatterns(dirs, ui->le_ModelDirectory->text().trimmed());
+ return dirs;
}
- void CSettingsSimulatorBasicsComponent::displayExcludeDirectoryPatterns(const QStringList &dirs, const QString &modelDir)
+ void CSettingsSimulatorBasicsComponent::displayExcludeDirectoryPatterns(const QStringList &dirs)
{
- const QStringList relativeDirectories = CFileUtils::makeDirectoriesRelative(dirs, modelDir);
- const QString d = relativeDirectories.join("\n");
+ const QString d = dirs.join("\n");
ui->pte_ExcludeDirectories->setPlainText(d);
}
+ void CSettingsSimulatorBasicsComponent::displayModelDirectories(const QStringList &dirs)
+ {
+ const QString d = dirs.join("\n");
+ ui->pte_ModelDirectories->setPlainText(d);
+ }
+
CSettingsSimulator CSettingsSimulatorBasicsComponent::getSettings(const CSimulatorInfo &simulator) const
{
const CSettingsSimulator s = this->m_settings.getSettings(simulator);
@@ -205,9 +203,9 @@ namespace BlackGui
void CSettingsSimulatorBasicsComponent::displaySettings(const CSimulatorInfo &simulator)
{
const CSettingsSimulator s = this->getSettings(simulator);
- this->displayExcludeDirectoryPatterns(s.getModelExcludeDirectoryPatterns(), s.getModelDirectory());
+ this->displayExcludeDirectoryPatterns(s.getModelExcludeDirectoryPatterns());
+ this->displayModelDirectories(s.getModelDirectories());
ui->le_SimulatorDirectory->setText(s.getSimulatorDirectory());
- ui->le_ModelDirectory->setText(s.getModelDirectory());
}
void CSettingsSimulatorBasicsComponent::displayDefaultValuesAsPlaceholder(const CSimulatorInfo &simulator)
@@ -215,8 +213,16 @@ namespace BlackGui
const QString s = this->m_settings.getDefaultSimulatorDirectory(simulator);
ui->le_SimulatorDirectory->setPlaceholderText(s.isEmpty() ? "Simulator directory" : s);
- const QString m = this->m_settings.getDefaultModelDirectory(simulator);
- ui->le_ModelDirectory->setPlaceholderText(m.isEmpty() ? "Model directory" : m);
+ const QStringList m = this->m_settings.getDefaultModelDirectories(simulator);
+ if (m.isEmpty())
+ {
+ ui->pte_ModelDirectories->setPlaceholderText("Model directories");
+ }
+ else
+ {
+ const QString ms(m.join('\n'));
+ ui->pte_ModelDirectories->setPlaceholderText(ms);
+ }
const QStringList e = this->m_settings.getDefaultModelExcludeDirectoryPatterns(simulator);
if (e.isEmpty())
@@ -230,22 +236,23 @@ namespace BlackGui
}
}
- QString CSettingsSimulatorBasicsComponent::getBestCurrentModelDirectory() const
+ QString CSettingsSimulatorBasicsComponent::getFileBrowserModelDirectory() const
{
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
- QString md(ui->le_ModelDirectory->text().trimmed());
+ const QStringList modelDirs(this->parseDirectories(ui->pte_ModelDirectories->toPlainText()));
+ QString md = modelDirs.isEmpty() ? "" : modelDirs.first();
if (md.isEmpty())
{
- md = this->m_settings.getModelDirectoryOrDefault(simulator);
+ md = this->m_settings.getFirstModelDirectoryOrDefault(simulator);
}
if (md.isEmpty())
{
- md = this->getBestCurrentSimulatorDirectory();
+ md = this->getFileBrowserSimulatorDirectory();
}
return CFileUtils::normalizeFilePathToQtStandard(md);
}
- QString CSettingsSimulatorBasicsComponent::getBestCurrentSimulatorDirectory() const
+ QString CSettingsSimulatorBasicsComponent::getFileBrowserSimulatorDirectory() const
{
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
QString sd(ui->le_SimulatorDirectory->text().trimmed());
diff --git a/src/blackgui/components/settingssimulatorbasicscomponent.h b/src/blackgui/components/settingssimulatorbasicscomponent.h
index 7c3f7dd8e..3742ba33f 100644
--- a/src/blackgui/components/settingssimulatorbasicscomponent.h
+++ b/src/blackgui/components/settingssimulatorbasicscomponent.h
@@ -47,7 +47,6 @@ namespace BlackGui
void ps_excludeFileDialog();
void ps_simulatorFileDialog();
void ps_simulatorDirectoryEntered();
- void ps_modelDirectoryEntered();
void ps_save();
void ps_copyDefaults();
void ps_reset();
@@ -62,13 +61,16 @@ namespace BlackGui
void setSmallLayout(bool small);
//! Exclude directories from line edit
- QStringList parseExcludeDirectories() const;
+ QStringList parseDirectories(const QString &rawString) const;
- //! Add an exclude directory
- void addExcludeDirectoryPattern(const QString &excludeDirectoryPattern);
+ //! Add a directory
+ QStringList addDirectory(const QString &directory, const QStringList &existingDirs);
//! Display the directories
- void displayExcludeDirectoryPatterns(const QStringList &dirs, const QString &modelDir);
+ void displayExcludeDirectoryPatterns(const QStringList &dirs);
+
+ //! Display the directories
+ void displayModelDirectories(const QStringList &dirs);
//! Current settings
BlackMisc::Simulation::Settings::CSettingsSimulator getSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator) const;
@@ -80,10 +82,10 @@ namespace BlackGui
void displayDefaultValuesAsPlaceholder(const BlackMisc::Simulation::CSimulatorInfo &simulator);
//! Model directory either from input or settings or default
- QString getBestCurrentModelDirectory() const;
+ QString getFileBrowserModelDirectory() const;
//! Simulator directory either from input or settings or default
- QString getBestCurrentSimulatorDirectory() const;
+ QString getFileBrowserSimulatorDirectory() const;
};
} // ns
} // ns
diff --git a/src/blackgui/components/settingssimulatorbasicscomponent.ui b/src/blackgui/components/settingssimulatorbasicscomponent.ui
index 3468d4c9f..5e190e6a6 100644
--- a/src/blackgui/components/settingssimulatorbasicscomponent.ui
+++ b/src/blackgui/components/settingssimulatorbasicscomponent.ui
@@ -20,62 +20,51 @@
QFrame::Raised
- -
+
-
+
+ copy (materialize) defaults
+
- copy defaults
+ copy def.
- -
+
-
...
- -
-
-
- Model directory path
-
-
-
- -
+
-
Excluded from model loading
- Exclude directories:
+ Exclude directory patterns:
- -
-
+
-
+
- save
+ ...
- -
+
-
reset
- -
+
-
- Model directory:
-
-
-
- -
-
-
- ...
+ Model directories:
@@ -86,6 +75,20 @@
+ -
+
+
+ save
+
+
+
+ -
+
+
+ ...
+
+
+
-
@@ -93,7 +96,7 @@
- -
+
-
Excluded directory patterns
@@ -106,19 +109,19 @@
- -
-
-
- ...
+
-
+
+
+ Model directories
- -
+
-
175
- 0
+ 25
@@ -126,6 +129,22 @@
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Fixed
+
+
+
+ 20
+ 20
+
+
+
+