From cc75d77c80a04635703ba623fa917cc7c67a8ea0 Mon Sep 17 00:00:00 2001
From: Marco Bubke <marco.bubke@digia.com>
Date: Thu, 18 Jul 2013 18:04:18 +0200
Subject: [PATCH] QmlDesigner: Add static valid functions for the qml objects

Change-Id: Ied3ec55580471893c8899946455ce2b5198c6f17
Reviewed-by: Tim Jenssen <tim.jenssen@digia.com>
---
 .../qmldesigner/designercore/include/qmlitemnode.h    |  1 +
 .../designercore/include/qmlmodelnodefacade.h         |  2 ++
 .../qmldesigner/designercore/include/qmlobjectnode.h  |  3 +++
 .../qmldesigner/designercore/model/qmlitemnode.cpp    |  7 ++++++-
 .../designercore/model/qmlmodelnodefacade.cpp         |  9 ++++++++-
 .../qmldesigner/designercore/model/qmlobjectnode.cpp  | 11 +++++++++++
 6 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h
index cebb50b5909..745fa80ec9e 100644
--- a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h
+++ b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h
@@ -51,6 +51,7 @@ public:
     QmlItemNode() : QmlObjectNode() {}
     QmlItemNode(const ModelNode &modelNode)  : QmlObjectNode(modelNode) {}
     bool isValid() const;
+    static bool isValidQmlItemNode(const ModelNode &modelNode);
     bool isRootNode() const;
 
     static bool isItemOrWindow(const ModelNode &modelNode);
diff --git a/src/plugins/qmldesigner/designercore/include/qmlmodelnodefacade.h b/src/plugins/qmldesigner/designercore/include/qmlmodelnodefacade.h
index 61d67f19fca..56b07426769 100644
--- a/src/plugins/qmldesigner/designercore/include/qmlmodelnodefacade.h
+++ b/src/plugins/qmldesigner/designercore/include/qmlmodelnodefacade.h
@@ -43,6 +43,7 @@ public:
     operator ModelNode() const;
     ModelNode modelNode();
     const ModelNode modelNode() const;
+    static bool isValidQmlModelNodeFacade(const ModelNode &modelNode);
     virtual bool isValid() const;
     virtual ~QmlModelNodeFacade();
     QmlModelNodeFacade();
@@ -50,6 +51,7 @@ public:
     bool isRootNode() const;
     QmlModelView* qmlModelView() const;
 
+
 protected:
     QmlModelNodeFacade(const ModelNode &modelNode);
 
diff --git a/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h b/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h
index 3f6a2260f08..0467c60487a 100644
--- a/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h
+++ b/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h
@@ -48,6 +48,9 @@ public:
     QmlObjectNode();
     QmlObjectNode(const ModelNode &modelNode);
 
+    static bool isValidQmlObjectNode(const ModelNode &modelNode);
+    bool isValid() const;
+
     bool hasNodeParent() const;
     bool hasInstanceParent() const;
     bool hasInstanceParentItem() const;
diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
index 0da7a5445cd..5dea379193c 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
@@ -50,7 +50,12 @@ bool QmlItemNode::isItemOrWindow(const ModelNode &modelNode)
 
 bool QmlItemNode::isValid() const
 {
-    return QmlModelNodeFacade::isValid() && modelNode().metaInfo().isValid() && isItemOrWindow(modelNode());
+    return isValidQmlItemNode(modelNode());
+}
+
+bool QmlItemNode::isValidQmlItemNode(const ModelNode &modelNode)
+{
+    return isValidQmlObjectNode(modelNode) && modelNode.metaInfo().isValid() && isItemOrWindow(modelNode);
 }
 
 bool QmlItemNode::isRootNode() const
diff --git a/src/plugins/qmldesigner/designercore/model/qmlmodelnodefacade.cpp b/src/plugins/qmldesigner/designercore/model/qmlmodelnodefacade.cpp
index 33770cbed7e..994afb60c9a 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlmodelnodefacade.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlmodelnodefacade.cpp
@@ -59,7 +59,7 @@ const ModelNode QmlModelNodeFacade::modelNode() const
 
 bool QmlModelNodeFacade::isValid() const
 {
-    return modelNode().isValid() && qmlModelView() && qmlModelView()->nodeInstanceView() && qmlModelView()->hasInstanceForModelNode(modelNode()) && qmlModelView()->instanceForModelNode(modelNode()).isValid();
+    return isValidQmlModelNodeFacade(m_modelNode);
 }
 
 QmlModelView* QmlModelNodeFacade::qmlModelView() const
@@ -67,6 +67,13 @@ QmlModelView* QmlModelNodeFacade::qmlModelView() const
     return modelNode().view()->toQmlModelView();
 }
 
+bool QmlModelNodeFacade::isValidQmlModelNodeFacade(const ModelNode &modelNode)
+{
+    QmlModelView * qmlModelView = modelNode.view()->toQmlModelView();
+
+    return modelNode.isValid() && qmlModelView && qmlModelView->nodeInstanceView() && qmlModelView->hasInstanceForModelNode(modelNode) && qmlModelView->instanceForModelNode(modelNode).isValid();
+}
+
 bool QmlModelNodeFacade::isRootNode() const
 {
     return modelNode().isRootNode();
diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
index 564e77cd691..c5d76c3a789 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
@@ -458,6 +458,17 @@ QmlObjectNode::QmlObjectNode(const ModelNode &modelNode)
     : QmlModelNodeFacade(modelNode)
 {
 }
+
+bool QmlObjectNode::isValidQmlObjectNode(const ModelNode &modelNode)
+{
+    return isValidQmlModelNodeFacade(modelNode);
+}
+
+bool QmlObjectNode::isValid() const
+{
+    return isValidQmlObjectNode(modelNode());
+}
+
 bool QmlObjectNode::hasNodeParent() const
 {
     return modelNode().hasParentProperty();
-- 
GitLab