mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-03 07:35:48 +08:00
Ref T246, utility for 1st model set directory
* remove empty enries in directories * allow to add directory * detect same directories and avoid duplicates
This commit is contained in:
@@ -12,9 +12,10 @@
|
||||
#include "blackmisc/simulation/fscommon/fscommonutil.h"
|
||||
#include "blackmisc/simulation/xplane/xplaneutil.h"
|
||||
#include "blackmisc/stringutils.h"
|
||||
#include "blackconfig/buildconfig.h"
|
||||
#include <QStringBuilder>
|
||||
|
||||
using namespace BlackMisc;
|
||||
using namespace BlackConfig;
|
||||
using namespace BlackMisc::PhysicalQuantities;
|
||||
using namespace BlackMisc::Simulation::FsCommon;
|
||||
using namespace BlackMisc::Simulation::XPlane;
|
||||
@@ -41,6 +42,8 @@ namespace BlackMisc
|
||||
void CSimulatorSettings::setModelDirectories(const QStringList &modelDirectories)
|
||||
{
|
||||
m_modelDirectories = modelDirectories;
|
||||
m_modelDirectories.removeAll({});
|
||||
m_modelDirectories.removeDuplicates();
|
||||
}
|
||||
|
||||
void CSimulatorSettings::setModelDirectory(const QString &modelDirectory)
|
||||
@@ -48,6 +51,16 @@ namespace BlackMisc
|
||||
m_modelDirectories = QStringList({ modelDirectory });
|
||||
}
|
||||
|
||||
bool CSimulatorSettings::addModelDirectory(const QString &modelDirectory)
|
||||
{
|
||||
const Qt::CaseSensitivity cs = CBuildConfig::isRunningOnWindowsNtPlatform() ? Qt::CaseInsensitive : Qt::CaseSensitive;
|
||||
if (m_modelDirectories.contains(modelDirectory, cs)) { return false; }
|
||||
m_modelDirectories.push_back(modelDirectory);
|
||||
m_modelDirectories.removeAll({});
|
||||
m_modelDirectories.removeDuplicates();
|
||||
return true;
|
||||
}
|
||||
|
||||
const QStringList &CSimulatorSettings::getModelDirectories() const
|
||||
{
|
||||
return m_modelDirectories;
|
||||
@@ -56,6 +69,8 @@ namespace BlackMisc
|
||||
void CSimulatorSettings::setModelExcludeDirectories(const QStringList &excludeDirectories)
|
||||
{
|
||||
m_excludeDirectoryPatterns = excludeDirectories;
|
||||
m_excludeDirectoryPatterns.removeAll({});
|
||||
m_excludeDirectoryPatterns.removeDuplicates();
|
||||
}
|
||||
|
||||
const QStringList &CSimulatorSettings::getModelExcludeDirectoryPatterns() const
|
||||
@@ -153,6 +168,16 @@ namespace BlackMisc
|
||||
return CStatusMessage({ CLogCategory::settings() }, CStatusMessage::SeverityError, "wrong simulator");
|
||||
}
|
||||
|
||||
CStatusMessage CMultiSimulatorSettings::addModelDirectory(const QString &modelDirectory, const CSimulatorInfo &simulator)
|
||||
{
|
||||
CSimulatorSettings s = this->getSettings(simulator);
|
||||
if (!s.addModelDirectory(modelDirectory))
|
||||
{
|
||||
return CStatusMessage({ CLogCategory::settings() }, CStatusMessage::SeverityInfo, "directory already existing");
|
||||
}
|
||||
return this->setSettings(s, simulator);
|
||||
}
|
||||
|
||||
CStatusMessage CMultiSimulatorSettings::setAndSaveSettings(const CSimulatorSettings &settings, const CSimulatorInfo &simulator)
|
||||
{
|
||||
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator");
|
||||
@@ -249,6 +274,26 @@ namespace BlackMisc
|
||||
return CSpecializedSimulatorSettings::defaultSimulatorDirectory(simulator);
|
||||
}
|
||||
|
||||
void CMultiSimulatorSettings::onFsxSettingsChanged()
|
||||
{
|
||||
emit this->simulatorSettingsChanged(CSimulatorInfo::fsx());
|
||||
}
|
||||
|
||||
void CMultiSimulatorSettings::onP3DSettingsChanged()
|
||||
{
|
||||
emit this->simulatorSettingsChanged(CSimulatorInfo::p3d());
|
||||
}
|
||||
|
||||
void CMultiSimulatorSettings::onFs9SettingsChanged()
|
||||
{
|
||||
emit this->simulatorSettingsChanged(CSimulatorInfo::fs9());
|
||||
}
|
||||
|
||||
void CMultiSimulatorSettings::onXPSettingsChanged()
|
||||
{
|
||||
emit this->simulatorSettingsChanged(CSimulatorInfo::xplane());
|
||||
}
|
||||
|
||||
void CSimulatorMessagesSettings::setTechnicalLogSeverity(CStatusMessage::StatusSeverity severity)
|
||||
{
|
||||
m_technicalLogLevel = static_cast<int>(severity);
|
||||
@@ -422,29 +467,33 @@ namespace BlackMisc
|
||||
CSpecializedSimulatorSettings::defaultSimulatorDirectory(m_simulator);
|
||||
}
|
||||
|
||||
const QStringList CSpecializedSimulatorSettings::getModelDirectoriesOrDefault() const
|
||||
QStringList CSpecializedSimulatorSettings::getModelDirectoriesOrDefault() const
|
||||
{
|
||||
return m_genericSettings.hasModelDirectories() ?
|
||||
m_genericSettings.getModelDirectories() :
|
||||
this->getModelDirectoriesFromSimulatorDirectoryOrDefault();
|
||||
}
|
||||
|
||||
const QStringList CSpecializedSimulatorSettings::getModelDirectoriesFromSimulatorDirectoy() const
|
||||
QStringList CSpecializedSimulatorSettings::getModelDirectoriesFromSimulatorDirectoy() const
|
||||
{
|
||||
if (!m_genericSettings.hasSimulatorDirectory()) { return QStringList(); }
|
||||
const QString s(m_genericSettings.getSimulatorDirectory());
|
||||
QStringList dirs;
|
||||
switch (m_simulator.getSimulator())
|
||||
{
|
||||
case CSimulatorInfo::FS9: return QStringList({CFsCommonUtil::fs9AircraftDirFromSimDir(s)});
|
||||
case CSimulatorInfo::FSX: return QStringList({CFsCommonUtil::fsxSimObjectsDirFromSimDir(s)});
|
||||
case CSimulatorInfo::P3D: return QStringList({CFsCommonUtil::p3dSimObjectsDirFromSimDir(s)});
|
||||
case CSimulatorInfo::XPLANE: return QStringList({CXPlaneUtil::modelDirectoriesFromSimDir(s)});
|
||||
case CSimulatorInfo::FS9: dirs = QStringList({CFsCommonUtil::fs9AircraftDirFromSimDir(s)}); break;
|
||||
case CSimulatorInfo::FSX: dirs = QStringList({CFsCommonUtil::fsxSimObjectsDirFromSimDir(s)}); break;
|
||||
case CSimulatorInfo::P3D: dirs = QStringList({CFsCommonUtil::p3dSimObjectsDirFromSimDir(s)}); break;
|
||||
case CSimulatorInfo::XPLANE: dirs = QStringList({CXPlaneUtil::modelDirectoriesFromSimDir(s)}); break;
|
||||
default: break;
|
||||
}
|
||||
return QStringList();
|
||||
|
||||
dirs.removeAll({}); // remove empty
|
||||
dirs.removeDuplicates();
|
||||
return dirs;
|
||||
}
|
||||
|
||||
const QStringList CSpecializedSimulatorSettings::getModelDirectoriesFromSimulatorDirectoryOrDefault() const
|
||||
QStringList CSpecializedSimulatorSettings::getModelDirectoriesFromSimulatorDirectoryOrDefault() const
|
||||
{
|
||||
if (!m_genericSettings.hasSimulatorDirectory()) { return CSpecializedSimulatorSettings::defaultModelDirectories(m_simulator); }
|
||||
return this->getModelDirectoriesFromSimulatorDirectoy();
|
||||
@@ -466,7 +515,7 @@ namespace BlackMisc
|
||||
return CSpecializedSimulatorSettings::defaultModelExcludeDirectoryPatterns(m_simulator);
|
||||
}
|
||||
|
||||
const QString CSpecializedSimulatorSettings::getFirstModelDirectoryOrDefault() const
|
||||
QString CSpecializedSimulatorSettings::getFirstModelDirectoryOrDefault() const
|
||||
{
|
||||
static const QString empty;
|
||||
if (this->getModelDirectoriesOrDefault().isEmpty()) { return empty; }
|
||||
|
||||
@@ -64,6 +64,9 @@ namespace BlackMisc
|
||||
//! Set single model directory
|
||||
void setModelDirectory(const QString &modelDirectory);
|
||||
|
||||
//! Add (if not exists) model directory
|
||||
bool addModelDirectory(const QString &modelDirectory);
|
||||
|
||||
//! Model directory
|
||||
const QStringList &getModelDirectories() const;
|
||||
|
||||
@@ -133,13 +136,13 @@ namespace BlackMisc
|
||||
const QString &getSimulatorDirectoryOrDefault() const;
|
||||
|
||||
//! Model directories or default
|
||||
const QStringList getModelDirectoriesOrDefault() const;
|
||||
QStringList getModelDirectoriesOrDefault() const;
|
||||
|
||||
//! Model directories
|
||||
const QStringList getModelDirectoriesFromSimulatorDirectoy() const;
|
||||
QStringList getModelDirectoriesFromSimulatorDirectoy() const;
|
||||
|
||||
//! Model directories, then from simulator directory, then default
|
||||
const QStringList getModelDirectoriesFromSimulatorDirectoryOrDefault() const;
|
||||
QStringList getModelDirectoriesFromSimulatorDirectoryOrDefault() const;
|
||||
|
||||
//! Model directories or empty if default
|
||||
const QStringList &getModelDirectoriesIfNotDefault() const;
|
||||
@@ -148,7 +151,7 @@ namespace BlackMisc
|
||||
const QStringList &getDefaultModelExcludeDirectoryPatterns() const;
|
||||
|
||||
//! First model directoy
|
||||
const QString getFirstModelDirectoryOrDefault() const;
|
||||
QString getFirstModelDirectoryOrDefault() const;
|
||||
|
||||
//! Model exclude patterns or empty if default
|
||||
const QStringList &getDefaultModelDirectories() const;
|
||||
@@ -247,6 +250,9 @@ namespace BlackMisc
|
||||
//! Set settings per simulator
|
||||
CStatusMessage setSettings(const CSimulatorSettings &settings, const CSimulatorInfo &simulator);
|
||||
|
||||
//! Set model directory per simulator
|
||||
CStatusMessage addModelDirectory(const QString &modelDirectory, const CSimulatorInfo &simulator);
|
||||
|
||||
//! Set settings per simulator
|
||||
CStatusMessage setAndSaveSettings(const CSimulatorSettings &settings, const CSimulatorInfo &simulator);
|
||||
|
||||
@@ -288,11 +294,20 @@ namespace BlackMisc
|
||||
//! \deprecated use CSpecializedSimulatorSettings::defaultSimulatorDirectory
|
||||
static const QString &defaultSimulatorDirectory(const CSimulatorInfo &simulator);
|
||||
|
||||
signals:
|
||||
//! Simulator settings have been changed
|
||||
void simulatorSettingsChanged(const BlackMisc::Simulation::CSimulatorInfo &simulator);
|
||||
|
||||
private:
|
||||
CSetting<Settings::TSimulatorFsx> m_simSettingsFsx {this}; //!< FSX settings
|
||||
CSetting<Settings::TSimulatorFs9> m_simSettingsFs9 {this}; //!< FS9 settings
|
||||
CSetting<Settings::TSimulatorP3D> m_simSettingsP3D {this}; //!< P3D settings
|
||||
CSetting<Settings::TSimulatorXP> m_simSettingsXP {this}; //!< XP settings
|
||||
CSetting<Settings::TSimulatorFsx> m_simSettingsFsx { this, &CMultiSimulatorSettings::onFsxSettingsChanged }; //!< FSX settings
|
||||
CSetting<Settings::TSimulatorFs9> m_simSettingsFs9 { this, &CMultiSimulatorSettings::onFs9SettingsChanged }; //!< FS9 settings
|
||||
CSetting<Settings::TSimulatorP3D> m_simSettingsP3D { this, &CMultiSimulatorSettings::onP3DSettingsChanged }; //!< P3D settings
|
||||
CSetting<Settings::TSimulatorXP> m_simSettingsXP { this, &CMultiSimulatorSettings::onXPSettingsChanged }; //!< XP settings
|
||||
|
||||
void onFsxSettingsChanged();
|
||||
void onFs9SettingsChanged();
|
||||
void onP3DSettingsChanged();
|
||||
void onXPSettingsChanged();
|
||||
};
|
||||
|
||||
//! Settings regarding message handling.
|
||||
|
||||
Reference in New Issue
Block a user