From a90d4465a20fa4fde23d7da411567d9e38007bd6 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 17 Jan 2019 00:06:03 +0100 Subject: [PATCH] Ref T451, fixed temp. disabled model * display info message * aircraft model list implementing ICallsignObjectList (for message) * fixed wrong flag in requestTempDisable --- src/blackgui/components/mappingcomponent.cpp | 2 + src/blackgui/components/mappingcomponent.h | 2 +- src/blackgui/views/aircraftmodelview.cpp | 7 +- src/blackgui/views/simulatedaircraftview.cpp | 2 +- src/blackmisc/aviation/callsignobjectlist.cpp | 11 ++- src/blackmisc/aviation/callsignobjectlist.h | 6 ++ .../simulation/aircraftmodellist.cpp | 86 ++++++++++++++++++- src/blackmisc/simulation/aircraftmodellist.h | 5 ++ 8 files changed, 114 insertions(+), 7 deletions(-) diff --git a/src/blackgui/components/mappingcomponent.cpp b/src/blackgui/components/mappingcomponent.cpp index 92b163dbc..00ed08a11 100644 --- a/src/blackgui/components/mappingcomponent.cpp +++ b/src/blackgui/components/mappingcomponent.cpp @@ -423,6 +423,8 @@ namespace BlackGui if (sGui && sGui->getIContextSimulator()) { sGui->getIContextSimulator()->disableModelsForMatching(models, true); + const CStatusMessage m = CLogMessage(this).info(u"Disabled %1 model(s): %2") << models.size() << models.getCallsignsAsString(", ", true); + this->showOverlayHTMLMessage(m, OverlayMessageMs); } } diff --git a/src/blackgui/components/mappingcomponent.h b/src/blackgui/components/mappingcomponent.h index 2078eb1ba..b5edb3a11 100644 --- a/src/blackgui/components/mappingcomponent.h +++ b/src/blackgui/components/mappingcomponent.h @@ -181,7 +181,7 @@ namespace BlackGui QTimer m_updateTimer; bool m_missedRenderedAircraftUpdate = true; //! Rendered aircraft need update BlackMisc::CTokenBucket m_bucket { 3, BlackMisc::PhysicalQuantities::CTime(5.0, BlackMisc::PhysicalQuantities::CTimeUnit::s()), 1}; - BlackMisc::CSettingReadOnly m_settings { this, &CMappingComponent::settingsChanged }; //!< settings changed + BlackMisc::CSettingReadOnly m_settings { this, &CMappingComponent::settingsChanged }; //!< settings changed Views::CCheckBoxDelegate *m_currentMappingsViewDelegate = nullptr; //! checkbox in view }; } // namespace diff --git a/src/blackgui/views/aircraftmodelview.cpp b/src/blackgui/views/aircraftmodelview.cpp index 1da28ab34..8b80b569f 100644 --- a/src/blackgui/views/aircraftmodelview.cpp +++ b/src/blackgui/views/aircraftmodelview.cpp @@ -35,6 +35,7 @@ #include #include #include +#include using namespace BlackMisc; using namespace BlackMisc::Simulation; @@ -387,14 +388,14 @@ namespace BlackGui void CAircraftModelView::toggleHighlightStashedModels() { - bool h = derivedModel()->highlightModelStrings(); + const bool h = derivedModel()->highlightModelStrings(); derivedModel()->setHighlightModelStrings(!h); emit toggledHighlightStashedModels(); } void CAircraftModelView::toggleHighlightInvalidModels() { - bool h = this->highlightModelStrings(); + const bool h = this->highlightModelStrings(); this->setHighlightModelStrings(!h); } @@ -418,7 +419,7 @@ namespace BlackGui void CAircraftModelView::requestTempDisable() { - if (!m_menus.testFlag(MenuCanStashModels)) { return; } + if (!m_menus.testFlag(MenuDisableModelsTemp)) { return; } if (!this->hasSelection()) { return; } const CAircraftModelList models(this->selectedObjects()); emit this->requestTempDisableModelsForMatching(models); diff --git a/src/blackgui/views/simulatedaircraftview.cpp b/src/blackgui/views/simulatedaircraftview.cpp index a74ec4418..bbcdd6360 100644 --- a/src/blackgui/views/simulatedaircraftview.cpp +++ b/src/blackgui/views/simulatedaircraftview.cpp @@ -162,7 +162,7 @@ namespace BlackGui void CSimulatedAircraftView::requestTempDisable() { - if (!m_menus.testFlag(MenuCanStashModels)) { return; } + if (!m_menus.testFlag(MenuDisableModelsTemp)) { return; } if (!this->hasSelection()) { return; } const CAircraftModelList models(this->selectedObjects().getModels()); emit this->requestTempDisableModelsForMatching(models); diff --git a/src/blackmisc/aviation/callsignobjectlist.cpp b/src/blackmisc/aviation/callsignobjectlist.cpp index da3499adf..c969c43e9 100644 --- a/src/blackmisc/aviation/callsignobjectlist.cpp +++ b/src/blackmisc/aviation/callsignobjectlist.cpp @@ -8,9 +8,9 @@ */ #include "blackmisc/simulation/simulatedaircraftlist.h" +#include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/interpolationsetuplist.h" #include "blackmisc/aviation/callsignobjectlist.h" -#include "blackmisc/aviation/callsign.h" #include "blackmisc/aviation/atcstationlist.h" #include "blackmisc/aviation/aircraftsituationlist.h" #include "blackmisc/aviation/flightplanlist.h" @@ -68,6 +68,14 @@ namespace BlackMisc return this->getCallsigns().getCallsignStrings(sorted); } + template + QString ICallsignObjectList::getCallsignsAsString(const QString &separator, bool sorted) const + { + if (this->container().isEmpty()) { return QString(); } + const QStringList callsigns = this->getCallsignStrings(sorted); + return callsigns.join(separator); + } + template CONTAINER ICallsignObjectList::findByCallsign(const CCallsign &callsign) const { @@ -292,6 +300,7 @@ namespace BlackMisc template class BLACKMISC_EXPORT_DEFINE_TEMPLATE ICallsignObjectList; template class BLACKMISC_EXPORT_DEFINE_TEMPLATE ICallsignObjectList; template class BLACKMISC_EXPORT_DEFINE_TEMPLATE ICallsignObjectList; + template class BLACKMISC_EXPORT_DEFINE_TEMPLATE ICallsignObjectList; template class BLACKMISC_EXPORT_DEFINE_TEMPLATE ICallsignObjectList; template class BLACKMISC_EXPORT_DEFINE_TEMPLATE ICallsignObjectList; template class BLACKMISC_EXPORT_DEFINE_TEMPLATE ICallsignObjectList; diff --git a/src/blackmisc/aviation/callsignobjectlist.h b/src/blackmisc/aviation/callsignobjectlist.h index 15bf1fdd0..be22792b0 100644 --- a/src/blackmisc/aviation/callsignobjectlist.h +++ b/src/blackmisc/aviation/callsignobjectlist.h @@ -34,6 +34,8 @@ namespace BlackMisc { class CSimulatedAircraft; class CSimulatedAircraftList; + class CAircraftModel; + class CAircraftModelList; class CInterpolationAndRenderingSetupPerCallsign; class CInterpolationSetupList; } @@ -63,6 +65,9 @@ namespace BlackMisc //! Get callsign string list QStringList getCallsignStrings(bool sorted = false) const; + //! Get callsigns as strings + QString getCallsignsAsString(const QString &separator, bool sorted = false) const; + //! Find 0..n stations by callsign CONTAINER findByCallsign(const CCallsign &callsign) const; @@ -134,6 +139,7 @@ namespace BlackMisc extern template class BLACKMISC_EXPORT_DECLARE_TEMPLATE ICallsignObjectList; extern template class BLACKMISC_EXPORT_DECLARE_TEMPLATE ICallsignObjectList; extern template class BLACKMISC_EXPORT_DECLARE_TEMPLATE ICallsignObjectList; + extern template class BLACKMISC_EXPORT_DECLARE_TEMPLATE ICallsignObjectList; extern template class BLACKMISC_EXPORT_DECLARE_TEMPLATE ICallsignObjectList; extern template class BLACKMISC_EXPORT_DECLARE_TEMPLATE ICallsignObjectList; extern template class BLACKMISC_EXPORT_DECLARE_TEMPLATE ICallsignObjectList; diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index fe3cf9835..3e245bb38 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -22,6 +22,8 @@ #include #include #include +#include +#include #include using namespace BlackMisc::Network; @@ -361,7 +363,7 @@ namespace BlackMisc { const QMap modelStrings = this->countPerModelString(); CAircraftModelList duplicates; - for (const auto &pair : makePairsRange(modelStrings)) + for (const auto pair : makePairsRange(modelStrings)) { if (pair.second > 1) { @@ -1153,6 +1155,88 @@ namespace BlackMisc return msgs; } + CStatusMessageList CAircraftModelList::validateFiles(CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmpty, int stopAtFailedFiles, bool &stopped, bool alreadySorted) const + { + invalidModels.clear(); + validModels.clear(); + stopped = false; + + CStatusMessageList msgs; + QSet failedFiles; + QSet workingFiles; + int failedFilesCount = 0; + + const bool caseSensitive = CFileUtils::isFileNameCaseSensitiv(); + for (const CAircraftModel &model : *this) + { + bool ok = false; + do + { + if (!model.hasModelString()) + { + const CStatusMessage m(this, CStatusMessage::SeverityError, "No model string"); + msgs.push_back(m); + break; + } + + if (!model.hasFileName()) + { + if (ignoreEmpty) { continue; } + const CStatusMessage m(this, CStatusMessage::SeverityError, QStringLiteral("'%1', no file name").arg(model.getModelStringAndDbKey()), true); + msgs.push_back(m); + break; + } + + const QString fn(caseSensitive ? model.getFileName() : model.getFileNameLowerCase()); + if (failedFiles.contains(fn)) + { + const CStatusMessage m(this, CStatusMessage::SeverityError, QStringLiteral("'%1', known failed file '%2' skipped").arg(model.getModelStringAndDbKey(), model.getFileName()), true); + msgs.push_back(m); + break; + } + + if (workingFiles.contains(fn) || model.hasExistingCorrespondingFile()) + { + ok = true; + workingFiles.insert(fn); + // const CStatusMessage m(this, CStatusMessage::SeverityInfo, QStringLiteral("'%1', file '%2' existing").arg(model.getModelStringAndDbKey(), model.getFileName()), true); + // msgs.push_back(m); + break; + } + + failedFiles.insert(fn); + failedFilesCount++; + const CStatusMessage m(this, CStatusMessage::SeverityError, QStringLiteral("'%1', file '%2' not existing").arg(model.getModelStringAndDbKey(), model.getFileName()), true); + msgs.push_back(m); + } + while (false); + + if (ok) + { + validModels.push_back(model); + } + else + { + invalidModels.push_back(model); + } + + if (stopAtFailedFiles > 0 && failedFilesCount >= stopAtFailedFiles) + { + stopped = true; + const CStatusMessage m(this, CStatusMessage::SeverityWarning, QStringLiteral("Stopping after %1 failed files").arg(failedFilesCount)); + msgs.push_back(m); + break; + } + } + + // Summary + const CStatusMessage m(this, CStatusMessage::SeverityInfo, QStringLiteral("Valid models: %1").arg(validModels.size())); + msgs.push_back(m); + + // done + return msgs; + } + QJsonObject CAircraftModelList::toMemoizedJson() const { CAircraftModel::MemoHelper::CMemoizer helper; diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index 97792350d..398fd887d 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -17,6 +17,7 @@ #include "blackmisc/simulation/simulatorinfo.h" #include "blackmisc/aviation/aircrafticaocodelist.h" #include "blackmisc/aviation/airlineicaocodelist.h" +#include "blackmisc/aviation/callsignobjectlist.h" #include "blackmisc/db/datastoreobjectlist.h" #include "blackmisc/blackmiscexport.h" #include "blackmisc/collection.h" @@ -53,6 +54,7 @@ namespace BlackMisc public CSequence, public Db::IDatastoreObjectList, public IOrderableList, + public Aviation::ICallsignObjectList, public Mixin::MetaType { public: @@ -397,6 +399,9 @@ namespace BlackMisc //! Validate distributors CStatusMessageList validateDistributors(const CDistributorList &distributors, CAircraftModelList &validModels, CAircraftModelList &invalidModels) const; + //! Validate distributors + CStatusMessageList validateFiles(CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmpty, int stopAtFailedFiles, bool &stopped, bool alreadySorted = false) const; + //! To compact JSON format QJsonObject toMemoizedJson() const;