mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-01 22:55:41 +08:00
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:
@@ -41,6 +41,16 @@ namespace BlackGui
|
|||||||
CLogMessage::preformatted(msg);
|
CLogMessage::preformatted(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CConfigSimulatorComponent::hasUnsavedChanges() const
|
||||||
|
{
|
||||||
|
return ui->comp_SettingsSimulator->hasUnsavedChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CConfigSimulatorComponent::resetUnsavedChanges()
|
||||||
|
{
|
||||||
|
ui->comp_SettingsSimulator->resetUnsavedChanges();
|
||||||
|
}
|
||||||
|
|
||||||
void CConfigSimulatorComponent::preselectSimulators()
|
void CConfigSimulatorComponent::preselectSimulators()
|
||||||
{
|
{
|
||||||
CSimulatorInfo sims;
|
CSimulatorInfo sims;
|
||||||
@@ -88,6 +98,11 @@ namespace BlackGui
|
|||||||
return ids;
|
return ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CConfigSimulatorWizardPage::initializePage()
|
||||||
|
{
|
||||||
|
m_config->resetUnsavedChanges();
|
||||||
|
}
|
||||||
|
|
||||||
bool CConfigSimulatorWizardPage::validatePage()
|
bool CConfigSimulatorWizardPage::validatePage()
|
||||||
{
|
{
|
||||||
Q_ASSERT_X(m_config, Q_FUNC_INFO, "Missing config");
|
Q_ASSERT_X(m_config, Q_FUNC_INFO, "Missing config");
|
||||||
|
|||||||
@@ -40,6 +40,12 @@ namespace BlackGui
|
|||||||
//! Save data
|
//! Save data
|
||||||
void save();
|
void save();
|
||||||
|
|
||||||
|
//! Has unsaved changes
|
||||||
|
bool hasUnsavedChanges() const;
|
||||||
|
|
||||||
|
//! Reset the flag
|
||||||
|
void resetUnsavedChanges();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//! Preselect simulators
|
//! Preselect simulators
|
||||||
void preselectSimulators();
|
void preselectSimulators();
|
||||||
@@ -64,6 +70,9 @@ namespace BlackGui
|
|||||||
//! Set config
|
//! Set config
|
||||||
void setConfigComponent(CConfigSimulatorComponent *config) { m_config = config; }
|
void setConfigComponent(CConfigSimulatorComponent *config) { m_config = config; }
|
||||||
|
|
||||||
|
//! \copydoc QWizardPage::initializePage
|
||||||
|
virtual void initializePage() override;
|
||||||
|
|
||||||
//! \copydoc QWizardPage::validatePage
|
//! \copydoc QWizardPage::validatePage
|
||||||
virtual bool validatePage() override;
|
virtual bool validatePage() override;
|
||||||
|
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ namespace BlackGui
|
|||||||
const QString dir = QFileDialog::getExistingDirectory(this, tr("Model directory"), startDirectory,
|
const QString dir = QFileDialog::getExistingDirectory(this, tr("Model directory"), startDirectory,
|
||||||
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
|
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
|
||||||
if (dir.isEmpty()) { return; }
|
if (dir.isEmpty()) { return; }
|
||||||
|
m_unsavedChanges = true;
|
||||||
const QStringList newDirs = this->addDirectory(dir, this->parseModelDirectories());
|
const QStringList newDirs = this->addDirectory(dir, this->parseModelDirectories());
|
||||||
this->displayModelDirectories(newDirs);
|
this->displayModelDirectories(newDirs);
|
||||||
}
|
}
|
||||||
@@ -111,7 +112,10 @@ namespace BlackGui
|
|||||||
const QString dir = QFileDialog::getExistingDirectory(this, tr("Exclude directory"), startDirectory,
|
const QString dir = QFileDialog::getExistingDirectory(this, tr("Exclude directory"), startDirectory,
|
||||||
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
|
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
|
||||||
if (dir.isEmpty()) { return; }
|
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);
|
this->displayExcludeDirectoryPatterns(newDirs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,6 +141,7 @@ namespace BlackGui
|
|||||||
s.setModelExcludeDirectories(relativeDirs);
|
s.setModelExcludeDirectories(relativeDirs);
|
||||||
const CStatusMessage m = m_settings.setAndSaveSettings(s, simulator);
|
const CStatusMessage m = m_settings.setAndSaveSettings(s, simulator);
|
||||||
if (!m.isEmpty()) { CLogMessage::preformatted(m); }
|
if (!m.isEmpty()) { CLogMessage::preformatted(m); }
|
||||||
|
m_unsavedChanges = m_unsavedChanges && !m.isSuccess(); // reset if success, but only if there were changes
|
||||||
|
|
||||||
// display as saved
|
// display as saved
|
||||||
this->displaySettings(simulator);
|
this->displaySettings(simulator);
|
||||||
@@ -152,12 +157,16 @@ namespace BlackGui
|
|||||||
if (reply != QMessageBox::Yes) { return; }
|
if (reply != QMessageBox::Yes) { return; }
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString sd(m_settings.defaultSimulatorDirectory(simulator));
|
// override if values are not empty
|
||||||
ui->le_SimulatorDirectory->setText(CFileUtils::normalizeFilePathToQtStandard(sd));
|
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));
|
const QStringList md(m_settings.defaultModelDirectories(simulator));
|
||||||
this->displayModelDirectories(md);
|
if (!md.isEmpty()) { this->displayModelDirectories(md); m_unsavedChanges = true; }
|
||||||
const QStringList excludes(m_settings.defaultModelExcludeDirectoryPatterns(simulator));
|
|
||||||
this->displayExcludeDirectoryPatterns(excludes);
|
const QStringList excludes(ss.defaultModelExcludeDirectoryPatterns(simulator));
|
||||||
|
if (!excludes.isEmpty()) { this->displayExcludeDirectoryPatterns(excludes); m_unsavedChanges = true; }
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSettingsSimulatorBasicsComponent::adjustModelDirectory()
|
void CSettingsSimulatorBasicsComponent::adjustModelDirectory()
|
||||||
@@ -178,7 +187,10 @@ namespace BlackGui
|
|||||||
void CSettingsSimulatorBasicsComponent::reset()
|
void CSettingsSimulatorBasicsComponent::reset()
|
||||||
{
|
{
|
||||||
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
|
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
|
||||||
|
|
||||||
m_settings.resetToDefaults(simulator);
|
m_settings.resetToDefaults(simulator);
|
||||||
|
m_unsavedChanges = true;
|
||||||
|
|
||||||
ui->le_SimulatorDirectory->clear();
|
ui->le_SimulatorDirectory->clear();
|
||||||
ui->pte_ModelDirectories->clear();
|
ui->pte_ModelDirectories->clear();
|
||||||
ui->pte_ExcludeDirectories->clear();
|
ui->pte_ExcludeDirectories->clear();
|
||||||
@@ -208,6 +220,11 @@ namespace BlackGui
|
|||||||
return this->parseDirectories(ui->pte_ModelDirectories->toPlainText());
|
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
|
QStringList CSettingsSimulatorBasicsComponent::parseDirectories(const QString &rawString) const
|
||||||
{
|
{
|
||||||
const QString raw = rawString.trimmed();
|
const QString raw = rawString.trimmed();
|
||||||
|
|||||||
@@ -55,10 +55,17 @@ namespace BlackGui
|
|||||||
//! Save data
|
//! Save data
|
||||||
void save();
|
void save();
|
||||||
|
|
||||||
|
//! Has unsaved changes
|
||||||
|
bool hasUnsavedChanges() const { return m_unsavedChanges; }
|
||||||
|
|
||||||
|
//! Reset unsaved changes
|
||||||
|
void resetUnsavedChanges() { m_unsavedChanges = false; }
|
||||||
|
|
||||||
//! Settings for given simulator
|
//! Settings for given simulator
|
||||||
BlackMisc::Simulation::Settings::CSpecializedSimulatorSettings getSimulatorSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator) const { return m_settings.getSpecializedSettings(simulator); }
|
BlackMisc::Simulation::Settings::CSpecializedSimulatorSettings getSimulatorSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator) const { return m_settings.getSpecializedSettings(simulator); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool m_unsavedChanges = false;
|
||||||
QScopedPointer<Ui::CSettingsSimulatorBasicsComponent> ui;
|
QScopedPointer<Ui::CSettingsSimulatorBasicsComponent> ui;
|
||||||
BlackMisc::Simulation::Settings::CMultiSimulatorSettings m_settings { this };
|
BlackMisc::Simulation::Settings::CMultiSimulatorSettings m_settings { this };
|
||||||
Qt::CaseSensitivity m_fileCaseSensitivity = BlackMisc::CFileUtils::osFileNameCaseSensitivity();
|
Qt::CaseSensitivity m_fileCaseSensitivity = BlackMisc::CFileUtils::osFileNameCaseSensitivity();
|
||||||
@@ -93,9 +100,12 @@ namespace BlackGui
|
|||||||
//! Optimize for small layout
|
//! Optimize for small layout
|
||||||
void setSmallLayout(bool small);
|
void setSmallLayout(bool small);
|
||||||
|
|
||||||
//! Exclude directories from line edit
|
//! Model directories from line edit
|
||||||
QStringList parseModelDirectories() const;
|
QStringList parseModelDirectories() const;
|
||||||
|
|
||||||
|
//! Exclude directories from line edit
|
||||||
|
QStringList parseExcludeDirectories() const;
|
||||||
|
|
||||||
//! Exclude directories
|
//! Exclude directories
|
||||||
QStringList parseDirectories(const QString &rawString) const;
|
QStringList parseDirectories(const QString &rawString) const;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user