From 208fbe18c1c329f63d1ddd96e82c604ce8cb2d75 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 24 Mar 2020 16:59:43 +0100 Subject: [PATCH] QmlDesigner: Implement proper connection of FlowDecision and FlowWildcard This adds the code to draw connections from and to FlowDecision and FlowWildcard. Change-Id: I8f465ac70b92b26ca32eaeb45590e18e7db13693 Reviewed-by: Tim Jenssen --- .../components/formeditor/formeditoritem.cpp | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index 0515d79863d..31a5e6cab64 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -927,10 +927,20 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi bool isStartLine = false; + bool isWildcardLine = false; + if (from.isValid()) { for (const QmlFlowActionAreaNode &area : from.flowActionAreas()) { - if (area.targetTransition() == qmlItemNode().modelNode()) + ModelNode target = area.targetTransition(); + if (target == qmlItemNode().modelNode()) { areaNode = area; + } else { + const ModelNode decisionNode = area.decisionNodeForTransition(qmlItemNode().modelNode()); + if (decisionNode.isValid()) { + from = decisionNode; + areaNode = ModelNode(); + } + } } if (from.modelNode().hasAuxiliaryData("joinConnection")) joinConnection = from.modelNode().auxiliaryData("joinConnection").toBool(); @@ -938,6 +948,12 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi if (from == qmlItemNode().rootModelNode()) { isStartLine = true; } else { + for (const ModelNode wildcard : QmlFlowViewNode(qmlItemNode().rootModelNode()).wildcards()) { + if (wildcard.bindingProperty("target").resolveToModelNode() == qmlItemNode().modelNode()) { + from = wildcard; + isWildcardLine = true; + } + } } } @@ -946,6 +962,11 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi return; QRectF fromRect = QmlItemNode(from).instanceBoundingRect(); + if (QmlItemNode(from).isFlowDecision()) + fromRect = QRectF(0,0,200,200); + + if (QmlItemNode(from).isFlowWildcard()) + fromRect = QRectF(0,0,200,200); fromRect.translate(QmlItemNode(from).flowPosition()); if (isStartLine) { @@ -960,6 +981,9 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi } QRectF toRect = QmlItemNode(to).instanceBoundingRect(); + if (QmlItemNode(to).isFlowDecision()) + toRect = QRectF(0,0,200,200); + toRect.translate(QmlItemNode(to).flowPosition()); if (isStartLine) {