OSDN Git Service

QmlDesigner: Add missing imports when doing drag&drop from the library
authorKai Koehne <kai.koehne@nokia.com>
Thu, 10 Jun 2010 11:02:45 +0000 (13:02 +0200)
committerKai Koehne <kai.koehne@nokia.com>
Thu, 10 Jun 2010 13:15:31 +0000 (15:15 +0200)
Fixes a crash when drag&dropping e.g. the WebView element to a file
which doesn't already import the org.webkit package.

src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp

index d11d5f9..ad888c5 100644 (file)
@@ -98,6 +98,24 @@ QmlItemNode QmlModelView::createQmlItemNodeFromImage(const QString &imageName, c
     QmlItemNode newNode;
     RewriterTransaction transaction = beginRewriterTransaction();
     {
+        const QString newImportUrl = QLatin1String("Qt");
+        const QString newImportVersion = QLatin1String("4.7");
+        Import newImport = Import::createLibraryImport(newImportUrl, newImportVersion);
+
+        foreach (const Import &import, model()->imports()) {
+            if (import.isLibraryImport()
+                && import.url() == newImport.url()
+                && import.version() == newImport.version()) {
+                // reuse this import
+                newImport = import;
+                break;
+            }
+        }
+
+        if (!model()->imports().contains(newImport)) {
+            model()->addImport(newImport);
+        }
+
         QList<QPair<QString, QVariant> > propertyPairList;
         propertyPairList.append(qMakePair(QString("x"), QVariant( round(position.x(), 4))));
         propertyPairList.append(qMakePair(QString("y"), QVariant( round(position.y(), 4))));
@@ -111,7 +129,7 @@ QmlItemNode QmlModelView::createQmlItemNodeFromImage(const QString &imageName, c
         }
 
         propertyPairList.append(qMakePair(QString("source"), QVariant(relativeImageName)));
-        newNode = createQmlItemNode("Qt/Image",4, 7, propertyPairList);
+        newNode = createQmlItemNode("Qt/Image", 4, 7, propertyPairList);
         parentNode.nodeAbstractProperty("data").reparentHere(newNode);
 
         Q_ASSERT(newNode.isValid());
@@ -146,10 +164,29 @@ QmlItemNode QmlModelView::createQmlItemNode(const ItemLibraryEntry &itemLibraryE
 
     Q_ASSERT(parentNode.isValid());
 
-
     QmlItemNode newNode;
     RewriterTransaction transaction = beginRewriterTransaction();
     {
+        if (itemLibraryEntry.typeName().contains('.')) {
+            const QString newImportUrl = itemLibraryEntry.typeName().split('/').first();
+            const QString newImportVersion = QString("%1.%2").arg(QString::number(itemLibraryEntry.majorVersion()), QString::number(itemLibraryEntry.minorVersion()));
+            Import newImport = Import::createLibraryImport(newImportUrl, newImportVersion);
+
+            foreach (const Import &import, model()->imports()) {
+                if (import.isLibraryImport()
+                    && import.url() == newImport.url()
+                    && import.version() == newImport.version()) {
+                    // reuse this import
+                    newImport = import;
+                    break;
+                }
+            }
+
+            if (!model()->imports().contains(newImport)) {
+                model()->addImport(newImport);
+            }
+        }
+
         QList<QPair<QString, QVariant> > propertyPairList;
         propertyPairList.append(qMakePair(QString("x"), QVariant(round(position.x(), 4))));
         propertyPairList.append(qMakePair(QString("y"), QVariant(round(position.y(), 4))));