Ref T252, updated CSettingsSimulatorBasicsComponent

* avoid saving default values
* use new specialized settings
This commit is contained in:
Klaus Basan
2018-02-16 03:36:36 +01:00
parent baa7f393ca
commit 82e42f7e17
3 changed files with 75 additions and 48 deletions

View File

@@ -190,10 +190,8 @@ namespace BlackGui
QString CInstallXSwiftBusComponent::getXPlanePluginDirectory() const QString CInstallXSwiftBusComponent::getXPlanePluginDirectory() const
{ {
const CSimulatorSettings settings = m_simulatorSettings.getSettings(CSimulatorInfo::XPLANE); const CXPlaneSimulatorSettings settings = m_simulatorSettings.getSettings(CSimulatorInfo::XPLANE);
if (!settings.hasSimulatorDirectory()) { return CXPlaneUtil::xplanePluginDir(); } return settings.getPluginDirOrDefault();
const QString dir = CFileUtils::appendFilePaths(settings.getSimulatorDirectory(), CXPlaneUtil::xplanePluginPath());
return dir;
} }
void CInstallXSwiftBusComponent::updatesChanged() void CInstallXSwiftBusComponent::updatesChanged()

View File

@@ -9,6 +9,7 @@
#include "settingssimulatorbasicscomponent.h" #include "settingssimulatorbasicscomponent.h"
#include "ui_settingssimulatorbasicscomponent.h" #include "ui_settingssimulatorbasicscomponent.h"
#include "blackmisc/simulation/xplane/xplaneutil.h"
#include "blackmisc/fileutils.h" #include "blackmisc/fileutils.h"
#include "blackmisc/logmessage.h" #include "blackmisc/logmessage.h"
#include "blackconfig/buildconfig.h" #include "blackconfig/buildconfig.h"
@@ -19,6 +20,7 @@ using namespace BlackMisc;
using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation;
using namespace BlackMisc::Simulation::FsCommon; using namespace BlackMisc::Simulation::FsCommon;
using namespace BlackMisc::Simulation::Settings; using namespace BlackMisc::Simulation::Settings;
using namespace BlackMisc::Simulation::XPlane;
using namespace BlackConfig; using namespace BlackConfig;
namespace BlackGui namespace BlackGui
@@ -48,9 +50,9 @@ namespace BlackGui
connect(ui->pb_CopyDefaults, &QPushButton::clicked, this, &CSettingsSimulatorBasicsComponent::copyDefaults); connect(ui->pb_CopyDefaults, &QPushButton::clicked, this, &CSettingsSimulatorBasicsComponent::copyDefaults);
connect(ui->pb_AdjustModelDirectory, &QPushButton::clicked, this, &CSettingsSimulatorBasicsComponent::adjustModelDirectory); connect(ui->pb_AdjustModelDirectory, &QPushButton::clicked, this, &CSettingsSimulatorBasicsComponent::adjustModelDirectory);
connect(ui->le_SimulatorDirectory, &QLineEdit::returnPressed, this, &CSettingsSimulatorBasicsComponent::simulatorDirectoryEntered); connect(ui->le_SimulatorDirectory, &QLineEdit::returnPressed, this, &CSettingsSimulatorBasicsComponent::simulatorDirectoryEntered);
connect(ui->comp_SimulatorSelector, &CSimulatorSelector::changed, this, &CSettingsSimulatorBasicsComponent::simulatorChanged); connect(ui->comp_SimulatorSelector, &CSimulatorSelector::changed, this, &CSettingsSimulatorBasicsComponent::onSimulatorChanged);
this->simulatorChanged(); this->onSimulatorChanged();
} }
CSettingsSimulatorBasicsComponent::~CSettingsSimulatorBasicsComponent() CSettingsSimulatorBasicsComponent::~CSettingsSimulatorBasicsComponent()
@@ -76,7 +78,7 @@ namespace BlackGui
void CSettingsSimulatorBasicsComponent::simulatorFileDialog() void CSettingsSimulatorBasicsComponent::simulatorFileDialog()
{ {
const QString startDirectory = this->getFileBrowserSimulatorDirectory(); const QString startDirectory = CFileUtils::fixWindowsUncPath(this->getFileBrowserSimulatorDirectory());
const QString dir = QFileDialog::getExistingDirectory(this, tr("Simulator directory"), startDirectory, const QString dir = QFileDialog::getExistingDirectory(this, tr("Simulator directory"), startDirectory,
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if (dir.isEmpty()) { return; } if (dir.isEmpty()) { return; }
@@ -86,11 +88,11 @@ namespace BlackGui
void CSettingsSimulatorBasicsComponent::modelFileDialog() void CSettingsSimulatorBasicsComponent::modelFileDialog()
{ {
const QString startDirectory = this->getFileBrowserModelDirectory(); const QString startDirectory = CFileUtils::fixWindowsUncPath(this->getFileBrowserModelDirectory());
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; }
const QStringList newDirs = this->addDirectory(dir, this->parseDirectories(ui->pte_ModelDirectories->toPlainText())); const QStringList newDirs = this->addDirectory(dir, this->parseModelDirectories());
this->displayModelDirectories(newDirs); this->displayModelDirectories(newDirs);
} }
@@ -100,7 +102,7 @@ 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->parseDirectories(ui->pte_ExcludeDirectories->toPlainText())); const QStringList newDirs = this->addDirectory(dir, this->parseModelDirectories());
this->displayExcludeDirectoryPatterns(newDirs); this->displayExcludeDirectoryPatterns(newDirs);
} }
@@ -115,9 +117,9 @@ namespace BlackGui
void CSettingsSimulatorBasicsComponent::save() void CSettingsSimulatorBasicsComponent::save()
{ {
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue()); const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
CSimulatorSettings s = this->getSettings(simulator); CSimulatorSettings s = this->getSettings(simulator).getGenericSettings();
const QString simulatorDir(ui->le_SimulatorDirectory->text().trimmed()); const QString simulatorDir(ui->le_SimulatorDirectory->text().trimmed());
const QStringList modelDirs(this->parseDirectories(ui->pte_ModelDirectories->toPlainText())); const QStringList modelDirs(this->parseModelDirectories());
const QStringList excludeDirs(this->parseDirectories(ui->pte_ExcludeDirectories->toPlainText())); const QStringList excludeDirs(this->parseDirectories(ui->pte_ExcludeDirectories->toPlainText()));
const QStringList relativeDirs = CFileUtils::makeDirectoriesRelative(excludeDirs, this->getFileBrowserModelDirectory(), m_fileCaseSensitivity); const QStringList relativeDirs = CFileUtils::makeDirectoriesRelative(excludeDirs, this->getFileBrowserModelDirectory(), m_fileCaseSensitivity);
@@ -125,10 +127,7 @@ namespace BlackGui
s.setModelDirectories(modelDirs); s.setModelDirectories(modelDirs);
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()) if (!m.isEmpty()) { CLogMessage::preformatted(m); }
{
CLogMessage::preformatted(m);
}
// display as saved // display as saved
this->displaySettings(simulator); this->displaySettings(simulator);
@@ -137,37 +136,26 @@ namespace BlackGui
void CSettingsSimulatorBasicsComponent::copyDefaults() void CSettingsSimulatorBasicsComponent::copyDefaults()
{ {
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue()); const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
const QString sd(m_settings.getDefaultSimulatorDirectory(simulator)); const QString sd(m_settings.defaultSimulatorDirectory(simulator));
ui->le_SimulatorDirectory->setText(CFileUtils::normalizeFilePathToQtStandard(sd)); ui->le_SimulatorDirectory->setText(CFileUtils::normalizeFilePathToQtStandard(sd));
const QStringList md(m_settings.getDefaultModelDirectories(simulator)); const QStringList md(m_settings.defaultModelDirectories(simulator));
this->displayModelDirectories(md); this->displayModelDirectories(md);
const QStringList excludes(m_settings.getDefaultModelExcludeDirectoryPatterns(simulator)); const QStringList excludes(m_settings.defaultModelExcludeDirectoryPatterns(simulator));
this->displayExcludeDirectoryPatterns(excludes); this->displayExcludeDirectoryPatterns(excludes);
} }
void CSettingsSimulatorBasicsComponent::adjustModelDirectory() void CSettingsSimulatorBasicsComponent::adjustModelDirectory()
{ {
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue()); const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
QString simDir = this->getFileBrowserSimulatorDirectory(); const QString simDir = this->getFileBrowserSimulatorDirectory();
if (simulator.isFsxP3DFamily()) CSpecializedSimulatorSettings s = m_settings.getSpecializedSettings(simulator);
{ s.setSimulatorDirectory(simDir);
simDir = CFsCommonUtil::fsxSimObjectsDirFromSimDir(simDir);
}
else if (simulator.fs9())
{
simDir = CFsCommonUtil::fs9AircraftDirFromSimDir(simDir);
}
else if (simulator.xplane())
{
// There is not really a fixed place in the X-Plane install directory where models are put. // There is not really a fixed place in the X-Plane install directory where models are put.
// We just treat the whole X-Plane directory as model directory and search for models in all subdirectories recursively. // We just treat the whole X-Plane directory as model directory and search for models in all subdirectories recursively.
}
else
{
return;
}
const QStringList newDirs = this->addDirectory(simDir, this->parseDirectories(ui->pte_ModelDirectories->toPlainText())); const QStringList parsedDirectories = this->parseModelDirectories();
const QStringList newDirs = parsedDirectories.size() > 1 ? parsedDirectories : this->removeDirectories(s.getModelDirectoriesFromSimulatorDirectoryOrDefault(), parsedDirectories);
this->displayModelDirectories(newDirs); this->displayModelDirectories(newDirs);
} }
@@ -183,11 +171,16 @@ namespace BlackGui
CLogMessage(this).info("Reset values for settings of %1") << simulator.toQString(true); CLogMessage(this).info("Reset values for settings of %1") << simulator.toQString(true);
} }
void CSettingsSimulatorBasicsComponent::simulatorChanged() void CSettingsSimulatorBasicsComponent::onSimulatorChanged()
{ {
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue()); const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
this->displayDefaultValuesAsPlaceholder(simulator);
this->displaySettings(simulator); this->displaySettings(simulator);
this->displayDefaultValuesAsPlaceholder(simulator);
}
QStringList CSettingsSimulatorBasicsComponent::parseModelDirectories() const
{
return this->parseDirectories(ui->pte_ModelDirectories->toPlainText());
} }
QStringList CSettingsSimulatorBasicsComponent::parseDirectories(const QString &rawString) const QStringList CSettingsSimulatorBasicsComponent::parseDirectories(const QString &rawString) const
@@ -221,6 +214,27 @@ namespace BlackGui
return dirs; return dirs;
} }
QStringList CSettingsSimulatorBasicsComponent::removeDirectory(const QString &directory, const QStringList &existingDirs)
{
const QString d(CFileUtils::normalizeFilePathToQtStandard(directory));
return this->removeDirectories(QStringList({d}), existingDirs);
}
QStringList CSettingsSimulatorBasicsComponent::removeDirectories(const QStringList &removeDirectories, const QStringList &existingDirs)
{
if (existingDirs.isEmpty() || removeDirectories.isEmpty()) { return existingDirs; }
const QStringList rDirs = CFileUtils::fixWindowsUncPaths(removeDirectories);
QStringList dirs;
for (const QString &dir : existingDirs)
{
if (rDirs.contains(dir, m_fileCaseSensitivity)) { continue; }
dirs.push_back(dir);
}
dirs.removeDuplicates();
dirs.sort(m_fileCaseSensitivity);
return dirs;
}
void CSettingsSimulatorBasicsComponent::displayExcludeDirectoryPatterns(const QStringList &dirs) void CSettingsSimulatorBasicsComponent::displayExcludeDirectoryPatterns(const QStringList &dirs)
{ {
QStringList cleanedDirs(dirs); QStringList cleanedDirs(dirs);
@@ -237,11 +251,12 @@ namespace BlackGui
cleanedDirs.sort(m_fileCaseSensitivity); cleanedDirs.sort(m_fileCaseSensitivity);
const QString d = cleanedDirs.join("\n"); const QString d = cleanedDirs.join("\n");
ui->pte_ModelDirectories->setPlainText(d); ui->pte_ModelDirectories->setPlainText(d);
this->displayDefaultValuesAsPlaceholder(ui->comp_SimulatorSelector->getValue());
} }
CSimulatorSettings CSettingsSimulatorBasicsComponent::getSettings(const CSimulatorInfo &simulator) const CSpecializedSimulatorSettings CSettingsSimulatorBasicsComponent::getSettings(const CSimulatorInfo &simulator) const
{ {
const CSimulatorSettings s = m_settings.getSettings(simulator); const CSpecializedSimulatorSettings s = m_settings.getSpecializedSettings(simulator);
return s; return s;
} }
@@ -254,12 +269,17 @@ namespace BlackGui
void CSettingsSimulatorBasicsComponent::displayDefaultValuesAsPlaceholder(const CSimulatorInfo &simulator) void CSettingsSimulatorBasicsComponent::displayDefaultValuesAsPlaceholder(const CSimulatorInfo &simulator)
{ {
const QString s = m_settings.getDefaultSimulatorDirectory(simulator); const QString simDir = this->getFileBrowserSimulatorDirectory();
ui->le_SimulatorDirectory->setPlaceholderText(s.isEmpty() ? "Simulator directory" : s); ui->le_SimulatorDirectory->setPlaceholderText(simDir.isEmpty() ? "Simulator directory" : simDir);
//! \fixme correct version when Qt multiline placeholder is fixed https://bugreports.qt.io/browse/QTBUG-43817 //! \fixme correct version when Qt multiline placeholder is fixed https://bugreports.qt.io/browse/QTBUG-43817
constexpr bool BrokenMultilinePlaceholder = true; // last checked with Qt 5.10 constexpr bool BrokenMultilinePlaceholder = true; // last checked with Qt 5.10
const QStringList m = m_settings.getDefaultModelDirectories(simulator);
// we take the settings and update to latest sim.directory
CSpecializedSimulatorSettings settings = m_settings.getSpecializedSettings(simulator);
settings.setSimulatorDirectory(simDir);
const QStringList m = settings.getModelDirectoriesFromSimulatorDirectoryOrDefault();
if (m.isEmpty()) if (m.isEmpty())
{ {
ui->pte_ModelDirectories->setPlaceholderText("Model directories"); ui->pte_ModelDirectories->setPlaceholderText("Model directories");
@@ -278,7 +298,7 @@ namespace BlackGui
} }
} }
const QStringList e = m_settings.getDefaultModelExcludeDirectoryPatterns(simulator); const QStringList e = settings.getDefaultModelExcludeDirectoryPatterns();
if (e.isEmpty()) if (e.isEmpty())
{ {
ui->pte_ExcludeDirectories->setPlaceholderText("Exclude directories"); ui->pte_ExcludeDirectories->setPlaceholderText("Exclude directories");

View File

@@ -79,17 +79,26 @@ namespace BlackGui
void reset(); void reset();
//! Simulator has been changed //! Simulator has been changed
void simulatorChanged(); void onSimulatorChanged();
//! Optimize for small layout //! Optimize for small layout
void setSmallLayout(bool small); void setSmallLayout(bool small);
//! Exclude directories from line edit //! Exclude directories from line edit
QStringList parseModelDirectories() const;
//! Exclude directories
QStringList parseDirectories(const QString &rawString) const; QStringList parseDirectories(const QString &rawString) const;
//! Add a directory //! Add a directory
QStringList addDirectory(const QString &directory, const QStringList &existingDirs); QStringList addDirectory(const QString &directory, const QStringList &existingDirs);
//! Remove a directory
QStringList removeDirectory(const QString &directory, const QStringList &existingDirs);
//! Remove directories
QStringList removeDirectories(const QStringList &directories, const QStringList &existingDirs);
//! Display the directories //! Display the directories
void displayExcludeDirectoryPatterns(const QStringList &dirs); void displayExcludeDirectoryPatterns(const QStringList &dirs);
@@ -97,7 +106,7 @@ namespace BlackGui
void displayModelDirectories(const QStringList &dirs); void displayModelDirectories(const QStringList &dirs);
//! Current settings //! Current settings
BlackMisc::Simulation::Settings::CSimulatorSettings getSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; BlackMisc::Simulation::Settings::CSpecializedSimulatorSettings getSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator) const;
//! Display simulator`s settings //! Display simulator`s settings
void displaySettings(const BlackMisc::Simulation::CSimulatorInfo &simulator); void displaySettings(const BlackMisc::Simulation::CSimulatorInfo &simulator);