refs #618, allow to update/add models based on model string

* functionality in list
* access via view
* fixed count for changed objects in datastoreobjectlist (now detects replacements)
This commit is contained in:
Klaus Basan
2016-03-22 08:03:36 +01:00
parent 7beb5661a3
commit 6fdddf8f93
5 changed files with 36 additions and 2 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -122,10 +122,10 @@ namespace BlackMisc
CONTAINER newValues(this->container());
const QList<KEYTYPE> 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 <class OBJ, class CONTAINER, typename KEYTYPE>

View File

@@ -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)

View File

@@ -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;