diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.cpp index b22852e446b..e6aeaf23011 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.cpp @@ -5,6 +5,7 @@ #include #include +#include #include namespace QmlDesigner { @@ -269,4 +270,29 @@ QJsonArray CollectionDetails::getJsonCollection() const return collectionArray; } +QString CollectionDetails::getCsvCollection() const +{ + QString content; + if (d->headers.count() <= 0) + return ""; + + for (const QString &header : std::as_const(d->headers)) + content += header + ','; + + content.back() = '\n'; + + for (const QJsonObject &elementsRow : std::as_const(d->elements)) { + for (const QString &header : std::as_const(d->headers)) { + const QJsonValue &value = elementsRow.value(header); + + if (value.isDouble()) + content += QString::number(value.toDouble()) + ','; + else + content += value.toString() + ','; + } + content.back() = '\n'; + } + + return content; +} } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.h b/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.h index a26ffb558f3..9e08adecbbd 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.h +++ b/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.h @@ -69,6 +69,8 @@ public: void swap(CollectionDetails &other); QJsonArray getJsonCollection() const; + QString getCsvCollection() const; + CollectionDetails &operator=(const CollectionDetails &other); private: diff --git a/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.cpp b/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.cpp index fb46bd33ce2..989027d9107 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.cpp @@ -361,7 +361,6 @@ void SingleCollectionModel::loadJsonCollection(const QString &source, const QStr } SourceFormat sourceFormat = jsonFileIsOk ? SourceFormat::Json : SourceFormat::Unknown; - beginResetModel(); m_currentCollection.resetDetails(getJsonHeaders(collectionNodes), elements, sourceFormat); endResetModel(); @@ -401,7 +400,6 @@ void SingleCollectionModel::loadCsvCollection(const QString &source, } SourceFormat sourceFormat = csvFileIsOk ? SourceFormat::Csv : SourceFormat::Unknown; - beginResetModel(); m_currentCollection.resetDetails(headers, elements, sourceFormat); endResetModel(); @@ -436,4 +434,14 @@ bool SingleCollectionModel::saveCollectionAsJson(const QString &collection, cons return false; } +bool SingleCollectionModel::saveCollectionAsCsv(const QString &path, const QString &content) +{ + QFile file(path); + + if (file.open(QFile::WriteOnly) && file.write(content.toUtf8())) + return true; + + return false; +} + } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.h b/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.h index 75654204460..b1d5d0308af 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.h +++ b/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.h @@ -74,6 +74,7 @@ private: void loadJsonCollection(const QString &source, const QString &collection); void loadCsvCollection(const QString &source, const QString &collectionName); bool saveCollectionAsJson(const QString &collection, const QJsonArray &content, const QString &source); + bool saveCollectionAsCsv(const QString &path, const QString &content); QHash m_openedCollections; CollectionDetails m_currentCollection;