diff options
author | Thomas Hartmann <Thomas.Hartmann@digia.com> | 2014-08-04 14:01:04 +0200 |
---|---|---|
committer | Thomas Hartmann <Thomas.Hartmann@digia.com> | 2014-08-04 18:48:08 +0200 |
commit | 0b74df58a5f657b68480e393f3f9528c1d7a0707 (patch) | |
tree | c8855adbaf09924a4de2c38a00b39f138857111e /src/plugins/qmldesigner/documentmanager.cpp | |
parent | 316bfcaee14fff0b58e1a8cd8cbdb46776359aa6 (diff) | |
download | qt-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.cpp | 47 |
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); } |