swift
callsign.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2013 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_CALLSIGN_H
7 #define SWIFT_MISC_AVIATION_CALLSIGN_H
8 
9 #include <tuple>
10 
11 #include <QMetaType>
12 #include <QString>
13 
14 #include "misc/metaclass.h"
15 #include "misc/propertyindexref.h"
16 #include "misc/statusmessage.h"
17 #include "misc/swiftmiscexport.h"
18 #include "misc/valueobject.h"
19 
20 SWIFT_DECLARE_VALUEOBJECT_MIXINS(swift::misc::aviation, CCallsign)
21 
22 namespace swift::misc
23 {
24  class CStatusMessageList;
25 
26  namespace aviation
27  {
29  class SWIFT_MISC_EXPORT CCallsign : public CValueObject<CCallsign>
30  {
31  public:
34  {
35  IndexCallsignString = CPropertyIndexRef::GlobalIndexCCallsign,
36  IndexCallsignStringAsSet,
37  IndexTelephonyDesignator,
38  IndexSuffix,
39  IndexSuffixSortOrder
40  };
41 
43  enum TypeHint
44  {
45  NoHint,
46  Aircraft,
47  Atc
48  };
49 
51  CCallsign() {}
52 
54  CCallsign(const QString &callsign, TypeHint hint = NoHint);
55 
57  CCallsign(const QString &callsign, const QString &telephonyDesignator, TypeHint hint = NoHint);
58 
60  CCallsign(const char *callsign, TypeHint hint = NoHint);
61 
63  bool isEmpty() const { return m_callsignAsSet.isEmpty(); }
64 
67  bool isAtcCallsign() const;
68 
71  bool isAtcAlikeCallsign() const;
72 
74  bool isObserverCallsign() const;
75 
77  bool isSupervisorCallsign() const;
78 
81  bool isBroadcastCallsign() const;
82 
85  void markAsBroadcastCallsign();
86 
88  void markAsWallopCallsign();
89 
93  bool isMaybeCopilotCallsign(const CCallsign &pilotCallsign) const;
94 
96  const QString &asString() const { return m_callsign; }
97 
99  const QString &getStringAsSet() const { return m_callsignAsSet; }
100 
102  QString getFsdCallsignString() const;
103 
105  bool isSameAsSet() const;
106 
108  const QString &getTelephonyDesignator() const { return m_telephonyDesignator; }
109 
111  TypeHint getTypeHint() const { return m_typeHint; }
112 
114  void setTypeHint(TypeHint hint) { m_typeHint = hint; }
115 
117  QString getIcaoCode() const;
118 
120  QString getAsObserverCallsignString() const;
121 
123  QString getSuffix() const;
124 
127  QString getAirlinePrefix() const;
128  QString getAirlinePrefix(QString &flightNumber) const;
129  QString getAirlinePrefix(QString &flightNumber, QString &flightIdentification) const;
131 
133  QString getFlightIndentification() const;
134 
136  QString getFlightNumber() const;
137 
139  int getFlightNumberInt() const;
140 
142  bool hasSuffix() const;
143 
145  bool hasAtcSuffix() const;
146 
148  int getSuffixSortOrder() const;
149 
151  bool equalsString(const QString &callsignString) const;
152 
154  bool isValid() const;
155 
157  CIcons::IconIndex toIcon() const { return convertToIcon(*this).getIndex(); }
158 
160  QVariant propertyByIndex(CPropertyIndexRef index) const;
161 
163  void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant);
164 
166  int comparePropertyByIndex(CPropertyIndexRef index, const CCallsign &compareValue) const;
167 
169  QString convertToQString(bool i18n = false) const;
170 
172  void clear();
173 
175  static int suffixToSortOrder(const QString &suffix);
176 
178  static bool isValidAircraftCallsign(const QString &callsign);
179 
181  static bool isValidAircraftCallsign(const CCallsign &callsign);
182 
184  static bool isValidAtcCallsign(const QString &callsign);
185 
187  static bool isValidAtcCallsign(const CCallsign &callsign);
188 
190  static QString unifyCallsign(const QString &callsign, TypeHint hint = NoHint);
191 
193  static const QStringList &atcCallsignSuffixes();
194 
196  static const QStringList &atcAlikeCallsignSuffixes();
197 
199  static bool looksLikeAtcCallsign(const QString &callsign);
200 
202  static const CIcon &atcSuffixToIcon(const QString &suffix);
203 
205  static const CIcon &convertToIcon(const CCallsign &callsign);
206 
209  static CStatusMessage logMessage(const CCallsign &callsign, const QString &message,
210  const QStringList &extraCategories = {},
212 
215  static void addLogDetailsToList(CStatusMessageList *log, const CCallsign &callsign, const QString &message,
216  const QStringList &extraCategories = {},
218 
220  static void registerMetadata();
221 
222  private:
223  QString m_callsignAsSet;
224  QString m_callsign;
225  QString m_telephonyDesignator;
226  TypeHint m_typeHint = NoHint;
227 
229  CCallsign,
232  SWIFT_METAMEMBER(telephonyDesignator, 0, DisabledForComparison | DisabledForHashing),
234  };
235  } // namespace aviation
236 } // namespace swift::misc
237 
238 Q_DECLARE_METATYPE(swift::misc::aviation::CCallsign)
240 
241 #endif // SWIFT_MISC_AVIATION_CALLSIGN_H
Value object for icons. An icon is stored in the global icon repository and identified by its index....
Definition: icon.h:39
IconIndex
Index for each icon, allows to send them via DBus, efficiently store them, etc.
Definition: icons.h:32
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 encapsulating information of a callsign.
Definition: callsign.h:30
const QString & asString() const
Get callsign (normalized)
Definition: callsign.h:96
TypeHint
Representing what.
Definition: callsign.h:44
CIcons::IconIndex toIcon() const
As icon, not implemented by all classes.
Definition: callsign.h:157
bool isEmpty() const
Is empty?
Definition: callsign.h:63
const QString & getTelephonyDesignator() const
Get callsign telephony designator (how callsign is pronounced)
Definition: callsign.h:108
TypeHint getTypeHint() const
Type hint.
Definition: callsign.h:111
CCallsign()
Default constructor.
Definition: callsign.h:51
void setTypeHint(TypeHint hint)
Type hint.
Definition: callsign.h:114
const QString & getStringAsSet() const
Get callsign.
Definition: callsign.h:99
#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
@ DisabledForComparison
Element will be ignored by compare() and comparison operators.
Definition: metaclass.h:202
@ DisabledForHashing
Element will be ignored by qHash()
Definition: metaclass.h:205
Free functions in swift::misc.
void registerMetadata()
Register all relevant metadata in Misc.
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