From 83d7b7ceef47933af27b63e481d3e2dc726617fc Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sat, 12 Mar 2016 05:30:47 +0100 Subject: [PATCH] refs #619, adjusted model loader / implementing classes * init data based on last setup * init changed some signatures --- src/blackmisc/simulation/aircraftmodel.h | 6 +++--- .../simulation/aircraftmodelloader.cpp | 8 ++++---- .../simulation/aircraftmodelloader.h | 4 ++-- .../simulation/fscommon/aircraftcfgparser.cpp | 19 +++++++++++-------- .../simulation/fscommon/aircraftcfgparser.h | 14 +++++++------- .../xplane/aircraftmodelloaderxplane.cpp | 6 +++--- 6 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/blackmisc/simulation/aircraftmodel.h b/src/blackmisc/simulation/aircraftmodel.h index d89d55c69..e3993ba51 100644 --- a/src/blackmisc/simulation/aircraftmodel.h +++ b/src/blackmisc/simulation/aircraftmodel.h @@ -96,12 +96,12 @@ namespace BlackMisc //! \copydoc BlackMisc::Mixin::Index::setPropertyByIndex void setPropertyByIndex(const CVariant &variant, const BlackMisc::CPropertyIndex &index); + //! \copydoc BlackMisc::Mixin::Index::comparePropertyByIndex() + int comparePropertyByIndex(const CAircraftModel &compareValue, const CPropertyIndex &index) const; + //! Can be initialized from FSD bool canInitializeFromFsd() const; - //! Compare for index - int comparePropertyByIndex(const CAircraftModel &compareValue, const CPropertyIndex &index) const; - //! Corresponding callsign if applicable const BlackMisc::Aviation::CCallsign &getCallsign() const { return this->m_callsign; } diff --git a/src/blackmisc/simulation/aircraftmodelloader.cpp b/src/blackmisc/simulation/aircraftmodelloader.cpp index 8cca91375..4651dfa05 100644 --- a/src/blackmisc/simulation/aircraftmodelloader.cpp +++ b/src/blackmisc/simulation/aircraftmodelloader.cpp @@ -58,23 +58,23 @@ namespace BlackMisc if (this->m_loadingInProgress) { return; } this->m_loadingInProgress = true; const bool useCachedData = !mode.testFlag(CacheSkipped) && this->hasCachedData(); - if (useCachedData && mode.testFlag(CacheFirst)) + if (useCachedData && (mode.testFlag(CacheFirst) || mode.testFlag(CacheOnly))) { - emit loadingFinished(true); + emit loadingFinished(true, this->m_simulatorInfo); return; } else if (useCachedData && mode.testFlag(CacheUntilNewer)) { if (!this->areModelFilesUpdated()) { - emit loadingFinished(true); + emit loadingFinished(true, this->m_simulatorInfo); return; } } if (mode.testFlag(CacheOnly)) { // only cache, but we did not find any data - emit loadingFinished(false); + emit loadingFinished(false, this->m_simulatorInfo); return; } this->startLoadingFromDisk(mode); diff --git a/src/blackmisc/simulation/aircraftmodelloader.h b/src/blackmisc/simulation/aircraftmodelloader.h index 94e81923a..18089dcda 100644 --- a/src/blackmisc/simulation/aircraftmodelloader.h +++ b/src/blackmisc/simulation/aircraftmodelloader.h @@ -42,7 +42,7 @@ namespace BlackMisc CacheUntilNewer = 1 << 2, //!< use cache until newer data re available CacheFirst = 1 << 3, //!< always use cache (if it has data) CacheSkipped = 1 << 4, //!< ignore cache - CacheOnly = 1 << 5, //!< force ignoring the cache + CacheOnly = 1 << 5, //!< only read cache, never load from disk Default = LoadInBackground | CacheFirst //!< default mode }; Q_DECLARE_FLAGS(LoadMode, LoadModeFlag) @@ -97,7 +97,7 @@ namespace BlackMisc signals: //! Parsing is finished - void loadingFinished(bool success); + void loadingFinished(bool success, const BlackMisc::Simulation::CSimulatorInfo &simulator); protected: //! Constructor diff --git a/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp b/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp index 7cd228bbf..b09e7d066 100644 --- a/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp +++ b/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp @@ -107,8 +107,9 @@ namespace BlackMisc { if (pair.second) { - this->updateCfgEntriesList(pair.first); + this->m_parsedCfgEntriesList = pair.first; this->setModelsInCache(pair.first.toAircraftModelList()); + emit loadingFinished(true, this->m_simulatorInfo); } }); } @@ -117,7 +118,15 @@ namespace BlackMisc bool ok; this->m_parsedCfgEntriesList = performParsing(m_rootDirectory, m_excludedDirectories, &ok); this->setModelsInCache(this->m_parsedCfgEntriesList.toAircraftModelList()); - emit loadingFinished(ok); + emit loadingFinished(ok, this->m_simulatorInfo); + } + } + + void CAircraftCfgParser::ps_cacheChanged() + { + if (this->hasCachedData()) + { + emit this->loadingFinished(true, this->m_simulatorInfo); } } @@ -188,12 +197,6 @@ namespace BlackMisc return empty; } - void CAircraftCfgParser::updateCfgEntriesList(const CAircraftCfgEntriesList &cfgEntriesList) - { - m_parsedCfgEntriesList = cfgEntriesList; - emit loadingFinished(true); - } - CStatusMessage CAircraftCfgParser::setModelsInCache(const CAircraftModelList &models) { if (this->m_simulatorInfo.fsx()) diff --git a/src/blackmisc/simulation/fscommon/aircraftcfgparser.h b/src/blackmisc/simulation/fscommon/aircraftcfgparser.h index 14b687aea..661e1ef5f 100644 --- a/src/blackmisc/simulation/fscommon/aircraftcfgparser.h +++ b/src/blackmisc/simulation/fscommon/aircraftcfgparser.h @@ -56,10 +56,6 @@ namespace BlackMisc //! Create an parser object for given simulator static std::unique_ptr createModelLoader(const BlackMisc::Simulation::CSimulatorInfo &simInfo); - public slots: - //! Parsed or injected entires - void updateCfgEntriesList(const BlackMisc::Simulation::FsCommon::CAircraftCfgEntriesList &cfgEntriesList); - protected: //! Set cached values BlackMisc::CStatusMessage setModelsInCache(const BlackMisc::Simulation::CAircraftModelList &models); @@ -69,6 +65,10 @@ namespace BlackMisc virtual void startLoadingFromDisk(LoadMode mode) override; //! @} + private slots: + //! Cache changed + void ps_cacheChanged(); + private: //! Section within file enum FileSection @@ -95,9 +95,9 @@ namespace BlackMisc QPointer m_parserWorker; //!< worker will destroy itself, so weak pointer //! \todo KB/MS Is there nothing better than having 3 cache members? - BlackMisc::CData m_modelCacheFsx {this}; //!< FSX cache - BlackMisc::CData m_modelCacheFs9 {this}; //!< Fs9 cache - BlackMisc::CData m_modelCacheP3D {this}; //!< P3D cache + BlackMisc::CData m_modelCacheFsx {this, &CAircraftCfgParser::ps_cacheChanged}; //!< FSX cache + BlackMisc::CData m_modelCacheFs9 {this, &CAircraftCfgParser::ps_cacheChanged}; //!< FS9 cache + BlackMisc::CData m_modelCacheP3D {this, &CAircraftCfgParser::ps_cacheChanged}; //!< P3D cache static const QString &fileFilter(); }; diff --git a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp index 1806fbbea..d99ba06c0 100644 --- a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp +++ b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp @@ -67,7 +67,7 @@ namespace BlackMisc m_installedModels.clear(); if (m_rootDirectory.isEmpty()) { - emit loadingFinished(false); + emit loadingFinished(false, this->m_simulatorInfo); return; } @@ -90,7 +90,7 @@ namespace BlackMisc else if (mode.testFlag(LoadDirectly)) { m_installedModels = performParsing(m_rootDirectory, m_excludedDirectories); - emit loadingFinished(true); + emit loadingFinished(true, this->m_simulatorInfo); } } @@ -126,7 +126,7 @@ namespace BlackMisc void CAircraftModelLoaderXPlane::updateInstalledModels(const CAircraftModelList &models) { m_installedModels = models; - emit loadingFinished(true); + emit loadingFinished(true, this->m_simulatorInfo); } QString CAircraftModelLoaderXPlane::CSLPlane::getModelName() const