mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-01 13:36:48 +08:00
Aircraft ICAO data should use ICAO code as attribute, this somehow got lost in the merge session, re-applied
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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")));
|
||||
|
||||
@@ -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(); }
|
||||
|
||||
|
||||
@@ -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>());
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
))
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user