From da6f5c8b7b8435269ac2775a5353b558254c8947 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 23 Mar 2020 14:59:19 +0100 Subject: [PATCH] QmlDesigner: Add FormEditorFlowDecisionItem and FormEditorFlowWildcardItem Those items are used to represent wildcards and decisions in flows. Change-Id: I14e55591c01aeb4105f4d0757a0ea2d00392358a Reviewed-by: Tim Jenssen --- .../components/formeditor/formeditoritem.cpp | 69 +++++++++++++++++++ .../components/formeditor/formeditoritem.h | 28 ++++++++ 2 files changed, 97 insertions(+) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index 2f164344b00..b45835dfd15 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -1011,4 +1011,73 @@ QTransform FormEditorItem::viewportTransform() const return scene()->views().first()->viewportTransform(); } +void FormEditorFlowDecisionItem::updateGeometry() +{ + prepareGeometryChange(); + m_selectionBoundingRect = QRectF(0,0, 200, 200); + m_paintedBoundingRect = m_selectionBoundingRect; + m_boundingRect = m_paintedBoundingRect; + setTransform(qmlItemNode().instanceTransformWithContentTransform()); + const QPointF pos = qmlItemNode().flowPosition(); + setTransform(QTransform::fromTranslate(pos.x(), pos.y())); +} + +void FormEditorFlowDecisionItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + if (!painter->isActive()) + return; + + painter->save(); + + QPen pen; + pen.setJoinStyle(Qt::MiterJoin); + pen.setCosmetic(true); + + QColor flowColor = "#e71919"; + + if (qmlItemNode().modelNode().hasAuxiliaryData("color")) + flowColor = qmlItemNode().modelNode().auxiliaryData("color").value(); + + const qreal scaleFactor = viewportTransform().m11(); + qreal width = 2; + + if (qmlItemNode().modelNode().hasAuxiliaryData("width")) + width = qmlItemNode().modelNode().auxiliaryData("width").toInt(); + + bool dash = false; + + if (qmlItemNode().modelNode().hasAuxiliaryData("dash")) + dash = qmlItemNode().modelNode().auxiliaryData("dash").toBool(); + + pen.setColor(flowColor); + if (dash) + pen.setStyle(Qt::DashLine); + else + pen.setStyle(Qt::SolidLine); + + pen.setWidthF(width); + pen.setCosmetic(true); + painter->setPen(pen); + + if (qmlItemNode().modelNode().hasAuxiliaryData("fillColor")) { + + const QColor fillColor = qmlItemNode().modelNode().auxiliaryData("fillColor").value(); + painter->fillRect(boundingRect(), fillColor); + } + + painter->drawRect(boundingRect()); + + painter->restore(); +} + +bool FormEditorFlowDecisionItem::flowHitTest(const QPointF &point) const +{ + return true; +} + +void FormEditorFlowWildcardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + FormEditorFlowDecisionItem::paint(painter, option, widget); +} + } //QmlDesigner diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h index 3e38ff3c000..d725afd0b05 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h @@ -1,3 +1,4 @@ + /**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. @@ -196,6 +197,33 @@ private: mutable bool m_hitTest = false; }; +class FormEditorFlowDecisionItem : FormEditorFlowItem +{ + friend class QmlDesigner::FormEditorScene; + +public: + void updateGeometry() override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem * option, QWidget * widget = nullptr ) override; + bool flowHitTest(const QPointF &point) const override; + +protected: + FormEditorFlowDecisionItem(const QmlItemNode &qmlItemNode, FormEditorScene* scene) + : FormEditorFlowItem(qmlItemNode, scene) + {} +}; + +class FormEditorFlowWildcardItem : FormEditorFlowDecisionItem +{ + friend class QmlDesigner::FormEditorScene; + +public: + void paint(QPainter *painter, const QStyleOptionGraphicsItem * option, QWidget * widget = nullptr ) override; + +protected: + FormEditorFlowWildcardItem(const QmlItemNode &qmlItemNode, FormEditorScene* scene) + : FormEditorFlowDecisionItem(qmlItemNode, scene) + {} +}; inline int FormEditorItem::type() const {