diff options
author | Eike Ziller <eike.ziller@qt.io> | 2020-09-03 11:17:12 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2020-09-03 12:18:02 +0200 |
commit | 3b76714290da72eff10ed251263146bb59713ca5 (patch) | |
tree | e107f900b968e524b7c38fd833c66383cc449438 /src/plugins/qmldesigner/assetexporterplugin | |
parent | 5b8846a4f889d9e700b9625ffefd8b22f64ea41e (diff) | |
parent | 1074dab46703d80718ccda079f20e5e92c90257e (diff) |
Merge remote-tracking branch 'origin/4.13' into master
Conflicts:
share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/ListViewSpecifics.qml
share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/MouseAreaSpecifics.qml
share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/RowSpecifics.qml
share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FlickableSection.qml
share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FontSection.qml
share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/StandardTextSection.qml
Change-Id: Ie5deacd39ae4f3c0966e7cb41a8fd832dcefbb09
Diffstat (limited to 'src/plugins/qmldesigner/assetexporterplugin')
-rw-r--r-- | src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp | 23 | ||||
-rw-r--r-- | src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp | 33 |
2 files changed, 39 insertions, 17 deletions
diff --git a/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp b/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp index b975c228e6..bef733b27b 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp @@ -26,6 +26,8 @@ #include "componentexporter.h" #include "exportnotification.h" +#include "designdocument.h" +#include "qmldesignerplugin.h" #include "rewriterview.h" #include "qmlitemnode.h" #include "qmlobjectnode.h" @@ -163,7 +165,6 @@ void AssetExporter::exportComponent(const ModelNode &rootNode) Component exporter(*this, rootNode); exporter.exportComponent(); m_components.append(exporter.json()); - notifyProgress((m_totalFileCount - m_exportFiles.count()) * 0.8 / m_totalFileCount); } void AssetExporter::notifyLoadError(AssetExporterView::LoadState state) @@ -192,12 +193,22 @@ void AssetExporter::onQmlFileLoaded() { QTC_ASSERT(m_view && m_view->model(), qCDebug(loggerError) << "Null model"; return); qCDebug(loggerInfo) << "Qml file load done" << m_view->model()->fileUrl(); - exportComponent(m_view->rootModelNode()); - QString error; - if (!m_view->saveQmlFile(&error)) { - ExportNotification::addError(tr("Error saving QML file. %1") - .arg(error.isEmpty()? tr("Unknown") : error)); + + QmlDesigner::DesignDocument *designDocument = QmlDesigner::QmlDesignerPlugin::instance() + ->documentManager() + .currentDesignDocument(); + if (designDocument->hasQmlParseErrors()) { + ExportNotification::addError(tr("Cannot export QML. Document \"%1\" have parsing errors.") + .arg(designDocument->displayName())); + } else { + exportComponent(m_view->rootModelNode()); + QString error; + if (!m_view->saveQmlFile(&error)) { + ExportNotification::addError(tr("Error saving QML file. %1") + .arg(error.isEmpty()? tr("Unknown") : error)); + } } + notifyProgress((m_totalFileCount - m_exportFiles.count()) * 0.8 / m_totalFileCount); triggerLoadNextFile(); } diff --git a/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp b/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp index 973cb6e013..59ab72aad1 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp @@ -30,6 +30,7 @@ #include "model.h" #include "nodeabstractproperty.h" +#include "nodemetainfo.h" #include "rewriterview.h" #include "utils/qtcassert.h" @@ -41,13 +42,16 @@ namespace { Q_LOGGING_CATEGORY(loggerInfo, "qtc.designer.assetExportPlugin.modelExporter", QtInfoMsg) -static void populateLineage(const QmlDesigner::ModelNode &node, QByteArrayList &lineage) +static QByteArrayList populateLineage(const QmlDesigner::ModelNode &node) { + QByteArrayList lineage; if (!node.isValid() || node.type().isEmpty()) - return; - lineage.append(node.type()); - if (node.hasParentProperty()) - populateLineage(node.parentProperty().parentModelNode(), lineage); + return {}; + + for (auto &info : node.metaInfo().superClasses()) + lineage.append(info.typeName()); + + return lineage; } } @@ -86,8 +90,7 @@ void Component::exportComponent() ModelNodeParser *Component::createNodeParser(const ModelNode &node) const { - QByteArrayList lineage; - populateLineage(node, lineage); + QByteArrayList lineage = populateLineage(node); std::unique_ptr<ModelNodeParser> reader; for (auto &parserCreator: m_readers) { std::unique_ptr<ModelNodeParser> r(parserCreator->instance(lineage, node)); @@ -110,6 +113,11 @@ ModelNodeParser *Component::createNodeParser(const ModelNode &node) const QJsonObject Component::nodeToJson(const ModelNode &node) { QJsonObject jsonObject; + + // Don't export States, Connection, Timeline etc nodes. + if (!node.isSubclassOf("QtQuick.Item")) + return {}; + std::unique_ptr<ModelNodeParser> parser(createNodeParser(node)); if (parser) { if (parser->uuid().isEmpty()) { @@ -120,13 +128,16 @@ QJsonObject Component::nodeToJson(const ModelNode &node) } jsonObject = parser->json(*this); } else { - ExportNotification::addError(tr("Error exporting component %1. Parser unavailable.") - .arg(node.id())); + ExportNotification::addError(tr("Error exporting node %1. Cannot parse type %2.") + .arg(node.id()).arg(QString::fromUtf8(node.type()))); } QJsonArray children; - for (const ModelNode &childnode : node.directSubModelNodes()) - children.append(nodeToJson(childnode)); + for (const ModelNode &childnode : node.directSubModelNodes()) { + const QJsonObject childJson = nodeToJson(childnode); + if (!childJson.isEmpty()) + children.append(childJson); + } if (!children.isEmpty()) jsonObject.insert(ChildrenTag, children); |