mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-23 05:45:35 +08:00
Ref T252, updated CSettingsSimulatorBasicsComponent
* avoid saving default values * use new specialized settings
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user