summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@nokia.com>2010-05-07 13:35:06 +0200
committerThomas Hartmann <Thomas.Hartmann@nokia.com>2010-05-07 13:35:06 +0200
commit7226937c8f047ad7cdb584fa4478ae75fa3fdb32 (patch)
treeaf50f9b17fc873898bda96bc4273ae4682b70915
parent9e7c13721eef68d9d87b33b14fab4560b03af658 (diff)
downloadqt-creator-7226937c8f047ad7cdb584fa4478ae75fa3fdb32.tar.gz
QmlDesigner.model resolving of lists in bindings
-rw-r--r--src/plugins/qmldesigner/designercore/include/bindingproperty.h2
-rw-r--r--src/plugins/qmldesigner/designercore/model/bindingproperty.cpp37
2 files changed, 39 insertions, 0 deletions
diff --git a/src/plugins/qmldesigner/designercore/include/bindingproperty.h b/src/plugins/qmldesigner/designercore/include/bindingproperty.h
index 56d9948d06..3c718fd3b2 100644
--- a/src/plugins/qmldesigner/designercore/include/bindingproperty.h
+++ b/src/plugins/qmldesigner/designercore/include/bindingproperty.h
@@ -54,6 +54,8 @@ public:
ModelNode resolveToModelNode() const;
AbstractProperty resolveToProperty() const;
+ bool isList() const;
+ QList<ModelNode> resolveToModelNodeList() const;
protected:
BindingProperty(const QString &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view);
diff --git a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
index 6688f11f9d..80295d33a7 100644
--- a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
@@ -136,6 +136,16 @@ ModelNode BindingProperty::resolveToModelNode() const
return resolveBinding(expression(), parentModelNode(), view());
}
+static inline QStringList commaSeparatedSimplifiedStringList(const QString &string)
+{
+ QStringList stringList = string.split(QLatin1String(","));
+ QStringList simpleList;
+ foreach (const QString &simpleString, stringList)
+ simpleList.append(simpleString.simplified());
+ return simpleList;
+}
+
+
AbstractProperty BindingProperty::resolveToProperty() const
{
if (!isValid())
@@ -159,6 +169,33 @@ AbstractProperty BindingProperty::resolveToProperty() const
return AbstractProperty();
}
+bool BindingProperty::isList() const
+{
+ if (!isValid())
+ throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
+
+ return expression().startsWith('[') && expression().endsWith(']');
+}
+
+QList<ModelNode> BindingProperty::resolveToModelNodeList() const
+{
+ QList<ModelNode> returnList;
+ if (!isValid())
+ throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
+ if (isList()) {
+ QString string = expression();
+ string.chop(1);
+ string.remove(0, 1);
+ QStringList simplifiedList = commaSeparatedSimplifiedStringList(string);
+ foreach (const QString &nodeId, simplifiedList) {
+ ModelNode modelNode = view()->modelNodeForId(nodeId);
+ if (modelNode.isValid())
+ returnList.append(modelNode);
+ }
+ }
+ return returnList;
+}
+
void BindingProperty::setDynamicTypeNameAndExpression(const QString &typeName, const QString &expression)
{