swift
Loading...
Searching...
No Matches
aircraftcfgentries.cpp
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#include <QDir>
7#include <QFile>
8#include <QFileInfo>
9
14
15using namespace swift::misc;
16using namespace swift::misc::aviation;
17using namespace swift::misc::simulation;
18
19SWIFT_DEFINE_VALUEOBJECT_MIXINS(swift::misc::simulation::fscommon, CAircraftCfgEntries)
20
21namespace swift::misc::simulation::fscommon
22{
23 CAircraftCfgEntries::CAircraftCfgEntries(const QString &fileName, int index, const QString &title,
24 const QString &atcType, const QString &atcModel,
25 const QString &atcParkingCode, const QString &description)
26 : m_index(index), m_fileName(fileName), m_title(title.trimmed()), m_atcType(atcType.trimmed()),
27 m_atcModel(atcModel.trimmed()), m_atcParkingCode(atcParkingCode.trimmed()),
28 m_description(description.trimmed())
29 {
30 // void
31 }
32
34 {
35 return QStringLiteral("{%1, %2, %3, %4, %5, %6}")
36 .arg(m_fileName)
37 .arg(m_index)
38 .arg(m_title, m_atcModel, m_atcType, m_atcParkingCode);
39 }
40
41 CAircraftCfgEntries::CAircraftCfgEntries(const QString &fileName, int index) : m_index(index), m_fileName(fileName)
42 {}
43
45 {
46 if (m_fileName.isEmpty())
47 {
48 return {};
49 }
50 const QFileInfo fileInfo(m_fileName);
51 return fileInfo.absolutePath();
52 }
53
55 {
56 QString d(m_uiManufacturer);
57 if (!this->getUiType().isEmpty())
58 {
59 d += " ";
60 d += this->getUiType();
61 }
62 if (!this->getUiVariation().isEmpty())
63 {
64 d += " ";
65 d += this->getUiVariation();
66 }
67 return d;
68 }
69
70 void CAircraftCfgEntries::setFileName(const QString &filePath) { m_fileName = filePath.trimmed(); }
71
72 void CAircraftCfgEntries::setTitle(const QString &title) { m_title = title.trimmed(); }
73
74 void CAircraftCfgEntries::setAtcModel(const QString &atcModel) { m_atcModel = atcModel.trimmed(); }
75
76 void CAircraftCfgEntries::setAtcType(const QString &atcType) { m_atcType = atcType.trimmed(); }
77
79 {
80 m_atcParkingCode = parkingCode.trimmed();
81 }
82
83 void CAircraftCfgEntries::setAtcAirline(const QString &airline) { m_atcAirline = airline.trimmed(); }
84
85 void CAircraftCfgEntries::setSimName(const QString &simName) { m_simName = simName.trimmed(); }
86
87 void CAircraftCfgEntries::setDescription(const QString &description) { m_description = description.trimmed(); }
88
89 void CAircraftCfgEntries::setCreatedBy(const QString &createdBy) { m_createdBy = createdBy.trimmed(); }
90
91 void CAircraftCfgEntries::setTexture(const QString &texture) { m_texture = texture.trimmed(); }
92
93 void CAircraftCfgEntries::setUiType(const QString &type) { m_uiType = type.trimmed(); }
94
96 {
97 // creates raw, unconsolidated data
98 Q_ASSERT_X(m_timestampMSecsSinceEpoch >= 0, Q_FUNC_INFO, "Missing file timestamp");
100 model.setDescription(this->getUiCombinedDescription()); // Manufacturer, variation, type
101 model.setFileName(this->getFileName());
102 model.setName(this->getSimName());
103 model.setMSecsSinceEpoch(m_timestampMSecsSinceEpoch); // aircraft.cfg file timestamp
105
108 designator :
110 aircraft.setManufacturer(this->getUiManufacturer());
111 model.setAircraftIcaoCode(aircraft);
112
113 // livery
114 CLivery livery;
115 livery.setCombinedCode(this->getTexture());
116
117 CAirlineIcaoCode airline;
118 airline.setName(this->getAtcAirline()); // descriptive name like "BATAVIA"
119 const QString airlineDesignator(this->getAtcParkingCode());
120 if (CAirlineIcaoCode::isValidAirlineDesignator(airlineDesignator))
121 {
122 airline.setDesignator(airlineDesignator);
123 }
124 livery.setAirlineIcaoCode(airline);
125 model.setLivery(livery);
126
127 // distributor
128 const CDistributor distributor(this->getCreatedBy());
129 model.setDistributor(distributor);
130 return model;
131 }
132
134 {
135 if (index.isMyself())
136 {
137 return QVariant::fromValue(*this);
138 }
140 {
142 }
143 const auto i = index.frontCasted<ColumnIndex>();
144 switch (i)
145 {
146 case IndexEntryIndex: return QVariant::fromValue(m_index);
147 case IndexFileName: return QVariant::fromValue(m_fileName);
148 case IndexTitle: return QVariant::fromValue(m_title);
149 case IndexAirline: return QVariant::fromValue(m_atcAirline);
150 case IndexAtcType: return QVariant::fromValue(m_atcType);
151 case IndexAtcModel: return QVariant::fromValue(m_atcModel);
152 case IndexAtcIdColor: return QVariant::fromValue(m_atcIdColor);
153 case IndexParkingCode: return QVariant::fromValue(m_atcParkingCode);
154 case IndexDescription: return QVariant::fromValue(m_description);
155 case IndexUiType: return QVariant::fromValue(m_uiType);
156 case IndexUiManufacturer: return QVariant::fromValue(m_uiManufacturer);
157 case IndexUiVariation: return QVariant::fromValue(m_uiVariation);
158 case IndexTexture: return QVariant::fromValue(m_texture);
159 case IndexSimulatorName: return QVariant::fromValue(m_simName);
160 case IndexCreatedBy: return QVariant::fromValue(m_createdBy);
161 case IndexRotorcraft: return QVariant::fromValue(m_rotorcraft);
162 default: return CValueObject::propertyByIndex(index);
163 }
164 }
165
167 {
168 if (index.isMyself())
169 {
170 (*this) = variant.value<CAircraftCfgEntries>();
171 return;
172 }
174 {
176 return;
177 }
178 const auto i = index.frontCasted<ColumnIndex>();
179 switch (i)
180 {
181 case IndexEntryIndex: this->setIndex(variant.toInt()); break;
182 case IndexFileName: this->setFileName(variant.toString()); break;
183 case IndexTitle: this->setTitle(variant.toString()); break;
184 case IndexAirline: this->setTitle(m_atcAirline); break;
185 case IndexAtcType: this->setAtcType(variant.toString()); break;
186 case IndexAtcModel: this->setAtcModel(variant.toString()); break;
187 case IndexAtcIdColor: this->setAtcIdColor(variant.toString()); break;
188 case IndexParkingCode: this->setAtcParkingCode(variant.toString()); break;
189 case IndexDescription: this->setDescription(variant.toString()); break;
190 case IndexUiType: this->setUiType(variant.toString()); break;
191 case IndexUiVariation: this->setUiVariation(variant.toString()); break;
192 case IndexUiManufacturer: this->setUiManufacturer(variant.toString()); break;
193 case IndexTexture: this->setTexture(variant.toString()); break;
194 case IndexSimulatorName: this->setSimName(variant.toString()); break;
195 case IndexCreatedBy: this->setCreatedBy(variant.toString()); break;
196 case IndexRotorcraft: this->setRotorcraft(variant.toBool()); break;
197 default: CValueObject::setPropertyByIndex(index, variant); break;
198 }
199 }
200} // namespace swift::misc::simulation::fscommon
Non-owning reference to a CPropertyIndex with a subset of its features.
CastType frontCasted() const
First element casted to given type, usually the PropertIndex enum.
bool isMyself() const
Myself index, used with nesting.
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
static bool canHandleIndex(CPropertyIndexRef index)
Can given index be handled.
qint64 m_timestampMSecsSinceEpoch
timestamp value
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
void setMSecsSinceEpoch(qint64 mSecsSinceEpoch)
Timestamp as ms value.
Value object for ICAO classification.
static const QString & getUnassignedDesignator()
The unassigned designator ("ZZZZ").
void setManufacturer(const QString &manufacturer)
Set the manufacturer.
static bool isValidDesignator(const QString &designator)
Valid designator?
static QString normalizeDesignator(const QString &candidate)
Normalize designator, remove illegal characters.
Value object for ICAO classification.
static bool isValidAirlineDesignator(const QString &airline)
Valid designator?
void setName(const QString &name)
Set name.
void setDesignator(const QString &icaoDesignator)
Set airline, e.g. "DLH".
Value object encapsulating information about an airpot.
Definition livery.h:29
void setCombinedCode(const QString &code)
Combined code.
Definition livery.h:107
bool setAirlineIcaoCode(const CAirlineIcaoCode &airlineIcao)
Airline ICAO code.
Definition livery.cpp:79
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
Definition mixinindex.h:167
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
Definition mixinindex.h:180
Aircraft model (used by another pilot, my models on disk).
void setFileTimestamp(const QDateTime &timestampUtc)
Set file timestamp.
void setName(const QString &name)
Name.
@ TypeOwnSimulatorModel
represents own simulator model (AI model, model on disk)
void setFileName(const QString &fileName)
File name.
void setDescription(const QString &description)
Descriptive text.
void setLivery(const aviation::CLivery &livery)
Livery.
void setDistributor(const CDistributor &distributor)
Set distributor.
bool setAircraftIcaoCode(const aviation::CAircraftIcaoCode &aircraftIcaoCode)
Set aircraft ICAO code.
Value object encapsulating information of software distributor.
Definition distributor.h:33
const QString & getUiManufacturer() const
UI manufacturer (e.g. Airbus).
QString getUiCombinedDescription() const
Manufacturer + type.
swift::misc::simulation::CAircraftModel toAircraftModel() const
To aircraft model.
void setSimName(const QString &simName)
Simulator name.
void setDescription(const QString &description)
Description.
const QString & getAtcParkingCode() const
ATC parking code.
const QString & getUiVariation() const
UI variation (e.g. White,Green).
void setCreatedBy(const QString &createdBy)
Created by.
QVariant propertyByIndex(swift::misc::CPropertyIndexRef index) const
Property by index.
QString convertToQString(bool i18n=false) const
Cast as QString.
void setAtcModel(const QString &atcModel)
ATC model.
void setUiType(const QString &type)
UI type (e.g. A321-231 IAE).
void setRotorcraft(bool isRotorcraft)
Is Rotorcraft?
void setUiVariation(const QString &variation)
UI variation (e.g. White,Green).
void setAtcIdColor(const QString &color)
ATC color (e.g. 0xffffffff).
const QString & getUiType() const
UI type (e.g. A321-231 IAE).
void setPropertyByIndex(swift::misc::CPropertyIndexRef index, const QVariant &variant)
Set property by index.
void setUiManufacturer(const QString &manufacturer)
UI manufacturer (e.g. Airbus).
void setAtcParkingCode(const QString &parkingCode)
Parking code.
Free functions in swift::misc.
QString absolutePath() const const
QString arg(Args &&... args) const const
QString trimmed() const const
QVariant fromValue(T &&value)
bool toBool() const const
int toInt(bool *ok) const const
QString toString() const const
T value() const &const
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
Definition valueobject.h:67