9 #include <QStringBuilder>
20 using namespace swift::config;
22 using namespace swift::misc::db;
23 using namespace swift::misc::simulation::fscommon;
24 using namespace swift::misc::simulation::xplane;
28 namespace swift::misc::simulation
30 CSimulatorInfo::CSimulatorInfo() {}
32 CSimulatorInfo::CSimulatorInfo(
const QString &identifierString)
33 : m_simulator(identifierToSimulator(identifierString))
45 : m_simulator(boolToFlag(fsx, fs9, xp, p3d, fg, msfs, msfs2024))
90 int c =
isFS9() ? 1 : 0;
102 return (m_simulator & otherInfo.m_simulator) == otherInfo.m_simulator;
107 return (m_simulator & otherInfo.m_simulator) > 0;
119 return Compare::compare(m_simulator, compareValue.m_simulator);
127 (s.testFlag(FS9) ? QStringLiteral(
"FS9 ") :
QString()) %
128 (s.testFlag(P3D) ? QStringLiteral(
"P3D ") :
QString()) %
129 (s.testFlag(XPLANE) ? QStringLiteral(
"XPlane ") :
QString()) %
130 (s.testFlag(FG) ? QStringLiteral(
"FG ") :
QString()) %
131 (s.testFlag(MSFS) ? QStringLiteral(
"MSFS ") :
QString()) %
132 (s.testFlag(MSFS2024) ? QStringLiteral(
"MSFS2024 ") :
QString());
164 m_simulator = (m_simulator ^
static_cast<int>(All)) &
static_cast<int>(All);
180 return m.
info(u
"Simulators OK for model");
186 Simulator s =
fsx ?
FSX : None;
187 if (
fs9) { s |= FS9; }
188 if (xp) { s |= XPLANE; }
189 if (
p3d) { s |= P3D; }
191 if (
msfs) { s |= MSFS; }
199 if (i.
isEmpty()) {
return None; }
216 if (i.
contains(
"msfs")) { s |= MSFS; }
259 if (CBuildConfig::isRunningOnWindowsNtPlatform())
261 fs9 = !CFsDirectories::fs9AircraftDir().isEmpty() && !CFsDirectories::fs9Dir().isEmpty();
262 fsx = !CFsDirectories::fsxSimObjectsDir().isEmpty() && !CFsDirectories::fsxDir().isEmpty();
263 p3d = !CFsDirectories::p3dDir().isEmpty() && !CFsDirectories::p3dSimObjectsDir().isEmpty();
264 msfs = !CFsDirectories::msfsDir().isEmpty() && !CFsDirectories::msfsPackagesDir().isEmpty();
265 msfs2024 = !CFsDirectories::msfs2024Dir().isEmpty() && !CFsDirectories::msfs2024PackagesDir().isEmpty();
268 const bool xp = !CXPlaneUtil::xplaneRootDir().isEmpty();
278 if (CBuildConfig::isRunningOnLinuxPlatform() || CBuildConfig::isRunningOnMacOSPlatform())
310 const bool xp = jxp.
isBool() ? jxp.
toBool() : CDatastoreUtility::dbBoolStringToBool(jxp.
toString());
315 jmsfs2024.
isBool() ? jmsfs2024.
toBool() : CDatastoreUtility::dbBoolStringToBool(jmsfs2024.
toString());
329 return m_counts[internalIndex(simulator)];
357 for (
int i = 0; i < m_counts.
size() - 1; i++)
359 if (m_counts[i] > 0) { c++; }
367 for (
int i = 0; i < m_counts.
size(); i++) { counts.
insert(m_counts[i], simulator(i)); }
381 m_counts[internalIndex(simulator)] = count;
392 if (simulator.
isFSX()) { m_counts[0]++; }
393 if (simulator.
isP3D()) { m_counts[1]++; }
394 if (simulator.
isFS9()) { m_counts[2]++; }
395 if (simulator.
isXPlane()) { m_counts[3]++; }
396 if (simulator.
isFG()) { m_counts[4]++; }
397 if (simulator.
isMSFS()) { m_counts[5]++; }
398 if (simulator.
isMSFS2024()) { m_counts[6]++; }
401 int CCountPerSimulator::internalIndex(
const CSimulatorInfo &simulator)
406 case CSimulatorInfo::FSX:
return 0;
407 case CSimulatorInfo::P3D:
return 1;
408 case CSimulatorInfo::FS9:
return 2;
409 case CSimulatorInfo::XPLANE:
return 3;
410 case CSimulatorInfo::FG:
return 4;
411 case CSimulatorInfo::MSFS:
return 5;
412 case CSimulatorInfo::MSFS2024:
return 6;
417 CSimulatorInfo CCountPerSimulator::simulator(
int internalIndex)
419 switch (internalIndex)
421 case 0:
return CSimulatorInfo(CSimulatorInfo::FSX);
422 case 1:
return CSimulatorInfo(CSimulatorInfo::P3D);
423 case 2:
return CSimulatorInfo(CSimulatorInfo::FS9);
424 case 3:
return CSimulatorInfo(CSimulatorInfo::XPLANE);
425 case 4:
return CSimulatorInfo(CSimulatorInfo::FG);
426 case 5:
return CSimulatorInfo(CSimulatorInfo::MSFS);
427 case 6:
return CSimulatorInfo(CSimulatorInfo::MSFS2024);
428 default:
return CSimulatorInfo(CSimulatorInfo::None);
IconIndex
Index for each icon, allows to send them via DBus, efficiently store them, etc.
Derived & validationError(const char16_t(&format)[N])
Set the severity to error, providing a format string, and adding the validation category.
Derived & info(const char16_t(&format)[N])
Set the severity to info, providing a format string.
Non-owning reference to a CPropertyIndex with a subset of its features.
Streamable status message, e.g.
QString toQString() const
As QString.
void setCount(int count, const CSimulatorInfo &simulator)
Set count.
CCountPerSimulator()
Constructor.
int getCountForFsxFamilySimulators() const
P3D, MSFS or FSX.
int getMinimum() const
Minimum.
void increaseSimulatorCounts(const CSimulatorInfo &simulator)
Increase all simulators given here.
int simulatorsRepresented() const
Number of simulators with count > 0.
int getMaximum() const
Maximum.
int getCount(const CSimulatorInfo &simulator) const
Object count for given simulator.
int getCountForUnknownSimulators() const
Unknown count.
QMultiMap< int, CSimulatorInfo > countPerSimulator() const
Sorted (ascending) per simulator.
int getCountForFsFamilySimulators() const
P3D, FSX, MSFS or FS9.
Simple hardcoded info about the corresponding simulator.
static const QSet< CSimulatorInfo > & allSimulatorsSet()
All simulators as set.
bool isAllSimulators() const
Is all simulators?
CSimulatorInfo add(const CSimulatorInfo &other)
Add simulator.
CSimulatorInfo()
Default constructor.
QSet< CSimulatorInfo > asSingleSimulatorSet() const
As a set of single simulator info objects.
bool matchesAll(const CSimulatorInfo &otherInfo) const
Matches all simulators.
int comparePropertyByIndex(CPropertyIndexRef index, const CSimulatorInfo &compareValue) const
Cast as QString.
static const CSimulatorInfo & allSimulators()
All simulators.
static Simulator boolToFlag(bool isFSX, bool isFS9, bool xp, bool isP3D, bool fg, bool msfs, bool msfs2024)
Bool flags to enum.
static CSimulatorInfo getLocallyInstalledSimulators()
Locally installed simulators.
bool isMSFS2024() const
MSFS2024?
bool isSingleSimulator() const
Single simulator selected.
bool isNoSimulator() const
No simulator?
bool isMultipleSimulators() const
Represents > 1 simulator.
bool matchesAny(const CSimulatorInfo &otherInfo) const
Matches any simulator.
bool isUnspecified() const
Unspecified simulator.
static const CSimulatorInfo & guessDefaultSimulator()
Guess a default simulator based on installation.
void invertSimulators()
All simulators selected become unselected and vice versa.
Simulator getSimulator() const
Simulator.
static const CSimulatorInfo & msfs()
Const simulator info objects.
bool isMicrosoftSimulator() const
Microsoft Simulator?
bool isFsxP3DFamily() const
FSX family, i.e. FSX or P3D?
static const CSimulatorInfo & fs9()
Const simulator info objects.
static CSimulatorInfo fromDatabaseJson(const QJsonObject &json, const QString &prefix)
From database JSON.
static const CSimulatorInfo & fsx()
Const simulator info objects.
CIcons::IconIndex toIcon() const
As icon, not implemented by all classes.
static const CSimulatorInfo & p3d()
Const simulator info objects.
static const CSimulatorInfo & xplane()
Const simulator info objects.
static Simulator identifierToSimulator(const QString &identifier)
Identifer, as provided by plugin.
static const CSimulatorInfo & msfs2024()
Const simulator info objects.
void setSimulator(Simulator s)
Simulator.
bool isAnySimulator() const
Any simulator?
QString convertToQString(bool i18n=false) const
Cast as QString.
int numberSimulators() const
Number simulators selected.
static const QStringList & allSimulatorStrings()
All simulator strings.
bool isXPlane() const
XPlane.
static const CSimulatorInfo & allFsFamilySimulators()
All simulators of the FS family (P3D FSX, FS9)
CStatusMessage validateSimulatorsForModel() const
Validate simulators for an aircraft model.
static constexpr int NumberOfSimulators
Number of known individual simulators.
static const CSimulatorInfo & fg()
Const simulator info objects.
bool isMicrosoftOrPrepare3DSimulator() const
Microsoft Simulator or P3D?
bool matchesAnyOrNone(const CSimulatorInfo &otherInfo) const
Matches any simulator or None (NULL)
Utility classes for FSX, OS and driver independent code.
Free functions in swift::misc.
SWIFT_MISC_EXPORT bool stringCompare(const QString &c1, const QString &c2, Qt::CaseSensitivity cs)
String compare.
QJsonValue value(QLatin1StringView key) const const
bool isBool() const const
bool toBool(bool defaultValue) const const
QString toString() const const
QList< T >::iterator begin()
QList< T >::iterator end()
void push_back(QList< T >::parameter_type value)
void reserve(qsizetype size)
qsizetype size() const const
QMultiMap< Key, T >::iterator insert(QMultiMap< Key, T >::const_iterator pos, const Key &key, const T &value)
QSet< T >::iterator insert(QSet< T >::const_iterator it, const T &value)
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
bool isEmpty() const const
QString number(double n, char format, int precision)
QString & remove(QChar ch, Qt::CaseSensitivity cs)
QString toLower() const const
QString trimmed() const const
QString join(QChar separator) const const
void sort(Qt::CaseSensitivity cs)
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.