From dd0f4058f2d31be8b70c6b93e89f67e4193da37c Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 2 Jan 2018 03:07:18 +0100 Subject: [PATCH] Ref T215, FP UI improvements * check can be stricht or lenient * help page for equipment codes * prefix handling H (vPilot) and T (TCAS) * values automtaically derived from DB data --- .../components/flightplancomponent.cpp | 261 +++- src/blackgui/components/flightplancomponent.h | 39 +- .../components/flightplancomponent.ui | 1157 ++++++++++------- 3 files changed, 903 insertions(+), 554 deletions(-) diff --git a/src/blackgui/components/flightplancomponent.cpp b/src/blackgui/components/flightplancomponent.cpp index f74662e2a..e97b0b4c5 100644 --- a/src/blackgui/components/flightplancomponent.cpp +++ b/src/blackgui/components/flightplancomponent.cpp @@ -9,6 +9,7 @@ #include "blackcore/context/contextnetwork.h" #include "blackcore/context/contextownaircraft.h" +#include "blackcore/context/contextsimulator.h" #include "blackcore/webdataservices.h" #include "blackgui/uppercasevalidator.h" #include "blackgui/components/flightplancomponent.h" @@ -37,14 +38,17 @@ #include #include #include +#include #include #include #include #include +#include #include using namespace BlackMisc; using namespace BlackMisc::Aviation; +using namespace BlackMisc::Network; using namespace BlackMisc::Simulation; using namespace BlackMisc::PhysicalQuantities; using namespace BlackGui; @@ -64,11 +68,15 @@ namespace BlackGui // UI ui->setupUi(this); + this->setCurrentIndex(0); // fix style this->tabBar()->setExpanding(false); this->tabBar()->setUsesScrollButtons(true); + // overlay + this->setOverlaySizeFactors(0.8, 0.9); + // validators CUpperCaseValidator *ucv = new CUpperCaseValidator(this); ui->le_Callsign->setValidator(ucv); @@ -149,36 +157,42 @@ namespace BlackGui void CFlightPlanComponent::loginDataSet() { - if (m_flightPlan.wasSentOrLoaded()) { return; } // when loaded or sent do not override - if (!sGui->getIContextOwnAircraft()) { return; } - - const CSimulatedAircraft ownAircraft(sGui->getIContextOwnAircraft()->getOwnAircraft()); - this->prefillWithAircraftData(ownAircraft); - this->prefillWithUserData(ownAircraft.getPilot()); + if (m_flightPlan.wasSentOrLoaded()) { return; } // when loaded or sent do not override + this->prefillWithOwnAircraftData(); } - void CFlightPlanComponent::prefillWithAircraftData(const BlackMisc::Simulation::CSimulatedAircraft &ownAircraft) + void CFlightPlanComponent::prefillWithOwnAircraftData() + { + if (!sGui->getIContextOwnAircraft()) { return; } + if (!sGui->getIContextSimulator()) { return; } + if (!sGui->getIContextSimulator()->isSimulatorAvailable()) { return; } + const CSimulatedAircraft ownAircraft(sGui->getIContextOwnAircraft()->getOwnAircraft()); + this->prefillWithAircraftData(ownAircraft); + } + + void CFlightPlanComponent::prefillWithAircraftData(const CSimulatedAircraft &aircraft) { if (m_flightPlan.wasSentOrLoaded()) { return; } // only override with valid values - if (CCallsign::isValidAircraftCallsign(ownAircraft.getCallsignAsString())) + if (CCallsign::isValidAircraftCallsign(aircraft.getCallsignAsString())) { - ui->le_Callsign->setText(ownAircraft.getCallsign().asString()); + ui->le_Callsign->setText(aircraft.getCallsign().asString()); } - if (CAircraftIcaoCode::isValidDesignator(ownAircraft.getAircraftIcaoCodeDesignator())) + if (CAircraftIcaoCode::isValidDesignator(aircraft.getAircraftIcaoCodeDesignator())) { - ui->le_AircraftType->setText(ownAircraft.getAircraftIcaoCodeDesignator()); - } - if (ownAircraft.hasValidRealName()) - { - ui->le_PilotsName->setText(ownAircraft.getPilot().getRealName()); + ui->le_AircraftType->setText(aircraft.getAircraftIcaoCodeDesignator()); } + m_model = aircraft.getModel(); + this->prefillWithUserData(aircraft.getPilot()); + this->buildPrefixIcaoSuffix(); } - void CFlightPlanComponent::prefillWithUserData(const Network::CUser &user) + void CFlightPlanComponent::prefillWithUserData(const CUser &user) { if (m_flightPlan.wasSentOrLoaded()) { return; } + + // only override with valid values if (user.hasValidRealName()) { ui->le_PilotsName->setText(user.getRealName()); @@ -217,12 +231,8 @@ namespace BlackGui switch (flightPlan.getFlightRulesAsVFRorIFR()) { - case CFlightPlan::VFR: - ui->rb_TypeVfr->setChecked(true); - break; - default: - ui->rb_TypeIfr->setChecked(true); - break; + case CFlightPlan::VFR: ui->cb_FlightRule->setCurrentText("VFR"); break; + default: ui->cb_FlightRule->setCurrentText("IFR"); break; } } @@ -385,7 +395,7 @@ namespace BlackGui } // OK - if (!messages.hasWarningOrErrorMessages()) + if (!messages.isFailure()) { messages.push_back(CStatusMessage(this).validationInfo("Flight plan validation passed")); } @@ -396,24 +406,31 @@ namespace BlackGui { CFlightPlan flightPlan; const CStatusMessageList messages = this->validateAndInitializeFlightPlan(flightPlan); - if (!messages.hasWarningOrErrorMessages()) + if (messages.isSuccess()) { // no error, send if possible - if (sGui->getIContextNetwork()->isConnected()) + CStatusMessage m; + QString lastSent; + if (sGui && sGui->getIContextNetwork()->isConnected()) { flightPlan.setWhenLastSentOrLoaded(QDateTime::currentDateTimeUtc()); sGui->getIContextNetwork()->sendFlightPlan(flightPlan); - ui->le_LastSent->setText(flightPlan.whenLastSentOrLoaded().toString()); - CLogMessage(this).info("Sent flight plan"); + lastSent = flightPlan.whenLastSentOrLoaded().toString(); + m = CStatusMessage(this).validationInfo("Sent flight plan"); } else { flightPlan.setWhenLastSentOrLoaded(QDateTime()); // empty - ui->le_LastSent->clear(); - CLogMessage(this).error("No errors, but not connected, cannot send flight plan"); + m = CStatusMessage(this).validationError("No errors, but not connected, cannot send flight plan"); } + ui->le_LastSent->setText(lastSent); + this->showOverlayMessage(m, showOverlayMs); m_flightPlan = flightPlan; // last valid FP } + else + { + this->showOverlayMessages(messages); + } } void CFlightPlanComponent::validateFlightPlan() @@ -425,9 +442,7 @@ namespace BlackGui void CFlightPlanComponent::resetFlightPlan() { - Q_ASSERT(sGui->getIContextNetwork()); - Q_ASSERT(sGui->getIContextOwnAircraft()); - if (sGui->getIContextOwnAircraft()) { this->prefillWithAircraftData(sGui->getIContextOwnAircraft()->getOwnAircraft()); } + this->prefillWithOwnAircraftData(); ui->le_AircraftRegistration->clear(); ui->le_AirlineOperator->clear(); ui->le_CrusingAltitude->setText("FL70"); @@ -440,6 +455,7 @@ namespace BlackGui ui->le_FuelOnBoard->setText(defaultTime()); ui->le_EstimatedTimeEnroute->setText(defaultTime()); ui->le_TakeOffTimePlanned->setText(QDateTime::currentDateTimeUtc().addSecs(30 * 60).toString("hh:mm")); + this->syncVoiceComboBoxes(ui->cb_VoiceCapabilities->itemText(0)); } void CFlightPlanComponent::loadFromDisk() @@ -603,7 +619,9 @@ namespace BlackGui void CFlightPlanComponent::copyRemarks() { - ui->pte_Remarks->setPlainText(ui->pte_RemarksGenerated->toPlainText()); + const QString generated = ui->pte_RemarksGenerated->toPlainText().trimmed(); + if (!this->overrideRemarks()) { return; } + ui->pte_Remarks->setPlainText(generated); CLogMessage(this).info("Copied remarks"); } @@ -617,15 +635,158 @@ namespace BlackGui this->initCompleters(); } - CIdentifier CFlightPlanComponent::flightPlanIdentifier() + void CFlightPlanComponent::buildPrefixIcaoSuffix() { - if (m_identifier.getName().isEmpty()) { m_identifier = CIdentifier(QStringLiteral("FLIGHTPLANCOMPONENT")); } - return m_identifier; + ui->le_PrefixIcaoSuffix->setText(this->getPrefixIcaoSuffix()); + } + + void CFlightPlanComponent::prefixCheckBoxChanged() + { + QObject *sender = QObject::sender(); + if (sender == ui->cb_Heavy) + { + if (ui->cb_Heavy->isChecked()) + { + QTimer::singleShot(10, this, [ = ] + { + ui->cb_Tcas->setChecked(false); + this->buildPrefixIcaoSuffix(); + }); + return; + } + } + else if (sender == ui->cb_Tcas) + { + if (ui->cb_Tcas->isChecked()) + { + QTimer::singleShot(10, this, [ = ] + { + ui->cb_Heavy->setChecked(false); + this->buildPrefixIcaoSuffix(); + }); + return; + } + } + this->buildPrefixIcaoSuffix(); + } + + void CFlightPlanComponent::aircraftTypeChanged() + { + const CAircraftIcaoCode icao = this->getAircraftIcaoCode(); + if (!icao.isLoadedFromDb()) { return; } + QTimer::singleShot(25, this, [ = ] + { + const bool heavy = icao.getWtc().startsWith("H"); + ui->cb_Heavy->setChecked(heavy); + if (heavy) { ui->cb_Tcas->setChecked(false); } + this->buildPrefixIcaoSuffix(); + }); + } + + QString CFlightPlanComponent::getPrefixIcaoSuffix() const + { + QString prefix; + if (ui->cb_Heavy->isChecked()) { prefix = QStringLiteral("H"); } + else if (ui->cb_Tcas->isChecked()) { prefix = QStringLiteral("T"); } + + return CFlightPlan::concatPrefixIcaoSuffix(prefix, ui->le_AircraftType->text().toUpper().trimmed(), ui->le_EquipmentSuffix->text().trimmed().toUpper()); + } + + CAircraftIcaoCode CFlightPlanComponent::getAircraftIcaoCode() const + { + const QString designator(ui->le_AircraftType->text()); + if (!sApp || !sApp->hasWebDataServices() || !CAircraftIcaoCode::isValidDesignator(designator)) { return CAircraftIcaoCode(); } + return sApp->getWebDataServices()->getAircraftIcaoCodeForDesignator(designator); + } + + void CFlightPlanComponent::showEquipmentCodesTab() + { + this->setCurrentWidget(ui->tb_EquipmentCodes); + } + + bool CFlightPlanComponent::isVfr() const + { + const bool vfr = ui->cb_FlightRule->currentText().startsWith("V", Qt::CaseInsensitive); + return vfr; + } + + bool CFlightPlanComponent::overrideRemarks() + { + if (!ui->pte_Remarks->toPlainText().trimmed().isEmpty()) + { + const int reply = QMessageBox::question(this, "Remarks", "Override existing remarks?", QMessageBox::Yes | QMessageBox::No); + if (reply != QMessageBox::Yes) { return false; } + } + return true; + } + + void CFlightPlanComponent::anticipateValues() + { + if (!this->overrideRemarks()) { return; } + CStatusMessageList msgs; + const bool vfr = this->isVfr(); + const bool airline = m_model.hasAirlineDesignator(); + + if (vfr) + { + ui->cb_NoSidsStarts->setChecked(true); + msgs.push_back(CStatusMessage(this).validationInfo("No SID/STARs")); + ui->cb_RequiredNavigationPerformance->setCurrentIndex(0); + ui->cb_PerformanceCategory->setCurrentIndex(0); + ui->cb_NavigationEquipment->setCurrentIndex(0); + msgs.push_back(CStatusMessage(this).validationInfo("Set navigation and performance to VFR")); + } + else + { + // IFR + const CAircraftIcaoCode icao = this->getAircraftIcaoCode(); + if (icao.isLoadedFromDb()) + { + if (icao.getEngineCount() >= 2 && icao.getEngineType() == "J") + { + // jet with >=2 engines + msgs.push_back(CStatusMessage(this).validationInfo("Jet >=2 engines")); + msgs.push_back(CStatusMessage(this).validationInfo("SID/STARs")); + ui->cb_NoSidsStarts->setChecked(false); + ui->cb_NavigationEquipment->setCurrentText("GPS or FMC capable of SIDs/STARs"); + msgs.push_back(CStatusMessage(this).validationInfo("GPS or FMC capable of SIDs/STARs")); + + // reset those values + ui->cb_RequiredNavigationPerformance->setCurrentIndex(0); + ui->cb_PerformanceCategory->setCurrentIndex(0); + } + } // ICAO + } + + // further info if having model from DB + if (m_model.isLoadedFromDb()) + { + if (airline) + { + ui->le_AirlineOperator->setText(m_model.getAirlineIcaoCode().getName()); + } + } + + // messages + this->showOverlayMessages(msgs, false, showOverlayMs); + + // copy over + if (msgs.isSuccess()) + { + this->buildRemarksString(); + this->copyRemarks(false); + } + } + + const CIdentifier &CFlightPlanComponent::flightPlanIdentifier() + { + static const CIdentifier i(QStringLiteral("FLIGHTPLANCOMPONENT")); + return i; } void CFlightPlanComponent::initCompleters() { - if (!sGui || !sGui->getWebDataServices()) { return; } + if (!sGui || !sGui->hasWebDataServices()) { return; } const QStringList aircraft(sGui->getWebDataServices()->getAircraftIcaoCodes().allIcaoCodes().toList()); ui->le_AircraftType->setCompleter(new QCompleter(aircraft, this)); @@ -639,18 +800,15 @@ namespace BlackGui QString CFlightPlanComponent::getDefaultFilename(bool load) { // some logic to find a useful default name - QString dir = CDirectoryUtils::documentationDirectory(); - - if (load) - { - return CFileUtils::appendFilePaths(dir, CFileUtils::jsonWildcardAppendix()); - } + const QString dir = CDirectoryUtils::documentationDirectory(); + if (load) { return CFileUtils::appendFilePaths(dir, CFileUtils::jsonWildcardAppendix()); } // Save file path QString name("Flight plan"); if (!ui->le_DestinationAirport->text().isEmpty() && !ui->le_OriginAirport->text().isEmpty()) { - name.append(" ").append(ui->le_OriginAirport->text()).append("-").append(ui->le_DestinationAirport->text()); + name += QStringLiteral(" ") % ui->le_OriginAirport->text() % + QStringLiteral("-") % ui->le_DestinationAirport->text(); } if (!name.endsWith(CFileUtils::jsonAppendix(), Qt::CaseInsensitive)) @@ -659,5 +817,20 @@ namespace BlackGui } return CFileUtils::appendFilePaths(dir, name); } + + void CFlightPlanComponent::syncVoiceComboBoxes(const QString &text) + { + const QObject *sender = QObject::sender(); + if (sender == ui->cb_VoiceCapabilities) + { + ui->cb_VoiceCapabilitiesFirstPage->setCurrentText(text); + } + else + { + ui->cb_VoiceCapabilities->setCurrentText(text); + const QString r = CFlightPlanRemarks::replaceVoiceCapabilities(CFlightPlanRemarks::textToVoiceCapabilities(text), ui->pte_Remarks->toPlainText()); + ui->pte_Remarks->setPlainText(r); + } + } } // namespace } // namespace diff --git a/src/blackgui/components/flightplancomponent.h b/src/blackgui/components/flightplancomponent.h index dacca1bfc..cb84b5671 100644 --- a/src/blackgui/components/flightplancomponent.h +++ b/src/blackgui/components/flightplancomponent.h @@ -14,8 +14,12 @@ #include "blackgui/overlaymessagesframe.h" #include "blackgui/blackguiexport.h" +#include "blackmisc/simulation/data/lastmodel.h" +#include "blackmisc/simulation/simulatedaircraft.h" #include "blackmisc/aviation/flightplan.h" +#include "blackmisc/network/data/lastserver.h" #include "blackmisc/network/user.h" +#include "blackmisc/datacache.h" #include "blackmisc/identifier.h" #include "blackmisc/statusmessagelist.h" @@ -27,7 +31,6 @@ #include namespace Ui { class CFlightPlanComponent; } -namespace BlackMisc { namespace Simulation { class CSimulatedAircraft; } } namespace BlackGui { namespace Components @@ -44,16 +47,9 @@ namespace BlackGui //! Destructor virtual ~CFlightPlanComponent(); - public slots: //! Login data were set void loginDataSet(); - //! Prefill with aircraft data - void prefillWithAircraftData(const BlackMisc::Simulation::CSimulatedAircraft &ownAircraft); - - //! Prefill with user data - void prefillWithUserData(const BlackMisc::Network::CUser &user); - //! Prefill with aircraft dara void fillWithFlightPlanData(const BlackMisc::Aviation::CFlightPlan &flightPlan); @@ -62,24 +58,34 @@ namespace BlackGui private: QScopedPointer ui; + BlackMisc::Aviation::CFlightPlan m_flightPlan; //!< My flight plan + BlackMisc::Simulation::CAircraftModel m_model; //!< currently used model + BlackMisc::CIdentifier m_identifier; //!< Flightplan identifier + BlackMisc::CDataReadOnly m_lastAircraftModel { this }; //!< recently used aircraft model + BlackMisc::CDataReadOnly m_lastServer { this }; //!< recently used server (VATSIM, other) - //! My flight plan - BlackMisc::Aviation::CFlightPlan m_flightPlan; + static constexpr int showOverlayMs = 5000; //! Validate, generates status messages BlackMisc::CStatusMessageList validateAndInitializeFlightPlan(BlackMisc::Aviation::CFlightPlan &fligtPlan); - //! Flightplan identifier - BlackMisc::CIdentifier m_identifier; - - //! Default value for airport ICAO airports + //! Default value for ICAO airports static const QString &defaultIcao() { static const QString d("ICAO"); return d; } //! Default value for time static const QString &defaultTime() { static const QString t("00:00"); return t; } //! Identifier - BlackMisc::CIdentifier flightPlanIdentifier(); + static const BlackMisc::CIdentifier &flightPlanIdentifier(); + + //! Prefill with own aircraft data + void prefillWithOwnAircraftData(); + + //! Prefill with aircraft data + void prefillWithAircraftData(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + + //! Prefill with user data + void prefillWithUserData(const BlackMisc::Network::CUser &user); //! Set completers void initCompleters(); @@ -90,6 +96,9 @@ namespace BlackGui //! Call \sa buildRemarksString from combo box signal void currentTextChangedToBuildRemarks(const QString &text) { this->buildRemarksString(); Q_UNUSED(text); } + //! Voice combo boxes shall display the same + void syncVoiceComboBoxes(const QString &text); + //! Send flightplan void sendFlightPlan(); diff --git a/src/blackgui/components/flightplancomponent.ui b/src/blackgui/components/flightplancomponent.ui index e00f00722..87a55d93b 100644 --- a/src/blackgui/components/flightplancomponent.ui +++ b/src/blackgui/components/flightplancomponent.ui @@ -6,8 +6,8 @@ 0 0 - 420 - 345 + 368 + 512 @@ -17,19 +17,10 @@ 0 - - - 0 - 0 - - Flight plan - - 2 - 2 @@ -44,18 +35,6 @@ - - - 0 - 0 - - - - QFrame::NoFrame - - - 0 - true @@ -76,22 +55,22 @@ - 2 + 0 - 2 + 0 - 2 + 0 - 2 + 0 - 2 + 0 - + 2 @@ -104,11 +83,43 @@ 2 - - 6 + + 4 + + + + &Reset + + + + :/pastel/icons/pastel/16/arrow-refresh.png:/pastel/icons/pastel/16/arrow-refresh.png + + + + + + + &Prefill + + + + :/diagona/icons/diagona/icons/compass--pencil.png:/diagona/icons/diagona/icons/compass--pencil.png + + + + + + + 9. Destination airport + + + true + + + - + 12. Fuel on board @@ -117,226 +128,33 @@ - - - - 40 - - - e.g. 100 kts - - - - - - - Validate - - - - - - - Save to disk - - - Save - - - - :/pastel/icons/pastel/16/disk.png:/pastel/icons/pastel/16/disk.png - - - - - - - 4 - - - ICAO, e.g. EDDF - - - - - - - 3. Aircraft type - - - false - - - true - - - - - - - 2. Callsign - - - false - - - true - - - - - - - 14. Pilots name / homebase - - - true - - - - + Sent - - + + + + pilot's name + - 5. Departure airport + 14. Pilot / homebase true - + true - - - - - - 7. Cruising altitude - - - true - - - - - - - 99:99 - - - 00:00 - - hh:mm e.g. 02:30 - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 10 - - - - - - - - 9.Destination airport - - - true - - - - - - - - 0 - 0 - - - - - 16777215 - 75 - - - - 1 - - - - - - - 6. Departure time - - - true - - - - - - - 10. Estimated time enroute - - - true - - - - - - - 4 - - - ICAO, e.g. EDDF - - - - - - - 4. True airspeed - - - true - - - - - - - Load flight plan from network - - - Load - - - - :/diagona/icons/diagona/icons/network-cloud.png:/diagona/icons/diagona/icons/network-cloud.png + sent time will go here (read only) @@ -356,41 +174,6 @@ - - - - Reset - - - - - - - - - 11. Remarks - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - generator - - - - - - - - - true - - - @@ -401,18 +184,54 @@ - - + + - 40 + 4 - e.g. FL70 + ICAO, e.g. EDDF - - + + + + Estimated time enroute + + + 10. Est.time enroute + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + true + + + pilot's name (read only) + + @@ -424,16 +243,80 @@ + + + + + 16777215 + 75 + + + + + + + + true + + + homebase (read only) + + + + + + + 8. Route + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + + + ICAO, e.g. A321 + + + + + + + 7. Cruising altitude + + + true + + + - - - 99:99 + + + 6. Departure time + + + true + + + + + + + 40 + + + e.g. 100 kts + + + + + + + copy from generator page - 00:00 - - - 5 + from gen. @@ -450,38 +333,264 @@ - - + + - 8. Route + 5. Departure airport + + + true - - + + + + + Full voice + + + + + Text only + + + + + Receive voice + + + + + + + + + + equipment code help + + + equipment code help + + + ... + + + + :/pastel/icons/pastel/16/help.png:/pastel/icons/pastel/16/help.png + + + + + + + 1 + + + equip.code + + + + + + + + + true + + + P/ICAO/S + + + + + + + 99:99 + + + 00:00 + + + 5 + + + + + + + 1. Type + + + + + + + 40 + + + e.g. FL70 + + + + + + + 2. Callsign + + + false + + + true + + + + + + + 4 + + + ICAO, e.g. EDDF + + + + + - Send flight plan to network + Aircraft type - Send + 3. Aircraft - - - :/diagona/icons/diagona/icons/network-cloud.png:/diagona/icons/diagona/icons/network-cloud.png + + false + + + true - - + + + + True airspeed + + + 4. TAS + + + true + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Equipment + + + 3. Equip.: + + + + + + + H/ heavy prefix + + + Heavy + + + + + + + T/ TCAS prefix + + + TCAS + + + + + + + + + + goto generator page + + + goto gen. + + + + + + + 99:99 + + + 00:00 + + + hh:mm e.g. 02:30 + + + + + + + 11. Remarks + + + + + 16777215 75 + + enter remarks here or use "generator" + - + + + + Save to disk + + + Save + + + + :/pastel/icons/pastel/16/disk.png:/pastel/icons/pastel/16/disk.png + + + + Load from disk @@ -495,72 +604,64 @@ - - - - ICAO, e.g. A321 + + + + strict &check + + + + + + + &Validate + + + + :/diagona/icons/diagona/icons/abacus.png:/diagona/icons/diagona/icons/abacus.png - - - Qt::Vertical + + + Load flight plan from network - - QSizePolicy::Fixed - - - - 20 - 24 - - - - - - - 1. Type + Load + + + + :/diagona/icons/diagona/icons/network-cloud.png:/diagona/icons/diagona/icons/network-cloud.png - - - - - 6 + + + + + IFR - - 4 + + + + VFR - - 2 - - - 2 - - - 2 - - - - - VFR - - - - - - - IFR - - - true - - - - + + + + + + + Send flight plan to network + + + Send + + + + :/diagona/icons/diagona/icons/network-cloud.png:/diagona/icons/diagona/icons/network-cloud.png + @@ -573,12 +674,9 @@ - Remarks + Remarks generator - - 2 - 2 @@ -593,12 +691,6 @@ - - QFrame::NoFrame - - - 0 - true @@ -641,7 +733,30 @@ 2 - + + 6 + + + + + Remarks + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + Required Navigation Performance + + + true + + + + QFrame::StyledPanel @@ -667,49 +782,7 @@ - - - - Remarks - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - Required Navigation Performance - - - true - - - - - - - - 0 - 0 - - - - - 16777215 - 75 - - - - true - - - - - - - + @@ -743,7 +816,10 @@ - + + + + Performance category @@ -753,7 +829,7 @@ - + @@ -782,6 +858,16 @@ + + + + QFrame::StyledPanel + + + QFrame::Raised + + + @@ -792,23 +878,13 @@ - + Pilot rating - - - - QFrame::StyledPanel - - - QFrame::Raised - - - @@ -819,52 +895,7 @@ - - - - - 0 - 0 - - - - - 16777215 - 75 - - - - - - - - - Full voice - - - - - Text only - - - - - Receive voice - - - - - - - - - - - SELCAL - - - - + Final Approach Speed @@ -901,7 +932,62 @@ - + + + + + Full voice + + + + + Text only + + + + + Receive voice + + + + + + + + + + + SELCAL + + + + + + + + 16777215 + 75 + + + + simulator related remarks + + + + + + + Additional remarks + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + false + + + + How will you be navigating? @@ -933,20 +1019,14 @@ - - + + - Additional remarks - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - false + no SIDs / STARs - + Voice capabilities @@ -956,13 +1036,6 @@ - - - - no SIDs / STARs - - - @@ -970,6 +1043,22 @@ + + + + + 16777215 + 75 + + + + true + + + generated remarks + + + @@ -978,6 +1067,68 @@ + + + Equipment codes + + + + 4 + + + 4 + + + 4 + + + 4 + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.1pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">FAA equipment codes</span><span style=" font-size:8pt;"> (Wikipedia) </span></p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" font-size:8pt;" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">NO DME:</li> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 2;"><li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/X No transponder</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/T Transponder with no Mode C</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/U Transponder with Mode C</li></ul> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">DME:</li> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 2;"><li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/D No transponder</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/B Transponder with no Mode C</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/A Transponder with Mode C</li></ul> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">TACAN only:</li> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 2;"><li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/M No transponder</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/N Transponder with no Mode C</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/P Transponder with Mode C</li></ul> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Basic RNAV:</li> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 2;"><li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/Y LORAN, VOR/DME, or INS with no transponder</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/C LORAN, VOR/DME, or INS, transponder with no Mode C</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/I LORAN, VOR/DME, or INS, transponder with Mode C</li></ul> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Advanced RNAV with Transponder and mode C:</li> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 2;"><li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/L RNAV capability with Global Navigation Satellite System (GNSS), including GPS or Wide Area Augmentation System (WAAS) with en route and terminal capability, and with RVSM</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/G RNAV capability with GNSS and without RVSM</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/Z RNAV capability without GNSS and with RVSM</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/I RNAV capability without GNSS and without RVSM</li></ul> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">RVSM (Reduced Vertical Separation Minimum):</li></ul> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 2;"><li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/W RVSM</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/L RVSM and /G </li></ul> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">SquawkBox codes</span><span style=" font-size:8pt;"> (complemtary, obsolete)</span><span style=" font-size:8pt; font-weight:600;"> </span></p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" font-size:8pt;" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/E Flight Management System (FMS) with DME/DME and IRU positioning updating</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/F Flight Management System (FMS) with DME/DME positioning updating</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/G Global Navigation Satellite System (GNSS), including GPS or Wide Area Augmentation System</li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/R Required navigation performance, the aircraft meets the RNP type prescribed for the route segment(s), route(s) and or area concerned </li> +<li style=" font-size:8pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">/J /K /L /Q same as /E /F /G /R with RVSM</li></ul> +<p style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;"> </span></p></body></html> + + + + + @@ -988,11 +1139,16 @@ - rb_TypeVfr - rb_TypeIfr + sa_FlightPlanTabMain + cb_FlightRule le_Callsign le_AircraftType le_CruiseTrueAirspeed + cb_Heavy + cb_Tcas + le_PrefixIcaoSuffix + le_EquipmentSuffix + tb_HelpEquipment le_OriginAirport le_TakeOffTimePlanned le_CrusingAltitude @@ -1001,24 +1157,35 @@ le_EstimatedTimeEnroute le_FuelOnBoard le_AlternateAirport + cb_VoiceCapabilitiesFirstPage + pb_RemarksGenerator + pb_GetFromGenerator pte_Remarks le_PilotsName le_PilotsHomeBase - pb_Reset - pb_Load + le_LastSent pb_Send + pb_Load + pb_ValidateFlightPlan + cb_StrictCheck + pb_SaveDisk + pb_LoadDisk + pb_Prefill + pb_Reset + sa_RemarksGenerator + le_AirlineOperator + le_AircraftRegistration + cb_NoSidsStarts + cb_NavigationEquipment + cb_RequiredNavigationPerformance + cb_PerformanceCategory + cb_VoiceCapabilities + cb_PilotRating + pte_RemarksGenerated + pte_AdditionalRemarks pb_Parse pb_CopyOver - pte_RemarksGenerated - le_AirlineOperator - cb_PilotRating - cb_RequiredNavigationPerformance - pte_AdditionalRemarks - cb_VoiceCapabilities - le_AircraftRegistration - cb_PerformanceCategory - cb_NavigationEquipment - cb_NoSidsStarts + tbr_EquipmentCodes