From e1ffa49268ae15c2f6cd35671d2f00b31fb34e5d Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 11 Sep 2018 03:44:03 +0200 Subject: [PATCH] Check for known model so mapping component can check without loaded model set --- src/blackcore/context/contextsimulator.h | 3 +++ src/blackcore/context/contextsimulatorempty.h | 8 ++++++++ src/blackcore/context/contextsimulatorimpl.cpp | 7 +++++++ src/blackcore/context/contextsimulatorimpl.h | 1 + src/blackcore/context/contextsimulatorproxy.cpp | 5 +++++ src/blackcore/context/contextsimulatorproxy.h | 1 + src/blackgui/components/mappingcomponent.cpp | 12 ++++++++++-- 7 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/blackcore/context/contextsimulator.h b/src/blackcore/context/contextsimulator.h index d25b52118..01e8df592 100644 --- a/src/blackcore/context/contextsimulator.h +++ b/src/blackcore/context/contextsimulator.h @@ -187,6 +187,9 @@ namespace BlackCore //! Model set completer string virtual QStringList getModelSetCompleterStrings(bool sorted) const = 0; + //! Known model? + virtual bool isKnownModel(const QString &modelstring) const = 0; + //! Set time synchronization between simulator and user's computer time //! \remarks not all drivers implement this, e.g. if it is an intrinsic simulator feature virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) = 0; diff --git a/src/blackcore/context/contextsimulatorempty.h b/src/blackcore/context/contextsimulatorempty.h index 1b4d3e9c2..4547c0fae 100644 --- a/src/blackcore/context/contextsimulatorempty.h +++ b/src/blackcore/context/contextsimulatorempty.h @@ -130,6 +130,14 @@ namespace BlackCore return QStringList(); } + //! \copydoc IContextSimulator::isKnownModel + virtual bool isKnownModel(const QString &modelstring) const override + { + Q_UNUSED(modelstring); + logEmptyContextWarning(Q_FUNC_INFO); + return false; + } + //! \copydoc IContextSimulator::getModelSetModelsStartingWith virtual BlackMisc::Simulation::CAircraftModelList getModelSetModelsStartingWith(const QString &modelString) const override { diff --git a/src/blackcore/context/contextsimulatorimpl.cpp b/src/blackcore/context/contextsimulatorimpl.cpp index 3cb861856..b84ab4e40 100644 --- a/src/blackcore/context/contextsimulatorimpl.cpp +++ b/src/blackcore/context/contextsimulatorimpl.cpp @@ -247,6 +247,13 @@ namespace BlackCore return this->getModelSet().getModelStringList(false); } + bool CContextSimulator::isKnownModel(const QString &modelString) const + { + if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; } + const bool known = this->getModelSet().containsModelString(modelString); + return known; + } + QStringList CContextSimulator::getModelSetCompleterStrings(bool sorted) const { if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << sorted; } diff --git a/src/blackcore/context/contextsimulatorimpl.h b/src/blackcore/context/contextsimulatorimpl.h index f623eb5dd..1ffa60685 100644 --- a/src/blackcore/context/contextsimulatorimpl.h +++ b/src/blackcore/context/contextsimulatorimpl.h @@ -86,6 +86,7 @@ namespace BlackCore virtual BlackMisc::CStatusMessageList verifyPrerequisites() const override; virtual QStringList getModelSetStrings() const override; virtual QStringList getModelSetCompleterStrings(bool sorted) const override; + virtual bool isKnownModel(const QString &modelString) const override; virtual int getModelSetCount() const override; virtual BlackMisc::Simulation::CAircraftModelList getModelSetModelsStartingWith(const QString &modelString) const override; virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override; diff --git a/src/blackcore/context/contextsimulatorproxy.cpp b/src/blackcore/context/contextsimulatorproxy.cpp index 7854de698..290b6a461 100644 --- a/src/blackcore/context/contextsimulatorproxy.cpp +++ b/src/blackcore/context/contextsimulatorproxy.cpp @@ -141,6 +141,11 @@ namespace BlackCore return m_dBusInterface->callDBusRet(QLatin1String("getModelSetCompleterStrings"), sorted); } + bool CContextSimulatorProxy::isKnownModel(const QString &modelString) const + { + return m_dBusInterface->callDBusRet(QLatin1String("isKnownModel"), modelString); + } + CAircraftModelList CContextSimulatorProxy::getModelSetModelsStartingWith(const QString &modelString) const { return m_dBusInterface->callDBusRet(QLatin1String("getModelSetModelsStartingWith"), modelString); diff --git a/src/blackcore/context/contextsimulatorproxy.h b/src/blackcore/context/contextsimulatorproxy.h index e8464dbe1..8e71014c3 100644 --- a/src/blackcore/context/contextsimulatorproxy.h +++ b/src/blackcore/context/contextsimulatorproxy.h @@ -70,6 +70,7 @@ namespace BlackCore virtual void setModelSetLoaderSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override; virtual QStringList getModelSetStrings() const override; virtual QStringList getModelSetCompleterStrings(bool sorted) const override; + virtual bool isKnownModel(const QString &modelString) const override; virtual BlackMisc::Simulation::CAircraftModelList getModelSetModelsStartingWith(const QString &modelString) const override; virtual int getModelSetCount() const override; virtual BlackMisc::Simulation::CSimulatorInternals getSimulatorInternals() const override; diff --git a/src/blackgui/components/mappingcomponent.cpp b/src/blackgui/components/mappingcomponent.cpp index 3616a785a..beb07e05b 100644 --- a/src/blackgui/components/mappingcomponent.cpp +++ b/src/blackgui/components/mappingcomponent.cpp @@ -304,7 +304,7 @@ namespace BlackGui void CMappingComponent::onSaveAircraft() { - if (!sGui->getIContextSimulator()->isSimulatorSimulating()) { return; } + if (!sGui || !sGui->getIContextSimulator() || !sGui->getIContextSimulator()->isSimulatorSimulating()) { return; } const CCallsign callsign(this->validateRenderedCallsign()); if (callsign.isEmpty()) { return; } const QString modelString = ui->completer_ModelStrings->getModelString(); @@ -314,7 +314,13 @@ namespace BlackGui return; } - const bool hasModel = ui->tvp_AircraftModels->container().containsModelString(modelString); + // model in current view (data already in UI) + bool hasModel = ui->tvp_AircraftModels->container().containsModelString(modelString); + if (!hasModel && sGui && sGui->getIContextSimulator()) + { + hasModel = sGui->getIContextSimulator()->isKnownModel(modelString); + } + if (!hasModel) { this->showOverlayMessage(CStatusMessage(this).validationError("Invalid model for mapping, reloading model set"), OverlayMessageMs); @@ -328,6 +334,8 @@ namespace BlackGui const CSimulatedAircraft aircraftFromBackend = sGui->getIContextNetwork()->getAircraftInRangeForCallsign(callsign); const bool enabled = ui->cb_AircraftEnabled->isChecked(); bool changed = false; + + // changed model? if (aircraftFromBackend.getModelString() != modelString) { const CAircraftModelList models = sGui->getIContextSimulator()->getModelSetModelsStartingWith(modelString);