Aircraft ICAO data should use ICAO code as attribute, this somehow got lost in the merge session, re-applied

This commit is contained in:
Klaus Basan
2015-05-16 18:31:30 +02:00
parent 257430bbbe
commit 104122023c
19 changed files with 170 additions and 212 deletions

View File

@@ -506,7 +506,10 @@ namespace BlackCore
// ICAO response from custom data
if (!aircraftDesignator.isEmpty())
{
CAircraftIcaoData icao(aircraftDesignator, combinedAircraftType, airlineIcao, "", ""); // from custom packet
CAircraftIcaoData icao(
CAircraftIcaoCode(aircraftDesignator, combinedAircraftType),
CAirlineIcaoCode(airlineIcao)
); // from custom packet
if (aircraftContainsCallsign)
{
// we have that aircraft, set straight away
@@ -1074,7 +1077,7 @@ namespace BlackCore
}
// check sort order
Q_ASSERT_X(l.size() < 2 || l[0].getMSecsSinceEpoch() >= l[1].getMSecsSinceEpoch(), "storeAircraftParts", "wrong sort order");
Q_ASSERT_X(l.size() < 2 || l[0].getMSecsSinceEpoch() >= l[1].getMSecsSinceEpoch(), Q_FUNC_INFO, "wrong sort order");
}
} // namespace

View File

@@ -161,7 +161,7 @@ namespace BlackCore
{
return CStatusMessage({ CLogCategory::validation() }, CStatusMessage::SeverityError, "Invalid user credentials");
}
else if (!this->ownAircraft().getIcaoInfo().hasAircraftAndAirlineDesignator())
else if (!this->ownAircraft().getIcaoInfo().hasAircraftDesignator())
{
return CStatusMessage({ CLogCategory::validation() }, CStatusMessage::SeverityError, "Invalid ICAO data for own aircraft");
}

View File

@@ -90,9 +90,13 @@ namespace BlackCore
// from simulator, if available
this->m_ownAircraft.setCallsign(CCallsign("SWIFT")); // would come from settings
// TODO: This would need to come from somewhere (mappings)
// Own callsign, plane ICAO status, model used
this->m_ownAircraft.setIcaoInfo(CAircraftIcaoData("C172", "L1P", "GA", "GA", "0000ff"));
//! \todo Own aircraft ICAO default data, this would need to come from somewhere (mappings) -> Own callsign, plane ICAO status, model used
this->m_ownAircraft.setIcaoInfo(
CAircraftIcaoData(
CAircraftIcaoCode("C172", "L1P"),
CAirlineIcaoCode(),
"0000ff")
);
}
// voice rooms, if network is already available

View File

@@ -260,20 +260,20 @@ namespace BlackCore
situation.setGroundspeed(CSpeed(groundspeed, CSpeedUnit::kts()));
CAircraft currentAircraft(user.getCallsign().getStringAsSet(), user, situation);
QString icaoCode = clientPartsMap["planned_aircraft"];
if (!icaoCode.isEmpty())
QString aircraftIcaoCode = clientPartsMap["planned_aircraft"];
if (!aircraftIcaoCode.isEmpty())
{
// http://uk.flightaware.com/about/faq_aircraft_flight_plan_suffix.rvt
// we expect something like H/B772/F B773 B773/F
static const QRegularExpression reg("/.");
icaoCode = icaoCode.replace(reg, "").trimmed().toUpper();
if (CAircraftIcaoData::isValidDesignator(icaoCode))
aircraftIcaoCode = aircraftIcaoCode.replace(reg, "").trimmed().toUpper();
if (CAircraftIcaoCode::isValidDesignator(aircraftIcaoCode))
{
currentAircraft.setIcaoInfo(CAircraftIcaoData(icaoCode));
currentAircraft.setAircraftIcaoDesignator(aircraftIcaoCode);
}
else
{
illegalIcaoCodes.append(icaoCode);
illegalIcaoCodes.append(aircraftIcaoCode);
}
}

View File

@@ -76,7 +76,7 @@ namespace BlackGui
{
this->ui->le_Callsign->setText(ownAircraft.getCallsign().asString());
}
if (CAircraftIcaoData::isValidDesignator(ownAircraft.getIcaoInfo().getAircraftDesignator()))
if (CAircraftIcaoCode::isValidDesignator(ownAircraft.getIcaoInfo().getAircraftDesignator()))
{
this->ui->le_AircraftType->setText(ownAircraft.getIcaoInfo().getAircraftDesignator());
}

