swift
fsdsetup.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2016 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QtGlobal>
7 
9 #include "misc/logcategorylist.h"
10 #include "misc/propertyindexref.h"
11 #include "misc/statusmessage.h"
12 #include "misc/stringutils.h"
13 #include "misc/verify.h"
14 
15 using namespace swift::misc;
16 
17 SWIFT_DEFINE_VALUEOBJECT_MIXINS(swift::misc::network, CFsdSetup)
18 
19 namespace swift::misc::network
20 {
21  CFsdSetup::CFsdSetup(SendReceiveDetails sendReceive) : m_sendReceive(sendReceive) {}
22 
23  CFsdSetup::CFsdSetup(const QString &codec, SendReceiveDetails sendReceive)
24  : m_textCodec(codec), m_sendReceive(sendReceive)
25  {}
26 
27  CFsdSetup::SendReceiveDetails CFsdSetup::getSendReceiveDetails() const
28  {
29  return static_cast<SendReceiveDetails>(m_sendReceive);
30  }
31 
32  QString CFsdSetup::convertToQString(bool i18n) const
33  {
34  Q_UNUSED(i18n);
35  static const QString s("Codec: '%1' details: '%2'");
37  }
38 
39  QString CFsdSetup::sendReceiveDetailsToString(SendReceiveDetails details)
40  {
41  static const QString ds(
42  "Send parts; %1 gnd: %2 interim: %3 Receive parts: %4 gnd: %5 interim: %6 3letter: %7 ICAO equipment %8");
43  return ds.arg(
44  boolToYesNo(details.testFlag(SendAircraftParts)), boolToYesNo(details.testFlag(SendGndFlag)),
45  boolToYesNo(details.testFlag(SendInterimPositions)), boolToYesNo(details.testFlag(SendVisualPositions)),
46  boolToYesNo(details.testFlag(ReceiveAircraftParts)), boolToYesNo(details.testFlag(ReceiveGndFlag)),
47  boolToYesNo(details.testFlag(ReceiveInterimPositions)),
48  boolToYesNo(details.testFlag(Force3LetterAirlineICAO)),
49  boolToYesNo(details.testFlag(SendFplWithIcaoEquipment)));
50  }
51 
52  void CFsdSetup::setSendReceiveDetails(bool partsSend, bool partsReceive, bool gndSend, bool gndReceive,
53  bool interimSend, bool interimReceive, bool visualSend,
54  bool euroscopeSimDataReceive, bool icaoEquipment)
55  {
56  SendReceiveDetails s = Nothing;
57  if (partsSend) { s |= SendAircraftParts; }
58  if (partsReceive) { s |= ReceiveAircraftParts; }
59  if (gndSend) { s |= SendGndFlag; }
60  if (gndReceive) { s |= ReceiveGndFlag; }
61  if (interimSend) { s |= SendInterimPositions; }
62  if (interimReceive) { s |= ReceiveInterimPositions; }
63  if (visualSend) { s |= SendVisualPositions; }
64  if (euroscopeSimDataReceive) { s |= ReceiveEuroscopeSimData; }
65  if (icaoEquipment) { s |= SendFplWithIcaoEquipment; }
66  this->setSendReceiveDetails(s);
67  }
68 
70  {
71  SendReceiveDetails d = this->getSendReceiveDetails();
72  d.setFlag(Force3LetterAirlineICAO, force);
73  this->setSendReceiveDetails(d);
74  }
75 
77  {
78  static const CFsdSetup s(VATSIMDefault);
79  return s;
80  }
81 
83  {
84  static const CLogCategoryList cats(CLogCategoryList(this).withValidation());
85  CStatusMessageList msgs;
86  if (this->getTextCodec().isEmpty())
87  {
89  }
90  if (!textCodecNames(true, true).contains(this->getTextCodec()))
91  {
92  msgs.push_back(CStatusMessage(CStatusMessage::SeverityError, u"Unrecognized codec name"));
93  }
94  msgs.addCategories(cats);
95  return msgs;
96  }
97 
99  {
100  if (index.isMyself()) { return QVariant::fromValue(*this); }
101  const ColumnIndex i = index.frontCasted<ColumnIndex>();
102  switch (i)
103  {
104  case IndexTextCodec: return QVariant::fromValue(m_textCodec);
105  case IndexSendReceiveDetails: return QVariant::fromValue(m_sendReceive);
106  default: return CValueObject::propertyByIndex(index);
107  }
108  }
109 
110  void CFsdSetup::setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
111  {
112  if (index.isMyself())
113  {
114  (*this) = variant.value<CFsdSetup>();
115  return;
116  }
117  const ColumnIndex i = index.frontCasted<ColumnIndex>();
118  switch (i)
119  {
120  case IndexTextCodec: this->setTextCodec(variant.value<QString>()); break;
121  case IndexSendReceiveDetails: this->setSendReceiveDetails(variant.value<SendReceiveDetails>()); break;
122  default: CValueObject::setPropertyByIndex(index, variant); break;
123  }
124  }
125 
126  int CFsdSetup::comparePropertyByIndex(CPropertyIndexRef index, const CFsdSetup &compareValue) const
127  {
128  if (index.isMyself()) { return this->convertToQString(true).compare(compareValue.convertToQString()); }
129  const ColumnIndex i = index.frontCasted<ColumnIndex>();
130  switch (i)
131  {
132  case IndexTextCodec: return this->getTextCodec().compare(compareValue.getTextCodec());
133  case IndexSendReceiveDetails: return Compare::compare(m_sendReceive, compareValue.m_sendReceive);
134  default: break;
135  }
136  SWIFT_VERIFY_X(false, Q_FUNC_INFO, qUtf8Printable("No comparison for index " + index.toQString()));
137  return 0;
138  }
139 } // namespace swift::misc::network
A sequence of log categories.
Non-owning reference to a CPropertyIndex with a subset of its features.
QString toQString(bool i18n=false) const
Cast as QString.
CastType frontCasted() const
First element casted to given type, usually the PropertIndex enum.
bool isMyself() const
Myself index, used with nesting.
void push_back(const T &value)
Appends an element at the end of the sequence.
Definition: sequence.h:305
Streamable status message, e.g.
constexpr static auto SeverityError
Status severities.
Status messages, e.g. from Core -> GUI.
void addCategories(const CLogCategoryList &categories)
Add some categories to all messages in the list.
ColumnIndex
Base class enums.
Definition: mixinindex.h:44
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
Definition: mixinindex.h:160
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
Definition: mixinindex.h:167
Value object for a FSD setup.
Definition: fsdsetup.h:24
static const CFsdSetup & vatsimStandard()
Standard FSD setup for official VATSIM servers.
Definition: fsdsetup.cpp:76
static QString sendReceiveDetailsToString(SendReceiveDetails details)
Details as string.
Definition: fsdsetup.cpp:39
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
Definition: fsdsetup.cpp:110
CFsdSetup()
Default constructor.
Definition: fsdsetup.h:68
void setSendReceiveDetails(SendReceiveDetails sendReceive)
Set send / receive details.
Definition: fsdsetup.h:86
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
Definition: fsdsetup.cpp:98
const QString & getTextCodec() const
Get codec.
Definition: fsdsetup.h:77
int comparePropertyByIndex(CPropertyIndexRef index, const CFsdSetup &compareValue) const
Compare for index.
Definition: fsdsetup.cpp:126
SendReceiveDetails getSendReceiveDetails() const
Get send / receive details.
Definition: fsdsetup.cpp:27
void setForce3LetterAirlineCodes(bool force)
Airline codes.
Definition: fsdsetup.cpp:69
QString convertToQString(bool i18n=false) const
Cast as QString.
Definition: fsdsetup.cpp:32
CStatusMessageList validate() const
Validate, provide details about issues.
Definition: fsdsetup.cpp:82
void setTextCodec(const QString &codec)
Set codec.
Definition: fsdsetup.h:80
@ ReceiveAircraftParts
aircraft parts in
Definition: fsdsetup.h:40
@ SendFplWithIcaoEquipment
send flightplan with ICAO equipment code instead of FAA code
Definition: fsdsetup.h:46
@ SendVisualPositions
visual positions out
Definition: fsdsetup.h:44
@ SendInterimPositions
interim positions out
Definition: fsdsetup.h:38
@ ReceiveInterimPositions
fast position updates in
Definition: fsdsetup.h:41
@ SendGndFlag
gnd.flag out (position)
Definition: fsdsetup.h:39
@ SendAircraftParts
aircraft parts out
Definition: fsdsetup.h:37
@ ReceiveGndFlag
gnd.flag in (position)
Definition: fsdsetup.h:42
@ Force3LetterAirlineICAO
force 3 letter airline ICAO code
Definition: fsdsetup.h:43
@ ReceiveEuroscopeSimData
euroscope SIMDATA in
Definition: fsdsetup.h:45
Free functions in swift::misc.
SWIFT_MISC_EXPORT QStringList textCodecNames(bool simpleNames, bool mibNames)
Strip a designator from a combined string.
SWIFT_MISC_EXPORT const QString & boolToYesNo(bool v)
Bool to yes/no.
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
Definition: valueobject.h:67
#define SWIFT_VERIFY_X(COND, WHERE, WHAT)
A weaker kind of assert.
Definition: verify.h:26