diff --git a/src/blackcore/airspacemonitor.cpp b/src/blackcore/airspacemonitor.cpp index 39e30faa3..02827c976 100644 --- a/src/blackcore/airspacemonitor.cpp +++ b/src/blackcore/airspacemonitor.cpp @@ -160,14 +160,17 @@ namespace BlackCore // use cache, but not for own callsign (always reload) if (m_flightPlanCache.contains(callsign)) { plan = m_flightPlanCache[callsign]; } - if (!plan.wasSentOrLoaded() || plan.timeDiffSentOrLoadedMs() > 30 * 1000) + const bool ownAircraft = this->getOwnCallsign() == callsign; + if (ownAircraft || !plan.wasSentOrLoaded() || plan.timeDiffSentOrLoadedMs() > 30 * 1000) { - // outdated, or not in cache at all + // outdated, or not in cache at all, or NOT own aircraft + plan = CFlightPlan(); // reset + m_flightPlanCache.remove(callsign); m_network->sendFlightPlanQuery(callsign); // with this little trick we try to make an asynchronous signal / slot // based approach a synchronous return value - const QTime waitForFlightPlan = QTime::currentTime().addMSecs(1000); + const QTime waitForFlightPlan = QTime::currentTime().addMSecs(1500); while (sApp && QTime::currentTime() < waitForFlightPlan) { // process some other events and hope network answer is received already diff --git a/src/blackcore/context/contextownaircraftimpl.cpp b/src/blackcore/context/contextownaircraftimpl.cpp index cce534142..9eafd2bdb 100644 --- a/src/blackcore/context/contextownaircraftimpl.cpp +++ b/src/blackcore/context/contextownaircraftimpl.cpp @@ -109,6 +109,12 @@ namespace BlackCore return m_ownAircraft.getTransponder(); } + CCallsign CContextOwnAircraft::getOwnCallsign() const + { + QReadLocker l(&m_lockAircraft); + return m_ownAircraft.getCallsign(); + } + CCoordinateGeodetic CContextOwnAircraft::getOwnAircraftPosition() const { QReadLocker l(&m_lockAircraft); diff --git a/src/blackcore/context/contextownaircraftimpl.h b/src/blackcore/context/contextownaircraftimpl.h index d73195307..a6e2b4f18 100644 --- a/src/blackcore/context/contextownaircraftimpl.h +++ b/src/blackcore/context/contextownaircraftimpl.h @@ -81,6 +81,10 @@ namespace BlackCore virtual ~CContextOwnAircraft() override; // IOwnAircraftProvider overrides + //! \copydoc BlackMisc::Simulation::IOwnAircraftProvider::getOwnCallsign + //! \ingroup ownaircraftprovider + virtual BlackMisc::Aviation::CCallsign getOwnCallsign() const override; + //! \copydoc BlackMisc::Simulation::IOwnAircraftProvider::getOwnAircraftPosition //! \ingroup ownaircraftprovider virtual BlackMisc::Geo::CCoordinateGeodetic getOwnAircraftPosition() const override; diff --git a/src/blackgui/components/flightplancomponent.cpp b/src/blackgui/components/flightplancomponent.cpp index 1b8d76414..5cfd6f274 100644 --- a/src/blackgui/components/flightplancomponent.cpp +++ b/src/blackgui/components/flightplancomponent.cpp @@ -122,15 +122,15 @@ namespace BlackGui // connect connect(ui->pb_Send, &QPushButton::pressed, this, &CFlightPlanComponent::sendFlightPlan, Qt::QueuedConnection); - connect(ui->pb_Load, &QPushButton::pressed, this, &CFlightPlanComponent::loadFlightPlanFromNetwork, Qt::QueuedConnection); + connect(ui->pb_Download, &QPushButton::pressed, this, &CFlightPlanComponent::loadFlightPlanFromNetwork, Qt::QueuedConnection); connect(ui->pb_Reset, &QPushButton::pressed, this, &CFlightPlanComponent::resetFlightPlan, Qt::QueuedConnection); connect(ui->pb_ValidateFlightPlan, &QPushButton::pressed, this, &CFlightPlanComponent::validateFlightPlan, Qt::QueuedConnection); connect(ui->tb_SyncWithSimulator, &QPushButton::released, this, &CFlightPlanComponent::syncWithSimulator, Qt::QueuedConnection); connect(ui->pb_Prefill, &QPushButton::pressed, this, &CFlightPlanComponent::anticipateValues, Qt::QueuedConnection); connect(ui->pb_SimBrief, &QPushButton::pressed, this, &CFlightPlanComponent::loadFromSimBrief, Qt::QueuedConnection); - connect(ui->cb_VoiceCapabilities, &QComboBox::currentTextChanged, this, &CFlightPlanComponent::currentTextChangedToBuildRemarks, Qt::QueuedConnection); - connect(ui->cb_VoiceCapabilities, &QComboBox::currentTextChanged, this, &CFlightPlanComponent::syncVoiceComboBoxes, Qt::QueuedConnection); + connect(ui->cb_VoiceCapabilities, &QComboBox::currentTextChanged, this, &CFlightPlanComponent::currentTextChangedToBuildRemarks, Qt::QueuedConnection); + connect(ui->cb_VoiceCapabilities, &QComboBox::currentTextChanged, this, &CFlightPlanComponent::syncVoiceComboBoxes, Qt::QueuedConnection); connect(ui->cb_VoiceCapabilitiesFirstPage, &QComboBox::currentTextChanged, this, &CFlightPlanComponent::syncVoiceComboBoxes, Qt::QueuedConnection); connect(ui->cb_NavigationEquipment, &QComboBox::currentTextChanged, this, &CFlightPlanComponent::currentTextChangedToBuildRemarks, Qt::QueuedConnection); connect(ui->cb_PerformanceCategory, &QComboBox::currentTextChanged, this, &CFlightPlanComponent::currentTextChangedToBuildRemarks, Qt::QueuedConnection); @@ -273,7 +273,8 @@ namespace BlackGui if (!flightPlan.getRemarks().isEmpty()) { - this->setRemarksUIValues(flightPlan.getRemarks()); + const QString rem = flightPlan.getRemarks(); + this->setRemarksUIValues(rem); } } @@ -287,7 +288,7 @@ namespace BlackGui { CStatusMessageList messages; const bool strict = ui->cb_StrictCheck->isChecked(); - const bool vfr = this->isVfr(); + const bool vfr = this->isVfr(); const CStatusMessage::StatusSeverity severity = strict ? CStatusMessage::SeverityError : CStatusMessage::SeverityWarning; messages.push_back(CStatusMessage(this).validationInfo(strict ? QStringLiteral("Strict validation") : QStringLiteral("Lenient validation"))); @@ -952,7 +953,7 @@ namespace BlackGui else if (remarks.contains("/T")) { CGuiUtility::setComboBoxValueByContainingString(ui->cb_VoiceCapabilitiesFirstPage, "TEXT ONLY"); - CGuiUtility::setComboBoxValueByContainingString(ui->cb_VoiceCapabilities, "FULL"); + CGuiUtility::setComboBoxValueByContainingString(ui->cb_VoiceCapabilities, "TEXT ONLY"); } else if (remarks.contains("/R")) { diff --git a/src/blackgui/components/flightplancomponent.ui b/src/blackgui/components/flightplancomponent.ui index 2e7f4847d..dcf8570ab 100644 --- a/src/blackgui/components/flightplancomponent.ui +++ b/src/blackgui/components/flightplancomponent.ui @@ -42,7 +42,7 @@ 0 - -15 + 0 371 504 @@ -696,7 +696,7 @@ - + Load flight plan from network diff --git a/src/blackgui/guiutility.cpp b/src/blackgui/guiutility.cpp index ed0891146..7001e78ed 100644 --- a/src/blackgui/guiutility.cpp +++ b/src/blackgui/guiutility.cpp @@ -250,11 +250,13 @@ namespace BlackGui if (!box) { return false; } if (!candidate.isEmpty()) { + const int ci = box->currentIndex(); for (int i = 0; i < box->count(); i++) { const QString t(box->itemText(i)); if (t.contains(candidate, Qt::CaseInsensitive)) { + if (ci == i) { return true; } // avoid signals box->setCurrentIndex(i); return true; } @@ -263,11 +265,13 @@ namespace BlackGui // not found if (unspecified.isEmpty()) { return false; } + const int ci = box->currentIndex(); for (int i = 0; i < box->count(); i++) { const QString t(box->itemText(i)); if (t.contains(unspecified, Qt::CaseInsensitive)) { + if (ci == i) { return true; } // avoid signals box->setCurrentIndex(i); return true; } diff --git a/src/blackmisc/simulation/ownaircraftprovider.cpp b/src/blackmisc/simulation/ownaircraftprovider.cpp index f23ac0cd0..80e7b02eb 100644 --- a/src/blackmisc/simulation/ownaircraftprovider.cpp +++ b/src/blackmisc/simulation/ownaircraftprovider.cpp @@ -33,6 +33,12 @@ namespace BlackMisc return this->provider()->getOwnAircraft(); } + CCallsign COwnAircraftAware::getOwnCallsign() const + { + Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available"); + return this->provider()->getOwnCallsign(); + } + CCoordinateGeodetic COwnAircraftAware::getOwnAircraftPosition() const { Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available"); diff --git a/src/blackmisc/simulation/ownaircraftprovider.h b/src/blackmisc/simulation/ownaircraftprovider.h index 2e8a31145..3121b8795 100644 --- a/src/blackmisc/simulation/ownaircraftprovider.h +++ b/src/blackmisc/simulation/ownaircraftprovider.h @@ -17,6 +17,7 @@ #include "blackmisc/aviation/airlineicaocode.h" #include "blackmisc/aviation/comsystem.h" #include "blackmisc/aviation/selcal.h" +#include "blackmisc/aviation/callsign.h" #include "blackmisc/geo/coordinategeodetic.h" #include "blackmisc/pq/frequency.h" #include "blackmisc/pq/length.h" @@ -33,7 +34,6 @@ namespace BlackMisc { class CAircraftIcaoCode; class CAircraftSituation; - class CCallsign; } namespace Simulation @@ -46,6 +46,10 @@ namespace BlackMisc //! \threadsafe virtual CSimulatedAircraft getOwnAircraft() const = 0; + //! Own aircraft's callsign + //! \threadsafe + virtual Aviation::CCallsign getOwnCallsign() const = 0; + //! Own aircraft COM unit //! \threadsafe virtual Aviation::CComSystem getOwnComSystem(Aviation::CComSystem::ComUnit unit) const = 0; @@ -129,6 +133,9 @@ namespace BlackMisc //! \copydoc IOwnAircraftProvider::getOwnAircraft CSimulatedAircraft getOwnAircraft() const; + //! \copydoc IOwnAircraftProvider::getOwnCallsign + Aviation::CCallsign getOwnCallsign() const; + //! \copydoc IOwnAircraftProvider::getOwnAircraftPosition BlackMisc::Geo::CCoordinateGeodetic getOwnAircraftPosition() const; diff --git a/src/blackmisc/simulation/ownaircraftproviderdummy.cpp b/src/blackmisc/simulation/ownaircraftproviderdummy.cpp index 97853a60c..d38bd12c4 100644 --- a/src/blackmisc/simulation/ownaircraftproviderdummy.cpp +++ b/src/blackmisc/simulation/ownaircraftproviderdummy.cpp @@ -22,6 +22,12 @@ namespace BlackMisc return m_ownAircraft; } + CCallsign COwnAircraftProviderDummy::getOwnCallsign() const + { + QReadLocker l(&m_lock); + return m_ownAircraft.getCallsign(); + } + CComSystem COwnAircraftProviderDummy::getOwnComSystem(CComSystem::ComUnit unit) const { QReadLocker l(&m_lock); diff --git a/src/blackmisc/simulation/ownaircraftproviderdummy.h b/src/blackmisc/simulation/ownaircraftproviderdummy.h index be9ae19c3..25f6088e7 100644 --- a/src/blackmisc/simulation/ownaircraftproviderdummy.h +++ b/src/blackmisc/simulation/ownaircraftproviderdummy.h @@ -56,6 +56,9 @@ namespace BlackMisc //! \copydoc IOwnAircraftProvider::getOwnAircraft virtual CSimulatedAircraft getOwnAircraft() const override; + //! \copydoc IOwnAircraftProvider::getOwnCallsign + virtual Aviation::CCallsign getOwnCallsign() const override; + //! \copydoc IOwnAircraftProvider::getOwnComSystem virtual Aviation::CComSystem getOwnComSystem(Aviation::CComSystem::ComUnit unit) const override;