From 42405ffa743488e2da95a81c8a0b1d7c21f75dda Mon Sep 17 00:00:00 2001 From: Ali Kianian Date: Fri, 17 Nov 2023 11:34:50 +0200 Subject: [PATCH] QmlDesigner: Fix the bug for saving collection - The node resolved path was wrong. - Also the saving method is cleaned up. Change-Id: Ic905c20e5899fcc23c97a8d42a1fdf7c0c8e1089 Reviewed-by: Mahmoud Badri --- .../CollectionDetailsToolbar.qml | 8 +---- .../collectiondetailsmodel.cpp | 34 +++++++++++++++++-- .../collectioneditor/collectiondetailsmodel.h | 7 +++- .../collectionsourcemodel.cpp | 5 --- .../collectioneditor/collectionsourcemodel.h | 2 -- 5 files changed, 38 insertions(+), 18 deletions(-) diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsToolbar.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsToolbar.qml index 436ca8a0ab5..e627a6b6db4 100644 --- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsToolbar.qml +++ b/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsToolbar.qml @@ -102,13 +102,7 @@ Item { icon: StudioTheme.Constants.updateContent_medium tooltip: qsTr("Update existing file with changes") enabled: root.model.collectionName !== "" - onClicked: - { - if (root.backend.selectedSourceAddress().indexOf("json") !== -1) - root.model.exportCollection(root.backend.selectedSourceAddress(), root.model.collectionName, "JSON") - else - root.model.exportCollection(root.backend.selectedSourceAddress(), root.model.collectionName, "CSV") - } + onClicked: root.model.saveCurrentCollection() } IconButton { diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.cpp index 2ef2e211710..a39da321e92 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.cpp @@ -408,9 +408,10 @@ void CollectionDetailsModel::loadCollection(const ModelNode &sourceNode, const Q } } -bool CollectionDetailsModel::exportCollection(const QString &path, const QString &collectionName, const QString &exportType) +bool CollectionDetailsModel::exportCollection(const QUrl &url, + const QString &collectionName, + const QString &exportType) { - QUrl url(path); QString filePath; if (url.isLocalFile()) { QFileInfo fileInfo(url.toLocalFile()); @@ -418,7 +419,7 @@ bool CollectionDetailsModel::exportCollection(const QString &path, const QString fileInfo.setFile(QString("%1.%2").arg(url.toLocalFile(), exportType.toLower())); filePath = fileInfo.absoluteFilePath(); } else { - filePath = path; + filePath = url.toString(); } if (exportType == "JSON") { @@ -432,6 +433,11 @@ bool CollectionDetailsModel::exportCollection(const QString &path, const QString return false; } +bool CollectionDetailsModel::saveCurrentCollection() +{ + return saveCollection(m_currentCollection); +} + void CollectionDetailsModel::updateEmpty() { bool isEmptyNow = rowCount() == 0; @@ -606,6 +612,28 @@ void CollectionDetailsModel::setCollectionName(const QString &newCollectionName) } } +bool CollectionDetailsModel::saveCollection(CollectionDetails &collection) +{ + if (!collection.isValid() || !m_openedCollections.contains(collection.reference())) + return false; + + const ModelNode node = collection.reference().node; + bool saved = false; + + if (CollectionEditor::getSourceCollectionType(node) == "json") { + saved = saveCollectionAsJson(CollectionEditor::getSourceCollectionPath(node), + collection.getJsonCollection(), + collection.reference().name); + } else if (CollectionEditor::getSourceCollectionType(node) == "csv") { + saved = saveCollectionAsCsv(CollectionEditor::getSourceCollectionPath(node), + collection.getCsvCollection()); + } + if (saved) + collection.markSaved(); + + return saved; +} + bool CollectionDetailsModel::saveCollectionAsJson(const QString &path, const QJsonArray &content, const QString &collectionName) { QFile sourceFile(path); diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.h b/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.h index 38c59d8fe92..eca3c697200 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.h +++ b/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.h @@ -63,7 +63,11 @@ public: void loadCollection(const ModelNode &sourceNode, const QString &collection); - Q_INVOKABLE bool exportCollection(const QString &path, const QString &collectionName, const QString &exportType); + Q_INVOKABLE bool exportCollection(const QUrl &url, + const QString &collectionName, + const QString &exportType); + + Q_INVOKABLE bool saveCurrentCollection(); signals: void collectionNameChanged(const QString &collectionName); @@ -81,6 +85,7 @@ private: void setCollectionName(const QString &newCollectionName); void loadJsonCollection(const QString &source, const QString &collection); void loadCsvCollection(const QString &source, const QString &collectionName); + bool saveCollection(CollectionDetails &collection); bool saveCollectionAsJson(const QString &path, const QJsonArray &content, const QString &collectionName); bool saveCollectionAsCsv(const QString &path, const QString &content); QVariant variantFromString(const QString &value); diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp index d7e31607908..df7e90f3312 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp @@ -393,11 +393,6 @@ void CollectionSourceModel::updateNodeSource(const ModelNode &node) updateCollectionList(index); } -QString CollectionSourceModel::selectedSourceAddress() const -{ - return index(m_selectedIndex).data(SourceRole).toString(); -} - void CollectionSourceModel::onSelectedCollectionChanged(int collectionIndex) { CollectionListModel *collectionList = qobject_cast(sender()); diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h index 39c82ec5b31..28c36d03e01 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h @@ -67,8 +67,6 @@ public: void updateNodeName(const ModelNode &node); void updateNodeSource(const ModelNode &node); - Q_INVOKABLE QString selectedSourceAddress() const; - signals: void selectedIndexChanged(int idx); void collectionSelected(const ModelNode &sourceNode, const QString &collectionName);