swift
client.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_NETWORK_CLIENT_H
7 #define SWIFT_MISC_NETWORK_CLIENT_H
8 
9 #include <QMetaType>
10 #include <QString>
11 
12 #include "misc/aviation/callsign.h"
13 #include "misc/metaclass.h"
14 #include "misc/network/user.h"
16 #include "misc/propertyindexref.h"
18 #include "misc/swiftmiscexport.h"
19 #include "misc/valueobject.h"
20 
21 SWIFT_DECLARE_VALUEOBJECT_MIXINS(swift::misc::network, CClient)
22 
23 namespace swift::misc::network
24 {
26  class SWIFT_MISC_EXPORT CClient : public CValueObject<CClient>
27  {
28  public:
31  {
32  IndexCapabilities = CPropertyIndexRef::GlobalIndexCClient,
33  IndexCapabilitiesString,
34  IndexModelString,
35  IndexServer,
36  IndexUser,
37  IndexCallsign,
38  IndexVoiceCapabilities,
39  IndexVoiceCapabilitiesString,
40  IndexVoiceCapabilitiesPixmap,
41  IndexVoiceCapabilitiesIcon
42  };
43 
46  {
47  None = 0,
48  FsdWithInterimPositions = 1 << 0,
49  FsdWithIcaoCodes = 1 << 1,
50  FsdAtisCanBeReceived = 1 << 2,
51  FsdWithAircraftConfig = 1 << 3,
52  FsdWithGroundFlag = 1 << 4,
53  FsdModelString = 1 << 5,
54  FsdWithVisualPositions = 1 << 6
55  };
56  Q_DECLARE_FLAGS(Capabilities, Capability)
57 
58 
59  CClient() = default;
60 
62  CClient(const aviation::CCallsign &callsign, const QString &modelString = {});
63 
65  CClient(const CUser &user) : m_user(user) {}
66 
68  const aviation::CCallsign &getCallsign() const { return m_user.getCallsign(); }
69 
71  bool isAtc() const { return getCallsign().isAtcAlikeCallsign(); }
72 
74  bool isValid() const;
75 
77  Capabilities getCapabilities() const { return static_cast<Capabilities>(m_capabilities); }
78 
80  void setCapabilities(const Capabilities &capabilities);
81 
83  QString getCapabilitiesAsString() const;
84 
86  bool hasCapability(Capability capability) const;
87 
89  bool hasAircraftPartsCapability() const;
90 
92  bool hasGndFlagCapability() const;
93 
95  void addCapability(Capability capability);
96 
98  void removeCapability(Capability capability);
99 
101  const CVoiceCapabilities &getVoiceCapabilities() const { return m_voiceCapabilities; }
102 
104  bool hasSpecifiedVoiceCapabilities() const { return !m_voiceCapabilities.isUnknown(); }
105 
107  void setVoiceCapabilities(const CVoiceCapabilities &voiceCapabilities)
108  {
109  m_voiceCapabilities = voiceCapabilities;
110  }
111 
113  void setVoiceCapabilities(const QString &flightPlanRemarks)
114  {
115  m_voiceCapabilities = CVoiceCapabilities(flightPlanRemarks);
116  }
117 
119  const CUser &getUser() const { return m_user; }
120 
122  void setUser(const CUser &user) { m_user = user; }
123 
125  bool setUserCallsign(const swift::misc::aviation::CCallsign &callsign);
126 
128  const QString &getServer() const { return m_server; }
129 
131  void setServer(const QString &server) { m_server = server; }
132 
134  bool isSwiftClient() const { return m_swift; }
135 
137  void setSwiftClient(bool isSwift) { m_swift = isSwift; }
138 
140  const QString &getQueriedModelString() const { return m_modelString; }
141 
143  bool hasQueriedModelString() const { return !m_modelString.isEmpty(); }
144 
146  void setQueriedModelString(const QString &modelString);
147 
149  CIcons::IconIndex toIcon() const;
150 
152  QVariant propertyByIndex(swift::misc::CPropertyIndexRef index) const;
153 
155  void setPropertyByIndex(swift::misc::CPropertyIndexRef index, const QVariant &variant);
156 
158  QString convertToQString(bool i18n = false) const;
159 
160  private:
161  CUser m_user;
162  int m_capabilities = static_cast<int>(None);
163  bool m_swift = false; // another swift client
164  QString m_modelString;
165  QString m_server;
166  CVoiceCapabilities m_voiceCapabilities;
167 
169  CClient,
170  SWIFT_METAMEMBER(user),
171  SWIFT_METAMEMBER(swift),
172  SWIFT_METAMEMBER(modelString),
173  SWIFT_METAMEMBER(capabilities),
174  SWIFT_METAMEMBER(server),
175  SWIFT_METAMEMBER(voiceCapabilities));
176  };
177 } // namespace swift::misc::network
178 
179 Q_DECLARE_METATYPE(swift::misc::network::CClient)
181 Q_DECLARE_METATYPE(swift::misc::network::CClient::Capabilities)
182 
183 #endif // SWIFT_MISC_NETWORK_CLIENT_H
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.
Mix of the most commonly used mixin classes.
Definition: valueobject.h:114
Value object encapsulating information of a callsign.
Definition: callsign.h:30
ColumnIndex
Base class enums.
Definition: mixinindex.h:44
Another client software.
Definition: client.h:27
bool isAtc() const
ATC client.
Definition: client.h:71
const QString & getQueriedModelString() const
Model.
Definition: client.h:140
bool hasQueriedModelString() const
Queried model string?
Definition: client.h:143
Capabilities getCapabilities() const
Get capabilities.
Definition: client.h:77
void setServer(const QString &server)
Server.
Definition: client.h:131
bool hasSpecifiedVoiceCapabilities() const
Has known voice capabilities?
Definition: client.h:104
const CUser & getUser() const
User.
Definition: client.h:119
void setVoiceCapabilities(const CVoiceCapabilities &voiceCapabilities)
Set voice capabilities.
Definition: client.h:107
Capability
The Capabilities enum.
Definition: client.h:46
const QString & getServer() const
Server.
Definition: client.h:128
void setVoiceCapabilities(const QString &flightPlanRemarks)
Set voice capabilities.
Definition: client.h:113
const aviation::CCallsign & getCallsign() const
Callsign used with other client.
Definition: client.h:68
bool isSwiftClient() const
Another swift client?
Definition: client.h:134
const CVoiceCapabilities & getVoiceCapabilities() const
Get voice capabilities.
Definition: client.h:101
void setUser(const CUser &user)
User.
Definition: client.h:122
CClient(const CUser &user)
Constructor.
Definition: client.h:65
void setSwiftClient(bool isSwift)
Mark as other swift client.
Definition: client.h:137
Value object encapsulating information of a user.
Definition: user.h:28
Value object encapsulating information for voice capabilities.
#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
#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