Ref T455, fixes for simulator settings

* trace unsaved changes
* use stripped paths for exclude patterns
* added missing "parseExcludeDirectories" which was the source of the reported 1st bug
This commit is contained in:
Klaus Basan
2018-12-06 23:45:50 +01:00
parent 76913fd069
commit 49affde15b
4 changed files with 58 additions and 7 deletions

View File

@@ -41,6 +41,16 @@ namespace BlackGui
CLogMessage::preformatted(msg);
}
bool CConfigSimulatorComponent::hasUnsavedChanges() const
{
return ui->comp_SettingsSimulator->hasUnsavedChanges();
}
void CConfigSimulatorComponent::resetUnsavedChanges()
{
ui->comp_SettingsSimulator->resetUnsavedChanges();
}
void CConfigSimulatorComponent::preselectSimulators()
{
CSimulatorInfo sims;
@@ -88,6 +98,11 @@ namespace BlackGui
return ids;
}
void CConfigSimulatorWizardPage::initializePage()
{
m_config->resetUnsavedChanges();
}
bool CConfigSimulatorWizardPage::validatePage()
{
Q_ASSERT_X(m_config, Q_FUNC_INFO, "Missing config");

View File

@@ -40,6 +40,12 @@ namespace BlackGui
//! Save data
void save();
//! Has unsaved changes
bool hasUnsavedChanges() const;
//! Reset the flag
void resetUnsavedChanges();
private:
//! Preselect simulators
void preselectSimulators();
@@ -64,6 +70,9 @@ namespace BlackGui
//! Set config
void setConfigComponent(CConfigSimulatorComponent *config) { m_config = config; }
//! \copydoc QWizardPage::initializePage
virtual void initializePage() override;
//! \copydoc QWizardPage::validatePage
virtual bool validatePage() override;

View File

@@ -101,6 +101,7 @@ namespace BlackGui
const QString dir = QFileDialog::getExistingDirectory(this, tr("Model directory"), startDirectory,
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if (dir.isEmpty()) { return; }
m_unsavedChanges = true;
const QStringList newDirs = this->addDirectory(dir, this->parseModelDirectories());
this->displayModelDirectories(newDirs);
}
@@ -111,7 +112,10 @@ namespace BlackGui
const QString dir = QFileDialog::getExistingDirectory(this, tr("Exclude directory"), startDirectory,
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if (dir.isEmpty()) { return; }
const QStringList newDirs = this->addDirectory(dir, this->parseModelDirectories());
m_unsavedChanges = true;
const QStringList newDirs = CFileUtils::stripLeadingSlashOrDriveLetters(
this->addDirectory(dir, this->parseExcludeDirectories())
);
this->displayExcludeDirectoryPatterns(newDirs);
}
@@ -137,6 +141,7 @@ namespace BlackGui
s.setModelExcludeDirectories(relativeDirs);
const CStatusMessage m = m_settings.setAndSaveSettings(s, simulator);
if (!m.isEmpty()) { CLogMessage::preformatted(m); }
m_unsavedChanges = m_unsavedChanges && !m.isSuccess(); // reset if success, but only if there were changes
// display as saved
this->displaySettings(simulator);
@@ -152,12 +157,16 @@ namespace BlackGui
if (reply != QMessageBox::Yes) { return; }
}
const QString sd(m_settings.defaultSimulatorDirectory(simulator));
ui->le_SimulatorDirectory->setText(CFileUtils::normalizeFilePathToQtStandard(sd));
// override if values are not empty
const CSpecializedSimulatorSettings ss = m_settings.getSpecializedSettings(simulator);
const QString sd = CFileUtils::fixWindowsUncPath(CFileUtils::normalizeFilePathToQtStandard(ss.defaultSimulatorDirectory(simulator)));
if (!sd.isEmpty()) { ui->le_SimulatorDirectory->setText(sd); m_unsavedChanges = true; }
const QStringList md(m_settings.defaultModelDirectories(simulator));
this->displayModelDirectories(md);
const QStringList excludes(m_settings.defaultModelExcludeDirectoryPatterns(simulator));
this->displayExcludeDirectoryPatterns(excludes);
if (!md.isEmpty()) { this->displayModelDirectories(md); m_unsavedChanges = true; }
const QStringList excludes(ss.defaultModelExcludeDirectoryPatterns(simulator));
if (!excludes.isEmpty()) { this->displayExcludeDirectoryPatterns(excludes); m_unsavedChanges = true; }
}
void CSettingsSimulatorBasicsComponent::adjustModelDirectory()
@@ -178,7 +187,10 @@ namespace BlackGui
void CSettingsSimulatorBasicsComponent::reset()
{
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
m_settings.resetToDefaults(simulator);
m_unsavedChanges = true;
ui->le_SimulatorDirectory->clear();
ui->pte_ModelDirectories->clear();
ui->pte_ExcludeDirectories->clear();
@@ -208,6 +220,11 @@ namespace BlackGui
return this->parseDirectories(ui->pte_ModelDirectories->toPlainText());
}
QStringList CSettingsSimulatorBasicsComponent::parseExcludeDirectories() const
{
return this->parseDirectories(ui->pte_ExcludeDirectories->toPlainText());
}
QStringList CSettingsSimulatorBasicsComponent::parseDirectories(const QString &rawString) const
{
const QString raw = rawString.trimmed();

View File

@@ -55,10 +55,17 @@ namespace BlackGui
//! Save data
void save();
//! Has unsaved changes
bool hasUnsavedChanges() const { return m_unsavedChanges; }
//! Reset unsaved changes
void resetUnsavedChanges() { m_unsavedChanges = false; }
//! Settings for given simulator
BlackMisc::Simulation::Settings::CSpecializedSimulatorSettings getSimulatorSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator) const { return m_settings.getSpecializedSettings(simulator); }
private:
bool m_unsavedChanges = false;
QScopedPointer<Ui::CSettingsSimulatorBasicsComponent> ui;
BlackMisc::Simulation::Settings::CMultiSimulatorSettings m_settings { this };
Qt::CaseSensitivity m_fileCaseSensitivity = BlackMisc::CFileUtils::osFileNameCaseSensitivity();
@@ -93,9 +100,12 @@ namespace BlackGui
//! Optimize for small layout
void setSmallLayout(bool small);
//! Exclude directories from line edit
//! Model directories from line edit
QStringList parseModelDirectories() const;
//! Exclude directories from line edit
QStringList parseExcludeDirectories() const;
//! Exclude directories
QStringList parseDirectories(const QString &rawString) const;