diff --git a/src/blackgui/models/airlineicaolistmodel.cpp b/src/blackgui/models/airlineicaolistmodel.cpp index d7c743009..844e76abd 100644 --- a/src/blackgui/models/airlineicaolistmodel.cpp +++ b/src/blackgui/models/airlineicaolistmodel.cpp @@ -29,7 +29,8 @@ namespace BlackGui col.setSortPropertyIndex(CAirlineIcaoCode::IndexAirlineDesignator); this->m_columns.addColumn(col); - this->m_columns.addColumn(CColumn("VA", "Virtual airline", CAirlineIcaoCode::IndexIsVirtualAirline, new CBoolIconFormatter("VA", "real airline"))); + this->m_columns.addColumn(CColumn("VA", "virtual airline", CAirlineIcaoCode::IndexIsVirtualAirline, new CBoolIconFormatter("VA", "real airline"))); + this->m_columns.addColumn(CColumn("mil.", "military (air force)", CAirlineIcaoCode::IndexIsMilitary, new CBoolIconFormatter("military", "civilian"))); this->m_columns.addColumn(CColumn("op.", "operating", CAirlineIcaoCode::IndexIsOperating, new CBoolIconFormatter("operating", "ceased"))); this->m_columns.addColumn(CColumn::standardValueObject("name", CAirlineIcaoCode::IndexAirlineName)); diff --git a/src/blackmisc/aviation/aircrafticaocode.cpp b/src/blackmisc/aviation/aircrafticaocode.cpp index 645506ee7..52e87fd92 100644 --- a/src/blackmisc/aviation/aircrafticaocode.cpp +++ b/src/blackmisc/aviation/aircrafticaocode.cpp @@ -451,7 +451,7 @@ namespace BlackMisc const QStringList &CAircraftIcaoCode::getSpecialDesignators() { - static const QStringList s({ "ZZZZ", "SHIP", "BALL", "GLID", "ULAC", "GYRO", "UHEL", "GLID", "ULAC", "GYRO", "UHEL"}); + static const QStringList s({ "ZZZZ", "SHIP", "BALL", "GLID", "ULAC", "GYRO", "UHEL" }); return s; } @@ -483,18 +483,18 @@ namespace BlackMisc QString engine(json.value(prefix + "engine").toString()); int engineCount(json.value(prefix + "enginecount").toInt(-1)); QString combined(createdCombinedString(type, engineCount, engine)); - QString wtc(json.value("wtc").toString()); + QString wtc(json.value(prefix + "wtc").toString()); if (wtc.length() > 1 && wtc.contains("/")) { // "L/M" -> "M" wtc = wtc.right(1); } + Q_ASSERT_X(wtc.length() < 2, Q_FUNC_INFO, "WTC too long"); + bool real = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "realworld").toString()); bool legacy = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "legacy").toString()); bool military = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "military").toString()); - int rank(json.value("rank").toInt(10)); - - Q_ASSERT_X(wtc.length() < 2, Q_FUNC_INFO, "WTC too long"); + int rank(json.value(prefix + "rank").toInt(10)); CAircraftIcaoCode code( designator, iata, combined, diff --git a/src/blackmisc/aviation/airlineicaocode.cpp b/src/blackmisc/aviation/airlineicaocode.cpp index d55e4fea6..cb38f30d6 100644 --- a/src/blackmisc/aviation/airlineicaocode.cpp +++ b/src/blackmisc/aviation/airlineicaocode.cpp @@ -12,6 +12,7 @@ #include "blackmisc/blackmiscfreefunctions.h" #include "blackmisc/variant.h" #include "blackmisc/comparefunctions.h" +#include "blackmisc/datastoreutility.h" #include #include @@ -153,6 +154,8 @@ namespace BlackMisc return CVariant::fromValue(this->m_isVa); case IndexIsOperating: return CVariant::fromValue(this->m_isOperating); + case IndexIsMilitary: + return CVariant::fromValue(this->m_isMilitary); case IndexDesignatorNameCountry: return CVariant::fromValue(this->getDesignatorNameCountry()); default: @@ -188,6 +191,9 @@ namespace BlackMisc case IndexIsOperating: this->setOperating(variant.toBool()); break; + case IndexIsMilitary: + this->setMilitary(variant.toBool()); + break; default: CValueObject::setPropertyByIndex(variant, index); break; @@ -217,6 +223,8 @@ namespace BlackMisc return Compare::compare(this->isVirtualAirline(), compareValue.isVirtualAirline()); case IndexIsOperating: return Compare::compare(this->isOperating(), compareValue.isOperating()); + case IndexIsMilitary: + return Compare::compare(this->isMilitary(), compareValue.isMilitary()); default: break; } @@ -301,14 +309,17 @@ namespace BlackMisc QString name(json.value(prefix + "name").toString()); QString countryIso(json.value(prefix + "country").toString()); QString countryName(json.value(prefix + "countryname").toString()); - bool va = json.value(prefix + "va").toString().startsWith("Y", Qt::CaseInsensitive); // VA - bool operating = json.value(prefix + "operating").toString().startsWith("Y", Qt::CaseInsensitive); // operating + bool va = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "va").toString()); + bool operating = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "operating").toString()); + bool military = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "military").toString()); + CAirlineIcaoCode code( designator, name, CCountry(countryIso, countryName), telephony, va, operating ); code.setIataCode(iata); + code.setMilitary(military); code.setKeyAndTimestampFromDatabaseJson(json, prefix); return code; } diff --git a/src/blackmisc/aviation/airlineicaocode.h b/src/blackmisc/aviation/airlineicaocode.h index d8dd935f6..732d6b5bc 100644 --- a/src/blackmisc/aviation/airlineicaocode.h +++ b/src/blackmisc/aviation/airlineicaocode.h @@ -41,6 +41,7 @@ namespace BlackMisc IndexTelephonyDesignator, IndexIsVirtualAirline, IndexIsOperating, + IndexIsMilitary, IndexDesignatorNameCountry, }; @@ -107,6 +108,12 @@ namespace BlackMisc //! Operating airline? void setOperating(bool operating) { m_isOperating = operating; } + //! Military, air force or such? + bool isMilitary() const { return m_isMilitary; } + + //! Military, air force or such? + void setMilitary(bool military) { m_isMilitary = military; } + //! Country? bool hasValidCountry() const; @@ -179,6 +186,7 @@ namespace BlackMisc QString m_telephonyDesignator; //!< "Speedbird" bool m_isVa = false; //!< virtual airline bool m_isOperating = true; //!< still operating? + bool m_isMilitary = false; //!< air force or such }; } // namespace } // namespace @@ -192,7 +200,8 @@ BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::Aviation::CAirlineIcaoCode, ( o.m_country, o.m_telephonyDesignator, o.m_isVa, - o.m_isOperating + o.m_isOperating, + o.m_isMilitary )) #endif // guard diff --git a/src/blackmisc/aviation/airlineicaocodelist.cpp b/src/blackmisc/aviation/airlineicaocodelist.cpp index 9272146f3..29edaab65 100644 --- a/src/blackmisc/aviation/airlineicaocodelist.cpp +++ b/src/blackmisc/aviation/airlineicaocodelist.cpp @@ -72,6 +72,14 @@ namespace BlackMisc }); } + CAirlineIcaoCodeList CAirlineIcaoCodeList::findByMilitary(bool military) const + { + return this->findBy([&](const CAirlineIcaoCode & code) + { + return code.isMilitary() == military; + }); + } + CAirlineIcaoCode CAirlineIcaoCodeList::smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern) const { if (icaoPattern.hasValidDbKey()) diff --git a/src/blackmisc/aviation/airlineicaocodelist.h b/src/blackmisc/aviation/airlineicaocodelist.h index f5e0fd7df..15cf5ba66 100644 --- a/src/blackmisc/aviation/airlineicaocodelist.h +++ b/src/blackmisc/aviation/airlineicaocodelist.h @@ -59,6 +59,9 @@ namespace BlackMisc //! Find by country code CAirlineIcaoCodeList findByCountryIsoCode(const QString &isoCode) const; + //! Find by military flag + CAirlineIcaoCodeList findByMilitary(bool military) const; + //! Best selection by given pattern CAirlineIcaoCode smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern) const;