refs #420, refs #417, allow to return combined simulator status, removed unneeded functions

This should be further improved with #417
This commit is contained in:
Klaus Basan
2015-05-17 20:18:30 +02:00
parent 2d506a4962
commit 0ea07e28e0
12 changed files with 59 additions and 126 deletions

View File

@@ -93,19 +93,11 @@ namespace BlackCore
//! Return list of available simulator plugins //! Return list of available simulator plugins
virtual BlackMisc::Simulation::CSimulatorPluginInfoList getAvailableSimulatorPlugins() const = 0; virtual BlackMisc::Simulation::CSimulatorPluginInfoList getAvailableSimulatorPlugins() const = 0;
//! Returns true when simulator is connected
//! \sa isSimulating
virtual bool isConnected() const = 0;
//! Can we connect?
//! \todo Remove?
virtual bool canConnect() const = 0;
//! Disconnect from simulator //! Disconnect from simulator
virtual bool disconnectFromSimulator() = 0; virtual bool disconnectFromSimulator() = 0;
//! Returns true when simulator is running / simulating //! Simulator combined status
virtual bool isSimulating() const = 0; virtual int getSimulatorStatus() const = 0;
//! Simulator info //! Simulator info
virtual BlackMisc::Simulation::CSimulatorPluginInfo getSimulatorPluginInfo() const = 0; virtual BlackMisc::Simulation::CSimulatorPluginInfo getSimulatorPluginInfo() const = 0;
@@ -189,9 +181,6 @@ namespace BlackCore
//! Simulator avialable (driver available)? //! Simulator avialable (driver available)?
bool isSimulatorAvailable() const { return BlackMisc::CProject::isCompiledWithFlightSimulatorSupport() && !getSimulatorPluginInfo().isUnspecified(); } bool isSimulatorAvailable() const { return BlackMisc::CProject::isCompiledWithFlightSimulatorSupport() && !getSimulatorPluginInfo().isUnspecified(); }
//! Simulator paused?
virtual bool isPaused() const = 0;
//! Settings have been changed //! Settings have been changed
virtual void settingsChanged(uint type) = 0; virtual void settingsChanged(uint type) = 0;

View File

