From b351f0bd67d5570585341466bdba0fd32040feb4 Mon Sep 17 00:00:00 2001 From: Ali Kianian Date: Tue, 16 Jan 2024 11:55:29 +0200 Subject: [PATCH] QmlDesigner: Synchronize the selected collection with collectionDetails Fixes: QDS-11643 Fixes: QDS-11654 Change-Id: Icf43d2f68b1c4fb4a6ffeb80651b2339b268ccd6 Reviewed-by: Miikka Heikkinen Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Mahmoud Badri --- .../collectioneditor/collectionlistmodel.cpp | 5 ++++- .../collectionsourcemodel.cpp | 21 +++++++++++++++---- .../collectioneditor/collectionsourcemodel.h | 2 ++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionlistmodel.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectionlistmodel.cpp index 3efb79e7483..214ece078a0 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionlistmodel.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionlistmodel.cpp @@ -87,8 +87,11 @@ bool CollectionListModel::removeRows(int row, int count, const QModelIndex &pare QStringList removedCollections = stringList().mid(row, count); bool itemsRemoved = Super::removeRows(row, count, parent); - if (itemsRemoved) + if (itemsRemoved) { emit collectionsRemoved(removedCollections); + if (m_selectedIndex >= row) + selectCollectionIndex(m_selectedIndex - count, true); + } return itemsRemoved; } diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp index 6740766c298..1f9c7aa5d7a 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp @@ -327,6 +327,7 @@ bool CollectionSourceModel::addCollectionToSource(const ModelNode &node, return returnError(tr("No model is available for the JSON model group.")); collections->selectCollectionName(collectionName); + setSelectedCollectionName(collectionName); return true; } else { return returnError(tr("JSON document type should be an object containing models.")); @@ -405,9 +406,11 @@ void CollectionSourceModel::onSelectedCollectionChanged(CollectionListModel *col m_previousSelectedList = collectionList; - emit collectionSelected(collectionList->collectionNameAt(collectionIndex)); + setSelectedCollectionName(collectionList->collectionNameAt(collectionIndex)); selectSourceIndex(sourceIndex(collectionList->sourceNode())); + } else { + setSelectedCollectionName({}); } } @@ -415,7 +418,7 @@ void CollectionSourceModel::onCollectionNameChanged(CollectionListModel *collect const QString &oldName, const QString &newName) { auto emitRenameWarning = [this](const QString &msg) -> void { - emit this->warning(tr("Rename Model"), msg); + emit warning(tr("Rename Model"), msg); }; const ModelNode node = collectionList->sourceNode(); @@ -577,9 +580,11 @@ void CollectionSourceModel::onCollectionsRemoved(CollectionListModel *collection } for (const QString &collectionName : std::as_const(collectionsRemovedFromDocument)) - emit this->collectionRemoved(collectionName); + emit collectionRemoved(collectionName); updateCollectionList(nodeIndex); + if (m_previousSelectedList == collectionList) + onSelectedCollectionChanged(collectionList, collectionList->selectedIndex()); } } @@ -609,12 +614,20 @@ void CollectionSourceModel::setSelectedIndex(int idx) } else if (m_previousSelectedList) { m_previousSelectedList->selectCollectionIndex(-1); m_previousSelectedList = {}; - emit this->collectionSelected({}); + setSelectedCollectionName({}); } } } } +void CollectionSourceModel::setSelectedCollectionName(const QString &collectionName) +{ + if (m_selectedCollectionName != collectionName) { + m_selectedCollectionName = collectionName; + emit collectionSelected(m_selectedCollectionName); + } +} + void CollectionSourceModel::updateEmpty() { bool isEmptyNow = m_collectionSources.isEmpty(); diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h index 487b616b97b..5ab77f2a98d 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h @@ -87,6 +87,7 @@ private slots: private: void setSelectedIndex(int idx); + void setSelectedCollectionName(const QString &collectionName); void updateEmpty(); void updateCollectionList(QModelIndex index); void registerCollection(const QSharedPointer &collection); @@ -98,6 +99,7 @@ private: QHash m_sourceIndexHash; // internalId -> index QList> m_collectionList; QPointer m_previousSelectedList; + QString m_selectedCollectionName; int m_selectedIndex = -1; bool m_isEmpty = true; };