swift
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 
12 #include "misc/aviation/livery.h"
14 
15 using namespace swift::misc;
16 using namespace swift::misc::aviation;
17 using namespace swift::misc::simulation;
18 
19 SWIFT_DEFINE_VALUEOBJECT_MIXINS(swift::misc::simulation::fscommon, CAircraftCfgEntries)
20 
21 namespace 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()) { return {}; }
47  const QFileInfo fileInfo(m_fileName);
48  return fileInfo.absolutePath();
49  }
50 
52  {
53  QString d(m_uiManufacturer);
54  if (!this->getUiType().isEmpty())
55  {
56  d += " ";
57  d += this->getUiType();
58  }
59  if (!this->getUiVariation().isEmpty())
60  {
61  d += " ";
62  d += this->getUiVariation();
63  }
64  return d;
65  }
66 
67  void CAircraftCfgEntries::setFileName(const QString &filePath) { m_fileName = filePath.trimmed(); }
68 
69  void CAircraftCfgEntries::setTitle(const QString &title) { m_title = title.trimmed(); }
70 
71  void CAircraftCfgEntries::setAtcModel(const QString &atcModel) { m_atcModel = atcModel.trimmed(); }
72 
73  void CAircraftCfgEntries::setAtcType(const QString &atcType) { m_atcType = atcType.trimmed(); }
74 
75  void CAircraftCfgEntries::setAtcParkingCode(const QString &parkingCode)
76  {
77  m_atcParkingCode = parkingCode.trimmed();
78  }
79 
80  void CAircraftCfgEntries::setAtcAirline(const QString &airline) { m_atcAirline = airline.trimmed(); }
81 
82  void CAircraftCfgEntries::setSimName(const QString &simName) { m_simName = simName.trimmed(); }
83 
84  void CAircraftCfgEntries::setDescription(const QString &description) { m_description = description.trimmed(); }
85 
86  void CAircraftCfgEntries::setCreatedBy(const QString &createdBy) { m_createdBy = createdBy.trimmed(); }
87 
88  void CAircraftCfgEntries::setTexture(const QString &texture) { m_texture = texture.trimmed(); }
89 
90  void CAircraftCfgEntries::setUiType(const QString &type) { m_uiType = type.trimmed(); }
91 
93  {
94  // creates raw, unconsolidated data
95  Q_ASSERT_X(m_timestampMSecsSinceEpoch >= 0, Q_FUNC_INFO, "Missing file timestamp");
97  model.setDescription(this->getUiCombinedDescription()); // Manufacturer, variation, type
98  model.setFileName(this->getFileName());
99  model.setName(this->getSimName());
100  model.setMSecsSinceEpoch(m_timestampMSecsSinceEpoch); // aircraft.cfg file timestamp
102 
103  const QString designator(CAircraftIcaoCode::normalizeDesignator(this->getAtcModel()));
104  CAircraftIcaoCode aircraft(CAircraftIcaoCode::isValidDesignator(designator) ?
105  designator :
106  CAircraftIcaoCode::getUnassignedDesignator());
107  aircraft.setManufacturer(this->getUiManufacturer());
108  model.setAircraftIcaoCode(aircraft);
109 
110  // livery
111  CLivery livery;
112  livery.setCombinedCode(this->getTexture());
113 
114  CAirlineIcaoCode airline;
115  airline.setName(this->getAtcAirline()); // descriptive name like "BATAVIA"
116  const QString airlineDesignator(this->getAtcParkingCode());
117  if (CAirlineIcaoCode::isValidAirlineDesignator(airlineDesignator)) { airline.setDesignator(airlineDesignator); }
118  livery.setAirlineIcaoCode(airline);
119  model.setLivery(livery);
120 
121  // distributor
122  const CDistributor distributor(this->getCreatedBy());
123  model.setDistributor(distributor);
124  return model;
125  }
126 
128  {
129  if (index.isMyself()) { return QVariant::fromValue(*this); }
131  ColumnIndex i = index.frontCasted<ColumnIndex>();
132  switch (i)
133  {
134  case IndexEntryIndex: return QVariant::fromValue(m_index);
135  case IndexFileName: return QVariant::fromValue(m_fileName);
136  case IndexTitle: return QVariant::fromValue(m_title);
137  case IndexAirline: return QVariant::fromValue(m_atcAirline);
138  case IndexAtcType: return QVariant::fromValue(m_atcType);
139  case IndexAtcModel: return QVariant::fromValue(m_atcModel);
140  case IndexAtcIdColor: return QVariant::fromValue(m_atcIdColor);
141  case IndexParkingCode: return QVariant::fromValue(m_atcParkingCode);
142  case IndexDescription: return QVariant::fromValue(m_description);
143  case IndexUiType: return QVariant::fromValue(m_uiType);
144  case IndexUiManufacturer: return QVariant::fromValue(m_uiManufacturer);
145  case IndexUiVariation: return QVariant::fromValue(m_uiVariation);
146  case IndexTexture: return QVariant::fromValue(m_texture);
147  case IndexSimulatorName: return QVariant::fromValue(m_simName);
148  case IndexCreatedBy: return QVariant::fromValue(m_createdBy);
149  case IndexRotorcraft: return QVariant::fromValue(m_rotorcraft);
150  default: return CValueObject::propertyByIndex(index);
151  }
152  }
153 
154  void CAircraftCfgEntries::setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
155  {
156  if (index.isMyself())
157  {
158  (*this) = variant.value<CAircraftCfgEntries>();
159  return;
160  }
162  {
163  ITimestampBased::setPropertyByIndex(index, variant);
164  return;
165  }
166  ColumnIndex i = index.frontCasted<ColumnIndex>();
167  switch (i)
168  {
169  case IndexEntryIndex: this->setIndex(variant.toInt()); break;
170  case IndexFileName: this->setFileName(variant.toString()); break;
171  case IndexTitle: this->setTitle(variant.toString()); break;
172  case IndexAirline: this->setTitle(m_atcAirline); break;
173  case IndexAtcType: this->setAtcType(variant.toString()); break;
174  case IndexAtcModel: this->setAtcModel(variant.toString()); break;
175  case IndexAtcIdColor: this->setAtcIdColor(variant.toString()); break;
176  case IndexParkingCode: this->setAtcParkingCode(variant.toString()); break;
177  case IndexDescription: this->setDescription(variant.toString()); break;
178  case IndexUiType: this->setUiType(variant.toString()); break;
179  case IndexUiVariation: this->setUiVariation(variant.toString()); break;
180  case IndexUiManufacturer: this->setUiManufacturer(variant.toString()); break;
181  case IndexTexture: this->setTexture(variant.toString()); break;
182  case IndexSimulatorName: this->setSimName(variant.toString()); break;
183  case IndexCreatedBy: this->setCreatedBy(variant.toString()); break;
184  case IndexRotorcraft: this->setRotorcraft(variant.toBool()); break;
185  default: CValueObject::setPropertyByIndex(index, variant); break;
186  }
187  }
188 } // 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.
void setManufacturer(const QString &manufacturer)
Set the manufacturer.
Value object for ICAO classification.
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:81
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
Aircraft model (used by another pilot, my models on disk)
Definition: aircraftmodel.h:71
void setFileTimestamp(const QDateTime &timestampUtc)
Set file timestamp.
void setName(const QString &name)
Name.
@ TypeOwnSimulatorModel
represents own simulator model (AI model, model on disk)
Definition: aircraftmodel.h:84
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
Set of aircraft.cfg entries representing an aircraft (FSX)
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 & 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.
const QString & getAtcParkingCode() const
ATC parking code.
void setAtcModel(const QString &atcModel)
ATC model.
const QString & getUiManufacturer() const
UI manufacturer (e.g. Airbus)
void setFileName(const QString &filePath)
Filepath.
void setUiType(const QString &type)
UI type (e.g. A321-231 IAE)
const QString & getUiType() const
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)
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.
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
Definition: valueobject.h:67