From 056c257182790bcfe06ecc79ae09debc5acdece0 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 9 Apr 2018 22:53:16 +0200 Subject: [PATCH] Ref T260, utility functions to set provider, plane ctor --- src/blackcore/context/contextnetworkimpl.cpp | 23 +++++++++++--------- src/blackcore/context/contextnetworkimpl.h | 3 +++ src/blackcore/simulator.cpp | 5 +++++ src/blackcore/simulator.h | 3 +++ src/blackmisc/geo/elevationplane.cpp | 4 ++++ src/blackmisc/geo/elevationplane.h | 3 +++ src/blackmisc/provider.h | 1 + 7 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/blackcore/context/contextnetworkimpl.cpp b/src/blackcore/context/contextnetworkimpl.cpp index a45709f3d..d8ad7c4df 100644 --- a/src/blackcore/context/contextnetworkimpl.cpp +++ b/src/blackcore/context/contextnetworkimpl.cpp @@ -97,6 +97,12 @@ namespace BlackCore return this; } + void CContextNetwork::setSimulationEnvironmentProvider(ISimulationEnvironmentProvider *provider) + { + if (m_airspace) { m_airspace->setSimulationEnvironmentProvider(provider); } + if (m_network) { m_network->setSimulationEnvironmentProvider(provider); } + } + CContextNetwork::~CContextNetwork() { this->gracefulShutdown(); @@ -438,17 +444,14 @@ namespace BlackCore void CContextNetwork::xCtxSimulatorStatusChanged(int status) { const ISimulator::SimulatorStatus simStatus = static_cast(status); - if (m_network) + if (ISimulator::isAnyConnectedStatus(simStatus)) { - if (simStatus.testFlag(ISimulator::Connected)) - { - const CContextSimulator *sim = this->getRuntime()->getCContextSimulator(); - m_network->setSimulationEnvironmentProvider(sim ? sim->simulator() : nullptr); - } - else - { - m_network->setSimulationEnvironmentProvider(nullptr); - } + const CContextSimulator *sim = this->getRuntime()->getCContextSimulator(); + this->setSimulationEnvironmentProvider(sim ? sim->simulator() : nullptr); + } + else + { + this->setSimulationEnvironmentProvider(nullptr); } } diff --git a/src/blackcore/context/contextnetworkimpl.h b/src/blackcore/context/contextnetworkimpl.h index 4a92b0a25..0532127c7 100644 --- a/src/blackcore/context/contextnetworkimpl.h +++ b/src/blackcore/context/contextnetworkimpl.h @@ -217,6 +217,9 @@ namespace BlackCore //! \remarks normally only for core facade internal usage CAirspaceMonitor *airspace() const { return m_airspace; } + //! Set the provider + void setSimulationEnvironmentProvider(BlackMisc::Simulation::ISimulationEnvironmentProvider *provider); + private: CAirspaceMonitor *m_airspace = nullptr; INetwork *m_network = nullptr; diff --git a/src/blackcore/simulator.cpp b/src/blackcore/simulator.cpp index c97bfbda7..7ac982756 100644 --- a/src/blackcore/simulator.cpp +++ b/src/blackcore/simulator.cpp @@ -72,6 +72,11 @@ namespace BlackCore return s.join(", "); } + bool ISimulator::isAnyConnectedStatus(SimulatorStatus status) + { + return (status.testFlag(Connected) || status.testFlag(Simulating) || status.testFlag(Paused)); + } + ISimulator::ISimulator( const CSimulatorPluginInfo &pluginInfo, IOwnAircraftProvider *ownAircraftProvider, IRemoteAircraftProvider *remoteAircraftProvider, IWeatherGridProvider *weatherGridProvider, QObject *parent) : diff --git a/src/blackcore/simulator.h b/src/blackcore/simulator.h index 7d7fbaab7..47bfa9911 100644 --- a/src/blackcore/simulator.h +++ b/src/blackcore/simulator.h @@ -207,6 +207,9 @@ namespace BlackCore //! Status to string static QString statusToString(SimulatorStatus status); + //! Any connected status? + static bool isAnyConnectedStatus(SimulatorStatus status); + signals: //! Simulator combined status void simulatorStatusChanged(SimulatorStatus status); diff --git a/src/blackmisc/geo/elevationplane.cpp b/src/blackmisc/geo/elevationplane.cpp index 4cfdbceaa..e667adf18 100644 --- a/src/blackmisc/geo/elevationplane.cpp +++ b/src/blackmisc/geo/elevationplane.cpp @@ -34,6 +34,10 @@ namespace BlackMisc m_radius = this->calculateGreatCircleDistance(rangeCoordinate); } + CElevationPlane::CElevationPlane(const ICoordinateGeodetic &coordinate, const CLength &radius) : + CCoordinateGeodetic(coordinate), m_radius(radius) + { } + const CAltitude &CElevationPlane::getAltitudeIfWithinRadius(const ICoordinateGeodetic &coordinate) const { return (isWithinRange(coordinate)) ? geodeticHeight() : CAltitude::null(); diff --git a/src/blackmisc/geo/elevationplane.h b/src/blackmisc/geo/elevationplane.h index cbbecc71e..f5ac9d1ba 100644 --- a/src/blackmisc/geo/elevationplane.h +++ b/src/blackmisc/geo/elevationplane.h @@ -36,6 +36,9 @@ namespace BlackMisc //! Plane at given coordinates with range to 2nd coordinate CElevationPlane(const ICoordinateGeodetic &coordinate, const ICoordinateGeodetic &rangeCoordinate); + //! Plane at given coordinates with radius + CElevationPlane(const ICoordinateGeodetic &coordinate, const PhysicalQuantities::CLength &radius); + //! Constructors from CCoordinateGeodetic using CCoordinateGeodetic::CCoordinateGeodetic; diff --git a/src/blackmisc/provider.h b/src/blackmisc/provider.h index ee54c5b0c..9b97be78b 100644 --- a/src/blackmisc/provider.h +++ b/src/blackmisc/provider.h @@ -44,6 +44,7 @@ namespace BlackMisc //! \remark use individual names to disambiguate void setProvider(PROVIDER *provider) { + if (m_provider == provider) { return; } if (m_provider) { m_lastProviderConnections.disconnectAll(); } m_provider = provider; // new provider IProvider *iProvider = dynamic_cast(provider);