@@ -86,29 +86,14 @@ namespace BlackCore
return list; return list;
} }
bool CContextSimulator::isConnected() const int CContextSimulator::getSimulatorStatus() const
{ {
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; } if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
if (!m_simulatorPlugin) if (!m_simulatorPlugin) { return 0; }
{
return false;
}
Q_ASSERT(m_simulatorPlugin->simulator); Q_ASSERT_X(m_simulatorPlugin->simulator, Q_FUNC_INFO, "Missing simulator");
return m_simulatorPlugin->simulator->isConnected(); return m_simulatorPlugin->simulator->getSimulatorStatus();
}
bool CContextSimulator::canConnect() const
{
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
if (!m_simulatorPlugin)
{
return false;
}
Q_ASSERT(m_simulatorPlugin->simulator);
return m_simulatorPlugin->simulator->canConnect();
} }
bool CContextSimulator::disconnectFromSimulator() bool CContextSimulator::disconnectFromSimulator()
@@ -722,28 +707,6 @@ namespace BlackCore
this->m_simulatorPlugin->simulator->highlightAircraft(aircraftToHighlight, enableHighlight, displayTime); this->m_simulatorPlugin->simulator->highlightAircraft(aircraftToHighlight, enableHighlight, displayTime);
} }
bool CContextSimulator::isPaused() const
{
if (!this->m_simulatorPlugin)
{
return false;
}
Q_ASSERT(m_simulatorPlugin->simulator);
return m_simulatorPlugin->simulator->isPaused();
}
bool CContextSimulator::isSimulating() const
{
if (!this->m_simulatorPlugin)
{
return false;
}
Q_ASSERT(m_simulatorPlugin->simulator);
return m_simulatorPlugin->simulator->isSimulating();
}
void CContextSimulator::ps_simulatorStarted(QObject *listener) void CContextSimulator::ps_simulatorStarted(QObject *listener)
{ {
Q_ASSERT(listener); Q_ASSERT(listener);

View File

@@ -49,21 +49,12 @@ namespace BlackCore
//! \copydoc IContextSimulator::getSimulatorPluginList() //! \copydoc IContextSimulator::getSimulatorPluginList()
virtual BlackMisc::Simulation::CSimulatorPluginInfoList getAvailableSimulatorPlugins() const override; virtual BlackMisc::Simulation::CSimulatorPluginInfoList getAvailableSimulatorPlugins() const override;
//! \copydoc IContextSimulator::isConnected() //! \copydoc IContextSimulator::getSimulatorStatus()
virtual bool isConnected() const override; virtual int getSimulatorStatus() const override;
//! \copydoc IContextSimulator::canConnect
virtual bool canConnect() const override;
//! \copydoc IContextSimulator::disconnectFrom //! \copydoc IContextSimulator::disconnectFrom
virtual bool disconnectFromSimulator() override; virtual bool disconnectFromSimulator() override;
//! \copydoc IContextSimulator::isPaused
virtual bool isPaused() const override;
//! \copydoc IContextSimulator::isSimulating
virtual bool isSimulating() const override;
//! \copydoc IContextSimulator::getSimulatorPluginInfo() //! \copydoc IContextSimulator::getSimulatorPluginInfo()
virtual BlackMisc::Simulation::CSimulatorPluginInfo getSimulatorPluginInfo() const override; virtual BlackMisc::Simulation::CSimulatorPluginInfo getSimulatorPluginInfo() const override;

View File

@@ -61,14 +61,9 @@ namespace BlackCore
return m_dBusInterface->callDBusRet<CSimulatorPluginInfoList>(QLatin1Literal("getAvailableSimulatorPlugins")); return m_dBusInterface->callDBusRet<CSimulatorPluginInfoList>(QLatin1Literal("getAvailableSimulatorPlugins"));
} }
bool CContextSimulatorProxy::isConnected() const int CContextSimulatorProxy::getSimulatorStatus() const
{ {
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("isConnected")); return m_dBusInterface->callDBusRet<int>(QLatin1Literal("getSimulatorStatus"));
}
bool CContextSimulatorProxy::canConnect() const
{
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("canConnect"));
} }
bool CContextSimulatorProxy::disconnectFromSimulator() bool CContextSimulatorProxy::disconnectFromSimulator()
@@ -226,14 +221,4 @@ namespace BlackCore
m_dBusInterface->callDBus(QLatin1Literal("enableDebugMessages"), driver, interpolator); m_dBusInterface->callDBus(QLatin1Literal("enableDebugMessages"), driver, interpolator);
} }
bool CContextSimulatorProxy::isPaused() const
{
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("isPaused"));
}
bool CContextSimulatorProxy::isSimulating() const
{
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("isRunning"));
}
} // namespace } // namespace

View File

@@ -45,21 +45,12 @@ namespace BlackCore
public slots: public slots:
//! \copydoc IContextSimulator::isConnected() //! \copydoc IContextSimulator::getSimualtorStatus()
virtual bool isConnected() const override; virtual int getSimulatorStatus() const override;
//! \copydoc IContextSimulator::canConnect
virtual bool canConnect() const override;
//! \copydoc IContextSimulator::disconnectFrom //! \copydoc IContextSimulator::disconnectFrom
virtual bool disconnectFromSimulator() override; virtual bool disconnectFromSimulator() override;
//! \copydoc IContextSimulator::isSimulating
virtual bool isSimulating() const override;
//! \copydoc IContextSimulator::isPaused
virtual bool isPaused() const override;
//! \copydoc IContextSimulator::getAirportsInRange() //! \copydoc IContextSimulator::getAirportsInRange()
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override;

View File

