From 30b9900ea34dcd65721377938797eecb9b772e78 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sat, 18 Jun 2016 00:29:25 +0200 Subject: [PATCH] refs #676, adjusted GUI to support 1..n model directories --- .../settingssimulatorbasicscomponent.cpp | 97 ++++++++++--------- .../settingssimulatorbasicscomponent.h | 16 +-- .../settingssimulatorbasicscomponent.ui | 83 ++++++++++------ 3 files changed, 112 insertions(+), 84 deletions(-) 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 + + + +