From 509a60d06ff1b2f005439be12987dad2c5886328 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 27 Jan 2019 17:18:09 +0100 Subject: [PATCH] Ref T524, filter by combined type/manufacturer --- src/blackmisc/aviation/aircrafticaocode.cpp | 8 +++++++- src/blackmisc/aviation/aircrafticaocode.h | 3 +++ src/blackmisc/simulation/aircraftmodellist.cpp | 15 +++++++++++++++ src/blackmisc/simulation/aircraftmodellist.h | 12 ++++++++++-- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/blackmisc/aviation/aircrafticaocode.cpp b/src/blackmisc/aviation/aircrafticaocode.cpp index da0cd22fa..01283a1ad 100644 --- a/src/blackmisc/aviation/aircrafticaocode.cpp +++ b/src/blackmisc/aviation/aircrafticaocode.cpp @@ -371,7 +371,7 @@ namespace BlackMisc const bool wildcard = cc.contains('*'); if (!wildcard) { return false; } const QChar at = cc.at(0); - const QChar c = cc.at(1); + const QChar c = cc.at(1); const QChar et = cc.at(2); if (at != '*') { @@ -387,6 +387,12 @@ namespace BlackMisc return cet.length() == 1 && cet.at(0) == et; } + bool CAircraftIcaoCode::matchesCombinedTypeAndManufacturer(const QString &combinedType, const QString &manufacturer) const + { + return this->matchesCombinedType(combinedType) && + this->matchesManufacturer(manufacturer); + } + QString CAircraftIcaoCode::getDesignatorManufacturer() const { return (this->hasDesignator() ? this->getDesignator() : QStringLiteral("????")) % diff --git a/src/blackmisc/aviation/aircrafticaocode.h b/src/blackmisc/aviation/aircrafticaocode.h index 68679376d..2fdd7da4b 100644 --- a/src/blackmisc/aviation/aircrafticaocode.h +++ b/src/blackmisc/aviation/aircrafticaocode.h @@ -166,6 +166,9 @@ namespace BlackMisc //! \remark * can be used as wildcard, e.g. L*J, L** bool matchesCombinedType(const QString &combinedType) const; + //! Matches combined type and + bool matchesCombinedTypeAndManufacturer(const QString &combinedType, const QString &manufacturer) const; + //! Set the model description (ICAO description) void setModelDescription(const QString &modelDescription) { m_modelDescription = modelDescription.trimmed(); } diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index 33eb90ac2..831359749 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -311,6 +311,21 @@ namespace BlackMisc return this->findByCombinedTypeAndWtc(combinedType, wtc).findColorLiveries(); } + CAircraftModelList CAircraftModelList::findByCombinedAndManufacturer(const CAircraftIcaoCode &icao) const + { + return this->findByCombinedAndManufacturer(icao.getCombinedType(), icao.getManufacturer()); + } + + CAircraftModelList CAircraftModelList::findByCombinedAndManufacturer(const QString &combinedType, const QString &manufacturer) const + { + if (manufacturer.isEmpty()) { return this->findByCombinedType(combinedType); } + if (combinedType.isEmpty()) { return this->findByManufacturer(manufacturer); } + return this->findBy([ & ](const CAircraftModel & model) + { + return model.getAircraftIcaoCode().matchesCombinedTypeAndManufacturer(combinedType, manufacturer); + }); + } + CAircraftModelList CAircraftModelList::findColorLiveries() const { return this->findBy([ = ](const CAircraftModel & model) diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index ef27381f5..55d366b60 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -181,12 +181,20 @@ namespace BlackMisc //! Find by combined code and WTC, wildcards for combined code possible, e.g. L*P, *2J CAircraftModelList findByCombinedTypeAndWtc(const QString &combinedType, const QString &wtc) const; - //! \copydoc findByCombinedType + //! Combined type and color livery CAircraftModelList findByCombinedTypeWithColorLivery(const QString &combinedType) const; - //! \copydoc findByCombinedTypeAndWtc + //! Combined WTC/livery CAircraftModelList findByCombinedTypeAndWtcWithColorLivery(const QString &combinedType, const QString &wtc) const; + //! Combined type and manufacturer + //! \remark kind of pseudo family, as in most cases the same combined type of a manufacturer means similar aircraft + CAircraftModelList findByCombinedAndManufacturer(const Aviation::CAircraftIcaoCode &icao) const; + + //! Combined typeand manufacturer + //! \remark kind of pseudo family, as in most cases the same combined type of a manufacturer means similar aircraft + CAircraftModelList findByCombinedAndManufacturer(const QString &combinedType, const QString &manufacturer) const; + //! Find models with color liveries CAircraftModelList findColorLiveries() const;