diff --git a/resources/share/images/airlines/vm.png b/resources/share/images/airlines/vm.png new file mode 100644 index 000000000..d8d9d48c8 Binary files /dev/null and b/resources/share/images/airlines/vm.png differ diff --git a/resources/share/images/airlines/vv.png b/resources/share/images/airlines/vv.png new file mode 100644 index 000000000..83e72828a Binary files /dev/null and b/resources/share/images/airlines/vv.png differ diff --git a/src/blackmisc/aviation/airlineicaocode.cpp b/src/blackmisc/aviation/airlineicaocode.cpp index 25a5d032d..66c7c6576 100644 --- a/src/blackmisc/aviation/airlineicaocode.cpp +++ b/src/blackmisc/aviation/airlineicaocode.cpp @@ -147,7 +147,7 @@ namespace BlackMisc CIcon CAirlineIcaoCode::toIcon() const { - if (this->m_designator.length() > 2) + if (hasValidDesignator()) { // relative to images return CIcon("airlines/" + m_designator.toLower() + ".png", this->convertToQString()); @@ -285,16 +285,23 @@ namespace BlackMisc bool CAirlineIcaoCode::isValidAirlineDesignator(const QString &airline) { + // allow 2 chars for IATA if (airline.length() < 2 || airline.length() > 5) return false; auto chars = makeRange(airline.begin(), airline.end()); if (chars.containsBy([](QChar c) { return !c.isUpper() && !c.isDigit(); })) { return false; } return true; } + QSet CAirlineIcaoCode::specialValidDesignators() + { + static const QSet valid({ "VV", "VM"}); + return valid; + } + QString CAirlineIcaoCode::normalizeDesignator(const QString candidate) { QString n(candidate.trimmed().toUpper()); - if (n.contains(' ')) { n = n.left(n.indexOf(' ')); } // cutoff as first space + if (n.contains(' ')) { n = n.left(n.indexOf(' ')); } // cutoff at first space if (n.isEmpty()) { return n; } static QThreadStorage tsRegex; diff --git a/src/blackmisc/aviation/airlineicaocode.h b/src/blackmisc/aviation/airlineicaocode.h index 46f02dc95..775a8939c 100644 --- a/src/blackmisc/aviation/airlineicaocode.h +++ b/src/blackmisc/aviation/airlineicaocode.h @@ -194,6 +194,9 @@ namespace BlackMisc //! Valid designator? static bool isValidAirlineDesignator(const QString &airline); + //! Some special valid designator which do not fit standard rule (e.g. 3-letter code) + static QSet specialValidDesignators(); + //! Normalize string as airline designator static QString normalizeDesignator(const QString candidate);