QmlDesigner: Apply rename and delete collection on CollectionDetails

Fixes: QDS-11656
Change-Id: I0e5cec47395f8f531285041111b73686c4c858d4
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Ali Kianian
2024-01-24 21:23:48 +02:00
parent 1cf5b3bf57
commit 012a8331b5
6 changed files with 71 additions and 1 deletions

View File

@@ -557,6 +557,14 @@ void CollectionDetails::swap(CollectionDetails &other)
d.swap(other.d);
}
void CollectionDetails::resetReference(const CollectionReference &reference)
{
if (d->reference != reference) {
d->reference = reference;
markChanged();
}
}
void CollectionDetails::registerDeclarativeType()
{
typedef CollectionDetails::DataType DataType;

View File

@@ -103,6 +103,7 @@ public:
bool markSaved();
void swap(CollectionDetails &other);
void resetReference(const CollectionReference &reference);
QString getCollectionAsJsonString() const;
QString getCollectionAsCsvString() const;

View File

@@ -458,6 +458,42 @@ void CollectionDetailsModel::loadCollection(const ModelNode &sourceNode, const Q
}
}
void CollectionDetailsModel::removeCollection(const ModelNode &sourceNode, const QString &collection)
{
CollectionReference collectionRef{sourceNode, collection};
if (!m_openedCollections.contains(collectionRef))
return;
if (m_currentCollection.reference() == collectionRef)
loadCollection({}, {});
m_openedCollections.remove(collectionRef);
}
void CollectionDetailsModel::removeAllCollections()
{
loadCollection({}, {});
m_openedCollections.clear();
}
void CollectionDetailsModel::renameCollection(const ModelNode &sourceNode,
const QString &oldName,
const QString &newName)
{
CollectionReference oldRef{sourceNode, oldName};
if (!m_openedCollections.contains(oldRef))
return;
CollectionReference newReference{sourceNode, newName};
bool collectionIsSelected = m_currentCollection.reference() == oldRef;
CollectionDetails collection = m_openedCollections.take(oldRef);
collection.resetReference(newReference);
m_openedCollections.insert(newReference, collection);
if (collectionIsSelected)
setCollectionName(newName);
}
bool CollectionDetailsModel::saveDataStoreCollections()
{
const ModelNode node = m_currentCollection.reference().node;

View File

@@ -61,6 +61,9 @@ public:
static Q_INVOKABLE QStringList typesList();
void loadCollection(const ModelNode &sourceNode, const QString &collection);
void removeCollection(const ModelNode &sourceNode, const QString &collection);
void removeAllCollections();
void renameCollection(const ModelNode &sourceNode, const QString &oldName, const QString &newName);
Q_INVOKABLE bool saveDataStoreCollections();
Q_INVOKABLE bool exportCollection(const QUrl &url);

View File

@@ -498,8 +498,21 @@ void CollectionSourceModel::onCollectionNameChanged(CollectionListModel *collect
return;
}
CollectionListModel *list = m_collectionList.at(nodeIndex.row()).data();
bool updateSelectedNames = list && list == m_previousSelectedList.data();
emit collectionRenamed(oldName, newName);
updateCollectionList(nodeIndex);
if (updateSelectedNames) {
list = m_collectionList.at(nodeIndex.row()).data();
if (m_selectedCollectionName == oldName) {
list->selectCollectionName(newName);
setSelectedCollectionName(newName);
} else {
// reselect to update ID if it's changed due to renaming and order changes
list->selectCollectionName(m_selectedCollectionName);
}
}
}
}

View File

@@ -48,7 +48,11 @@ CollectionView::CollectionView(ExternalDependenciesInterface &externalDependenci
connect(ProjectExplorer::ProjectManager::instance(),
&ProjectExplorer::ProjectManager::startupProjectChanged,
this,
&CollectionView::resetDataStoreNode);
[=] {
resetDataStoreNode();
if (m_widget.get())
m_widget->collectionDetailsModel()->removeAllCollections();
});
resetDataStoreNode();
}
@@ -91,6 +95,9 @@ QmlDesigner::WidgetInfo CollectionView::widgetInfo()
this,
[this](const QString &oldName, const QString &newName) {
m_dataStore->renameCollection(oldName, newName);
m_widget->collectionDetailsModel()->renameCollection(dataStoreNode(),
oldName,
newName);
});
connect(sourceModel,
@@ -98,6 +105,8 @@ QmlDesigner::WidgetInfo CollectionView::widgetInfo()
this,
[this](const QString &collectionName) {
m_dataStore->removeCollection(collectionName);
m_widget->collectionDetailsModel()->removeCollection(dataStoreNode(),
collectionName);
});
}