1 /* 2 SPDX-License-Identifier: GPL-2.0-or-later 3 SPDX-FileCopyrightText: 2019-2020 Umbrello UML Modeller Authors <umbrello-devel@kde.org> 4 */ 5 6 #ifndef DIAGRAMPROXYWIDGET_H 7 #define DIAGRAMPROXYWIDGET_H 8 9 #include <basictypes.h> 10 11 #include <QPointer> 12 #include <QPointF> 13 #include <QRectF> 14 #include <QGraphicsSceneEvent> 15 16 class UMLWidget; 17 class UMLScene; 18 class IDChangeLog; 19 class QAction; 20 class QDomDocument; 21 class QDomElement; 22 class QStyleOptionGraphicsItem; 23 class QXmlStreamWriter; 24 25 class DiagramProxyWidget { 26 public: 27 DiagramProxyWidget(UMLWidget *widget, qreal borderWidth = 5); ~DiagramProxyWidget()28 virtual ~DiagramProxyWidget() {} 29 Uml::ID::Type diagramLink() const; 30 UMLScene *linkedDiagram() const; 31 bool setDiagramLink(const Uml::ID::Type &id); 32 const QRectF &clientRect(); 33 const QRectF &sceneRect(); 34 void setClientRect(const QRectF &rect); 35 36 bool isProxyWidget(); 37 UMLWidget *getProxiedWidget(const QPointF &p); 38 QPointF mapFromClient(const QPointF &p); 39 QRectF mapFromClient(const QRectF &r); 40 QPointF mapToClient(const QPointF &pos); 41 42 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); 43 44 bool showLinkedDiagram() const; 45 void setShowLinkedDiagram(bool showLinkedDiagram); 46 47 QRectF iconRect() const; 48 void setIconRect(const QRectF &iconRect); 49 50 protected: 51 DiagramProxyWidget& operator=(const DiagramProxyWidget& other); 52 bool activate(IDChangeLog* changeLog = 0); 53 bool loadFromXMI1(QDomElement &qElement); 54 void saveToXMI1(QXmlStreamWriter& writer); 55 void setupEvent(QGraphicsSceneMouseEvent &e, QGraphicsSceneMouseEvent *event, const QPointF &pos); 56 void setupEvent(QGraphicsSceneContextMenuEvent &e, QGraphicsSceneContextMenuEvent *event, const QPointF &pos); 57 virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event); 58 virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); 59 virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); 60 virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); 61 virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); 62 void slotMenuSelection(QAction *action); 63 64 private: 65 Uml::ID::Type m_diagramLinkId; ///< id of linked diagram 66 QPointer<UMLScene> m_linkedDiagram; ///< pointer to linked diagram 67 QRectF m_clientRect; ///< widget area for embedded diagram 68 QRectF m_sceneRect; ///< scene rectangle used for internal calculations 69 QRectF m_iconRect; ///< widget area for diagram icon 70 UMLWidget *m_widget; 71 qreal m_borderWidth; 72 bool m_showLinkedDiagram; 73 }; 74 75 #endif // DIAGRAMPROXYWIDGET_H 76