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()) {
|
if (f.isValid()) {
|
||||||
for (const QmlFlowActionAreaNode &area : f.flowActionAreas()) {
|
for (const QmlFlowActionAreaNode &area : f.flowActionAreas()) {
|
||||||
ModelNode target = area.targetTransition();
|
ModelNode target = area.targetTransition();
|
||||||
if (target == node.modelNode()) {
|
if (target == node.modelNode())
|
||||||
areaNode = area;
|
areaNode = area;
|
||||||
} else {
|
}
|
||||||
const ModelNode decisionNode = area.decisionNodeForTransition(node.modelNode());
|
|
||||||
|
const ModelNode decisionNode = QmlFlowItemNode::decisionNodeForTransition(node.modelNode());
|
||||||
if (decisionNode.isValid()) {
|
if (decisionNode.isValid()) {
|
||||||
from.clear();
|
from.clear();
|
||||||
from.append(decisionNode);
|
from.append(decisionNode);
|
||||||
areaNode = ModelNode();
|
areaNode = ModelNode();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
if (f.modelNode().hasAuxiliaryData("joinConnection"))
|
if (f.modelNode().hasAuxiliaryData("joinConnection"))
|
||||||
joinConnection = f.modelNode().auxiliaryData("joinConnection").toBool();
|
joinConnection = f.modelNode().auxiliaryData("joinConnection").toBool();
|
||||||
} else {
|
} else {
|
||||||
|
@@ -157,7 +157,6 @@ public:
|
|||||||
void assignTargetFlowItem(const QmlFlowTargetNode &flowItem);
|
void assignTargetFlowItem(const QmlFlowTargetNode &flowItem);
|
||||||
QmlFlowItemNode flowItemParent() const;
|
QmlFlowItemNode flowItemParent() const;
|
||||||
void destroyTarget();
|
void destroyTarget();
|
||||||
ModelNode decisionNodeForTransition(const ModelNode &transition) const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class QMLDESIGNERCORE_EXPORT QmlFlowItemNode : public QmlItemNode
|
class QMLDESIGNERCORE_EXPORT QmlFlowItemNode : public QmlItemNode
|
||||||
@@ -168,6 +167,8 @@ public:
|
|||||||
static bool isValidQmlFlowItemNode(const ModelNode &modelNode);
|
static bool isValidQmlFlowItemNode(const ModelNode &modelNode);
|
||||||
QList<QmlFlowActionAreaNode> flowActionAreas() const;
|
QList<QmlFlowActionAreaNode> flowActionAreas() const;
|
||||||
QmlFlowViewNode flowView() const;
|
QmlFlowViewNode flowView() const;
|
||||||
|
|
||||||
|
static ModelNode decisionNodeForTransition(const ModelNode &transition);
|
||||||
};
|
};
|
||||||
|
|
||||||
class QMLDESIGNERCORE_EXPORT QmlFlowViewNode : public QmlItemNode
|
class QMLDESIGNERCORE_EXPORT QmlFlowViewNode : public QmlItemNode
|
||||||
|
@@ -559,6 +559,32 @@ QmlFlowViewNode QmlFlowItemNode::flowView() const
|
|||||||
return QmlFlowViewNode({});
|
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
|
bool QmlFlowActionAreaNode::isValid() const
|
||||||
{
|
{
|
||||||
return isValidQmlFlowActionAreaNode(modelNode());
|
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
|
bool QmlFlowViewNode::isValid() const
|
||||||
{
|
{
|
||||||
return isValidQmlFlowViewNode(modelNode());
|
return isValidQmlFlowViewNode(modelNode());
|
||||||
|
Reference in New Issue
Block a user