swift
livery.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2015 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_MISC_AVIATION_LIVERY_H
7 #define SWIFT_MISC_AVIATION_LIVERY_H
8 
9 #include <QJsonObject>
10 #include <QMap>
11 #include <QMetaType>
12 #include <QString>
13 
15 #include "misc/db/datastore.h"
16 #include "misc/metaclass.h"
17 #include "misc/propertyindexref.h"
18 #include "misc/rgbcolor.h"
19 #include "misc/statusmessagelist.h"
20 #include "misc/swiftmiscexport.h"
21 #include "misc/valueobject.h"
22 
23 SWIFT_DECLARE_VALUEOBJECT_MIXINS(swift::misc::aviation, CLivery)
24 
25 namespace swift::misc::aviation
26 {
29  {
30  public:
33  {
34  IndexDescription = CPropertyIndexRef::GlobalIndexCLivery,
35  IndexAirlineIcaoCode,
36  IndexCombinedCode,
37  IndexColorFuselage,
38  IndexColorTail,
39  IndexIsMilitary
40  };
41 
43  CLivery();
44 
46  CLivery(const QString &combinedCode, const CAirlineIcaoCode &airline, const QString &description);
47 
49  CLivery(const QString &combinedCode, const CAirlineIcaoCode &airline, const QString &description,
50  const QString &colorFuselage, const QString &colorTail, bool isMilitary);
51 
53  CLivery(const QString &combinedCode, const CAirlineIcaoCode &airline, const QString &description,
54  const CRgbColor &colorFuselage, const CRgbColor &colorTail, bool isMilitary);
55 
57  CLivery(int dbKey, const QString &combinedCode, const CAirlineIcaoCode &airline, const QString &description,
58  const QString &colorFuselage, const QString &colorTail, bool isMilitary);
59 
61  CLivery(int dbKey, const QString &combinedCode, const CAirlineIcaoCode &airline, const QString &description,
62  const CRgbColor &colorFuselage, const CRgbColor &colorTail, bool isMilitary);
63 
65  const CAirlineIcaoCode &getAirlineIcaoCode() const { return m_airline; }
66 
68  const QString &getAirlineIcaoCodeDesignator() const { return m_airline.getDesignator(); }
69 
71  const QString &getCombinedCode() const { return m_combinedCode; }
72 
74  QString getCombinedCodePlusInfo() const;
75 
77  QString getCombinedCodePlusId() const;
78 
80  QString getCombinedCodePlusInfoAndId() const;
81 
83  const QString &getDescription() const { return m_description; }
84 
86  const QString &getAirlineName() const { return this->getAirlineIcaoCode().getName(); }
87 
89  bool isContainedInSimplifiedAirlineName(const QString &candidate) const;
90 
92  const CRgbColor &getColorFuselage() const { return m_colorFuselage; }
93 
95  const CRgbColor &getColorTail() const { return m_colorTail; }
96 
98  bool isMilitary() const { return m_military; }
99 
101  bool setAirlineIcaoCode(const CAirlineIcaoCode &airlineIcao);
102 
104  bool setAirlineIcaoCodeDesignator(const QString &airlineIcaoDesignator);
105 
107  void setCombinedCode(const QString &code) { m_combinedCode = code.trimmed().toUpper(); }
108 
110  void setColorFuselage(const CRgbColor &color) { m_colorFuselage = color; }
111 
113  void setColorTail(const CRgbColor &color) { m_colorTail = color; }
114 
116  bool hasColorFuselage() const;
117 
119  bool hasColorTail() const;
120 
122  bool hasValidColors() const;
123 
125  void setDescription(const QString &description) { m_description = description; }
126 
128  void setMilitary(bool isMilitary) { m_military = isMilitary; }
129 
131  bool matchesCombinedCode(const QString &candidate) const;
132 
134  bool matchesColors(const CRgbColor &fuselage, const CRgbColor &tail) const;
135 
137  QVariant propertyByIndex(CPropertyIndexRef index) const;
138 
140  void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant);
141 
143  int comparePropertyByIndex(CPropertyIndexRef index, const CLivery &compareValue) const;
144 
146  QString convertToQString(bool i18n = false) const;
147 
149  bool hasCompleteData() const;
150 
152  CStatusMessageList validate() const;
153 
155  bool hasValidAirlineDesignator() const;
156 
158  bool hasAirlineName() const;
159 
161  bool hasCombinedCode() const;
162 
164  bool isAirlineLivery() const;
165 
167  bool isAirlineOperating() const;
168 
170  bool isAirlineStandardLivery() const;
171 
173  bool isColorLivery() const;
174 
176  double getColorDistance(const CLivery &otherLivery) const;
177 
179  double getColorDistance(const CRgbColor &fuselage, const CRgbColor &tail) const;
180 
182  void updateMissingParts(const CLivery &otherLivery);
183 
185  QString asHtmlSummary(const QString &separator) const;
186 
189  int calculateScore(const CLivery &otherLivery, bool preferColorLiveries = false,
190  CStatusMessageList *log = nullptr) const;
191 
193  bool isNull() const;
194 
196  static const CLivery &null();
197 
199  static CLivery fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString("liv_"));
200 
202  static CLivery fromDatabaseJsonCaching(const QJsonObject &json, AirlineIcaoIdMap &airlineIcaos,
203  const QString &prefix = QString("liv_"));
204 
206  static bool isValidCombinedCode(const QString &candidate);
207 
209  static const QString &standardLiveryMarker();
210 
212  static QString getStandardCode(const aviation::CAirlineIcaoCode &airline);
213 
215  static const QString &colorLiveryMarker();
216 
218  static const QString &tempLiveryCode();
219 
222  static CStatusMessage logMessage(const CLivery &livery, const QString &message,
223  const QStringList &extraCategories = {},
225 
228  static void addLogDetailsToList(CStatusMessageList *log, const CLivery &livery, const QString &message,
229  const QStringList &extraCategories = {},
231 
232  private:
233  CAirlineIcaoCode m_airline;
234  QString m_combinedCode;
235  QString m_description;
236  CRgbColor m_colorFuselage;
237  CRgbColor m_colorTail;
238  bool m_military = false;
239 
241  CLivery,
242  SWIFT_METAMEMBER(dbKey),
243  SWIFT_METAMEMBER(timestampMSecsSinceEpoch),
244  SWIFT_METAMEMBER(airline),
246  SWIFT_METAMEMBER(description),
247  SWIFT_METAMEMBER(colorFuselage),
248  SWIFT_METAMEMBER(colorTail),
249  SWIFT_METAMEMBER(military));
250  };
251 
254 
255 } // namespace swift::misc::aviation
256 
257 Q_DECLARE_METATYPE(swift::misc::aviation::CLivery)
258 
259 #endif // SWIFT_MISC_AVIATION_LIVERY_H
Non-owning reference to a CPropertyIndex with a subset of its features.
Streamable status message, e.g.
constexpr static auto SeverityInfo
Status severities.
swift::misc::StatusSeverity StatusSeverity
Status severities.
Status messages, e.g. from Core -> GUI.
Mix of the most commonly used mixin classes.
Definition: valueobject.h:114
Value object for ICAO classification.
Value object encapsulating information about an airpot.
Definition: livery.h:29
bool isMilitary() const
Military livery.
Definition: livery.h:98
const CRgbColor & getColorTail() const
Get tail color.
Definition: livery.h:95
void setCombinedCode(const QString &code)
Combined code.
Definition: livery.h:107
const QString & getAirlineIcaoCodeDesignator() const
Corresponding airline designator, if any.
Definition: livery.h:68
void setColorTail(const CRgbColor &color)
Set tail color.
Definition: livery.h:113
ColumnIndex
Properties by index.
Definition: livery.h:33
const CAirlineIcaoCode & getAirlineIcaoCode() const
Corresponding airline, if any.
Definition: livery.h:65
void setMilitary(bool isMilitary)
Military aircraft?
Definition: livery.h:128
const QString & getAirlineName() const
Get corresponding airline name.
Definition: livery.h:86
const QString & getCombinedCode() const
Combined code.
Definition: livery.h:71
const QString & getDescription() const
Get description.
Definition: livery.h:83
void setColorFuselage(const CRgbColor &color)
Set fuselage color.
Definition: livery.h:110
void setDescription(const QString &description)
Set description.
Definition: livery.h:125
const CRgbColor & getColorFuselage() const
Get fuselage color.
Definition: livery.h:92
Class from which a derived class can inherit datastore-related functions.
Definition: datastore.h:70
#define SWIFT_METAMEMBER(MEMBER,...)
Macro to define an element within a metaclass.
Definition: metaclass.h:73
#define SWIFT_METACLASS(CLASS,...)
Macro to define a nested metaclass that describes the attributes of its enclosing class.
Definition: metaclass.h:53
@ CaseInsensitiveComparison
Element will be compared case insensitively (must be a QString)
Definition: metaclass.h:207
StatusSeverity
Status severities.
Definition: statusmessage.h:35
#define SWIFT_MISC_EXPORT
Export a class or function from the library.
#define SWIFT_DECLARE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template declaration of mixins for a CValueObject subclass to be placed near the top of the ...
Definition: valueobject.h:65