6 #include <QRegularExpression>
13 namespace swift::misc::aviation
18 qRegisterMetaType<TransponderMode>();
19 qDBusRegisterMetaType<CTransponder::TransponderMode>();
23 : m_transponderCode(transponderCode), m_transponderMode(transponderMode)
27 : m_transponderCode(transponderCode), m_transponderMode(StateStandby)
33 : m_transponderCode(0), m_transponderMode(transponderMode)
36 m_transponderCode = transponderCode.toInt(&ok);
37 if (!ok) m_transponderCode = -1;
41 : m_transponderCode(0), m_transponderMode(StateStandby)
44 m_transponderCode = transponderCode.toInt(&ok);
45 if (!ok) m_transponderCode = -1;
64 default:
return false;
84 if (modeString.startsWith(
"I", Qt::CaseInsensitive))
return StateIdent;
85 if (modeString.startsWith(
"S", Qt::CaseInsensitive))
return StateStandby;
86 if (modeString.startsWith(
"Mode C", Qt::CaseInsensitive))
return ModeC;
87 if (modeString.startsWith(
"C", Qt::CaseInsensitive))
return ModeC;
88 if (modeString.startsWith(
"Mode S", Qt::CaseInsensitive))
return ModeS;
89 if (modeString.contains(
"1", Qt::CaseInsensitive))
return ModeMil1;
90 if (modeString.contains(
"2", Qt::CaseInsensitive))
return ModeMil2;
91 if (modeString.contains(
"3", Qt::CaseInsensitive))
return ModeMil3;
92 if (modeString.contains(
"4", Qt::CaseInsensitive))
return ModeMil4;
93 if (modeString.contains(
"5", Qt::CaseInsensitive))
return ModeMil5;
99 const int m =
static_cast<int>(mode);
100 if (m == m_transponderMode) {
return false; }
101 m_transponderMode = m;
108 f = f.append(QString::number(m_transponderCode));
126 else { Q_ASSERT_X(
false,
"CTransponder::setTransponderCode",
"illegal transponder value"); }
131 if (transponderCode.isEmpty() || transponderCode.length() > 4)
return false;
133 int tc = transponderCode.toInt(&number);
134 if (!number)
return false;
135 if (tc < 0 || tc > 7777)
return false;
136 thread_local
const QRegularExpression rx(
"^[0-7]{1,4}$");
137 return rx.match(transponderCode).hasMatch();
142 if (transponderCode < 0 || transponderCode > 7777)
return false;
153 static const QString i(
"Ident");
154 static const QString s(
"Standby");
155 static const QString mc(
"Mode C");
156 static const QString ms(
"Mode S");
157 static const QString m1(
"Mil.Mode 1");
158 static const QString m2(
"Mil.Mode 2");
159 static const QString m3(
"Mil.Mode 3");
160 static const QString m4(
"Mil.Mode 4");
161 static const QString m5(
"Mil.Mode 5");
167 case ModeC:
return mc;
168 case ModeS:
return ms;
169 case ModeMil1:
return m1;
170 case ModeMil2:
return m2;
171 case ModeMil3:
return m3;
172 case ModeMil4:
return m4;
174 default: qFatal(
"Illegal Transponder Mode");
181 static const QString i(
"I");
182 static const QString s(
"S");
183 static const QString mc(
"C");
184 static const QString ms(
"S");
185 static const QString m1(
"1");
186 static const QString m2(
"2");
187 static const QString m3(
"3");
188 static const QString m4(
"4");
189 static const QString m5(
"5");
195 case ModeC:
return mc;
196 case ModeS:
return ms;
197 case ModeMil1:
return m1;
198 case ModeMil2:
return m2;
199 case ModeMil3:
return m3;
200 case ModeMil4:
return m4;
202 default: qFatal(
"Illegal Transponder Mode");
209 if (index.
isMyself()) {
return QVariant::fromValue(*
this); }
214 case IndexModeAsString:
return QVariant::fromValue(this->
getModeAsString());
217 case IndexTransponderCodeAndModeFormatted:
222 Q_ASSERT_X(
false,
"CTransponder",
"index unknown");
223 const QString m = QString(
"no property, index ").append(index.
toQString());
224 return QVariant::fromValue(m);
237 case IndexMode: m_transponderMode = variant.toInt();
break;
239 case IndexTransponderCode:
240 case IndexTransponderCodeFormatted:
244 case IndexTransponderCodeAndModeFormatted:
245 default: Q_ASSERT_X(
false,
"CTransponder",
"index unknown");
break;
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.
QString getTransponderCodeAndModeFormatted() const
Formatted with code / mode.
static bool isValidTransponderCode(const QString &transponderCode)
Is valid transponder code?
static CTransponder getStandardTransponder(qint32 transponderCode, TransponderMode mode)
Transponder unit.
static void registerMetadata()
Register metadata.
void setModeAsString(const QString &mode)
Transponder mode as string.
void setTransponderCode(int transponderCode)
Set transponder code.
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
static const QString & modeAsShortString(CTransponder::TransponderMode mode)
Transponder mode as short string.
static TransponderMode modeFromString(const QString &modeString)
Mode from string.
int getTransponderCode() const
Transponder code.
bool setTransponderMode(TransponderMode mode)
Set transponder mode.
void toggleTransponderMode()
Transponder mode toggled.
QString convertToQString(bool i18n=false) const
Cast as QString.
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
static const QString & modeAsString(TransponderMode mode)
Transponder mode as string.
bool validValues() const
Are set values valid?
bool isInNormalSendingMode() const
In any sending mode such as MIL1 oder ModeS.
QString getModeAsString() const
Transponder mode as string.
CTransponder()
Default constructor.
TransponderMode
Transponder codes.
@ StateStandby
not a real mode, more a state
@ StateIdent
not a real mode, more a state
TransponderMode getTransponderMode() const
Transponder mode.
QString getTransponderCodeFormatted() const
Transponder code.
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.