diff --git a/src/blackgui/views/aircraftmodelview.cpp b/src/blackgui/views/aircraftmodelview.cpp index 03fbbfeb7..c1030bf83 100644 --- a/src/blackgui/views/aircraftmodelview.cpp +++ b/src/blackgui/views/aircraftmodelview.cpp @@ -143,6 +143,16 @@ namespace BlackGui return this->removeModelsWithModelString(models.getModelStrings(), sensitivity); } + int CAircraftModelView::replaceOrAddModelsWithString(const CAircraftModelList &models, Qt::CaseSensitivity sensitivity) + { + if (models.isEmpty()) { return 0; } + CAircraftModelList copy(this->container()); + int c = copy.replaceOrAddModelsWithString(models, sensitivity); + if (c == 0) { return 0; } + this->updateContainerMaybeAsync(copy); + return c; + } + void CAircraftModelView::setHighlightModelStrings(const QStringList &highlightModels) { this->derivedModel()->setHighlightModelStrings(highlightModels); diff --git a/src/blackgui/views/aircraftmodelview.h b/src/blackgui/views/aircraftmodelview.h index 22d04dfe5..b454759b2 100644 --- a/src/blackgui/views/aircraftmodelview.h +++ b/src/blackgui/views/aircraftmodelview.h @@ -64,6 +64,9 @@ namespace BlackGui //! Remove models with model strings int removeModelsWithModelString(const BlackMisc::Simulation::CAircraftModelList &models, Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive); + //! Replace models with sme model string, otherwise add + int replaceOrAddModelsWithString(const BlackMisc::Simulation::CAircraftModelList &models, Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive); + //! \copydoc BlackGui::Models::CAircraftModelListModel::setHighlightModelStrings(const QStringList &) void setHighlightModelStrings(const QStringList &highlightModels); diff --git a/src/blackmisc/datastoreobjectlist.cpp b/src/blackmisc/datastoreobjectlist.cpp index c3a1841b4..365703dc2 100644 --- a/src/blackmisc/datastoreobjectlist.cpp +++ b/src/blackmisc/datastoreobjectlist.cpp @@ -122,10 +122,10 @@ namespace BlackMisc CONTAINER newValues(this->container()); const QList keys(container.toDbKeyList()); newValues.removeObjectsWithKeys(keys); + int removeSize = newValues.size(); // size after removing data newValues.push_back(container); - int delta = newValues.size() - this->container().size(); this->container() = newValues; - return delta; + return newValues.size() - removeSize; } template diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index 925bbbe7b..f05593b07 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -160,6 +160,23 @@ namespace BlackMisc return d; } + int CAircraftModelList::replaceOrAddModelsWithString(const CAircraftModelList &addOrReplaceList, Qt::CaseSensitivity sensitivity) + { + if (addOrReplaceList.isEmpty()) { return 0; } + if (this->isEmpty()) + { + *this = addOrReplaceList; + return addOrReplaceList.size(); + } + CAircraftModelList newModels(*this); + const QStringList keys(addOrReplaceList.getModelStrings(false)); + newModels.removeModelsWithString(keys, sensitivity); + int removed = newModels.size(); // size after removing + newModels.push_back(addOrReplaceList); + *this = newModels; + return this->size() - removed; + } + CAircraftModelList CAircraftModelList::findModelsStartingWith(const QString &modelString, Qt::CaseSensitivity sensitivity) const { return this->findBy([ = ](const CAircraftModel & model) diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index ec8406eb8..a23034bab 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -92,6 +92,10 @@ namespace BlackMisc //! \return number of elements removed int removeModelsWithString(const QStringList &modelStrings, Qt::CaseSensitivity sensitivity); + //! Replace or add based on model string + //! \return number of elements removed + int replaceOrAddModelsWithString(const CAircraftModelList &addOrReplaceList, Qt::CaseSensitivity sensitivity); + //! Model strings QStringList getModelStrings(bool sort = true) const;