From 72fdf7c5bc59378d99f49c8ff60f926dcc4901cb Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 31 Oct 2016 16:33:24 +0100 Subject: [PATCH] refs #793, added function to reset model (after it was manually changed) * located in context since context owns matcher object * call from GUI * some code formatting to indicate the cross simulator slots connected in runtime refs #780 --- .../context/contextownaircraftimpl.h | 4 +-- src/blackcore/context/contextsimulator.h | 5 ++- src/blackcore/context/contextsimulatorempty.h | 7 ++++ .../context/contextsimulatorimpl.cpp | 13 +++++-- src/blackcore/context/contextsimulatorimpl.h | 35 +++++++++++++------ .../context/contextsimulatorproxy.cpp | 7 +++- src/blackcore/context/contextsimulatorproxy.h | 7 ++-- src/blackcore/corefacade.cpp | 2 +- src/blackgui/components/mappingcomponent.cpp | 10 +++--- 9 files changed, 65 insertions(+), 25 deletions(-) diff --git a/src/blackcore/context/contextownaircraftimpl.h b/src/blackcore/context/contextownaircraftimpl.h index 9529e5604..c69a8b63b 100644 --- a/src/blackcore/context/contextownaircraftimpl.h +++ b/src/blackcore/context/contextownaircraftimpl.h @@ -157,11 +157,11 @@ namespace BlackCore private slots: //! Station has been changed, needed to tune in/out voice room - //! \note Connected in runtime + //! \ingroup crosscontextslot void ps_changedAtcStationOnlineConnectionStatus(const BlackMisc::Aviation::CAtcStation &atcStation, bool connected); //! Simulator model has been changed - //! \note Connected in runtime + //! \ingroup crosscontextslot void ps_changedSimulatorModel(const BlackMisc::Simulation::CAircraftModel &model); //! Web data loaded diff --git a/src/blackcore/context/contextsimulator.h b/src/blackcore/context/contextsimulator.h index cb71e7d66..b917ff3e5 100644 --- a/src/blackcore/context/contextsimulator.h +++ b/src/blackcore/context/contextsimulator.h @@ -128,7 +128,7 @@ namespace BlackCore virtual int getSimulatorStatus() const = 0; //! Get simulator status as enum - //! \todo To be removed with Qt 5.5 when getSimualtorStatus directly provides the enum + //! \fixme To be removed with Qt 5.5 when getSimualtorStatus directly provides the enum ISimulator::SimulatorStatus getSimulatorStatusEnum() const; //! Simulator setup @@ -214,6 +214,9 @@ namespace BlackCore //! Highlight aircraft in simulator virtual void highlightAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraftToHighlight, bool enableHighlight, const BlackMisc::PhysicalQuantities::CTime &displayTime) = 0; + //! Reset model by matching it again + virtual bool resetToModelMatchingAircraft(const BlackMisc::Aviation::CCallsign &callsign) = 0; + //! Request weather grid. Argument identifier is past in the signal to identify the requestor virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) = 0; diff --git a/src/blackcore/context/contextsimulatorempty.h b/src/blackcore/context/contextsimulatorempty.h index 6e8ccf71b..1e7b0b492 100644 --- a/src/blackcore/context/contextsimulatorempty.h +++ b/src/blackcore/context/contextsimulatorempty.h @@ -219,6 +219,13 @@ namespace BlackCore logEmptyContextWarning(Q_FUNC_INFO); } + //! \copydoc IContextSimulator::resetToModelMatchingAircraft + virtual bool resetToModelMatchingAircraft(const BlackMisc::Aviation::CCallsign &callsign) override + { + Q_UNUSED(callsign); + return false; + } + //! \copydoc IContextSimulator::requestWeatherGrid virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) override { diff --git a/src/blackcore/context/contextsimulatorimpl.cpp b/src/blackcore/context/contextsimulatorimpl.cpp index 1c11674d0..44ac4d0cb 100644 --- a/src/blackcore/context/contextsimulatorimpl.cpp +++ b/src/blackcore/context/contextsimulatorimpl.cpp @@ -483,7 +483,7 @@ namespace BlackCore } } - void CContextSimulator::ps_addRemoteAircraft(const CSimulatedAircraft &remoteAircraft) + void CContextSimulator::ps_addedRemoteAircraft(const CSimulatedAircraft &remoteAircraft) { if (!isSimulatorSimulating()) { return; } Q_ASSERT(!remoteAircraft.getCallsign().isEmpty()); @@ -522,7 +522,7 @@ namespace BlackCore for (const CSimulatedAircraft &simulatedAircraft : aircrafts) { Q_ASSERT(!simulatedAircraft.getCallsign().isEmpty()); - ps_addRemoteAircraft(simulatedAircraft); + ps_addedRemoteAircraft(simulatedAircraft); } m_initallyAddAircrafts = false; } @@ -653,6 +653,15 @@ namespace BlackCore m_simulatorPlugin.second->highlightAircraft(aircraftToHighlight, enableHighlight, displayTime); } + bool CContextSimulator::resetToModelMatchingAircraft(const CCallsign &callsign) + { + CSimulatedAircraft aircraft = getAircraftInRangeForCallsign(callsign); + if (aircraft.getCallsign() != callsign) { return false; } // not found + aircraft.setModel(aircraft.getNetworkModel()); + ps_addedRemoteAircraft(aircraft); + return true; + } + void CContextSimulator::requestWeatherGrid(const Weather::CWeatherGrid &weatherGrid, const CIdentifier &identifier) { if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << identifier; } diff --git a/src/blackcore/context/contextsimulatorimpl.h b/src/blackcore/context/contextsimulatorimpl.h index f0694e274..5228b2b7a 100644 --- a/src/blackcore/context/contextsimulatorimpl.h +++ b/src/blackcore/context/contextsimulatorimpl.h @@ -99,11 +99,12 @@ namespace BlackCore virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override; virtual BlackMisc::CPixmap iconForModel(const QString &modelString) const override; virtual void highlightAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraftToHighlight, bool enableHighlight, const BlackMisc::PhysicalQuantities::CTime &displayTime) override; + virtual bool resetToModelMatchingAircraft(const BlackMisc::Aviation::CCallsign &callsign) override; virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) override; virtual void enableDebugMessages(bool driver, bool interpolator) override; - virtual BlackMisc::CStatusMessageList getMatchingMessages(const BlackMisc::Aviation::CCallsign &callsign) const; - virtual bool isMatchingMessagesEnabled() const; - virtual void enableMatchingMessages(bool enabled); + virtual BlackMisc::CStatusMessageList getMatchingMessages(const BlackMisc::Aviation::CCallsign &callsign) const override; + virtual bool isMatchingMessagesEnabled() const override; + virtual void enableMatchingMessages(bool enabled) override; //! @} protected: @@ -114,12 +115,30 @@ namespace BlackCore CContextSimulator *registerWithDBus(BlackMisc::CDBusServer *server); private slots: + + // + // ------------ slots connected with network context and not to be used other by network contect --------- + // + //! \ingroup crosscontextslot + //! @{ + //! Remote aircraft added - void ps_addRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft); + void ps_addedRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft); //! Remove remote aircraft void ps_removedRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign); + //! Changed remote aircraft model + void ps_changedRemoteAircraftModel(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const BlackMisc::CIdentifier &originator); + + //! Enable / disable aircraft + void ps_changedRemoteAircraftEnabled(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); + + //! @} + // + // ------------ slots connected with network context and not to be used other by network contect --------- + // + //! Handle new connection status of simulator void ps_onSimulatorStatusChanged(int status); @@ -135,17 +154,11 @@ namespace BlackCore //! Simulator has changed cockpit void ps_cockpitChangedFromSimulator(const BlackMisc::Simulation::CSimulatedAircraft &ownAircraft); - //! Changed remote aircraft model - void ps_changedRemoteAircraftModel(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const BlackMisc::CIdentifier &originator); - - //! Enable / disable aircraft - void ps_changedRemoteAircraftEnabled(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); - //! Failed adding remote aircraft void ps_addingRemoteAircraftFailed(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft, const BlackMisc::CStatusMessage &message); //! Update simulator cockpit from context, because someone else has changed cockpit (e.g. GUI, 3rd party) - //! \remarks set by runtime, only to be used locally (not via DBus) + //! \ingroup crosscontextslot void ps_updateSimulatorCockpitFromContext(const BlackMisc::Simulation::CSimulatedAircraft &ownAircraft, const BlackMisc::CIdentifier &originator); //! Relay status message to simulator under consideration of settings diff --git a/src/blackcore/context/contextsimulatorproxy.cpp b/src/blackcore/context/contextsimulatorproxy.cpp index ed6fbdd21..0396bde6e 100644 --- a/src/blackcore/context/contextsimulatorproxy.cpp +++ b/src/blackcore/context/contextsimulatorproxy.cpp @@ -63,7 +63,7 @@ namespace BlackCore "weatherGridReceived", this, SIGNAL(weatherGridReceived(BlackMisc::Weather::CWeatherGrid, BlackMisc::CIdentifier))); Q_ASSERT(s); s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), - "addingRemoteModelFailed", this, SIGNAL(addingRemoteModelFailed(BlackMisc::Simulation::CSimulatedAircraft,BlackMisc::CStatusMessage&))); + "addingRemoteModelFailed", this, SIGNAL(addingRemoteModelFailed(BlackMisc::Simulation::CSimulatedAircraft, BlackMisc::CStatusMessage &))); Q_ASSERT(s); Q_UNUSED(s); this->relayBaseClassSignals(serviceName, connection, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName()); @@ -199,6 +199,11 @@ namespace BlackCore m_dBusInterface->callDBus(QLatin1Literal("highlightAircraft"), aircraftToHighlight, enableHighlight, displayTime); } + bool CContextSimulatorProxy::resetToModelMatchingAircraft(const CCallsign &callsign) + { + return m_dBusInterface->callDBusRet(QLatin1Literal("resetToModelMatchingAircraft"), callsign, callsign); + } + void CContextSimulatorProxy::requestWeatherGrid(const Weather::CWeatherGrid &weatherGrid, const CIdentifier &identifier) { m_dBusInterface->callDBus(QLatin1Literal("requestWeatherGrid"), weatherGrid, identifier); diff --git a/src/blackcore/context/contextsimulatorproxy.h b/src/blackcore/context/contextsimulatorproxy.h index 86378bbdf..5a2ab983b 100644 --- a/src/blackcore/context/contextsimulatorproxy.h +++ b/src/blackcore/context/contextsimulatorproxy.h @@ -79,11 +79,12 @@ namespace BlackCore virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override; virtual BlackMisc::CPixmap iconForModel(const QString &modelString) const override; virtual void highlightAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraftToHighlight, bool enableHighlight, const BlackMisc::PhysicalQuantities::CTime &displayTime) override; + virtual bool resetToModelMatchingAircraft(const BlackMisc::Aviation::CCallsign &callsign) override; virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) override; virtual void enableDebugMessages(bool driver, bool interpolator) override; - virtual BlackMisc::CStatusMessageList getMatchingMessages(const BlackMisc::Aviation::CCallsign &callsign) const; - virtual bool isMatchingMessagesEnabled() const; - virtual void enableMatchingMessages(bool enabled); + virtual BlackMisc::CStatusMessageList getMatchingMessages(const BlackMisc::Aviation::CCallsign &callsign) const override; + virtual bool isMatchingMessagesEnabled() const override; + virtual void enableMatchingMessages(bool enabled) override; //! @} private: diff --git a/src/blackcore/corefacade.cpp b/src/blackcore/corefacade.cpp index 238e8f32d..03664caf4 100644 --- a/src/blackcore/corefacade.cpp +++ b/src/blackcore/corefacade.cpp @@ -170,7 +170,7 @@ namespace BlackCore // use readyForModelMatching instead of CAirspaceMonitor::addedAircraft, as it contains client information // ready for model matching is sent delayed when all information are available c = connect(this->m_contextNetwork, &IContextNetwork::readyForModelMatching, - this->getCContextSimulator(), &CContextSimulator::ps_addRemoteAircraft); + this->getCContextSimulator(), &CContextSimulator::ps_addedRemoteAircraft); Q_ASSERT(c); c = connect(this->m_contextNetwork, &IContextNetwork::removedAircraft, this->getCContextSimulator(), &CContextSimulator::ps_removedRemoteAircraft); diff --git a/src/blackgui/components/mappingcomponent.cpp b/src/blackgui/components/mappingcomponent.cpp index 0416a3beb..93bbdce0b 100644 --- a/src/blackgui/components/mappingcomponent.cpp +++ b/src/blackgui/components/mappingcomponent.cpp @@ -305,13 +305,15 @@ namespace BlackGui if (!sGui->getIContextSimulator()->isSimulatorSimulating()) { return; } const CCallsign callsign(this->validateRenderedCallsign()); if (callsign.isEmpty()) { return; } - const CSimulatedAircraft aircraftFromBackend = sGui->getIContextNetwork()->getAircraftInRangeForCallsign(callsign); - if (aircraftFromBackend.getCallsign() != callsign) { return; } - bool changed = sGui->getIContextNetwork()->updateAircraftModel(callsign, aircraftFromBackend.getModel(), identifier()); - if (changed) + bool reset = sGui->getIContextSimulator()->resetToModelMatchingAircraft(callsign); + if (reset) { CLogMessage(this).info("Model reset for '%1'") << callsign.toQString(); } + else + { + CLogMessage(this).info("Reset failed for '%1'") << callsign.toQString(); + } } void CMappingComponent::ps_onModelPreviewChanged(int state)