diff options
Diffstat (limited to 'src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp')
-rw-r--r-- | src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp | 112 |
1 files changed, 74 insertions, 38 deletions
diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp index 098f8317a5..fe42f2b7e0 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp @@ -600,6 +600,7 @@ void QmlFlowActionAreaNode::assignTargetFlowItem(const QmlFlowTargetNode &flowIt QmlFlowItemNode QmlFlowActionAreaNode::flowItemParent() const { + QTC_ASSERT(modelNode().hasParentProperty(), return QmlFlowItemNode({})); return modelNode().parentProperty().parentModelNode(); } @@ -613,32 +614,6 @@ void QmlFlowActionAreaNode::destroyTarget() } } -ModelNode QmlFlowActionAreaNode::decisionNodeForTransition(const ModelNode &transition) const -{ - ModelNode target = targetTransition(); - - if (target.isValid() && target.hasMetaInfo() && QmlVisualNode::isFlowTransition(target)) { - - ModelNode finalTarget = target.bindingProperty("to").resolveToModelNode(); - - if (finalTarget.isValid() && finalTarget.hasMetaInfo() && QmlVisualNode::isFlowDecision(finalTarget)) { - if (finalTarget.hasBindingProperty("targets") - && finalTarget.bindingProperty("targets").resolveToModelNodeList().contains(transition)) - return finalTarget; - } - QmlFlowViewNode flowView(view()->rootModelNode()); - if (flowView.isValid()) { - for (const ModelNode target : flowView.decicions()) { - if (target.hasBindingProperty("targets") - && target.bindingProperty("targets").resolveToModelNodeList().contains(transition)) - return target; - } - } - } - - return {}; -} - bool QmlFlowViewNode::isValid() const { return isValidQmlFlowViewNode(modelNode()); @@ -664,9 +639,7 @@ QList<QmlFlowItemNode> QmlFlowViewNode::flowItems() const ModelNode QmlFlowViewNode::addTransition(const QmlFlowTargetNode &from, const QmlFlowTargetNode &to) { - ModelNode transition = view()->createModelNode("FlowView.FlowTransition", 1, 0); - - nodeListProperty("flowTransitions").reparentHere(transition); + ModelNode transition = createTransition(); QmlFlowTargetNode f = from; QmlFlowTargetNode t = to; @@ -684,8 +657,6 @@ const QList<ModelNode> QmlFlowViewNode::transitions() const return modelNode().nodeListProperty("flowTransitions").toModelNodeList(); return {}; - - } const QList<ModelNode> QmlFlowViewNode::wildcards() const @@ -706,13 +677,12 @@ const QList<ModelNode> QmlFlowViewNode::decicions() const QList<ModelNode> QmlFlowViewNode::transitionsForTarget(const ModelNode &modelNode) { - QList<ModelNode> list; - for (const ModelNode &transition : transitions()) { - if (transition.hasBindingProperty("to") - && transition.bindingProperty("to").resolveToModelNode() == modelNode) - list.append(transition); - } - return list; + return transitionsForProperty("to", modelNode); +} + +QList<ModelNode> QmlFlowViewNode::transitionsForSource(const ModelNode &modelNode) +{ + return transitionsForProperty("from", modelNode); } void QmlFlowViewNode::removeDanglingTransitions() @@ -732,6 +702,9 @@ void QmlFlowTargetNode::assignTargetItem(const QmlFlowTargetNode &node) { if (QmlFlowActionAreaNode::isValidQmlFlowActionAreaNode(modelNode())) { QmlFlowActionAreaNode(modelNode()).assignTargetFlowItem(node); + + } else if (isFlowItem()) { + flowView().addTransition(modelNode(), node); } else if (isFlowWildcard()) { destroyTargets(); ModelNode transition = flowView().addTransition(ModelNode(), @@ -782,6 +755,32 @@ QmlFlowViewNode QmlFlowTargetNode::flowView() const return view()->rootModelNode(); } +ModelNode QmlFlowItemNode::decisionNodeForTransition(const ModelNode &transition) +{ + ModelNode target = transition; + + if (target.isValid() && target.hasMetaInfo() && QmlVisualNode::isFlowTransition(target)) { + + ModelNode finalTarget = target.bindingProperty("to").resolveToModelNode(); + + if (finalTarget.isValid() && finalTarget.hasMetaInfo() && QmlVisualNode::isFlowDecision(finalTarget)) { + if (finalTarget.hasBindingProperty("targets") + && finalTarget.bindingProperty("targets").resolveToModelNodeList().contains(transition)) + return finalTarget; + } + QmlFlowViewNode flowView(transition.view()->rootModelNode()); + if (flowView.isValid()) { + for (const ModelNode target : flowView.decicions()) { + if (target.hasBindingProperty("targets") + && target.bindingProperty("targets").resolveToModelNodeList().contains(transition)) + return target; + } + } + } + + return {}; +} + ModelNode QmlFlowTargetNode::findSourceForDecisionNode() const { if (!isFlowDecision()) @@ -830,4 +829,41 @@ void QmlFlowViewNode::removeAllTransitions() removeProperty("flowTransitions"); } +void QmlFlowViewNode::setStartFlowItem(const QmlFlowItemNode &flowItem) +{ + QTC_ASSERT(flowItem.isValid(), return); + QmlFlowItemNode item = flowItem; + + ModelNode transition; + + for (const ModelNode &node : transitionsForSource(modelNode())) + transition = node; + if (!transition.isValid()) + transition = createTransition(); + + transition.bindingProperty("from").setExpression(modelNode().validId()); + transition.bindingProperty("to").setExpression(item.validId()); +} + +ModelNode QmlFlowViewNode::createTransition() +{ + ModelNode transition = view()->createModelNode("FlowView.FlowTransition", 1, 0); + nodeListProperty("flowTransitions").reparentHere(transition); + + return transition; +} + +QList<ModelNode> QmlFlowViewNode::transitionsForProperty(const PropertyName &propertyName, + const ModelNode &modelNode) +{ + QList<ModelNode> list; + for (const ModelNode &transition : transitions()) { + if (transition.hasBindingProperty(propertyName) + && transition.bindingProperty(propertyName).resolveToModelNode() == modelNode) + list.append(transition); + } + return list; + +} + } //QmlDesigner |