From 03274561e963969a9b0f6d98b294c9b0b6d07b6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kama=20W=C3=B3jcik?= Date: Fri, 18 Dec 2020 16:34:29 +0100 Subject: [PATCH] Add label with event id list to transition flow Change-Id: Ica6ce4424b22a91c348aab5866b4e978bf9c6173 Reviewed-by: Thomas Hartmann --- .../components/formeditor/formeditoritem.cpp | 39 +++++++++++++++++++ .../components/formeditor/formeditorview.cpp | 19 ++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index 77d35ea6578..483c08046c7 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -888,6 +888,7 @@ public: , labelFlags(Qt::AlignHCenter | Qt::AlignVCenter | Qt::TextDontClip) , labelFlipSide(false) , hitTesting(hitTest) + , events() { // width if (node.modelNode().hasAuxiliaryData("width")) @@ -952,6 +953,13 @@ public: // label flip side if (node.modelNode().hasAuxiliaryData("labelFlipSide")) labelFlipSide = node.modelNode().auxiliaryData("labelFlipSide").toBool(); + + isSelected = node.modelNode().isSelected(); + const char eventsName[] = "eventIds"; + + if (node.modelNode().hasVariantProperty(eventsName)) + events = node.modelNode().variantProperty(eventsName).value().toString(); + } qreal width; @@ -977,6 +985,8 @@ public: int labelFlags; bool labelFlipSide; bool hitTesting; + bool isSelected; + QString events; }; static bool verticalOverlap(const QRectF &from, const QRectF &to) @@ -1453,6 +1463,35 @@ QPointF FormEditorTransitionItem::instancePosition() const static void drawLabel(QPainter *painter, const Connection &connection) { + // draw label with event ids + if (connection.config.isSelected && !connection.config.events.isEmpty()) + { + qreal offset = connection.config.labelOffset; + QStringList events = connection.config.events.split(','); + int fontSize = connection.config.fontSize; + QString output = events[0].trimmed(); + qreal minWidth = offset * 12; + int letterWidth = fontSize * 0.6; // assumption on max letter length + if (minWidth < output.size() * letterWidth) minWidth = output.size() * letterWidth; + int eventCount = events.size(); + for (int i = 1; i < eventCount; ++i) + { + output.append('\n'); + QString id = events[i].trimmed(); + output.append(id); + if (minWidth < id.size() * letterWidth) minWidth = id.size() * letterWidth; + } + const QPointF pos = connection.path.pointAtPercent(0.0); + painter->save(); + painter->setBrush(QColor(70, 70, 70, 200)); + painter->setPen(Qt::lightGray); + + painter->drawRoundedRect(pos.x(), pos.y() + offset, minWidth, 1.5 * fontSize * eventCount + offset * 4, offset / 2, offset / 2); + painter->drawText(pos.x(), pos.y() + 2 * offset, minWidth, offset * 2, Qt::AlignHCenter, QObject::tr("Connected Events")); + painter->drawLine(pos.x() + offset, pos.y() + 4 * offset, pos.x() + minWidth - offset, pos.y() + offset * 4); + painter->drawText(pos.x() + offset, pos.y() + 4 * offset, minWidth - offset, 1.5 * fontSize * eventCount, Qt::AlignLeft, output); + painter->restore(); + } if (connection.config.label.isEmpty()) return; diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index bd11cc1d380..dde5fd8732e 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -379,7 +379,7 @@ void FormEditorView::nodeIdChanged(const ModelNode& node, const QString &/*newId } void FormEditorView::selectedNodesChanged(const QList &selectedNodeList, - const QList &/*lastSelectedNodeList*/) + const QList &lastSelectedNodeList) { m_currentTool->setItems(scene()->itemsForQmlItemNodes(toQmlItemNodeListKeppInvalid(selectedNodeList))); @@ -389,6 +389,23 @@ void FormEditorView::selectedNodesChanged(const QList &selectedNodeLi m_formEditorWidget->zoomSelectionAction()->setEnabled(false); else m_formEditorWidget->zoomSelectionAction()->setEnabled(true); + + for (const ModelNode &node : lastSelectedNodeList) { /*Set Z to 0 for unselected items */ + QmlVisualNode visualNode(node); /* QmlVisualNode extends ModelNode with extra methods for "visual nodes" */ + if (visualNode.isFlowTransition()) { /* Check if a QmlVisualNode Transition */ + if (FormEditorItem *item = m_scene->itemForQmlItemNode(visualNode.toQmlItemNode())) { /* Get the form editor item from the form editor */ + item->setZValue(0); + } + } + } + for (const ModelNode &node : selectedNodeList) { + QmlVisualNode visualNode(node); + if (visualNode.isFlowTransition()) { + if (FormEditorItem *item = m_scene->itemForQmlItemNode(visualNode.toQmlItemNode())) { + item->setZValue(11); + } + } + } } void FormEditorView::variantPropertiesChanged(const QList &propertyList,