@@ -20,6 +20,15 @@ using namespace BlackMisc::Simulation;
namespace BlackCore namespace BlackCore
{ {
int ISimulator::getSimulatorStatus() const
{
int status =
(isConnected() ? Connected : static_cast<ISimulator::SimulatorStatus>(0))
| (isSimulating() ? Simulating : static_cast<ISimulator::SimulatorStatus>(0))
| (isPaused() ? Paused : static_cast<ISimulator::SimulatorStatus>(0));
return status;
}
const QString &ISimulator::simulatorOriginator() const QString &ISimulator::simulatorOriginator()
{ {
// string is generated once, the timestamp allows to use multiple // string is generated once, the timestamp allows to use multiple
@@ -34,7 +43,7 @@ namespace BlackCore
{ {
QString s; QString s;
if (status & Connected) { s.append("Connected"); } if (status & Connected) { s.append("Connected"); }
if (status & Running) { if (!s.isEmpty()) { s.append(", "); } s.append("Simulating"); } if (status & Simulating) { if (!s.isEmpty()) { s.append(", "); } s.append("Simulating"); }
if (status & Paused) { if (!s.isEmpty()) { s.append(", "); } s.append("Paused"); } if (status & Paused) { if (!s.isEmpty()) { s.append(", "); } s.append("Paused"); }
return s; return s;
} }
@@ -46,11 +55,7 @@ namespace BlackCore
void ISimulator::emitSimulatorCombinedStatus() void ISimulator::emitSimulatorCombinedStatus()
{ {
int status = emit simulatorStatusChanged(getSimulatorStatus());
(isConnected() ? Connected : static_cast<ISimulator::SimulatorStatus>(0))
| (isSimulating() ? Running : static_cast<ISimulator::SimulatorStatus>(0))
| (isPaused() ? Paused : static_cast<ISimulator::SimulatorStatus>(0));
emit simulatorStatusChanged(status);
} }
ISimulatorListener::ISimulatorListener(QObject *parent) : QObject(parent) ISimulatorListener::ISimulatorListener(QObject *parent) : QObject(parent)

View File

@@ -41,7 +41,7 @@ namespace BlackCore
{ {
Disconnected = 0, Disconnected = 0,
Connected = 1 << 0, //!< Is the plugin connected to the simulator? Connected = 1 << 0, //!< Is the plugin connected to the simulator?
Running = 1 << 1, //!< Is the simulator actually simulating? Simulating = 1 << 1, //!< Is the simulator actually simulating?
Paused = 1 << 2, //!< Is the simulator paused? Paused = 1 << 2, //!< Is the simulator paused?
}; };
@@ -54,18 +54,18 @@ namespace BlackCore
//! Are we connected to the simulator? //! Are we connected to the simulator?
virtual bool isConnected() const = 0; virtual bool isConnected() const = 0;
//! Can we connect?
virtual bool canConnect() const = 0;
//! Is time synchronization on?
virtual bool isTimeSynchronized() const = 0;
//! Simulator paused? //! Simulator paused?
virtual bool isPaused() const = 0; virtual bool isPaused() const = 0;
//! Simulator running? //! Simulator running?
virtual bool isSimulating() const = 0; virtual bool isSimulating() const = 0;
//! Combined status
virtual int getSimulatorStatus() const;
//! Is time synchronization on?
virtual bool isTimeSynchronized() const = 0;
//! Get the simulator info (metadata of plugin) //! Get the simulator info (metadata of plugin)
virtual const BlackMisc::Simulation::CSimulatorPluginInfo &getSimulatorPluginInfo() const = 0; virtual const BlackMisc::Simulation::CSimulatorPluginInfo &getSimulatorPluginInfo() const = 0;
@@ -219,6 +219,10 @@ namespace BlackCore
//! Remove all remote aircraft //! Remove all remote aircraft
virtual void physicallyRemoveAllRemoteAircraft() = 0; virtual void physicallyRemoveAllRemoteAircraft() = 0;
//! Can we connect?
//! \todo Do we really need this function? Currently made protected, as
virtual bool canConnect() const = 0;
//! Emit the combined status //! Emit the combined status
//! \sa simulatorStatusChanged; //! \sa simulatorStatusChanged;
void emitSimulatorCombinedStatus(); void emitSimulatorCombinedStatus();
@@ -249,7 +253,6 @@ namespace BlackCore
virtual void stop() = 0; virtual void stop() = 0;
signals: signals:
//! Emitted when the listener discovers the simulator running. //! Emitted when the listener discovers the simulator running.
void simulatorStarted(); void simulatorStarted();

View File

@@ -75,7 +75,7 @@ namespace BlackGui
this->ui->tvp_AircraftInRange->updateContainer(this->getIContextNetwork()->getAircraftInRange()); this->ui->tvp_AircraftInRange->updateContainer(this->getIContextNetwork()->getAircraftInRange());
} }
} }
if (this->getIContextSimulator()->isConnected()) if (this->getIContextSimulator()->getSimulatorStatus() > 0)
{ {
bool visible = (this->isVisibleWidget() && this->currentWidget() == this->ui->tb_AirportsInRange); bool visible = (this->isVisibleWidget() && this->currentWidget() == this->ui->tb_AirportsInRange);
if (this->countAirportsInRange() < 1 || visible) if (this->countAirportsInRange() < 1 || visible)

View File

@@ -81,8 +81,7 @@ namespace BlackGui
// initial values // initial values
this->ps_onMapperReady(); this->ps_onMapperReady();
bool connected = this->getIContextSimulator()->isConnected(); this->ps_onSimulatorStatusChanged(this->getIContextSimulator()->getSimulatorStatus());
this->ps_onSimulatorStatusChanged(connected ? ISimulator::Connected : ISimulator::Disconnected);
} }
if (this->getIContextNetwork()) if (this->getIContextNetwork())
@@ -116,7 +115,7 @@ namespace BlackGui
this->ui->led_Simulator->setTriState(); this->ui->led_Simulator->setTriState();
this->ui->led_Simulator->setTriStateToolTip(s); this->ui->led_Simulator->setTriStateToolTip(s);
} }
else if (status & ISimulator::Running) else if (status & ISimulator::Simulating)
{ {
this->ui->led_Simulator->setOn(true); this->ui->led_Simulator->setOn(true);
this->ui->led_Simulator->setOnToolTip(s); this->ui->led_Simulator->setOnToolTip(s);

View File

@@ -15,6 +15,7 @@
#include "blackcore/context_audio.h" #include "blackcore/context_audio.h"
#include "blackcore/context_simulator.h" #include "blackcore/context_simulator.h"
#include "blackcore/network.h" #include "blackcore/network.h"
#include "blackcore/simulator.h"
#include "blackmisc/logmessage.h" #include "blackmisc/logmessage.h"
#include "blackmisc/aviation/aircrafticaodata.h" #include "blackmisc/aviation/aircrafticaodata.h"
#include "../uppercasevalidator.h" #include "../uppercasevalidator.h"
@@ -355,8 +356,9 @@ namespace BlackGui
CAircraftIcaoData icao; CAircraftIcaoData icao;
bool simConnected = this->getIContextSimulator() && this->getIContextSimulator()->isSimulating(); bool simulating = this->getIContextSimulator() &&
if (simConnected) (this->getIContextSimulator()->getSimulatorStatus() & ISimulator::Simulating);
if (simulating)
{ {
CAircraftModel model = this->getIContextOwnAircraft()->getOwnAircraft().getModel(); CAircraftModel model = this->getIContextOwnAircraft()->getOwnAircraft().getModel();
this->ui->le_SimulatorModel->setText(model.getModelString()); this->ui->le_SimulatorModel->setText(model.getModelString());
@@ -381,7 +383,6 @@ namespace BlackGui
{ {
this->setGuiIcaoValues(icao, false); this->setGuiIcaoValues(icao, false);
} }
} }
void CLoginComponent::setGuiIcaoValues(const CAircraftIcaoData &icao, bool onlyIfEmpty) void CLoginComponent::setGuiIcaoValues(const CAircraftIcaoData &icao, bool onlyIfEmpty)

View File

@@ -386,7 +386,7 @@ namespace BlackGui
Q_ASSERT_X(getIContextNetwork(), Q_FUNC_INFO, "missing network context"); Q_ASSERT_X(getIContextNetwork(), Q_FUNC_INFO, "missing network context");
Q_ASSERT_X(getIContextSimulator(), Q_FUNC_INFO, "missing simulator context"); Q_ASSERT_X(getIContextSimulator(), Q_FUNC_INFO, "missing simulator context");
if (this->isVisibleWidget()) { return; } if (this->isVisibleWidget()) { return; }
if (getIContextSimulator()->isConnected()) if (getIContextSimulator()->getSimulatorStatus() > 0)
{ {
const CSimulatedAircraftList aircraft(getIContextNetwork()->getAircraftInRange()); const CSimulatedAircraftList aircraft(getIContextNetwork()->getAircraftInRange());
this->ui->tvp_SimulatedAircraft->updateContainer(aircraft); this->ui->tvp_SimulatedAircraft->updateContainer(aircraft);

View File

@@ -62,17 +62,20 @@ namespace BlackGui
void CSimulatorComponent::update() void CSimulatorComponent::update()
{ {
Q_ASSERT(getIContextSimulator()); Q_ASSERT_X(getIContextSimulator(), Q_FUNC_INFO, "No simulator context");
if (!this->isVisibleWidget()) return; // no updates on invisible widgets if (!this->isVisibleWidget()) return; // no updates on invisible widgets
if (!this->getIContextOwnAircraft()) return; if (!this->getIContextOwnAircraft()) return;
if (!this->getIContextSimulator()->isConnected()) { int simualtorStatus = this->getIContextSimulator()->getSimulatorStatus();
if (simualtorStatus == 0)
{
addOrUpdateByName("info", tr("No simulator available"), CIcons::StandardIconWarning16); addOrUpdateByName("info", tr("No simulator available"), CIcons::StandardIconWarning16);
return; return;
} }
if (!this->getIContextSimulator()->isSimulating()) { if (!(simualtorStatus & ISimulator::Simulating))
{
this->addOrUpdateByName("info", this->addOrUpdateByName("info",
tr("Simulator (%1) not yet running").arg( tr("Simulator (%1) not yet running").arg(
getIContextSimulator()->getSimulatorPluginInfo().getSimulator() getIContextSimulator()->getSimulatorPluginInfo().getSimulator()
@@ -109,12 +112,12 @@ namespace BlackGui
void CSimulatorComponent::runtimeHasBeenSet() void CSimulatorComponent::runtimeHasBeenSet()
{ {
Q_ASSERT(this->getIContextSimulator()); Q_ASSERT_X(this->getIContextSimulator(), Q_FUNC_INFO, "Missing simulator context");
if (!this->getIContextSimulator()) return; if (!this->getIContextSimulator()) { return; }
QObject::connect(this->getIContextSimulator(), &IContextSimulator::simulatorStatusChanged, this, &CSimulatorComponent::ps_onSimulatorStatusChanged); QObject::connect(this->getIContextSimulator(), &IContextSimulator::simulatorStatusChanged, this, &CSimulatorComponent::ps_onSimulatorStatusChanged);
this->setUpdateInterval(getUpdateIntervalMs()); this->setUpdateInterval(getUpdateIntervalMs());
if (!getIContextSimulator()->isConnected()) if (getIContextSimulator()->getSimulatorStatus() == 0)
{ {
this->stopTimer(); this->stopTimer();
} }
@@ -122,10 +125,13 @@ namespace BlackGui
void CSimulatorComponent::ps_onSimulatorStatusChanged(int status) void CSimulatorComponent::ps_onSimulatorStatusChanged(int status)
{ {
if (status & ISimulator::Connected) { if (status & ISimulator::Connected)
{
int intervalMs = getUpdateIntervalMs(); int intervalMs = getUpdateIntervalMs();
this->m_updateTimer->startTimer(intervalMs); this->m_updateTimer->startTimer(intervalMs);
} else { }
else
{
this->stopTimer(); this->stopTimer();
clear(); clear();
update(); update();