OSDN Git Service

QmlDesigner.formEditor: enter components of views
authorThomas Hartmann <Thomas.Hartmann@nokia.com>
Thu, 17 Mar 2011 09:43:59 +0000 (10:43 +0100)
committerThomas Hartmann <Thomas.Hartmann@nokia.com>
Thu, 17 Mar 2011 09:44:31 +0000 (10:44 +0100)
By double clicking on views the user can enter the
component (delegate).

src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp

index 719ac6d..6da7ac6 100644 (file)
@@ -40,6 +40,7 @@
 #include <QtDebug>
 #include <QGraphicsSceneDragDropEvent>
 #include <nodemetainfo.h>
+#include <nodeproperty.h>
 
 namespace QmlDesigner {
 
@@ -194,6 +195,14 @@ void AbstractFormEditorTool::dragMoveEvent(QGraphicsSceneDragDropEvent * /* even
     Q_ASSERT(false);
 }
 
+static inline bool checkIfNodeIsAView(const ModelNode &node)
+{
+    return node.metaInfo().isValid() &&
+            (node.metaInfo().isSubclassOf("QtQuick.ListView", -1, -1) ||
+             node.metaInfo().isSubclassOf("QtQuick.GridView", -1, -1) ||
+             node.metaInfo().isSubclassOf("QtQuick.PathView", -1, -1));
+}
+
 void AbstractFormEditorTool::mouseDoubleClickEvent(const QList<QGraphicsItem*> &itemList, QGraphicsSceneMouseEvent *event)
 {
     FormEditorItem *formEditorItem = topFormEditorItem(itemList);
@@ -202,6 +211,11 @@ void AbstractFormEditorTool::mouseDoubleClickEvent(const QList<QGraphicsItem*> &
         if (doubleClickNode.metaInfo().isComponent()) {
             Core::EditorManager::instance()->openEditor(doubleClickNode.metaInfo().componentFileName());
             event->accept();
+        } else if (checkIfNodeIsAView(doubleClickNode) &&
+                   doubleClickNode.hasNodeProperty("delegate") &&
+                   doubleClickNode.nodeProperty("delegate").modelNode().metaInfo().isComponent()) {
+            Core::EditorManager::instance()->openEditor(doubleClickNode.nodeProperty("delegate").modelNode().metaInfo().componentFileName());
+            event->accept();
         }
     }
 }