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
This commit is contained in:
Klaus Basan
2016-10-31 16:33:24 +01:00
parent 55020277b5
commit 72fdf7c5bc
9 changed files with 65 additions and 25 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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
{

View File

@@ -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; }

View File

@@ -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

View File

@@ -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<bool>(QLatin1Literal("resetToModelMatchingAircraft"), callsign, callsign);
}
void CContextSimulatorProxy::requestWeatherGrid(const Weather::CWeatherGrid &weatherGrid, const CIdentifier &identifier)
{
m_dBusInterface->callDBus(QLatin1Literal("requestWeatherGrid"), weatherGrid, identifier);

View File

@@ -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:

View File

@@ -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);

View File

@@ -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)