mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-06 18:25:37 +08:00
Ref T637, allow 3 letter ICAOs in FP
* strict or lenient airport check * allow to enter 3 letter ICAO codes in FP
This commit is contained in:
@@ -15,9 +15,9 @@ namespace BlackMisc
|
||||
return m_icaoCode;
|
||||
}
|
||||
|
||||
bool CAirportIcaoCode::hasValidIcaoCode() const
|
||||
bool CAirportIcaoCode::hasValidIcaoCode(bool strict) const
|
||||
{
|
||||
return CAirportIcaoCode::isValidIcaoDesignator(this->getIcaoCode());
|
||||
return CAirportIcaoCode::isValidIcaoDesignator(this->getIcaoCode(), strict);
|
||||
}
|
||||
|
||||
bool CAirportIcaoCode::equalsString(const QString &icaoCode) const
|
||||
@@ -29,15 +29,15 @@ namespace BlackMisc
|
||||
QString CAirportIcaoCode::unifyAirportCode(const QString &icaoCode)
|
||||
{
|
||||
const QString code = icaoCode.trimmed().toUpper();
|
||||
if (code.length() != 4) return {};
|
||||
if (!validCodeLength(icaoCode.length(), false)) return {};
|
||||
if (containsChar(code, [](QChar c) { return !c.isLetterOrNumber(); })) { return {}; }
|
||||
return code;
|
||||
}
|
||||
|
||||
bool CAirportIcaoCode::isValidIcaoDesignator(const QString &icaoCode)
|
||||
bool CAirportIcaoCode::isValidIcaoDesignator(const QString &icaoCode, bool strict)
|
||||
{
|
||||
const QString icao = unifyAirportCode(icaoCode);
|
||||
return icao.length() == 4;
|
||||
return validCodeLength(icao.length(), strict);
|
||||
}
|
||||
|
||||
bool CAirportIcaoCode::containsNumbers(const QString &icaoCode)
|
||||
@@ -63,5 +63,16 @@ namespace BlackMisc
|
||||
return m_icaoCode.compare(compareValue.getIcaoCode(), Qt::CaseInsensitive);
|
||||
}
|
||||
|
||||
bool CAirportIcaoCode::validCodeLength(int l, bool strict)
|
||||
{
|
||||
// FAA code 3
|
||||
// ICAO code 4
|
||||
if (strict) { return l == 4; }
|
||||
return l >= 3 && l <= 6;
|
||||
|
||||
// https://en.wikipedia.org/wiki/Location_identifier#FAA_identifier says can be up to 5 characters
|
||||
// https://en.wikipedia.org/wiki/ICAO_airport_code#Pseudo_ICAO-codes says France has some 6-character airport codes
|
||||
// and ZZZZ can be used in a flight plan as ICAO code for any airport that doesn't have one
|
||||
}
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace BlackMisc
|
||||
bool isEmpty() const { return this->m_icaoCode.isEmpty(); }
|
||||
|
||||
//! Has valid code?
|
||||
bool hasValidIcaoCode() const;
|
||||
bool hasValidIcaoCode(bool strict) const;
|
||||
|
||||
//! Get code.
|
||||
const QString &asString() const { return this->m_icaoCode; }
|
||||
@@ -56,7 +56,7 @@ namespace BlackMisc
|
||||
static QString unifyAirportCode(const QString &icaoCode);
|
||||
|
||||
//! Valid ICAO designator
|
||||
static bool isValidIcaoDesignator(const QString &icaoCode);
|
||||
static bool isValidIcaoDesignator(const QString &icaoCode, bool strict);
|
||||
|
||||
//! Containing numbers (normally indicator for small airfield/strip)
|
||||
static bool containsNumbers(const QString &icaoCode);
|
||||
@@ -73,6 +73,9 @@ namespace BlackMisc
|
||||
//! \copydoc BlackMisc::Mixin::Index::comparePropertyByIndex
|
||||
int comparePropertyByIndex(const CPropertyIndex &index, const CAirportIcaoCode &compareValue) const;
|
||||
|
||||
//! Valid code lenght
|
||||
static bool validCodeLength(int l, bool strict);
|
||||
|
||||
private:
|
||||
QString m_icaoCode;
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ namespace BlackMisc
|
||||
|
||||
bool CUser::hasValidHomeBase() const
|
||||
{
|
||||
return m_homebase.hasValidIcaoCode();
|
||||
return m_homebase.hasValidIcaoCode(false);
|
||||
}
|
||||
|
||||
CStatusMessageList CUser::validate() const
|
||||
|
||||
Reference in New Issue
Block a user