mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-25 18:25:42 +08:00
feat: Add wake turbulence category enum
This commit is contained in:
@@ -704,7 +704,7 @@ namespace BlackSample
|
|||||||
CDistributorList distributors;
|
CDistributorList distributors;
|
||||||
for (int i = 0; i < numberOfMemoParts; ++i)
|
for (int i = 0; i < numberOfMemoParts; ++i)
|
||||||
{
|
{
|
||||||
aircraftIcaos.push_back(CAircraftIcaoCode("A" + QString::number(i), "A" + QString::number(i), "L1P", "Lego", "Foo", "M", false, false, false, 0));
|
aircraftIcaos.push_back(CAircraftIcaoCode("A" + QString::number(i), "A" + QString::number(i), "L1P", "Lego", "Foo", CWakeTurbulenceCategory::MEDIUM, false, false, false, 0));
|
||||||
liveries.push_back(CLivery("A" + QString::number(i), CAirlineIcaoCode("A" + QString::number(i), "Foo", CCountry("DE", "Germany"), "Foo", false, false), "Foo", "red", "blue", false));
|
liveries.push_back(CLivery("A" + QString::number(i), CAirlineIcaoCode("A" + QString::number(i), "Foo", CCountry("DE", "Germany"), "Foo", false, false), "Foo", "red", "blue", false));
|
||||||
distributors.push_back(CDistributor(QString::number(i), "Foo", {}, {}, CSimulatorInfo::FSX));
|
distributors.push_back(CDistributor(QString::number(i), "Foo", {}, {}, CSimulatorInfo::FSX));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ namespace BlackCore::Context
|
|||||||
// if all fails
|
// if all fails
|
||||||
static const CAircraftModel defaultModel(
|
static const CAircraftModel defaultModel(
|
||||||
"", CAircraftModel::TypeOwnSimulatorModel, "default model",
|
"", CAircraftModel::TypeOwnSimulatorModel, "default model",
|
||||||
CAircraftIcaoCode("C172", "L1P", "Cessna", "172", "L", true, false, false, 0));
|
CAircraftIcaoCode("C172", "L1P", "Cessna", "172", CWakeTurbulenceCategory::LIGHT, true, false, false, 0));
|
||||||
|
|
||||||
// create one from DB data
|
// create one from DB data
|
||||||
if (sApp && sApp->hasWebDataServices())
|
if (sApp && sApp->hasWebDataServices())
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ namespace BlackGui::Components
|
|||||||
|
|
||||||
if (aircraft.getAircraftIcaoCode().isLoadedFromDb() && aircraft.getAircraftIcaoCode().hasValidWtc())
|
if (aircraft.getAircraftIcaoCode().isLoadedFromDb() && aircraft.getAircraftIcaoCode().hasValidWtc())
|
||||||
{
|
{
|
||||||
const QString wtc = aircraft.getAircraftIcaoCode().getWtc().toUpper();
|
const QString wtc = toSingleLetterCode(aircraft.getAircraftIcaoCode().getWtc());
|
||||||
const bool heavyFlag = (wtc.startsWith("H", Qt::CaseInsensitive) || wtc.startsWith("S", Qt::CaseInsensitive));
|
const bool heavyFlag = (wtc.startsWith("H", Qt::CaseInsensitive) || wtc.startsWith("S", Qt::CaseInsensitive));
|
||||||
ui->cb_Heavy->setChecked(heavyFlag);
|
ui->cb_Heavy->setChecked(heavyFlag);
|
||||||
}
|
}
|
||||||
@@ -825,7 +825,7 @@ namespace BlackGui::Components
|
|||||||
QPointer<CFlightPlanComponent> myself(this);
|
QPointer<CFlightPlanComponent> myself(this);
|
||||||
QTimer::singleShot(25, this, [=] {
|
QTimer::singleShot(25, this, [=] {
|
||||||
if (!myself || !sGui || sGui->isShuttingDown()) { return; }
|
if (!myself || !sGui || sGui->isShuttingDown()) { return; }
|
||||||
const bool heavy = icao.getWtc().startsWith("H");
|
const bool heavy = icao.getWtc() == BlackMisc::Aviation::WakeTurbulenceCategory::HEAVY;
|
||||||
ui->cb_Heavy->setChecked(heavy);
|
ui->cb_Heavy->setChecked(heavy);
|
||||||
if (heavy) { ui->cb_Tcas->setChecked(false); }
|
if (heavy) { ui->cb_Tcas->setChecked(false); }
|
||||||
this->buildPrefixIcaoSuffix();
|
this->buildPrefixIcaoSuffix();
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ namespace BlackGui::Components
|
|||||||
CAircraftModel CModelMatcherComponent::defaultModel() const
|
CAircraftModel CModelMatcherComponent::defaultModel() const
|
||||||
{
|
{
|
||||||
// can somehow dynamilcally determine the models
|
// can somehow dynamilcally determine the models
|
||||||
const CAircraftIcaoCode icaoAircraft("B737", "L2J", "FooBar", "Dummy", "M", false, false, false, 1);
|
const CAircraftIcaoCode icaoAircraft("B737", "L2J", "FooBar", "Dummy", CWakeTurbulenceCategory::MEDIUM, false, false, false, 1);
|
||||||
const CAirlineIcaoCode icaoAirline("Foo", "FooBar airlines", { "DE", "Germany" }, "FOO", true, true);
|
const CAirlineIcaoCode icaoAirline("Foo", "FooBar airlines", { "DE", "Germany" }, "FOO", true, true);
|
||||||
const CLivery livery(CLivery::getStandardCode(icaoAirline), icaoAirline, "Standard Foo airlines", "red", "blue", false);
|
const CLivery livery(CLivery::getStandardCode(icaoAirline), icaoAirline, "Standard Foo airlines", "red", "blue", false);
|
||||||
CAircraftModel model("default model", CAircraftModel::TypeOwnSimulatorModel, "dummy model", icaoAircraft, livery);
|
CAircraftModel model("default model", CAircraftModel::TypeOwnSimulatorModel, "dummy model", icaoAircraft, livery);
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ namespace BlackGui::Editors
|
|||||||
ui->combined_TypeSelector->setCombinedType(icao.getCombinedType());
|
ui->combined_TypeSelector->setCombinedType(icao.getCombinedType());
|
||||||
|
|
||||||
QString rank(icao.getRankString());
|
QString rank(icao.getRankString());
|
||||||
QString wtc(icao.getWtc());
|
QString wtc(icao.getWtc().toQString());
|
||||||
CGuiUtility::setComboBoxValueByStartingString(ui->cb_Rank, rank, "unspecified");
|
CGuiUtility::setComboBoxValueByStartingString(ui->cb_Rank, rank, "unspecified");
|
||||||
CGuiUtility::setComboBoxValueByStartingString(ui->cb_Wtc, wtc, "unspecified");
|
CGuiUtility::setComboBoxValueByStartingString(ui->cb_Wtc, wtc, "unspecified");
|
||||||
|
|
||||||
@@ -134,7 +134,7 @@ namespace BlackGui::Editors
|
|||||||
bool realWorld = ui->cb_RealWorld->isChecked();
|
bool realWorld = ui->cb_RealWorld->isChecked();
|
||||||
icao.setManufacturer(manufacturer);
|
icao.setManufacturer(manufacturer);
|
||||||
icao.setModelDescription(modelDescription);
|
icao.setModelDescription(modelDescription);
|
||||||
icao.setWtc(wtc);
|
icao.setWtc(wtc.isEmpty() ? CWakeTurbulenceCategory() : CWakeTurbulenceCategory(wtc.at(0)));
|
||||||
icao.setCodeFlags(military, legacy, realWorld);
|
icao.setCodeFlags(military, legacy, realWorld);
|
||||||
icao.setRank(rank);
|
icao.setRank(rank);
|
||||||
icao.setCombinedType(combined);
|
icao.setCombinedType(combined);
|
||||||
|
|||||||
@@ -99,6 +99,8 @@ add_library(misc SHARED
|
|||||||
aviation/track.h
|
aviation/track.h
|
||||||
aviation/transponder.cpp
|
aviation/transponder.cpp
|
||||||
aviation/transponder.h
|
aviation/transponder.h
|
||||||
|
aviation/waketurbulencecategory.cpp
|
||||||
|
aviation/waketurbulencecategory.h
|
||||||
|
|
||||||
# DB
|
# DB
|
||||||
db/artifact.cpp
|
db/artifact.cpp
|
||||||
|
|||||||
@@ -28,34 +28,34 @@ namespace BlackMisc::Aviation
|
|||||||
CAircraftIcaoCode::CAircraftIcaoCode(const QString &icao, const QString &combinedType) : m_designator(icao.trimmed().toUpper()), m_combinedType(combinedType.trimmed().toUpper())
|
CAircraftIcaoCode::CAircraftIcaoCode(const QString &icao, const QString &combinedType) : m_designator(icao.trimmed().toUpper()), m_combinedType(combinedType.trimmed().toUpper())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
CAircraftIcaoCode::CAircraftIcaoCode(const QString &icao, const QString &combinedType, const QString &manufacturer, const QString &model, const QString &wtc, bool realworld, bool legacy, bool military, int rank)
|
CAircraftIcaoCode::CAircraftIcaoCode(const QString &icao, const QString &combinedType, const QString &manufacturer, const QString &model, CWakeTurbulenceCategory wtc, bool realworld, bool legacy, bool military, int rank)
|
||||||
: m_designator(icao.trimmed().toUpper()),
|
: m_designator(icao.trimmed().toUpper()),
|
||||||
m_combinedType(combinedType.trimmed().toUpper()),
|
m_combinedType(combinedType.trimmed().toUpper()),
|
||||||
m_manufacturer(manufacturer.trimmed()),
|
m_manufacturer(manufacturer.trimmed()),
|
||||||
m_modelDescription(model.trimmed()), m_wtc(wtc.trimmed().toUpper()), m_realWorld(realworld), m_legacy(legacy), m_military(military), m_rank(rank)
|
m_modelDescription(model.trimmed()), m_wtc(wtc), m_realWorld(realworld), m_legacy(legacy), m_military(military), m_rank(rank)
|
||||||
{
|
{
|
||||||
if (m_rank < 0 || m_rank >= 10) { m_rank = 10; }
|
if (m_rank < 0 || m_rank >= 10) { m_rank = 10; }
|
||||||
}
|
}
|
||||||
|
|
||||||
CAircraftIcaoCode::CAircraftIcaoCode(const QString &icao, const QString &iata, const QString &combinedType, const QString &manufacturer, const QString &model, const QString &wtc, bool realworld, bool legacy, bool military, int rank)
|
CAircraftIcaoCode::CAircraftIcaoCode(const QString &icao, const QString &iata, const QString &combinedType, const QString &manufacturer, const QString &model, CWakeTurbulenceCategory wtc, bool realworld, bool legacy, bool military, int rank)
|
||||||
: m_designator(icao.trimmed().toUpper()),
|
: m_designator(icao.trimmed().toUpper()),
|
||||||
m_iataCode(iata.trimmed().toUpper()),
|
m_iataCode(iata.trimmed().toUpper()),
|
||||||
m_combinedType(combinedType.trimmed().toUpper()),
|
m_combinedType(combinedType.trimmed().toUpper()),
|
||||||
m_manufacturer(manufacturer.trimmed()),
|
m_manufacturer(manufacturer.trimmed()),
|
||||||
m_modelDescription(model.trimmed()), m_wtc(wtc.trimmed().toUpper()), m_realWorld(realworld), m_legacy(legacy), m_military(military), m_rank(rank)
|
m_modelDescription(model.trimmed()), m_wtc(wtc), m_realWorld(realworld), m_legacy(legacy), m_military(military), m_rank(rank)
|
||||||
{
|
{
|
||||||
if (m_rank < 0 || m_rank >= 10) { m_rank = 10; }
|
if (m_rank < 0 || m_rank >= 10) { m_rank = 10; }
|
||||||
}
|
}
|
||||||
|
|
||||||
CAircraftIcaoCode::CAircraftIcaoCode(const QString &icao, const QString &iata, const QString &family, const QString &combinedType, const QString &manufacturer,
|
CAircraftIcaoCode::CAircraftIcaoCode(const QString &icao, const QString &iata, const QString &family, const QString &combinedType, const QString &manufacturer,
|
||||||
const QString &model, const QString &modelIata, const QString &modelSwift, const QString &wtc, bool realworld, bool legacy, bool military, int rank)
|
const QString &model, const QString &modelIata, const QString &modelSwift, CWakeTurbulenceCategory wtc, bool realworld, bool legacy, bool military, int rank)
|
||||||
: m_designator(icao.trimmed().toUpper()),
|
: m_designator(icao.trimmed().toUpper()),
|
||||||
m_iataCode(iata.trimmed().toUpper()),
|
m_iataCode(iata.trimmed().toUpper()),
|
||||||
m_family(family.trimmed().toUpper()),
|
m_family(family.trimmed().toUpper()),
|
||||||
m_combinedType(combinedType.trimmed().toUpper()),
|
m_combinedType(combinedType.trimmed().toUpper()),
|
||||||
m_manufacturer(manufacturer.trimmed()),
|
m_manufacturer(manufacturer.trimmed()),
|
||||||
m_modelDescription(model.trimmed()), m_modelIataDescription(modelIata.trimmed()), m_modelSwiftDescription(modelSwift.trimmed()),
|
m_modelDescription(model.trimmed()), m_modelIataDescription(modelIata.trimmed()), m_modelSwiftDescription(modelSwift.trimmed()),
|
||||||
m_wtc(wtc.trimmed().toUpper()), m_realWorld(realworld), m_legacy(legacy), m_military(military), m_rank(rank)
|
m_wtc(wtc), m_realWorld(realworld), m_legacy(legacy), m_military(military), m_rank(rank)
|
||||||
{
|
{
|
||||||
if (m_rank < 0 || m_rank >= 10) { m_rank = 10; }
|
if (m_rank < 0 || m_rank >= 10) { m_rank = 10; }
|
||||||
}
|
}
|
||||||
@@ -71,8 +71,8 @@ namespace BlackMisc::Aviation
|
|||||||
{
|
{
|
||||||
Q_UNUSED(i18n);
|
Q_UNUSED(i18n);
|
||||||
return (this->hasCategory()) ?
|
return (this->hasCategory()) ?
|
||||||
QStringLiteral("%1 %2 %3 cat: %4").arg(this->getDesignatorDbKey(), this->getCombinedType(), this->getWtc(), this->getCategory().getDbKeyAsString()).trimmed() :
|
QStringLiteral("%1 %2 %3 cat: %4").arg(this->getDesignatorDbKey(), this->getCombinedType(), this->getWtc().toQString(), this->getCategory().getDbKeyAsString()).trimmed() :
|
||||||
QStringLiteral("%1 %2 %3").arg(this->getDesignatorDbKey(), this->getCombinedType(), this->getWtc()).trimmed();
|
QStringLiteral("%1 %2 %3").arg(this->getDesignatorDbKey(), this->getCombinedType(), this->getWtc().toQString()).trimmed();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAircraftIcaoCode::updateMissingParts(const CAircraftIcaoCode &otherIcaoCode)
|
void CAircraftIcaoCode::updateMissingParts(const CAircraftIcaoCode &otherIcaoCode)
|
||||||
@@ -704,7 +704,7 @@ namespace BlackMisc::Aviation
|
|||||||
case IndexModelIataDescription: this->setModelIataDescription(variant.value<QString>()); break;
|
case IndexModelIataDescription: this->setModelIataDescription(variant.value<QString>()); break;
|
||||||
case IndexModelSwiftDescription: this->setModelSwiftDescription(variant.value<QString>()); break;
|
case IndexModelSwiftDescription: this->setModelSwiftDescription(variant.value<QString>()); break;
|
||||||
case IndexManufacturer: this->setManufacturer(variant.value<QString>()); break;
|
case IndexManufacturer: this->setManufacturer(variant.value<QString>()); break;
|
||||||
case IndexWtc: this->setWtc(variant.value<QString>()); break;
|
case IndexWtc: this->setWtc(variant.value<CWakeTurbulenceCategory>()); break;
|
||||||
case IndexIsLegacy: m_legacy = variant.toBool(); break;
|
case IndexIsLegacy: m_legacy = variant.toBool(); break;
|
||||||
case IndexIsMilitary: m_military = variant.toBool(); break;
|
case IndexIsMilitary: m_military = variant.toBool(); break;
|
||||||
case IndexRank: m_rank = variant.toInt(); break;
|
case IndexRank: m_rank = variant.toInt(); break;
|
||||||
@@ -742,7 +742,7 @@ namespace BlackMisc::Aviation
|
|||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
case IndexManufacturer: return m_manufacturer.compare(compareValue.getManufacturer(), Qt::CaseInsensitive);
|
case IndexManufacturer: return m_manufacturer.compare(compareValue.getManufacturer(), Qt::CaseInsensitive);
|
||||||
case IndexWtc: return m_wtc.compare(compareValue.getWtc(), Qt::CaseInsensitive);
|
case IndexWtc: return m_wtc == compareValue.getWtc();
|
||||||
case IndexIsLegacy: return Compare::compare(m_legacy, compareValue.isLegacyAircraft());
|
case IndexIsLegacy: return Compare::compare(m_legacy, compareValue.isLegacyAircraft());
|
||||||
case IndexIsMilitary: return Compare::compare(m_military, compareValue.isMilitary());
|
case IndexIsMilitary: return Compare::compare(m_military, compareValue.isMilitary());
|
||||||
case IndexIsVtol: return Compare::compare(isVtol(), compareValue.isVtol());
|
case IndexIsVtol: return Compare::compare(isVtol(), compareValue.isVtol());
|
||||||
@@ -883,13 +883,14 @@ namespace BlackMisc::Aviation
|
|||||||
const QString engine(json.value(prefix % u"engine").toString());
|
const QString engine(json.value(prefix % u"engine").toString());
|
||||||
const QString combined(createdCombinedString(type, engineCount, engine));
|
const QString combined(createdCombinedString(type, engineCount, engine));
|
||||||
|
|
||||||
QString wtc(json.value(prefix % u"wtc").toString());
|
QString wtcString(json.value(prefix % u"wtc").toString());
|
||||||
if (wtc.length() > 1 && wtc.contains("/"))
|
if (wtcString.length() > 1 && wtcString.contains("/"))
|
||||||
{
|
{
|
||||||
// "L/M" -> "M"
|
// "L/M" -> "M"
|
||||||
wtc = wtc.right(1);
|
wtcString = wtcString.right(1);
|
||||||
}
|
}
|
||||||
Q_ASSERT_X(wtc.length() < 2, Q_FUNC_INFO, "WTC too long");
|
Q_ASSERT_X(wtcString.length() < 2, Q_FUNC_INFO, "WTC too long");
|
||||||
|
const CWakeTurbulenceCategory wtc = wtcString.isEmpty() ? CWakeTurbulenceCategory() : CWakeTurbulenceCategory(wtcString.at(0));
|
||||||
|
|
||||||
const bool real = CDatastoreUtility::dbBoolStringToBool(json.value(prefix % u"realworld").toString());
|
const bool real = CDatastoreUtility::dbBoolStringToBool(json.value(prefix % u"realworld").toString());
|
||||||
const bool legacy = CDatastoreUtility::dbBoolStringToBool(json.value(prefix % u"legacy").toString());
|
const bool legacy = CDatastoreUtility::dbBoolStringToBool(json.value(prefix % u"legacy").toString());
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#define BLACKMISC_AVIATION_AIRCRAFTICAOCODE_H
|
#define BLACKMISC_AVIATION_AIRCRAFTICAOCODE_H
|
||||||
|
|
||||||
#include "blackmisc/aviation/aircraftcategory.h"
|
#include "blackmisc/aviation/aircraftcategory.h"
|
||||||
|
#include "blackmisc/aviation/waketurbulencecategory.h"
|
||||||
#include "blackmisc/db/datastore.h"
|
#include "blackmisc/db/datastore.h"
|
||||||
#include "blackmisc/pq/length.h"
|
#include "blackmisc/pq/length.h"
|
||||||
#include "blackmisc/blackmiscexport.h"
|
#include "blackmisc/blackmiscexport.h"
|
||||||
@@ -60,15 +61,15 @@ namespace BlackMisc::Aviation
|
|||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
CAircraftIcaoCode(const QString &icao, const QString &combinedType, const QString &manufacturer,
|
CAircraftIcaoCode(const QString &icao, const QString &combinedType, const QString &manufacturer,
|
||||||
const QString &model, const QString &wtc, bool realworld, bool legacy, bool military, int rank);
|
const QString &model, CWakeTurbulenceCategory wtc, bool realworld, bool legacy, bool military, int rank);
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
CAircraftIcaoCode(const QString &icao, const QString &iata, const QString &combinedType, const QString &manufacturer,
|
CAircraftIcaoCode(const QString &icao, const QString &iata, const QString &combinedType, const QString &manufacturer,
|
||||||
const QString &model, const QString &wtc, bool realworld, bool legacy, bool military, int rank);
|
const QString &model, CWakeTurbulenceCategory wtc, bool realworld, bool legacy, bool military, int rank);
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
CAircraftIcaoCode(const QString &icao, const QString &iata, const QString &family, const QString &combinedType, const QString &manufacturer,
|
CAircraftIcaoCode(const QString &icao, const QString &iata, const QString &family, const QString &combinedType, const QString &manufacturer,
|
||||||
const QString &model, const QString &modelIata, const QString &modelSwift, const QString &wtc, bool realworld, bool legacy, bool military, int rank);
|
const QString &model, const QString &modelIata, const QString &modelSwift, CWakeTurbulenceCategory wtc, bool realworld, bool legacy, bool military, int rank);
|
||||||
|
|
||||||
//! Get ICAO designator, e.g. "B737"
|
//! Get ICAO designator, e.g. "B737"
|
||||||
const QString &getDesignator() const { return m_designator; }
|
const QString &getDesignator() const { return m_designator; }
|
||||||
@@ -198,13 +199,13 @@ namespace BlackMisc::Aviation
|
|||||||
bool matchesManufacturer(const QString &manufacturer) const;
|
bool matchesManufacturer(const QString &manufacturer) const;
|
||||||
|
|
||||||
//! Get WTC
|
//! Get WTC
|
||||||
const QString &getWtc() const { return m_wtc; }
|
CWakeTurbulenceCategory getWtc() const { return m_wtc; }
|
||||||
|
|
||||||
//! Set WTC
|
//! Set WTC
|
||||||
void setWtc(const QString &wtc) { m_wtc = wtc.trimmed().toUpper(); }
|
void setWtc(CWakeTurbulenceCategory wtc) { m_wtc = wtc; }
|
||||||
|
|
||||||
//! Valid WTC code?
|
//! Valid WTC code?
|
||||||
bool hasValidWtc() const { return !m_wtc.isEmpty(); }
|
bool hasValidWtc() const { return !m_wtc.isUnknown(); }
|
||||||
|
|
||||||
//! Is VTOL aircraft (helicopter, tilt wing)
|
//! Is VTOL aircraft (helicopter, tilt wing)
|
||||||
bool isVtol() const;
|
bool isVtol() const;
|
||||||
@@ -376,7 +377,7 @@ namespace BlackMisc::Aviation
|
|||||||
QString m_modelDescription; //!< "A-330-200", the ICAO description
|
QString m_modelDescription; //!< "A-330-200", the ICAO description
|
||||||
QString m_modelIataDescription; //!< alternative IATA description
|
QString m_modelIataDescription; //!< alternative IATA description
|
||||||
QString m_modelSwiftDescription; //!< alternative swift description
|
QString m_modelSwiftDescription; //!< alternative swift description
|
||||||
QString m_wtc; //!< wake turbulence like "M","H" "L/M", "L", "J", we only use the one letter versions
|
CWakeTurbulenceCategory m_wtc; //!< ICAO wake turbulence category
|
||||||
bool m_realWorld = true; //!< real world aircraft
|
bool m_realWorld = true; //!< real world aircraft
|
||||||
bool m_legacy = false; //!< legacy code
|
bool m_legacy = false; //!< legacy code
|
||||||
bool m_military = false; //!< military aircraft?
|
bool m_military = false; //!< military aircraft?
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ namespace BlackMisc
|
|||||||
CCallsign::registerMetadata();
|
CCallsign::registerMetadata();
|
||||||
CCallsignSet::registerMetadata();
|
CCallsignSet::registerMetadata();
|
||||||
CComSystem::registerMetadata();
|
CComSystem::registerMetadata();
|
||||||
|
CWakeTurbulenceCategory::registerMetadata();
|
||||||
CFlightPlan::registerMetadata();
|
CFlightPlan::registerMetadata();
|
||||||
CFlightPlanList::registerMetadata();
|
CFlightPlanList::registerMetadata();
|
||||||
CSimBriefData::registerMetadata();
|
CSimBriefData::registerMetadata();
|
||||||
|
|||||||
52
src/blackmisc/aviation/waketurbulencecategory.cpp
Normal file
52
src/blackmisc/aviation/waketurbulencecategory.cpp
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
// SPDX-FileCopyrightText: Copyright (C) swift Project Community / Contributors
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
|
||||||
|
|
||||||
|
#include "waketurbulencecategory.h"
|
||||||
|
|
||||||
|
BLACK_DEFINE_VALUEOBJECT_MIXINS(BlackMisc::Aviation, CWakeTurbulenceCategory)
|
||||||
|
|
||||||
|
namespace BlackMisc::Aviation
|
||||||
|
{
|
||||||
|
CWakeTurbulenceCategory::CWakeTurbulenceCategory(WakeTurbulenceCategory wtc) : m_wtc(wtc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CWakeTurbulenceCategory::CWakeTurbulenceCategory(QChar letter)
|
||||||
|
{
|
||||||
|
letter = letter.toUpper();
|
||||||
|
if (letter == 'L')
|
||||||
|
{
|
||||||
|
m_wtc = LIGHT;
|
||||||
|
}
|
||||||
|
else if (letter == 'M')
|
||||||
|
{
|
||||||
|
m_wtc = MEDIUM;
|
||||||
|
}
|
||||||
|
else if (letter == 'H')
|
||||||
|
{
|
||||||
|
m_wtc = HEAVY;
|
||||||
|
}
|
||||||
|
else if (letter == 'J')
|
||||||
|
{
|
||||||
|
m_wtc = SUPER;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// This includes "-" which is used in the database for aircraft with unknown wake turbulence category
|
||||||
|
m_wtc = UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CWakeTurbulenceCategory::convertToQString(bool) const
|
||||||
|
{
|
||||||
|
switch (m_wtc)
|
||||||
|
{
|
||||||
|
case WakeTurbulenceCategory::LIGHT: return QStringLiteral("L");
|
||||||
|
case WakeTurbulenceCategory::MEDIUM: return QStringLiteral("M");
|
||||||
|
case WakeTurbulenceCategory::HEAVY: return QStringLiteral("H");
|
||||||
|
case WakeTurbulenceCategory::SUPER: return QStringLiteral("J");
|
||||||
|
default: [[fallthrough]];
|
||||||
|
case WakeTurbulenceCategory::UNKNOWN: return QStringLiteral("-");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
61
src/blackmisc/aviation/waketurbulencecategory.h
Normal file
61
src/blackmisc/aviation/waketurbulencecategory.h
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
// SPDX-FileCopyrightText: Copyright (C) swift Project Community / Contributors
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
|
||||||
|
|
||||||
|
#ifndef BLACKMISC_AVIATION_WAKETURBULENCECATEGORY_H
|
||||||
|
#define BLACKMISC_AVIATION_WAKETURBULENCECATEGORY_H
|
||||||
|
|
||||||
|
#include "blackmisc/valueobject.h"
|
||||||
|
#include "blackmisc/blackmiscexport.h"
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
#include <QtGlobal>
|
||||||
|
|
||||||
|
BLACK_DECLARE_VALUEOBJECT_MIXINS(BlackMisc::Aviation, CWakeTurbulenceCategory)
|
||||||
|
|
||||||
|
namespace BlackMisc::Aviation
|
||||||
|
{
|
||||||
|
class BLACKMISC_EXPORT CWakeTurbulenceCategory : public CValueObject<CWakeTurbulenceCategory>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//! ICAO wake turbulence categories
|
||||||
|
enum WakeTurbulenceCategory
|
||||||
|
{
|
||||||
|
UNKNOWN, // required when converting from FAA equipment codes and for some database entries where the correct WTC is not available
|
||||||
|
LIGHT,
|
||||||
|
MEDIUM,
|
||||||
|
HEAVY,
|
||||||
|
SUPER
|
||||||
|
};
|
||||||
|
|
||||||
|
//! Create default object with unknown wake turbulence category
|
||||||
|
CWakeTurbulenceCategory() = default;
|
||||||
|
|
||||||
|
//! Create object with given wake turbulence category
|
||||||
|
CWakeTurbulenceCategory(WakeTurbulenceCategory wtc);
|
||||||
|
|
||||||
|
//! Create object from single wake turbulence category letter
|
||||||
|
explicit CWakeTurbulenceCategory(QChar letter);
|
||||||
|
|
||||||
|
//! \copydoc BlackMisc::Mixin::String::toQString
|
||||||
|
QString convertToQString(bool i18n = false) const;
|
||||||
|
|
||||||
|
//! Is the wake turbulence category unknown?
|
||||||
|
bool isUnknown() const { return m_wtc == UNKNOWN; }
|
||||||
|
|
||||||
|
//! Is the wake turbulence category of this object the same as \p category?
|
||||||
|
bool isCategory(WakeTurbulenceCategory category) const { return m_wtc == category; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
WakeTurbulenceCategory m_wtc = UNKNOWN;
|
||||||
|
|
||||||
|
BLACK_METACLASS(
|
||||||
|
CWakeTurbulenceCategory,
|
||||||
|
BLACK_METAMEMBER(wtc)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(BlackMisc::Aviation::CWakeTurbulenceCategory)
|
||||||
|
|
||||||
|
#endif // BLACKMISC_AVIATION_WAKETURBULENCECATEGORY_H
|
||||||
@@ -316,7 +316,7 @@ namespace BlackMisc::Simulation
|
|||||||
{
|
{
|
||||||
const CAircraftModelList ml = this->findByCombinedType(combinedType);
|
const CAircraftModelList ml = this->findByCombinedType(combinedType);
|
||||||
if (ml.isEmpty()) { return ml; }
|
if (ml.isEmpty()) { return ml; }
|
||||||
const QString wtcUc(wtc.toUpper().trimmed());
|
const CWakeTurbulenceCategory wtcUc = wtc.isEmpty() ? CWakeTurbulenceCategory() : CWakeTurbulenceCategory(wtc.toUpper().trimmed().at(0));
|
||||||
return this->findBy([&](const CAircraftModel &model) {
|
return this->findBy([&](const CAircraftModel &model) {
|
||||||
const CAircraftIcaoCode icao(model.getAircraftIcaoCode());
|
const CAircraftIcaoCode icao(model.getAircraftIcaoCode());
|
||||||
return icao.getWtc() == wtcUc;
|
return icao.getWtc() == wtcUc;
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
#include "blackmisc/aviation/informationmessage.h"
|
#include "blackmisc/aviation/informationmessage.h"
|
||||||
#include "blackmisc/aviation/navsystem.h"
|
#include "blackmisc/aviation/navsystem.h"
|
||||||
#include "blackmisc/aviation/transponder.h"
|
#include "blackmisc/aviation/transponder.h"
|
||||||
|
#include "blackmisc/aviation/waketurbulencecategory.h"
|
||||||
#include "blackmisc/mixin/mixincompare.h"
|
#include "blackmisc/mixin/mixincompare.h"
|
||||||
#include "blackmisc/geo/coordinategeodetic.h"
|
#include "blackmisc/geo/coordinategeodetic.h"
|
||||||
#include "blackmisc/geo/latitude.h"
|
#include "blackmisc/geo/latitude.h"
|
||||||
@@ -74,6 +75,9 @@ namespace BlackMiscTest
|
|||||||
|
|
||||||
//! Test some of the guessing functions
|
//! Test some of the guessing functions
|
||||||
void testGuessing();
|
void testGuessing();
|
||||||
|
|
||||||
|
//! Test wake turbulence categories
|
||||||
|
void testWakeTurbulenceCategories();
|
||||||
};
|
};
|
||||||
|
|
||||||
void CTestAviation::headingBasics()
|
void CTestAviation::headingBasics()
|
||||||
@@ -380,6 +384,60 @@ namespace BlackMiscTest
|
|||||||
QVERIFY(sB737 < sB747);
|
QVERIFY(sB737 < sB747);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CTestAviation::testWakeTurbulenceCategories()
|
||||||
|
{
|
||||||
|
const CWakeTurbulenceCategory catLight1('L');
|
||||||
|
const CWakeTurbulenceCategory catLight2('l');
|
||||||
|
const CWakeTurbulenceCategory catLight3(CWakeTurbulenceCategory::LIGHT);
|
||||||
|
|
||||||
|
const CWakeTurbulenceCategory catMedium1('M');
|
||||||
|
const CWakeTurbulenceCategory catMedium2('m');
|
||||||
|
const CWakeTurbulenceCategory catMedium3(CWakeTurbulenceCategory::MEDIUM);
|
||||||
|
|
||||||
|
const CWakeTurbulenceCategory catHeavy1('H');
|
||||||
|
const CWakeTurbulenceCategory catHeavy2('h');
|
||||||
|
const CWakeTurbulenceCategory catHeavy3(CWakeTurbulenceCategory::HEAVY);
|
||||||
|
|
||||||
|
const CWakeTurbulenceCategory catSuper1('J');
|
||||||
|
const CWakeTurbulenceCategory catSuper2('j');
|
||||||
|
const CWakeTurbulenceCategory catSuper3(CWakeTurbulenceCategory::SUPER);
|
||||||
|
|
||||||
|
const CWakeTurbulenceCategory catUnknown1('-');
|
||||||
|
const CWakeTurbulenceCategory catUnknown2('A');
|
||||||
|
const CWakeTurbulenceCategory catUnknown3('x');
|
||||||
|
const CWakeTurbulenceCategory catUnknown4(CWakeTurbulenceCategory::UNKNOWN);
|
||||||
|
|
||||||
|
QVERIFY(catLight1.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::LIGHT));
|
||||||
|
QVERIFY(catLight2.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::LIGHT));
|
||||||
|
QVERIFY(catLight3.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::LIGHT));
|
||||||
|
QCOMPARE(catLight1.toQString(), "L");
|
||||||
|
|
||||||
|
QVERIFY(catMedium1.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::MEDIUM));
|
||||||
|
QVERIFY(catMedium2.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::MEDIUM));
|
||||||
|
QVERIFY(catMedium3.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::MEDIUM));
|
||||||
|
QCOMPARE(catMedium1.toQString(), "M");
|
||||||
|
|
||||||
|
QVERIFY(catHeavy1.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::HEAVY));
|
||||||
|
QVERIFY(catHeavy2.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::HEAVY));
|
||||||
|
QVERIFY(catHeavy3.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::HEAVY));
|
||||||
|
QCOMPARE(catHeavy1.toQString(), "H");
|
||||||
|
|
||||||
|
QVERIFY(catSuper1.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::SUPER));
|
||||||
|
QVERIFY(catSuper2.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::SUPER));
|
||||||
|
QVERIFY(catSuper3.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::SUPER));
|
||||||
|
QCOMPARE(catSuper1.toQString(), "J");
|
||||||
|
|
||||||
|
QVERIFY(catUnknown1.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::UNKNOWN));
|
||||||
|
QVERIFY(catUnknown1.isUnknown());
|
||||||
|
QVERIFY(catUnknown2.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::UNKNOWN));
|
||||||
|
QVERIFY(catUnknown2.isUnknown());
|
||||||
|
QVERIFY(catUnknown3.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::UNKNOWN));
|
||||||
|
QVERIFY(catUnknown3.isUnknown());
|
||||||
|
QVERIFY(catUnknown4.isCategory(BlackMisc::Aviation::CWakeTurbulenceCategory::UNKNOWN));
|
||||||
|
QVERIFY(catUnknown4.isUnknown());
|
||||||
|
QCOMPARE(catUnknown1.toQString(), "-");
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
//! main
|
//! main
|
||||||
|
|||||||
Reference in New Issue
Block a user