refs #420, refs #421 Adjusted FSX driver to emit correct status flags and unloading

* added unload function to disconnect signals / slots and simulator
* changed remote provider to return signal/slot connections to manually disconnect functor connects
* flag so pause can freeze or continue AI aircraft
* slightly changed unload behaviour in simulator context

Remark: Tested for FSX only
Solves #424 for FSX
This commit is contained in:
Klaus Basan
2015-05-15 18:50:41 +02:00
parent eeb0d17dcb
commit de43caf451
16 changed files with 172 additions and 130 deletions

View File

@@ -100,17 +100,14 @@ namespace BlackMisc
virtual ~IRemoteAircraftProvider() {}
//! Connect signals to slot receiver. As the interface is no QObject, slots can not be connected directly.
virtual bool connectRemoteAircraftProviderSignals(
//! In order to disconnect a list of connections is provided, which have to be disconnected manually.
//! \note connections are direct as functors have no parameter for connection type
virtual QList<QMetaObject::Connection> connectRemoteAircraftProviderSignals(
std::function<void(const BlackMisc::Aviation::CAircraftSituation &)> addedSituationSlot,
std::function<void(const BlackMisc::Aviation::CAircraftParts &)> addedPartsSlot,
std::function<void(const BlackMisc::Aviation::CCallsign &)> removedAircraftSlot,
std::function<void(const BlackMisc::Simulation::CAirspaceAircraftSnapshot &)> aircraftSnapshot
) = 0;
//! Disconnect signals from receiver. As the interface is no QObject, slots can not be connected directly.
virtual bool disconnectRemoteAircraftProviderSignals(
QObject *receiver
) = 0;
};
//! Class which can be directly used to access an \sa IRemoteAircraftProvider object

View File

@@ -65,25 +65,21 @@ namespace BlackMisc
return remoteAircraftParts(callsign).size() > 0;
}
bool CRemoteAircraftProviderDummy::connectRemoteAircraftProviderSignals(
QList<QMetaObject::Connection> CRemoteAircraftProviderDummy::connectRemoteAircraftProviderSignals(
std::function<void (const CAircraftSituation &)> situationSlot,
std::function<void (const CAircraftParts &)> partsSlot,
std::function<void (const CCallsign &)> removedAircraftSlot,
std::function<void (const CAirspaceAircraftSnapshot &)> aircraftSnapshotSlot
)
{
bool s1 = connect(this, &CRemoteAircraftProviderDummy::addedRemoteAircraftSituation, situationSlot);
bool s2 = connect(this, &CRemoteAircraftProviderDummy::addedRemoteAircraftParts, partsSlot);
bool s3 = connect(this, &CRemoteAircraftProviderDummy::removedRemoteAircraft, removedAircraftSlot);
bool s4 = connect(this, &CRemoteAircraftProviderDummy::airspaceAircraftSnapshot, aircraftSnapshotSlot);
return s1 && s2 && s3 && s4;
}
bool CRemoteAircraftProviderDummy::disconnectRemoteAircraftProviderSignals(QObject *receiver)
{
if (!receiver) { return false; }
return this->disconnect(receiver);
QList<QMetaObject::Connection> c(
{
connect(this, &CRemoteAircraftProviderDummy::addedRemoteAircraftSituation, situationSlot) ,
connect(this, &CRemoteAircraftProviderDummy::addedRemoteAircraftParts, partsSlot) ,
connect(this, &CRemoteAircraftProviderDummy::removedRemoteAircraft, removedAircraftSlot) ,
connect(this, &CRemoteAircraftProviderDummy::airspaceAircraftSnapshot, aircraftSnapshotSlot)
});
return c;
}
bool CRemoteAircraftProviderDummy::updateAircraftEnabled(const CCallsign &callsign, bool enabledForRendering, const QString &originator)

View File

@@ -60,16 +60,13 @@ namespace BlackMisc
virtual bool isRemoteAircraftSupportingParts(const Aviation::CCallsign &callsign) const override;
//! \copydoc IRemoteAircraftProvider::connectRemoteAircraftProviderSignals
virtual bool connectRemoteAircraftProviderSignals(
virtual QList<QMetaObject::Connection> connectRemoteAircraftProviderSignals(
std::function<void(const BlackMisc::Aviation::CAircraftSituation &)> addedSituationSlot,
std::function<void(const BlackMisc::Aviation::CAircraftParts &)> addedPartsSlot,
std::function<void(const BlackMisc::Aviation::CCallsign &)> removedAircraftSlot,
std::function<void(const BlackMisc::Simulation::CAirspaceAircraftSnapshot &)> aircraftSnapshotSlot
) override;
//! \copydoc IRemoteAircraftProvider::disconnectRemoteAircraftProviderSignals
virtual bool disconnectRemoteAircraftProviderSignals(QObject *receiver) override;
//! \copydoc IRemoteAircraftProvider::updateAircraftEnabled
virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRendering, const QString &originator) override;