View File

@@ -283,7 +283,9 @@ namespace BlackGui
void CLoginComponent::mergeGuiIcaoValues(CAircraftIcaoData &icao) const
{
CGuiAircraftValues values = getAircraftValuesFromGui();
CAircraftIcaoData guiIcao(values.ownAircraftIcaoTypeDesignator, values.ownAircraftCombinedType, values.ownAircraftIcaoAirline, "", "");
CAircraftIcaoData guiIcao(
CAircraftIcaoCode(values.ownAircraftIcaoTypeDesignator, values.ownAircraftCombinedType),
CAirlineIcaoCode(values.ownAircraftIcaoAirline));
icao.updateMissingParts(guiIcao);
}
@@ -346,7 +348,11 @@ namespace BlackGui
Q_ASSERT(this->getIContextOwnAircraft());
Q_ASSERT(this->getIContextSimulator());
static const CAircraftIcaoData defaultIcao("C172", "L1P", "", "", ""); // default values
static const CAircraftIcaoData defaultIcao(
CAircraftIcaoCode("C172", "L1P"),
CAirlineIcaoCode()
); // default values
CAircraftIcaoData icao;
bool simConnected = this->getIContextSimulator() && this->getIContextSimulator()->isSimulating();
@@ -399,13 +405,13 @@ namespace BlackGui
{
CGuiAircraftValues values = getAircraftValuesFromGui();
bool validCombinedType = CAircraftIcaoData::isValidCombinedType(values.ownAircraftCombinedType);
bool validCombinedType = CAircraftIcaoCode::isValidCombinedType(values.ownAircraftCombinedType);
this->ui->lblp_AircraftCombinedType->setTicked(validCombinedType);
bool validAirlineDesignator = values.ownAircraftIcaoAirline.isEmpty() || CAircraftIcaoData::isValidAirlineDesignator(values.ownAircraftIcaoAirline);
bool validAirlineDesignator = values.ownAircraftIcaoAirline.isEmpty() || CAircraftIcaoCode::isValidDesignator(values.ownAircraftIcaoAirline);
this->ui->lblp_AircraftIcaoAirline->setTicked(validAirlineDesignator);
bool validIcaoDesignator = CAircraftIcaoData::isValidDesignator(values.ownAircraftIcaoTypeDesignator);
bool validIcaoDesignator = CAircraftIcaoCode::isValidDesignator(values.ownAircraftIcaoTypeDesignator);
this->ui->lblp_AircraftIcaoDesignator->setTicked(validIcaoDesignator);
bool validCallsign = CCallsign::isValidCallsign(values.ownCallsign);

View File

@@ -55,8 +55,8 @@ namespace BlackGui
case MappedModel:
this->m_columns.addColumn(CColumn::standardValueObject("call", "callsign", CAircraftModel::IndexCallsign));
this->m_columns.addColumn(CColumn::standardString("model", CAircraftModel::IndexModelString));
this->m_columns.addColumn(CColumn::standardString("ac", "aircraft ICAO", { CAircraftModel::IndexIcao, CAircraftIcaoData::IndexAircraftDesignator}));
this->m_columns.addColumn(CColumn::standardString("al", "airline ICAO", { CAircraftModel::IndexIcao, CAircraftIcaoData::IndexAirlineDesignator}));
this->m_columns.addColumn(CColumn::standardString("ac", "aircraft ICAO", { CAircraftModel::IndexIcao, CAircraftIcaoData::IndexAircraftIcao, CAircraftIcaoCode::IndexAircraftDesignator}));
this->m_columns.addColumn(CColumn::standardString("al", "airline ICAO", { CAircraftModel::IndexIcao, CAircraftIcaoData::IndexAirlineIcao, CAirlineIcaoCode::IndexAirlineDesignator}));
// this->m_columns.addColumn(CColumn::standardString("ct", "combined type", { CAircraftModel::IndexIcao, CAircraftIcaoData::IndexCombinedAircraftType}));
this->m_columns.addColumn(CColumn("q.?", "queried", CAircraftModel::IndexHasQueriedModelString,
new CBoolIconFormatter(CIcons::StandardIconTick16, CIcons::StandardIconCross16, "queried", "not queried")));

View File

@@ -93,6 +93,9 @@ namespace BlackMisc
//! Set ICAO info
virtual void setIcaoInfo(const CAircraftIcaoData &icao) { m_icao = icao; }
//! Set aircraft ICAO designator
virtual void setAircraftIcaoDesignator(const QString &designator) { m_icao.setAircraftDesignator(designator); }
//! Has valid realname?
bool hasValidRealName() const { return this->m_pilot.hasValidRealName(); }

View File

@@ -19,55 +19,59 @@ namespace BlackMisc
{
namespace Aviation
{
CAircraftIcaoCode::CAircraftIcaoCode(const QString &designator, const QString &combinedType) :
m_designator(designator), m_combinedType(combinedType)
{}
CAircraftIcaoCode::CAircraftIcaoCode(const QString &icao, const QString &combinedType, const QString &manufacturer, const QString &model, const QString &wtc, bool military, bool realworld, bool legacy)
: m_aircraftDesignator(icao.trimmed().toUpper()), m_aircraftCombinedType(combinedType.trimmed().toUpper()), m_manufacturer(manufacturer.trimmed()),
: m_designator(icao.trimmed().toUpper()), m_combinedType(combinedType.trimmed().toUpper()), m_manufacturer(manufacturer.trimmed()),
m_modelDescription(model.trimmed()), m_wtc(wtc.trimmed().toUpper()), m_military(military), m_realworld(realworld), m_legacy(legacy)
{}
QString CAircraftIcaoCode::convertToQString(bool i18n) const
{
Q_UNUSED(i18n);
QString s(this->m_aircraftDesignator);
if (this->hasAircraftCombinedType()) s.append(" ").append(this->m_aircraftCombinedType);
if (this->hasValidWtc()) s.append(" ").append(this->m_wtc);
QString s(this->m_designator);
if (this->hasCombinedType()) { s.append(" ").append(this->m_combinedType); }
if (this->hasValidWtc()) { s.append(" ").append(this->m_wtc); }
return s;
}
bool CAircraftIcaoCode::hasAircraftDesignator() const
bool CAircraftIcaoCode::hasDesignator() const
{
return !this->m_aircraftDesignator.isEmpty();
return !this->m_designator.isEmpty();
}
bool CAircraftIcaoCode::hasKnownAircraftDesignator() const
bool CAircraftIcaoCode::hasKnownDesignator() const
{
return (this->hasAircraftDesignator() && this->getAircraftDesignator() != "ZZZZ");
return (this->hasDesignator() && this->getDesignator() != "ZZZZ");
}
QString CAircraftIcaoCode::getEngineType() const
{
if (this->m_aircraftCombinedType.length() != 3) return "";
return this->m_aircraftCombinedType.right(1);
if (this->m_combinedType.length() != 3) return "";
return this->m_combinedType.right(1);
}
bool CAircraftIcaoCode::isVtol() const
{
// special designators
if (this->m_aircraftDesignator.length() == 4)
if (this->m_designator.length() == 4)
{
if (
this->m_aircraftDesignator == "BALL" ||
this->m_aircraftDesignator == "SHIP" ||
this->m_aircraftDesignator == "GYRO" ||
this->m_aircraftDesignator == "UHEL"
this->m_designator == "BALL" ||
this->m_designator == "SHIP" ||
this->m_designator == "GYRO" ||
this->m_designator == "UHEL"
) { return true; }
}
if (!m_aircraftCombinedType.isEmpty())
if (!m_combinedType.isEmpty())
{
if (
this->m_aircraftCombinedType.startsWith('G') || // gyrocopter
this->m_aircraftCombinedType.startsWith('H') || // helicopter
this->m_aircraftCombinedType.startsWith('T') // tilt wing
this->m_combinedType.startsWith('G') || // gyrocopter
this->m_combinedType.startsWith('H') || // helicopter
this->m_combinedType.startsWith('T') // tilt wing
) { return true; }
}
return false;
@@ -80,9 +84,9 @@ namespace BlackMisc
switch (i)
{
case IndexAircraftDesignator:
return CVariant::fromValue(this->m_aircraftDesignator);
return CVariant::fromValue(this->m_designator);
case IndexCombinedAircraftType:
return CVariant::fromValue(this->m_aircraftCombinedType);
return CVariant::fromValue(this->m_combinedType);
case IndexModelDescription:
return CVariant::fromValue(this->m_modelDescription);
case IndexManufacturer:
@@ -114,10 +118,10 @@ namespace BlackMisc
switch (i)
{
case IndexAircraftDesignator:
this->setAircraftDesignator(variant.value<QString>());
this->setDesignator(variant.value<QString>());
break;
case IndexCombinedAircraftType:
this->setAircraftCombinedType(variant.value<QString>());
this->setCombinedType(variant.value<QString>());
break;
case IndexModelDescription:
this->setModelDescription(variant.value<QString>());

View File

@@ -42,33 +42,36 @@ namespace BlackMisc
//! Default constructor.
CAircraftIcaoCode() = default;
//! Constructor.
CAircraftIcaoCode(const QString &designator, const QString &combinedType = "");
//! Constructor
CAircraftIcaoCode(const QString &icao, const QString &combinedType, const QString &manufacturer,
const QString &model, const QString &wtc, bool military, bool realworld, bool legacy);
//! Get ICAO designator, e.g. "B737"
const QString &getAircraftDesignator() const { return m_aircraftDesignator; }
const QString &getDesignator() const { return m_designator; }
//! Set ICAO designator, e.g. "B737"
void setAircraftDesignator(const QString &icaoDesignator) { this->m_aircraftDesignator = icaoDesignator.trimmed().toUpper(); }
void setDesignator(const QString &icaoDesignator) { this->m_designator = icaoDesignator.trimmed().toUpper(); }
//! Aircraft designator?
bool hasAircraftDesignator() const;
bool hasDesignator() const;
//! Has designator and designator is not "ZZZZ"
bool hasKnownAircraftDesignator() const;
bool hasKnownDesignator() const;
//! Get type, e.g. "L2J"
const QString &getAircraftCombinedType() const { return this->m_aircraftCombinedType; }
const QString &getCombinedType() const { return this->m_combinedType; }
//! Combined type available?
bool hasAircraftCombinedType() const { return this->getAircraftCombinedType().length() == 3; }
bool hasCombinedType() const { return this->getCombinedType().length() == 3; }
//! Get engine type, e.g. "J"
QString getEngineType() const;
//! Set type
void setAircraftCombinedType(const QString &type) { this->m_aircraftCombinedType = type.trimmed().toUpper(); }
void setCombinedType(const QString &type) { this->m_combinedType = type.trimmed().toUpper(); }
//! Get model description, e.g. "A-330-200"
const QString &getModelDescription() const { return m_modelDescription; }
@@ -114,14 +117,14 @@ namespace BlackMisc
private:
BLACK_ENABLE_TUPLE_CONVERSION(CAircraftIcaoCode)
QString m_aircraftDesignator; //!< "B737"
QString m_aircraftCombinedType; //!< "L2J"
QString m_manufacturer; //!< "Airbus"
QString m_modelDescription; //!< "A-330-200"
QString m_wtc; //!< wake turbulence "M","H" "L/M", "L"
QString m_designator; //!< "B737"
QString m_combinedType; //!< "L2J"
QString m_manufacturer; //!< "Airbus"
QString m_modelDescription; //!< "A-330-200"
QString m_wtc; //!< wake turbulence "M","H" "L/M", "L"
bool m_military = false;
bool m_realworld = true; //!< real world aircraft
bool m_legacy = true; //!< legacy code
bool m_realworld = true; //!< real world aircraft
bool m_legacy = false; //!< legacy code
};
} // namespace
@@ -129,8 +132,8 @@ namespace BlackMisc
Q_DECLARE_METATYPE(BlackMisc::Aviation::CAircraftIcaoCode)
BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::Aviation::CAircraftIcaoCode, (
o.m_aircraftDesignator,
o.m_aircraftCombinedType,
o.m_designator,
o.m_combinedType,
o.m_manufacturer,
o.m_modelDescription,
o.m_wtc,

View File

@@ -21,43 +21,30 @@ namespace BlackMisc
{
CAircraftIcaoData::CAircraftIcaoData(const QString &icao, const QString &airline)
: m_aircraftDesignator(icao.trimmed().toUpper()), m_airlineDesignator(airline.trimmed().toUpper())
: m_aircraftIcao(icao), m_airlineIcao(airline)
{}
CAircraftIcaoData::CAircraftIcaoData(const CAircraftIcaoCode &icaoAircraft, const CAirlineIcaoCode &icaoAirline, const QString &color)
: m_aircraftIcao(icaoAircraft), m_airlineIcao(icaoAirline), m_aircraftColor(color)
{}
QString CAircraftIcaoData::convertToQString(bool i18n) const
{
Q_UNUSED(i18n);
QString s(this->m_aircraftDesignator);
if (this->hasAircraftCombinedType()) s.append(" ").append(this->m_aircraftCombinedType);
if (this->hasAirlineDesignator()) s.append(" ").append(this->m_airlineDesignator);
if (this->hasLivery()) s.append(" ").append(this->m_livery);
if (this->hasAircraftColor()) s.append(" ").append(this->m_aircraftColor);
QString s(this->m_aircraftIcao.toQString(i18n));
s.append(" ").append(this->m_airlineIcao.toQString(i18n));
if (this->hasLivery()) { s.append(" ").append(this->m_livery); }
if (this->hasAircraftColor()) { s.append(" ").append(this->m_aircraftColor); }
return s;
}
bool CAircraftIcaoData::hasAircraftDesignator() const
{
return !this->m_aircraftDesignator.isEmpty();
}
bool CAircraftIcaoData::hasKnownAircraftDesignator() const
{
return (this->hasAircraftDesignator() && this->getAircraftDesignator() != "ZZZZ");
}
QString CAircraftIcaoData::getEngineType() const
{
if (this->m_aircraftCombinedType.length() != 3) return "";
return this->m_aircraftCombinedType.right(1);
}
QString CAircraftIcaoData::asString() const
{
if (this->m_aircraftDesignator.isEmpty()) { return ""; }
QString s(this->m_aircraftDesignator);
if (!this->m_airlineDesignator.isEmpty())
if (!this->hasAircraftDesignator()) { return ""; }
QString s(this->getAircraftDesignator());
if (this->hasAirlineDesignator())
{
s.append(" (").append(this->m_airlineDesignator).append(")");
s.append(" (").append(this->getAirlineDesignator()).append(")");
return s;
}
if (!this->m_aircraftColor.isEmpty())
@@ -70,9 +57,9 @@ namespace BlackMisc
void CAircraftIcaoData::updateMissingParts(const CAircraftIcaoData &icao)
{
if (this->m_aircraftDesignator.isEmpty()) { this->setAircraftDesignator(icao.getAircraftDesignator()); }
if (this->m_airlineDesignator.isEmpty()) { this->setAirlineDesignator(icao.getAirlineDesignator()); }
if (this->m_aircraftCombinedType.isEmpty()) { this->setAircraftCombinedType(icao.getAircraftCombinedType()); }
if (!this->hasAircraftDesignator()) { this->setAircraftDesignator(icao.getAircraftDesignator()); }
if (!this->hasAirlineDesignator()) { this->setAirlineDesignator(icao.getAirlineDesignator()); }
if (!this->hasAircraftCombinedType()) { this->setAircraftCombinedType(icao.getAircraftCombinedType()); }
if (this->m_aircraftColor.isEmpty()) { this->setAircraftColor(icao.getAircraftColor()); }
if (this->m_livery.isEmpty()) { this->setLivery(icao.getLivery()); }
}
@@ -88,45 +75,20 @@ namespace BlackMisc
return true;
}
bool CAircraftIcaoData::isVtol() const
{
// special designators
if (
this->m_aircraftDesignator == "BALL" ||
this->m_aircraftDesignator == "SHIP" ||
this->m_aircraftDesignator == "GYRO" ||
this->m_aircraftDesignator == "UHEL"
) { return true; }
if (!m_aircraftCombinedType.isEmpty())
{
if (
this->m_aircraftCombinedType.startsWith('G') || // gyrocopter
this->m_aircraftCombinedType.startsWith('H') || // helicopter
this->m_aircraftCombinedType.startsWith('T') // tilt wing
) { return true; }
}
return false;
}
CVariant CAircraftIcaoData::propertyByIndex(const BlackMisc::CPropertyIndex &index) const
{
if (index.isMyself()) { return this->toCVariant(); }
ColumnIndex i = index.frontCasted<ColumnIndex>();
switch (i)
{
case IndexAircraftDesignator:
return CVariant::fromValue(this->m_aircraftDesignator);
case IndexAirlineDesignator:
return CVariant::fromValue(this->m_airlineDesignator);
case IndexCombinedAircraftType:
return CVariant::fromValue(this->m_aircraftCombinedType);
case IndexAircraftIcao:
return CVariant::fromValue(this->m_aircraftIcao);
case IndexAirlineIcao:
return CVariant::fromValue(this->m_airlineIcao);
case IndexAircraftColor:
return CVariant::fromValue(this->m_aircraftColor);
case IndexAsString:
return CVariant::fromValue(this->asString());
case IndexIsVtol:
return CVariant::fromValue(this->isVtol());
default:
return CValueObject::propertyByIndex(index);
}
@@ -143,14 +105,11 @@ namespace BlackMisc
ColumnIndex i = index.frontCasted<ColumnIndex>();
switch (i)
{
case IndexAircraftDesignator:
this->setAircraftDesignator(variant.value<QString>());
case IndexAircraftIcao:
this->m_aircraftIcao.setPropertyByIndex(variant, index.copyFrontRemoved());
break;
case IndexAirlineDesignator:
this->setAirlineDesignator(variant.value<QString>());
break;
case IndexCombinedAircraftType:
this->setAircraftCombinedType(variant.value<QString>());
case IndexAirlineIcao:
this->m_airlineIcao.setPropertyByIndex(variant, index.copyFrontRemoved());
break;
case IndexAircraftColor:
this->setAircraftColor(variant.value<QString>());
@@ -161,26 +120,5 @@ namespace BlackMisc
}
}
bool CAircraftIcaoData::isValidDesignator(const QString &designator)
{
static QRegularExpression regexp("^[A-Z]+[A-Z0-9]*$");
if (designator.length() < 2 || designator.length() > 5) { return false; }
return (regexp.match(designator).hasMatch());
}
bool CAircraftIcaoData::isValidCombinedType(const QString &combinedType)
{
static QRegularExpression regexp("^[A-Z][0-9][A-Z]$");
if (combinedType.length() != 3) return false;
return (regexp.match(combinedType).hasMatch());
}
bool CAircraftIcaoData::isValidAirlineDesignator(const QString &airline)
{
static QRegularExpression regexp("^[A-Z]+[A-Z0-9]*$");
if (airline.length() < 2 || airline.length() > 5) return false;
return (regexp.match(airline).hasMatch());
}
} // namespace
} // namespace

View File

@@ -12,6 +12,8 @@
#ifndef BLACKMISC_AVIATION_AIRCRAFTICAODATA_H
#define BLACKMISC_AVIATION_AIRCRAFTICAODATA_H
#include "blackmisc/aviation/aircrafticaocode.h"
#include "blackmisc/aviation/airlineicaocode.h"
#include "blackmisc/blackmiscexport.h"
#include "blackmisc/valueobject.h"
#include "blackmisc/propertyindex.h"
@@ -21,64 +23,56 @@ namespace BlackMisc
{
namespace Aviation
{
//! Value object for ICAO classification
//! Value object for ICAO classification (airline ICAO, aircraft ICAO, livery ..)
class BLACKMISC_EXPORT CAircraftIcaoData : public CValueObject<CAircraftIcaoData>
{
public:
//! Properties by index
enum ColumnIndex
{
IndexAircraftDesignator = BlackMisc::CPropertyIndex::GlobalIndexCAircraftIcaoData,
IndexCombinedAircraftType,
IndexAirlineDesignator,
IndexAircraftIcao = BlackMisc::CPropertyIndex::GlobalIndexCAircraftIcaoData,
IndexAirlineIcao,
IndexAircraftColor,
IndexAsString,
IndexIsVtol
};
//! Default constructor.
CAircraftIcaoData() = default;
//! Constructor.
explicit CAircraftIcaoData(const QString &icao) : m_aircraftDesignator(icao.trimmed().toUpper()) {}
//! Constructor.
//! \param icao "B737"
//! \param airline "DLH"
CAircraftIcaoData(const QString &icao, const QString &airline);
CAircraftIcaoData(const QString &icao, const QString &airline = "");
/*!
* Constructor.
* \param icao "B737"
* \param combinedType "L2J"
* \param airline "DLH"
* \param livery "FREIGHT"
* \param color "CCFFDD" (RGB)
*/
CAircraftIcaoData(const QString &icao, const QString &combinedType, const QString &airline, const QString &livery, const QString &color)
: m_aircraftDesignator(icao.trimmed().toUpper()), m_aircraftCombinedType(combinedType.trimmed().toUpper()), m_airlineDesignator(airline.trimmed().toUpper()),
m_livery(livery.trimmed().toUpper()), m_aircraftColor(color.trimmed().toUpper()) {}
//! Constructor.
CAircraftIcaoData(const BlackMisc::Aviation::CAircraftIcaoCode &icaoAircraft, const BlackMisc::Aviation::CAirlineIcaoCode &icaoAirline, const QString &color = "");
//! Get ICAO designator, e.g. "B737"
const QString &getAircraftDesignator() const { return m_aircraftDesignator; }
const QString &getAircraftDesignator() const { return m_aircraftIcao.getDesignator(); }
//! Get aircraft ICAO object
const BlackMisc::Aviation::CAircraftIcaoCode &getAircraftIcaoCode() const { return this->m_aircraftIcao; }
//! Set ICAO designator, e.g. "B737"
void setAircraftDesignator(const QString &icaoDesignator) { this->m_aircraftDesignator = icaoDesignator.trimmed().toUpper(); }
void setAircraftDesignator(const QString &icaoDesignator) { this->m_aircraftIcao.setDesignator(icaoDesignator); }
//! Aircraft designator?
bool hasAircraftDesignator() const;
bool hasAircraftDesignator() const { return this->m_aircraftIcao.hasDesignator(); }
//! Has designator and designator is not "ZZZZ"
bool hasKnownAircraftDesignator() const;
bool hasKnownAircraftDesignator() const { return (this->m_aircraftIcao.hasKnownDesignator()); }
//! Get airline, e.g. "DLH"
const QString &getAirlineDesignator() const { return this->m_airlineDesignator; }
const QString &getAirlineDesignator() const { return this->m_airlineIcao.getDesignator(); }
//! Get airline ICAO object
const BlackMisc::Aviation::CAirlineIcaoCode &getAirlineIcaoCode() const { return this->m_airlineIcao; }
//! Set airline, e.g. "DLH"
void setAirlineDesignator(const QString &icaoDesignator) { this->m_airlineDesignator = icaoDesignator.trimmed().toUpper(); }
void setAirlineDesignator(const QString &icaoDesignator) { this->m_airlineIcao.setDesignator(icaoDesignator); }
//! Airline available?
bool hasAirlineDesignator() const { return !this->m_airlineDesignator.isEmpty(); }
bool hasAirlineDesignator() const { return this->m_airlineIcao.hasDesignator(); }
//! Airline and Aircraft designator?
bool hasAircraftAndAirlineDesignator() const { return this->hasAirlineDesignator() && this->hasAircraftDesignator(); }
@@ -105,20 +99,20 @@ namespace BlackMisc
bool hasAircraftColor() const { return !this->m_aircraftColor.isEmpty(); }
//! Get type, e.g. "L2J"
const QString &getAircraftCombinedType() const { return this->m_aircraftCombinedType; }
const QString &getAircraftCombinedType() const { return this->m_aircraftIcao.getCombinedType(); }
//! Combined type available?
bool hasAircraftCombinedType() const { return this->getAircraftCombinedType().length() == 3; }
bool hasAircraftCombinedType() const { return this->m_aircraftIcao.hasCombinedType(); }
//! Get engine type, e.g. "J"
QString getEngineType() const;
QString getEngineType() const { return this->m_aircraftIcao.getEngineType(); }
//! As string for GUI representation by index
//! \remarks Different from toQString()
QString asString() const;
//! Set type
void setAircraftCombinedType(const QString &type) { this->m_aircraftCombinedType = type.trimmed().toUpper(); }
void setAircraftCombinedType(const QString &type) { this->m_aircraftIcao.setCombinedType(type); }
//! Missing parts from another ICAO object
void updateMissingParts(const CAircraftIcaoData &icao);
@@ -127,7 +121,7 @@ namespace BlackMisc
bool matchesWildcardIcao(const CAircraftIcaoData &otherIcao) const;
//! Is VTOL aircraft
bool isVtol() const;
bool isVtol() const { return m_aircraftIcao.isVtol(); }
//! \copydoc CValueObject::propertyByIndex
CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const;
@@ -135,37 +129,25 @@ namespace BlackMisc
//! \copydoc CValueObject::setPropertyByIndex
void setPropertyByIndex(const CVariant &variant, const BlackMisc::CPropertyIndex &index);
//! Valid designator?
static bool isValidDesignator(const QString &designator);
//! Valid combined type
static bool isValidCombinedType(const QString &combinedType);
//! Valid designator?
static bool isValidAirlineDesignator(const QString &airline);
//! \copydoc CValueObject::convertToQString
QString convertToQString(bool i18n = false) const;
private:
BLACK_ENABLE_TUPLE_CONVERSION(CAircraftIcaoData)
QString m_aircraftDesignator; //!< "B737"
QString m_aircraftCombinedType; //!< "L2J"
QString m_airlineDesignator; //!< "DLH"
BlackMisc::Aviation::CAircraftIcaoCode m_aircraftIcao; //!< "B737", ...
BlackMisc::Aviation::CAirlineIcaoCode m_airlineIcao; //!< "DLH", ...
QString m_livery;
QString m_aircraftColor; //!< RGB Hex "330044"
QString m_aircraftColor; //!< RGB Hex "330044"
};
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::Aviation::CAircraftIcaoData)
BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::Aviation::CAircraftIcaoData, (
o.m_aircraftDesignator,
o.m_aircraftCombinedType,
o.m_airlineDesignator,
o.m_aircraftIcao,
o.m_airlineIcao,
o.m_livery,
o.m_aircraftColor
))
#endif // guard

View File

@@ -203,7 +203,7 @@ QVariant BlackMisc::fixQVariantFromDbusArgument(const QVariant &variant, int loc
meta->unmarshall(arg, valueVariant.data());
return valueVariant;
}
Q_ASSERT_X(false, "fixQVariantFromDbusArgument", "no meta");
Q_ASSERT_X(false, Q_FUNC_INFO, "no meta");
return valueVariant;
}
}

View File

@@ -23,9 +23,7 @@ namespace BlackMisc
{
namespace Network
{
/*!
* Another client software.
*/
//! Another client software.
class BLACKMISC_EXPORT CClient : public CValueObject<CClient>
{
public:
@@ -133,11 +131,11 @@ namespace BlackMisc
private:
BLACK_ENABLE_TUPLE_CONVERSION(CClient)
CUser m_user;
BlackMisc::Simulation::CAircraftModel m_model;
CPropertyIndexVariantMap m_capabilities;
QString m_server;
CVoiceCapabilities m_voiceCapabilities;
BlackMisc::Network::CUser m_user;
BlackMisc::Simulation::CAircraftModel m_model;
BlackMisc::CPropertyIndexVariantMap m_capabilities;
QString m_server;
BlackMisc::Network::CVoiceCapabilities m_voiceCapabilities;
};
} // namespace
} // namespace
@@ -145,7 +143,7 @@ namespace BlackMisc
BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::Network::CClient, (
o.m_user,
o.m_model,
attr(o.m_capabilities, flags<DisabledForComparison | DisabledForJson>()),
attr(o.m_capabilities, flags < DisabledForComparison | DisabledForJson > ()),
o.m_server,
o.m_voiceCapabilities
))

View File

@@ -111,7 +111,9 @@ namespace BlackMisc
"Boeing 737-800 Paint1",
CAircraftModel::TypeModelMatchingDefaultModel,
"B737-800 default model",
CAircraftIcaoData("B738", "L2J", "", "", "FFFFFF")
CAircraftIcaoData(
CAircraftIcaoCode("B738", "L2J"), CAirlineIcaoCode(), "FFFFFF"
)
);
return aircraftModel;
}