diff --git a/src/blackcore/context/contextsimulator.h b/src/blackcore/context/contextsimulator.h index 1c6ec23b9..d25b52118 100644 --- a/src/blackcore/context/contextsimulator.h +++ b/src/blackcore/context/contextsimulator.h @@ -155,7 +155,7 @@ namespace BlackCore virtual BlackMisc::Simulation::CSimulatorInternals getSimulatorInternals() const = 0; //! Airports in range - virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const = 0; + virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculateDistance) const = 0; //! Installed models in simulator eco system //! \note might be slow since list can be big diff --git a/src/blackcore/context/contextsimulatorempty.h b/src/blackcore/context/contextsimulatorempty.h index 81b3f2418..1b4d3e9c2 100644 --- a/src/blackcore/context/contextsimulatorempty.h +++ b/src/blackcore/context/contextsimulatorempty.h @@ -73,8 +73,9 @@ namespace BlackCore } //! \copydoc IContextSimulator::getAirportsInRange - virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override + virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculatePosition) const override { + Q_UNUSED(recalculatePosition); logEmptyContextWarning(Q_FUNC_INFO); return BlackMisc::Aviation::CAirportList(); } diff --git a/src/blackcore/context/contextsimulatorimpl.cpp b/src/blackcore/context/contextsimulatorimpl.cpp index bb2b69f6c..3cb861856 100644 --- a/src/blackcore/context/contextsimulatorimpl.cpp +++ b/src/blackcore/context/contextsimulatorimpl.cpp @@ -166,7 +166,7 @@ namespace BlackCore return m_simulatorPlugin.second->getSimulatorInternals(); } - CAirportList CContextSimulator::getAirportsInRange() const + CAirportList CContextSimulator::getAirportsInRange(bool recalculateDistance) const { if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; } // If no ISimulator object is available, return a dummy. @@ -176,7 +176,7 @@ namespace BlackCore } Q_ASSERT(m_simulatorPlugin.second); - return m_simulatorPlugin.second->getAirportsInRange(); + return m_simulatorPlugin.second->getAirportsInRange(recalculateDistance); } CAircraftModelList CContextSimulator::getModelSet() const diff --git a/src/blackcore/context/contextsimulatorimpl.h b/src/blackcore/context/contextsimulatorimpl.h index 418ade92e..f623eb5dd 100644 --- a/src/blackcore/context/contextsimulatorimpl.h +++ b/src/blackcore/context/contextsimulatorimpl.h @@ -78,7 +78,7 @@ namespace BlackCore virtual int checkListeners() override; virtual int getSimulatorStatus() const override; virtual BlackMisc::Simulation::CSimulatorInternals getSimulatorInternals() const override; - virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; + virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculateDistance) const override; virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override; virtual BlackMisc::Simulation::CSimulatorInfo getModelSetLoaderSimulator() const override; virtual void setModelSetLoaderSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override; diff --git a/src/blackcore/context/contextsimulatorproxy.cpp b/src/blackcore/context/contextsimulatorproxy.cpp index adf1d4d44..7854de698 100644 --- a/src/blackcore/context/contextsimulatorproxy.cpp +++ b/src/blackcore/context/contextsimulatorproxy.cpp @@ -101,9 +101,9 @@ namespace BlackCore return m_dBusInterface->callDBusRet(QLatin1String("getSimulatorStatus")); } - CAirportList CContextSimulatorProxy::getAirportsInRange() const + CAirportList CContextSimulatorProxy::getAirportsInRange(bool recalculatePosition) const { - return m_dBusInterface->callDBusRet(QLatin1String("getAirportsInRange")); + return m_dBusInterface->callDBusRet(QLatin1String("getAirportsInRange"), recalculatePosition); } CAircraftModelList CContextSimulatorProxy::getModelSet() const diff --git a/src/blackcore/context/contextsimulatorproxy.h b/src/blackcore/context/contextsimulatorproxy.h index 1cc3f3f09..e8464dbe1 100644 --- a/src/blackcore/context/contextsimulatorproxy.h +++ b/src/blackcore/context/contextsimulatorproxy.h @@ -62,7 +62,7 @@ namespace BlackCore virtual void stopSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override; virtual int checkListeners() override; virtual int getSimulatorStatus() const override; - virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; + virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculatePosition) const override; virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override; virtual BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const override; virtual BlackMisc::CStatusMessageList verifyPrerequisites() const override; diff --git a/src/blackcore/simulator.cpp b/src/blackcore/simulator.cpp index 072e06a6a..39cd21b0a 100644 --- a/src/blackcore/simulator.cpp +++ b/src/blackcore/simulator.cpp @@ -796,7 +796,7 @@ namespace BlackCore return m_loopbackSituations.value(callsign); } - CAirportList ISimulator::getAirportsInRange() const + CAirportList ISimulator::getAirportsInRange(bool recalculateDistance) const { // default implementation if (this->isShuttingDown()) { return CAirportList(); } @@ -805,9 +805,9 @@ namespace BlackCore const CAirportList airports = sApp->getWebDataServices()->getAirports(); if (airports.isEmpty()) { return airports; } const CCoordinateGeodetic ownPosition = this->getOwnAircraftPosition(); - CAirportList airportInRange = airports.findClosest(maxAirportsInRange(), ownPosition); - if (m_autoCalcAirportDistance) { airportInRange.calculcateAndUpdateRelativeDistanceAndBearing(ownPosition); } - return airportInRange; + CAirportList airportsInRange = airports.findClosest(maxAirportsInRange(), ownPosition); + if (recalculateDistance) { airportsInRange.calculcateAndUpdateRelativeDistanceAndBearing(this->getOwnAircraftPosition()); } + return airportsInRange; } CAircraftModel ISimulator::reverseLookupModel(const CAircraftModel &model) diff --git a/src/blackcore/simulator.h b/src/blackcore/simulator.h index 8e09a3251..02780e179 100644 --- a/src/blackcore/simulator.h +++ b/src/blackcore/simulator.h @@ -144,7 +144,7 @@ namespace BlackCore virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const = 0; //! Airports in range from simulator, or if not available from web service - virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const; + virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculateDistance) const; //! Set time synchronization between simulator and user's computer time //! \remarks not all drivers implement this, e.g. if it is an intrinsic simulator feature @@ -499,7 +499,6 @@ namespace BlackCore static BlackMisc::Simulation::CAircraftModel reverseLookupModel(const BlackMisc::Simulation::CAircraftModel &model); bool m_pausedSimFreezesInterpolation = false; //!< paused simulator will also pause interpolation (so AI aircraft will hold) - bool m_autoCalcAirportDistance = true; //!< automatically calculate airport distance and bearing bool m_updateRemoteAircraftInProgress = false; //!< currently updating remote aircraft int m_timerId = -1; //!< dispatch timer id int m_statsUpdateAircraftRuns = 0; //!< statistics update count diff --git a/src/blackgui/components/aircraftcomponent.cpp b/src/blackgui/components/aircraftcomponent.cpp index 9d22fad77..f90416b91 100644 --- a/src/blackgui/components/aircraftcomponent.cpp +++ b/src/blackgui/components/aircraftcomponent.cpp @@ -108,7 +108,7 @@ namespace BlackGui const bool counter = ((m_updateCounter % 5) == 0); // less frequent than aircraft if (this->countAirportsInRangeInView() < 1 || (visible && counter)) { - ui->tvp_AirportsInRange->updateContainerMaybeAsync(sGui->getIContextSimulator()->getAirportsInRange()); + ui->tvp_AirportsInRange->updateContainerMaybeAsync(sGui->getIContextSimulator()->getAirportsInRange(true)); } } @@ -142,8 +142,8 @@ namespace BlackGui { Q_UNUSED(count); Q_UNUSED(withFilter); - int ac = this->indexOf(ui->tb_AircraftInRange); - int ap = this->indexOf(ui->tb_AirportsInRange); + const int ac = this->indexOf(ui->tb_AircraftInRange); + const int ap = this->indexOf(ui->tb_AirportsInRange); QString acs = this->tabBar()->tabText(ac); QString aps = this->tabBar()->tabText(ap); acs = CGuiUtility::replaceTabCountValue(acs, this->countAircraftInView()); diff --git a/src/plugins/simulator/fscommon/simulatorfscommon.cpp b/src/plugins/simulator/fscommon/simulatorfscommon.cpp index b7fc0d634..54bd97590 100644 --- a/src/plugins/simulator/fscommon/simulatorfscommon.cpp +++ b/src/plugins/simulator/fscommon/simulatorfscommon.cpp @@ -118,10 +118,15 @@ namespace BlackSimPlugin return true; } - CAirportList CSimulatorFsCommon::getAirportsInRange() const + CAirportList CSimulatorFsCommon::getAirportsInRange(bool recalculateDistance) const { - if (!m_airportsInRangeFromSimulator.isEmpty()) { return m_airportsInRangeFromSimulator; } - return ISimulator::getAirportsInRange(); + if (!m_airportsInRangeFromSimulator.isEmpty()) + { + CAirportList airports = m_airportsInRangeFromSimulator; + if (recalculateDistance) { airports.calculcateAndUpdateRelativeDistanceAndBearing(this->getOwnAircraftPosition()); } + return airports; + } + return ISimulator::getAirportsInRange(recalculateDistance); } void CSimulatorFsCommon::onSwiftDbAirportsRead() diff --git a/src/plugins/simulator/fscommon/simulatorfscommon.h b/src/plugins/simulator/fscommon/simulatorfscommon.h index cead4c048..c48b6cdee 100644 --- a/src/plugins/simulator/fscommon/simulatorfscommon.h +++ b/src/plugins/simulator/fscommon/simulatorfscommon.h @@ -43,7 +43,7 @@ namespace BlackSimPlugin virtual bool isTimeSynchronized() const override { return m_simTimeSynced; } virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override; virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) override; - virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; + virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculateDistance) const override; // ---------------------- ISimulator ------------------ protected: diff --git a/src/plugins/simulator/xplane/simulatorxplane.cpp b/src/plugins/simulator/xplane/simulatorxplane.cpp index c38f02f6d..d180b1c8e 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.cpp +++ b/src/plugins/simulator/xplane/simulatorxplane.cpp @@ -432,9 +432,12 @@ namespace BlackSimPlugin } } - CAirportList CSimulatorXPlane::getAirportsInRange() const + CAirportList CSimulatorXPlane::getAirportsInRange(bool recalculateDistance) const { - return m_airportsInRange; + if (!recalculateDistance) { return m_airportsInRange; } + CAirportList airports(m_airportsInRange); + airports.calculcateAndUpdateRelativeDistanceAndBearing(this->getOwnAircraftPosition()); + return airports; } bool CSimulatorXPlane::setTimeSynchronization(bool enable, const PhysicalQuantities::CTime &offset) diff --git a/src/plugins/simulator/xplane/simulatorxplane.h b/src/plugins/simulator/xplane/simulatorxplane.h index f545e5872..419826fe7 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.h +++ b/src/plugins/simulator/xplane/simulatorxplane.h @@ -129,7 +129,7 @@ namespace BlackSimPlugin virtual bool updateOwnSimulatorSelcal(const BlackMisc::Aviation::CSelcal &selcal, const BlackMisc::CIdentifier &originator) override; virtual void displayStatusMessage(const BlackMisc::CStatusMessage &message) const override; virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const override; - virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; + virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculateDistance) const override; virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) override; virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override { return BlackMisc::PhysicalQuantities::CTime(0, BlackMisc::PhysicalQuantities::CTimeUnit::hrmin()); } virtual bool isPhysicallyRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) const override;