diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp index f76c5255aec..7760f46ff16 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp @@ -214,13 +214,18 @@ void CollectionSourceModel::setSource(const ModelNode &source) updateSelectedSource(true); } -void CollectionSourceModel::removeSource(const ModelNode &node) +void CollectionSourceModel::reset() { - int nodePlace = m_sourceIndexHash.value(node.internalId(), -1); - if (nodePlace < 0) - return; + beginResetModel(); + m_collectionSources.clear(); + m_sourceIndexHash.clear(); + m_collectionList.clear(); + m_previousSelectedList.clear(); + setSelectedCollectionName({}); - removeRow(nodePlace); + updateEmpty(); + endResetModel(); + updateSelectedSource(); } int CollectionSourceModel::sourceIndex(const ModelNode &node) const diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h index fbbea76618d..f988935c988 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h @@ -46,7 +46,7 @@ public: virtual QHash roleNames() const override; void setSource(const ModelNode &source); - void removeSource(const ModelNode &node); + void reset(); int sourceIndex(const ModelNode &node) const; void addSource(const ModelNode &node); void selectSource(const ModelNode &node); diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp index b29493b5e28..442a79cbd5a 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp @@ -144,6 +144,7 @@ void CollectionView::modelAboutToBeDetached([[maybe_unused]] Model *model) m_dataStoreTypeFound = false; disconnect(m_documentUpdateConnection); QTC_ASSERT(m_delayedTasks.isEmpty(), m_delayedTasks.clear()); + m_widget->sourceModel()->reset(); } void CollectionView::nodeRemoved(const ModelNode &removedNode, @@ -319,8 +320,8 @@ void CollectionView::resetDataStoreNode() if (!dataStore || m_widget->sourceModel()->sourceIndex(dataStore) > -1) return; - bool dataStoreSingletonFound = false; - if (m_libraryInfoIsUpdated && rewriterView() && rewriterView()->isAttached()) { + bool dataStoreSingletonFound = m_dataStoreTypeFound; + if (!dataStoreSingletonFound && rewriterView() && rewriterView()->isAttached()) { const QList types = rewriterView()->getQMLTypes(); for (const QmlTypeData &cppTypeData : types) { if (cppTypeData.isSingleton && cppTypeData.typeName == "DataStore") {