forked from qt-creator/qt-creator
QmlDesigner: Fix FlowDecision transition
Fix the transition for FlowDecision so it will also connect to QmlFlowItemNode directly without the need of a QmlFlowActionAreaNode. Task-number: QDS-2280 Change-Id: I61a5ab234068bcbc0c28ae43c720d7fc22e941b6 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
committed by
Thomas Hartmann
parent
9a0acda2c9
commit
b0a8c70662
@@ -798,17 +798,17 @@ public:
|
||||
if (f.isValid()) {
|
||||
for (const QmlFlowActionAreaNode &area : f.flowActionAreas()) {
|
||||
ModelNode target = area.targetTransition();
|
||||
if (target == node.modelNode()) {
|
||||
if (target == node.modelNode())
|
||||
areaNode = area;
|
||||
} else {
|
||||
const ModelNode decisionNode = area.decisionNodeForTransition(node.modelNode());
|
||||
if (decisionNode.isValid()) {
|
||||
from.clear();
|
||||
from.append(decisionNode);
|
||||
areaNode = ModelNode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const ModelNode decisionNode = QmlFlowItemNode::decisionNodeForTransition(node.modelNode());
|
||||
if (decisionNode.isValid()) {
|
||||
from.clear();
|
||||
from.append(decisionNode);
|
||||
areaNode = ModelNode();
|
||||
}
|
||||
|
||||
if (f.modelNode().hasAuxiliaryData("joinConnection"))
|
||||
joinConnection = f.modelNode().auxiliaryData("joinConnection").toBool();
|
||||
} else {
|
||||
|
@@ -157,7 +157,6 @@ public:
|
||||
void assignTargetFlowItem(const QmlFlowTargetNode &flowItem);
|
||||
QmlFlowItemNode flowItemParent() const;
|
||||
void destroyTarget();
|
||||
ModelNode decisionNodeForTransition(const ModelNode &transition) const;
|
||||
};
|
||||
|
||||
class QMLDESIGNERCORE_EXPORT QmlFlowItemNode : public QmlItemNode
|
||||
@@ -168,6 +167,8 @@ public:
|
||||
static bool isValidQmlFlowItemNode(const ModelNode &modelNode);
|
||||
QList<QmlFlowActionAreaNode> flowActionAreas() const;
|
||||
QmlFlowViewNode flowView() const;
|
||||
|
||||
static ModelNode decisionNodeForTransition(const ModelNode &transition);
|
||||
};
|
||||
|
||||
class QMLDESIGNERCORE_EXPORT QmlFlowViewNode : public QmlItemNode
|
||||
|
@@ -559,6 +559,32 @@ QmlFlowViewNode QmlFlowItemNode::flowView() const
|
||||
return QmlFlowViewNode({});
|
||||
}
|
||||
|
||||
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 {};
|
||||
}
|
||||
|
||||
bool QmlFlowActionAreaNode::isValid() const
|
||||
{
|
||||
return isValidQmlFlowActionAreaNode(modelNode());
|
||||
@@ -615,32 +641,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());
|
||||
|
Reference in New Issue
Block a user