summaryrefslogtreecommitdiff
path: root/src/plugins/qmldesigner/documentmanager.cpp
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@digia.com>2014-08-04 14:01:04 +0200
committerThomas Hartmann <Thomas.Hartmann@digia.com>2014-08-04 18:48:08 +0200
commit0b74df58a5f657b68480e393f3f9528c1d7a0707 (patch)
treec8855adbaf09924a4de2c38a00b39f138857111e /src/plugins/qmldesigner/documentmanager.cpp
parent316bfcaee14fff0b58e1a8cd8cbdb46776359aa6 (diff)
downloadqt-creator-0b74df58a5f657b68480e393f3f9528c1d7a0707.tar.gz
QmlDesigner.DocumentManager: Fix goIntoComponent for Loader
We have have to check and handle sourceComponent and component (Tab). Change-Id: I736648fc09fe4ee3333c4524666e3acea500804a Reviewed-by: Tim Jenssen <tim.jenssen@digia.com>
Diffstat (limited to 'src/plugins/qmldesigner/documentmanager.cpp')
-rw-r--r--src/plugins/qmldesigner/documentmanager.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/plugins/qmldesigner/documentmanager.cpp b/src/plugins/qmldesigner/documentmanager.cpp
index 88ab5a4556..0ba3dfa90e 100644
--- a/src/plugins/qmldesigner/documentmanager.cpp
+++ b/src/plugins/qmldesigner/documentmanager.cpp
@@ -34,6 +34,7 @@
#include <qmlitemnode.h>
#include <nodemetainfo.h>
#include <nodeproperty.h>
+#include <nodelistproperty.h>
#include <bindingproperty.h>
#include <variantproperty.h>
@@ -120,6 +121,34 @@ static void openFileComponentForDelegate(const ModelNode &modelNode)
openFileComponent(modelNode.nodeProperty("delegate").modelNode());
}
+static void openComponentSourcePropertyOfLoader(const ModelNode &modelNode)
+{
+ QmlDesignerPlugin::instance()->viewManager().nextFileIsCalledInternally();
+
+ QHash<PropertyName, QVariant> propertyHash;
+
+ getProperties(modelNode, propertyHash);
+
+ ModelNode componentModelNode;
+
+ if (modelNode.hasNodeProperty("sourceComponent")) {
+ componentModelNode = modelNode.nodeProperty("sourceComponent").modelNode();
+ } else if (modelNode.hasNodeListProperty("component")) {
+
+ /*
+ * The component property should be a NodeProperty, but currently is a NodeListProperty, because
+ * the default property is always implcitly a NodeListProperty. This is something that has to be fixed.
+ */
+
+ componentModelNode = modelNode.nodeListProperty("component").toModelNodeList().first();
+ }
+
+ Core::EditorManager::openEditor(componentModelNode.metaInfo().componentFileName(), Core::Id(), Core::EditorManager::DoNotMakeVisible);
+
+ ModelNode rootModelNode = currentDesignDocument()->rewriterView()->rootModelNode();
+ applyProperties(rootModelNode, propertyHash);
+}
+
static void openSourcePropertyOfLoader(const ModelNode &modelNode)
{
QmlDesignerPlugin::instance()->viewManager().nextFileIsCalledInternally();
@@ -202,6 +231,22 @@ static bool hasDelegateWithFileComponent(const ModelNode &node)
return false;
}
+static bool isLoaderWithSourceComponent(const ModelNode &modelNode)
+{
+ if (modelNode.isValid()
+ && modelNode.metaInfo().isValid()
+ && modelNode.metaInfo().isSubclassOf("QtQuick.Loader", -1, -1)) {
+
+ if (modelNode.hasNodeProperty("sourceComponent"))
+ return true;
+ if (modelNode.hasNodeListProperty("component"))
+ return true;
+ }
+
+ return false;
+
+}
+
static bool hasSourceWithFileComponent(const ModelNode &modelNode)
{
if (modelNode.isValid()
@@ -265,6 +310,8 @@ void DocumentManager::goIntoComponent(const ModelNode &modelNode)
openFileComponentForDelegate(modelNode);
else if (hasSourceWithFileComponent(modelNode))
openSourcePropertyOfLoader(modelNode);
+ else if (isLoaderWithSourceComponent(modelNode))
+ openComponentSourcePropertyOfLoader(modelNode);
else
openInlineComponent(modelNode);
}