QmlDesigner: Add setStartFlowItem

Change-Id: I6ad377bcca4e1db84a802909c1b5d8b9ccfe5a14
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Thomas Hartmann
2020-04-16 18:17:28 +02:00
parent 49cfa2d050
commit 8c50ceb294
2 changed files with 49 additions and 12 deletions

View File

@@ -182,8 +182,13 @@ public:
const QList<ModelNode> wildcards() const; const QList<ModelNode> wildcards() const;
const QList<ModelNode> decicions() const; const QList<ModelNode> decicions() const;
QList<ModelNode> transitionsForTarget(const ModelNode &modelNode); QList<ModelNode> transitionsForTarget(const ModelNode &modelNode);
QList<ModelNode> transitionsForSource(const ModelNode &modelNode);
void removeDanglingTransitions(); void removeDanglingTransitions();
void removeAllTransitions(); void removeAllTransitions();
void setStartFlowItem(const QmlFlowItemNode &flowItem);
ModelNode createTransition();
protected:
QList<ModelNode> transitionsForProperty(const PropertyName &propertyName, const ModelNode &modelNode);
}; };

View File

@@ -664,9 +664,7 @@ QList<QmlFlowItemNode> QmlFlowViewNode::flowItems() const
ModelNode QmlFlowViewNode::addTransition(const QmlFlowTargetNode &from, const QmlFlowTargetNode &to) ModelNode QmlFlowViewNode::addTransition(const QmlFlowTargetNode &from, const QmlFlowTargetNode &to)
{ {
ModelNode transition = view()->createModelNode("FlowView.FlowTransition", 1, 0); ModelNode transition = createTransition();
nodeListProperty("flowTransitions").reparentHere(transition);
QmlFlowTargetNode f = from; QmlFlowTargetNode f = from;
QmlFlowTargetNode t = to; QmlFlowTargetNode t = to;
@@ -684,8 +682,6 @@ const QList<ModelNode> QmlFlowViewNode::transitions() const
return modelNode().nodeListProperty("flowTransitions").toModelNodeList(); return modelNode().nodeListProperty("flowTransitions").toModelNodeList();
return {}; return {};
} }
const QList<ModelNode> QmlFlowViewNode::wildcards() const const QList<ModelNode> QmlFlowViewNode::wildcards() const
@@ -706,13 +702,12 @@ const QList<ModelNode> QmlFlowViewNode::decicions() const
QList<ModelNode> QmlFlowViewNode::transitionsForTarget(const ModelNode &modelNode) QList<ModelNode> QmlFlowViewNode::transitionsForTarget(const ModelNode &modelNode)
{ {
QList<ModelNode> list; return transitionsForProperty("to", modelNode);
for (const ModelNode &transition : transitions()) {
if (transition.hasBindingProperty("to")
&& transition.bindingProperty("to").resolveToModelNode() == modelNode)
list.append(transition);
} }
return list;
QList<ModelNode> QmlFlowViewNode::transitionsForSource(const ModelNode &modelNode)
{
return transitionsForProperty("from", modelNode);
} }
void QmlFlowViewNode::removeDanglingTransitions() void QmlFlowViewNode::removeDanglingTransitions()
@@ -830,4 +825,41 @@ void QmlFlowViewNode::removeAllTransitions()
removeProperty("flowTransitions"); 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 } //QmlDesigner