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(
const QString &identifierString)
31 : m_simulator(identifierToSimulator(identifierString))
43 : m_simulator(boolToFlag(xp, p3d, fg, msfs, msfs2024))
88 return (m_simulator & otherInfo.m_simulator) == otherInfo.m_simulator;
93 return (m_simulator & otherInfo.m_simulator) > 0;
105 return Compare::compare(m_simulator, compareValue.m_simulator);
112 const QString str = (s.testFlag(P3D) ? QStringLiteral(
"P3D ") :
QString()) %
113 (s.testFlag(XPLANE) ? QStringLiteral(
"XPlane ") :
QString()) %
114 (s.testFlag(FG) ? QStringLiteral(
"FG ") :
QString()) %
115 (s.testFlag(MSFS) ? QStringLiteral(
"MSFS ") :
QString()) %
116 (s.testFlag(MSFS2024) ? QStringLiteral(
"MSFS2024 ") :
QString());
146 m_simulator = (m_simulator ^
static_cast<int>(All)) &
static_cast<int>(All);
162 return m.
info(u
"Simulators OK for model");
167 Simulator s = xp ? XPLANE : None;
168 if (
p3d) { s |= P3D; }
170 if (
msfs) { s |= MSFS; }
178 if (i.
isEmpty()) {
return None; }
193 if (i.
contains(
"msfs")) { s |= MSFS; }
234 if (CBuildConfig::isRunningOnWindowsNtPlatform())
236 p3d = !CFsDirectories::p3dDir().isEmpty() && !CFsDirectories::p3dSimObjectsDir().isEmpty();
237 msfs = !CFsDirectories::msfsDir().isEmpty() && !CFsDirectories::msfsPackagesDir().isEmpty();
238 msfs2024 = !CFsDirectories::msfs2024Dir().isEmpty() && !CFsDirectories::msfs2024PackagesDir().isEmpty();
241 const bool xp = !CXPlaneUtil::xplaneRootDir().isEmpty();
251 if (CBuildConfig::isRunningOnLinuxPlatform() || CBuildConfig::isRunningOnMacOSPlatform())
277 const bool xp = jxp.
isBool() ? jxp.
toBool() : CDatastoreUtility::dbBoolStringToBool(jxp.
toString());
282 jmsfs2024.
isBool() ? jmsfs2024.
toBool() : CDatastoreUtility::dbBoolStringToBool(jmsfs2024.
toString());
296 return m_counts[internalIndex(simulator)];
323 for (
int i = 0; i < m_counts.
size() - 1; i++)
325 if (m_counts[i] > 0) { c++; }
333 for (
int i = 0; i < m_counts.
size(); i++) { counts.
insert(m_counts[i], simulator(i)); }
346 m_counts[internalIndex(simulator)] = count;
357 if (simulator.
isP3D()) { m_counts[1]++; }
358 if (simulator.
isXPlane()) { m_counts[3]++; }
359 if (simulator.
isFG()) { m_counts[4]++; }
360 if (simulator.
isMSFS()) { m_counts[5]++; }
361 if (simulator.
isMSFS2024()) { m_counts[6]++; }
364 int CCountPerSimulator::internalIndex(
const CSimulatorInfo &simulator)
370 case CSimulatorInfo::P3D:
return 1;
372 case CSimulatorInfo::XPLANE:
return 3;
373 case CSimulatorInfo::FG:
return 4;
374 case CSimulatorInfo::MSFS:
return 5;
375 case CSimulatorInfo::MSFS2024:
return 6;
380 CSimulatorInfo CCountPerSimulator::simulator(
int internalIndex)
382 switch (internalIndex)
384 case 1:
return { CSimulatorInfo::P3D };
385 case 3:
return { CSimulatorInfo::XPLANE };
386 case 4:
return { CSimulatorInfo::FG };
387 case 5:
return { CSimulatorInfo::MSFS };
388 case 6:
return { CSimulatorInfo::MSFS2024 };
389 default:
return { 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.
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 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.
CSimulatorInfo()=default
Default constructor.
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 Simulator boolToFlag(bool xp, bool isP3D, bool fg, bool msfs, bool msfs2024)
Bool flags to enum.
static CSimulatorInfo fromDatabaseJson(const QJsonObject &json, const QString &prefix)
From database JSON.
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)
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.