From c3be93f23c594709d7c0ec3052869a52faacfef5 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Tue, 30 Jul 2013 17:49:31 +0200 Subject: [PATCH] QmlDesigner: Refactor QmlItemNode::createQmlItemNodeFromImage Change-Id: I1fa0eb94d36ae48bb131da2ceca75e19a4175a4d Reviewed-by: Thomas Hartmann --- .../designercore/model/qmlitemnode.cpp | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp index 73ef4079f3a..e4268c2cb65 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp @@ -171,66 +171,66 @@ QmlItemNode QmlItemNode::createQmlItemNode(AbstractView *view, const ItemLibrary return newQmlItemNode; } +static void checkImageImport(AbstractView *view) +{ + const QString newImportUrl = QLatin1String("QtQuick"); + const QString newImportVersion = QLatin1String("1.1"); + Import newImport = Import::createLibraryImport(newImportUrl, newImportVersion); + + foreach (const Import &import, view->model()->imports()) { + if (import.isLibraryImport() + && import.url() == newImport.url()) { + // reuse this import + newImport = import; + break; + } + } + + if (!view->model()->hasImport(newImport, true, true)) + view->model()->changeImports(QList() << newImport, QList()); +} + QmlItemNode QmlItemNode::createQmlItemNodeFromImage(AbstractView *view, const QString &imageName, const QPointF &position, QmlItemNode parentQmlItemNode) { - if (!parentQmlItemNode.isValid() && QmlItemNode::isValidQmlItemNode(view->rootModelNode())) - parentQmlItemNode = QmlItemNode(view->rootModelNode()); - else - return QmlItemNode(); - QmlItemNode newQmlItemNode; - RewriterTransaction transaction = view->beginRewriterTransaction(); - { - const QString newImportUrl = QLatin1String("QtQuick"); - const QString newImportVersion = QLatin1String("1.1"); - Import newImport = Import::createLibraryImport(newImportUrl, newImportVersion); + if (!parentQmlItemNode.isValid()) + parentQmlItemNode = QmlItemNode(view->rootModelNode()); - foreach (const Import &import, view->model()->imports()) { - if (import.isLibraryImport() - && import.url() == newImport.url()) { - // reuse this import - newImport = import; - break; + if (parentQmlItemNode.isValid()) { + RewriterTransaction transaction = view->beginRewriterTransaction(); + + checkImageImport(view); + + if (view->model()->hasNodeMetaInfo("QtQuick.Image")) { + NodeMetaInfo metaInfo = view->model()->metaInfo("QtQuick.Image"); + QList > propertyPairList; + propertyPairList.append(qMakePair(PropertyName("x"), QVariant(qRound(position.x())))); + propertyPairList.append(qMakePair(PropertyName("y"), QVariant(qRound(position.y())))); + + QString relativeImageName = imageName; + + //use relative path + if (QFileInfo(view->model()->fileUrl().toLocalFile()).exists()) { + QDir fileDir(QFileInfo(view->model()->fileUrl().toLocalFile()).absolutePath()); + relativeImageName = fileDir.relativeFilePath(imageName); + propertyPairList.append(qMakePair(PropertyName("source"), QVariant(relativeImageName))); } + + newQmlItemNode = QmlItemNode(view->createModelNode("QtQuick.Image", metaInfo.majorVersion(), metaInfo.minorVersion(), propertyPairList)); + parentQmlItemNode.defaultNodeAbstractProperty().reparentHere(newQmlItemNode); + + newQmlItemNode.setId(view->generateNewId("image")); + + if (!QmlModelState(view->actualStateNode()).isBaseState()) { + newQmlItemNode.modelNode().variantProperty("opacity").setValue(0); + newQmlItemNode.setVariantProperty("opacity", 1); + } + + Q_ASSERT(newQmlItemNode.isValid()); } - - if (!view->model()->hasImport(newImport, true, true)) - view->model()->changeImports(QList() << newImport, QList()); - - QList > propertyPairList; - propertyPairList.append(qMakePair(PropertyName("x"), QVariant(qRound(position.x())))); - propertyPairList.append(qMakePair(PropertyName("y"), QVariant(qRound(position.y())))); - - QString relativeImageName = imageName; - - //use relative path - if (QFileInfo(view->model()->fileUrl().toLocalFile()).exists()) { - QDir fileDir(QFileInfo(view->model()->fileUrl().toLocalFile()).absolutePath()); - relativeImageName = fileDir.relativeFilePath(imageName); - } - - propertyPairList.append(qMakePair(PropertyName("source"), QVariant(relativeImageName))); - NodeMetaInfo metaInfo = view->model()->metaInfo("QtQuick.Image"); - if (metaInfo.isValid()) { - int minorVersion = metaInfo.minorVersion(); - int majorVersion = metaInfo.majorVersion(); - newQmlItemNode = QmlItemNode(view->createModelNode("QtQuick.Image", majorVersion, minorVersion, propertyPairList)); - parentQmlItemNode.nodeAbstractProperty("data").reparentHere(newQmlItemNode); - } - - Q_ASSERT(newQmlItemNode.isValid()); - - newQmlItemNode.setId(view->generateNewId("image")); - - if (!QmlModelState(view->actualStateNode()).isBaseState()) { - newQmlItemNode.modelNode().variantProperty("opacity").setValue(0); - newQmlItemNode.setVariantProperty("opacity", 1); - } - Q_ASSERT(newQmlItemNode.isValid()); } - Q_ASSERT(newQmlItemNode.isValid()); return newQmlItemNode; }