diff --git a/src/blackcore/aircraftmatcher.cpp b/src/blackcore/aircraftmatcher.cpp index 2c3015325..2734c75d5 100644 --- a/src/blackcore/aircraftmatcher.cpp +++ b/src/blackcore/aircraftmatcher.cpp @@ -623,9 +623,9 @@ namespace BlackCore // VTOL ScoredModels map; - if (remoteAircraft.isVtol() && modelSet.contains(&CAircraftModel::isVtol, true)) + if (remoteAircraft.isVtol() && modelSet.containsVtol()) { - usedModelSet = modelSet.findBy(&CAircraftModel::isVtol, true); + usedModelSet = modelSet.findByVtolFlag(true); } else { diff --git a/src/blackmisc/simulation/aircraftmodel.cpp b/src/blackmisc/simulation/aircraftmodel.cpp index 343639df9..c814972e5 100644 --- a/src/blackmisc/simulation/aircraftmodel.cpp +++ b/src/blackmisc/simulation/aircraftmodel.cpp @@ -328,6 +328,11 @@ namespace BlackMisc this->getLivery().isMilitary(); } + bool CAircraftModel::isCivilian() const + { + return !this->isMilitary(); + } + bool CAircraftModel::setDistributorOrder(int order) { if (order < 0) { return false; } diff --git a/src/blackmisc/simulation/aircraftmodel.h b/src/blackmisc/simulation/aircraftmodel.h index 00849d562..07e917251 100644 --- a/src/blackmisc/simulation/aircraftmodel.h +++ b/src/blackmisc/simulation/aircraftmodel.h @@ -214,6 +214,9 @@ namespace BlackMisc //! Military model? bool isMilitary() const; + //! Civilian model? + bool isCivilian() const; + //! Get livery const BlackMisc::Aviation::CLivery &getLivery() const { return m_livery; } diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index 35407f22d..0d82dd97c 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -281,6 +281,14 @@ namespace BlackMisc }); } + CAircraftModelList CAircraftModelList::findByVtolFlag(bool vtol) const + { + return this->findBy([ = ](const CAircraftModel & model) + { + return (model.isVtol() == vtol); + }); + } + CAircraftModelList CAircraftModelList::getAllFsFamilyModels() const { return this->findBy([](const CAircraftModel & model) @@ -350,6 +358,35 @@ namespace BlackMisc }); } + bool CAircraftModelList::containsMilitary() const + { + return this->containsBy([ & ](const CAircraftModel & model) + { + return model.isMilitary(); + }); + } + + bool CAircraftModelList::containsCivilian() const + { + return this->containsBy([ & ](const CAircraftModel & model) + { + return model.isCivilian(); + }); + } + + bool CAircraftModelList::containsCivilianAndMilitary() const + { + return this->containsMilitary() && this->containsCivilian(); + } + + bool CAircraftModelList::containsVtol() const + { + return this->containsBy([ & ](const CAircraftModel & model) + { + return model.isVtol(); + }); + } + CAircraftModelList CAircraftModelList::findByDistributors(const CDistributorList &distributors) const { if (distributors.isEmpty()) { return CAircraftModelList(); } diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index aeb4cd7b9..03ba176cf 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -62,30 +62,42 @@ namespace BlackMisc //! Construct from a base class object. CAircraftModelList(const CSequence &other); - //! Contains model string + //! Contains model string? bool containsModelString(const QString &modelString, Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive) const; - //! Contains model with model string or id + //! Contains model with model string or id? bool containsModelStringOrDbKey(const BlackMisc::Simulation::CAircraftModel &model, Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive) const; - //! Contains model for callsign + //! Contains model for callsign? bool containsCallsign(const BlackMisc::Aviation::CCallsign &callsign) const; - //! Contains given combined type + //! Contains given combined type? bool containsCombinedType(const QString &combinedType) const; - //! Contains any model with aircraft ICAO designator + //! Contains any model with aircraft ICAO designator? bool containsModelsWithAircraftIcaoDesignator(const QString &aircraftDesignator) const; - //! Contains any model with aircraft and airline ICAO designator + //! Contains any model with aircraft and airline ICAO designator? bool containsModelsWithAircraftAndAirlineIcaoDesignator(const QString &aircraftDesignator, const QString &airlineDesignator) const; - //! Contains any model matching any of of passed simulators + //! Contains any model matching any of of passed simulators? bool containsMatchingSimulator(const CSimulatorInfo &simulators) const; - //! Contains any model not matching any of of passed simulators + //! Contains any model not matching any of of passed simulators? bool containsNotMatchingSimulator(const CSimulatorInfo &simulators) const; + //! Contains military models? + bool containsMilitary() const; + + //! Contains civilian models? + bool containsCivilian() const; + + //! Contains both, military and civilian models? + bool containsCivilianAndMilitary() const; + + //! Contains VTOL models? + bool containsVtol() const; + //! Find by model string //! \remark normally CAircraftModelList::findFirstByModelStringOrDefault would be used CAircraftModelList findByModelString(const QString &modelString, Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive) const; @@ -156,9 +168,12 @@ namespace BlackMisc //! Find models with color liveries CAircraftModelList findColorLiveries() const; - //! Find by military flag + //! Find by military flag, \c false returns civilian models CAircraftModelList findByMilitaryFlag(bool military) const; + //! Find by VTOL flag, \c false returns non VTOL models + CAircraftModelList findByVtolFlag(bool vtol) const; + //! Model icon path QString findModelIconPathByModelString(const QString &modelString) const;