aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp')
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp112
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