aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/assetexporterplugin
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2020-09-03 11:17:12 +0200
committerEike Ziller <eike.ziller@qt.io>2020-09-03 12:18:02 +0200
commit3b76714290da72eff10ed251263146bb59713ca5 (patch)
treee107f900b968e524b7c38fd833c66383cc449438 /src/plugins/qmldesigner/assetexporterplugin
parent5b8846a4f889d9e700b9625ffefd8b22f64ea41e (diff)
parent1074dab46703d80718ccda079f20e5e92c90257e (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.cpp23
-rw-r--r--src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp33
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);