6 #include <QCoreApplication>
8 #include <QStringBuilder>
22 using namespace swift::misc::db;
26 namespace swift::misc::aviation
31 :
CLivery(-1, combinedCode, airline, description,
"",
"", false)
35 const QString &colorFuselage,
const QString &colorTail,
bool isMilitary)
36 :
CLivery(-1, combinedCode, airline, description, colorFuselage, colorTail, isMilitary)
41 :
CLivery(-1, combinedCode, airline, description, colorFuselage, colorTail, isMilitary)
48 m_description(description.trimmed()), m_colorFuselage(
CRgbColor(colorFuselage)),
49 m_colorTail(
CRgbColor(colorTail)), m_military(isMilitary)
56 m_description(description.trimmed()), m_colorFuselage(colorFuselage), m_colorTail(colorTail),
57 m_military(isMilitary)
83 if (m_airline == airlineIcao) {
return false; }
84 m_airline = airlineIcao;
90 if (m_airline.
getDesignator() == airlineIcaoDesignator) {
return false; }
103 if (candidate.
isEmpty() || !this->hasCombinedCode()) {
return false; }
105 return c == m_combinedCode;
115 static const QString livery(
"Livery");
118 return (i18n ? liveryI18n : livery) % u
" cc: '" % m_combinedCode % u
"' airline: '" % m_airline.
toQString(i18n) %
119 u
"' desc.: '" % m_description % u
"' F: '" % m_colorFuselage.
hex() % u
"' T: '" % m_colorTail.
hex() %
123 (void)QT_TRANSLATE_NOOP(
"Aviation",
"Livery");
150 u
"Livery: color livery, but airline looks odd"));
164 return !m_combinedCode.
isEmpty();
195 const double d = xDist * xDist + yDist * yDist;
221 const bool military = CDatastoreUtility::dbBoolStringToBool(json.
value(prefix % u
"military").
toString());
224 CLivery livery(combinedCode, airline, description, colorFuselage, colorTail, military);
230 Q_FUNC_INFO,
"inconsistent data");
256 const bool military = CDatastoreUtility::dbBoolStringToBool(json.
value(prefix % u
"military").
toString());
261 static const QString prefixAirline(
"al_");
262 const int idAirlineIcao = json.
value(prefixAirline % u
"id").
toInt(-1);
263 const bool cachedAirlineIcao = idAirlineIcao >= 0 && airlineIcaos.
contains(idAirlineIcao);
265 airline = cachedAirlineIcao ? airlineIcaos[idAirlineIcao] :
268 if (!cachedAirlineIcao && airline.
isLoadedFromDb()) { airlineIcaos[idAirlineIcao] = airline; }
271 CLivery livery(combinedCode, airline, description, colorFuselage, colorTail, military);
277 Q_FUNC_INFO,
"inconsistent data");
284 if (candidate.
isEmpty()) {
return false; }
288 if (candidate.
count(
'.') != 1) {
return false; }
289 return candidate.
length() > 2;
295 static const QString s(
"_STD");
313 static const QString temp(
"_CC_NOCOLOR");
331 if (!log) {
return; }
332 if (message.
isEmpty()) {
return; }
339 if (IDatastoreObjectWithIntegerKey::canHandleIndex(index))
341 return IDatastoreObjectWithIntegerKey::propertyByIndex(index);
363 if (IDatastoreObjectWithIntegerKey::canHandleIndex(index))
365 IDatastoreObjectWithIntegerKey::setPropertyByIndex(index, variant);
371 case IndexDescription: m_description = variant.
toString();
break;
384 if (IDatastoreObjectWithIntegerKey::canHandleIndex(index))
386 return IDatastoreObjectWithIntegerKey::comparePropertyByIndex(index, compareValue);
392 case IndexAirlineIcaoCode:
394 case IndexColorFuselage:
402 Q_ASSERT_X(
false, Q_FUNC_INFO,
"No compare function");
433 return QStringLiteral(
"%1%2Airline: %3")
451 Q_ASSERT_X(sameAirlineIcaoLevel == 60, Q_FUNC_INFO,
"airline scoring changed");
460 score += 60 * colorMultiplier;
463 QStringLiteral(
"2 color liveries, color multiplier %1: %2").arg(colorMultiplier).arg(score));
473 score += 25 * colorMultiplier;
476 QStringLiteral(
"2 airline liveries, color multiplier %1: %2").arg(colorMultiplier).arg(score));
491 score = preferColorLiveries ? 25 : 0;
492 score += 25 * colorMultiplier;
495 QStringLiteral(
"Color/airline mixed, color multiplier %1: %2").arg(colorMultiplier).arg(score));
static const QString & aviation()
Aviation specific.
A sequence of log categories.
static CLogCategoryList fromQStringList(const QStringList &stringList)
Convert a string list, such as that returned by toQStringList(), into a CLogCategoryList.
Non-owning reference to a CPropertyIndex with a subset of its features.
Q_REQUIRED_RESULT CPropertyIndexRef copyFrontRemoved() const
Copy with first element removed.
CastType frontCasted() const
First element casted to given type, usually the PropertIndex enum.
bool isMyself() const
Myself index, used with nesting.
QVariant propertyByIndex(swift::misc::CPropertyIndexRef index) const
Property by index.
QString hex(bool withHash=false) const
Hex value.
double colorDistance(const CRgbColor &color) const
Color distance [0..1] http://stackoverflow.com/questions/4754506/color-similarity-distance-in-rgba-co...
void setPropertyByIndex(swift::misc::CPropertyIndexRef index, const QVariant &variant)
Set property by index.
int comparePropertyByIndex(CPropertyIndexRef index, const CRgbColor &compareValue) const
Compare for index.
bool isValid() const
Valid?
void push_back(const T &value)
Appends an element at the end of the sequence.
Streamable status message, e.g.
constexpr static auto SeverityError
Status severities.
constexpr static auto SeverityWarning
Status severities.
Status messages, e.g. from Core -> GUI.
QDateTime getUtcTimestamp() const
Get timestamp.
void setUtcTimestamp(const QDateTime ×tamp)
Set timestamp.
Value object for ICAO classification.
bool isNull() const
Null ICAO?
bool isContainedInSimplifiedName(const QString &candidate) const
Does simplified name contain the candidate.
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
const QString & getDesignator() const
Get airline, e.g. "DLH".
CStatusMessageList validate() const
Validate data.
bool hasValidDesignator() const
Airline designator available?
static CAirlineIcaoCode fromDatabaseJson(const QJsonObject &json, const QString &prefix=QString())
From our DB JSON.
void updateMissingParts(const CAirlineIcaoCode &otherIcaoCode)
Update missing parts.
int calculateScore(const CAirlineIcaoCode &otherCode, CStatusMessageList *log=nullptr) const
Score against other code 0..100.
void setDesignator(const QString &icaoDesignator)
Set airline, e.g. "DLH".
int comparePropertyByIndex(CPropertyIndexRef index, const CAirlineIcaoCode &compareValue) const
Compare for index.
QString getVDesignator() const
Get airline, e.g. "DLH", but "VMVA" for virtual airlines.
bool isOperating() const
Operating?
bool hasName() const
Has (airline) name?
Value object encapsulating information about an airpot.
bool isMilitary() const
Military livery.
const CRgbColor & getColorTail() const
Get tail color.
void setCombinedCode(const QString &code)
Combined code.
static const QString & tempLiveryCode()
The code for a temporary livery.
bool setAirlineIcaoCode(const CAirlineIcaoCode &airlineIcao)
Airline ICAO code.
CStatusMessageList validate() const
Validate data.
const QString & getAirlineIcaoCodeDesignator() const
Corresponding airline designator, if any.
void setColorTail(const CRgbColor &color)
Set tail color.
bool hasAirlineName() const
Has airline name?
QString convertToQString(bool i18n=false) const
Cast as QString.
double getColorDistance(const CLivery &otherLivery) const
Color distance 0..1 (0 is best)
ColumnIndex
Properties by index.
bool isNull() const
Null livery?
bool matchesCombinedCode(const QString &candidate) const
Matches combined code.
static CLivery fromDatabaseJson(const QJsonObject &json, const QString &prefix=QString("liv_"))
Object from JSON.
const CAirlineIcaoCode & getAirlineIcaoCode() const
Corresponding airline, if any.
static const QString & colorLiveryMarker()
Color livery marker.
QString asHtmlSummary(const QString &separator) const
As a brief HTML summary (e.g. used in tooltips)
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
QString getCombinedCodePlusInfoAndId() const
Combined code, info, plus id.
static bool isValidCombinedCode(const QString &candidate)
Valid combined code string?
bool setAirlineIcaoCodeDesignator(const QString &airlineIcaoDesignator)
Airline ICAO code designator.
void setMilitary(bool isMilitary)
Military aircraft?
static QString getStandardCode(const aviation::CAirlineIcaoCode &airline)
Standard code for airline.
static CStatusMessage logMessage(const CLivery &livery, const QString &message, const QStringList &extraCategories={}, CStatusMessage::StatusSeverity s=CStatusMessage::SeverityInfo)
Specialized log message for matching / reverse lookup.
bool hasValidAirlineDesignator() const
Airline available?
bool hasColorTail() const
Tail color set?
bool isAirlineOperating() const
Is airline operating?
bool hasColorFuselage() const
Fuselage color set?
bool hasCompleteData() const
Complete data?
static const CLivery & null()
NULL object.
bool isAirlineStandardLivery() const
Livery representing airline standard livery.
const QString & getCombinedCode() const
Combined code.
bool matchesColors(const CRgbColor &fuselage, const CRgbColor &tail) const
Matches colors.
const QString & getDescription() const
Get description.
void setColorFuselage(const CRgbColor &color)
Set fuselage color.
bool isAirlineLivery() const
Livery representing airline.
static CLivery fromDatabaseJsonCaching(const QJsonObject &json, AirlineIcaoIdMap &airlineIcaos, const QString &prefix=QString("liv_"))
Object from JSON caching.
bool hasValidColors() const
Has valid (fuselage/tail) colors?
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
QString getCombinedCodePlusId() const
Combined code plus id.
bool isContainedInSimplifiedAirlineName(const QString &candidate) const
Does simplified airline name contain the candidate.
bool hasCombinedCode() const
Livery combined code available?
bool isColorLivery() const
Color livery?
int comparePropertyByIndex(CPropertyIndexRef index, const CLivery &compareValue) const
Compare for index.
CLivery()
Default constructor.
static const QString & standardLiveryMarker()
Standard livery marker string.
int calculateScore(const CLivery &otherLivery, bool preferColorLiveries=false, CStatusMessageList *log=nullptr) const
Score by comparison to another livery 0..100.
static void addLogDetailsToList(CStatusMessageList *log, const CLivery &livery, const QString &message, const QStringList &extraCategories={}, CStatusMessage::StatusSeverity s=CStatusMessage::SeverityInfo)
Specialized log for matching / reverse lookup.
void setDescription(const QString &description)
Set description.
void updateMissingParts(const CLivery &otherLivery)
Update missing parts.
QString getCombinedCodePlusInfo() const
Combined code plus info.
const CRgbColor & getColorFuselage() const
Get fuselage color.
Class from which a derived class can inherit datastore-related functions.
int getDbKey() const
Get DB key.
bool isLoadedFromDb() const
Loaded from DB.
static bool existsKey(const QJsonObject &json, const QString &prefix=QString())
Is a key available?
void setDbKey(int key)
Set the DB key.
bool isDbEqual(const IDatastoreObjectWithIntegerKey &other) const
Same DB key and hence equal.
QString getDbKeyAsStringInParentheses(const QString &prefix={}) const
Db key in parentheses, e.g. "(3)".
void setKeyVersionTimestampFromDatabaseJson(const QJsonObject &json, const QString &prefix=QString())
Set key and timestamp values.
bool hasValidDbKey() const
Has valid DB key.
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
QString toQString(bool i18n=false) const
Cast as QString.
Free functions in swift::misc.
StatusSeverity
Status severities.
SWIFT_MISC_EXPORT const QString & boolToYesNo(bool v)
Bool to yes/no.
QString translate(const char *context, const char *sourceText, const char *disambiguation, int n)
QJsonValue value(QLatin1StringView key) const const
int toInt(int defaultValue) const const
QString toString() const const
bool contains(const Key &key) const const
qsizetype count() const const
QString & append(QChar ch)
QString arg(Args &&... args) const const
int compare(QLatin1StringView s1, const QString &s2, Qt::CaseSensitivity cs)
bool endsWith(QChar c, Qt::CaseSensitivity cs) const const
bool isEmpty() const const
qsizetype length() const const
QString & replace(QChar before, QChar after, Qt::CaseSensitivity cs)
bool startsWith(QChar c, Qt::CaseSensitivity cs) const const
QString toUpper() const const
QString trimmed() const const
QVariant fromValue(T &&value)
bool toBool() const const
QString toString() const const
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
#define SWIFT_VERIFY_X(COND, WHERE, WHAT)
A weaker kind of assert.