umbrello  2.39.2
Umbrello UML Modeller is a Unified Modelling Language (UML) diagram program based on KDE Technology
associationline.h
Go to the documentation of this file.
1 /*
2  SPDX-License-Identifier: GPL-2.0-or-later
3  SPDX-FileCopyrightText: 2002-2021 Umbrello UML Modeller Authors <umbrello-devel@kde.org>
4 */
5 
6 #ifndef ASSOCIATIONLINE_H
7 #define ASSOCIATIONLINE_H
8 
9 #include "basictypes.h"
10 
11 #include <QGraphicsObject>
12 #include <QList>
13 #include <QPen>
14 #include <QPoint>
15 
16 // forward declarations
17 class AssociationWidget;
18 class QDomDocument;
19 class QDomElement;
20 class QPainter;
21 class QXmlStreamWriter;
22 
27 class Symbol : public QGraphicsItem
28 {
29  public:
30  typedef QPair<QPointF, QPointF> SymbolEndPoints;
31 
36  enum SymbolType {
37  None = -1,
44  Count
45  };
46 
47  explicit Symbol(SymbolType symbolType, QGraphicsItem *parent = 0);
48  virtual ~Symbol();
49 
50  SymbolType symbolType() const;
52 
53  virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
54 
55  virtual QRectF boundingRect() const;
56  virtual QPainterPath shape() const;
57 
58  void alignTo(const QLineF& line);
60 
61  QPen pen() const;
62  void setPen(const QPen &pen);
63 
64  QBrush brush() const;
65  void setBrush(const QBrush& brush);
66 
67  private:
68  QPen m_pen;
69  QBrush m_brush;
71 
73  struct SymbolProperty {
74  QRectF boundRect;
75  QPainterPath shape;
76  QLineF axisLine;
78  };
79 
81  static void setupSymbolTable();
82 };
83 
100 class AssociationLine : public QGraphicsObject
101 {
102  Q_OBJECT
103 public:
104  static QString toString(Uml::LayoutType::Enum layout);
105  static Uml::LayoutType::Enum fromString(const QString& layout);
106 
107  explicit AssociationLine(AssociationWidget *association);
108  virtual ~AssociationLine();
109 
110  QPointF point(int index) const;
111  bool setPoint(int index, const QPointF& point);
112  QPointF startPoint() const;
113  QPointF endPoint() const;
114 
115  void addPoint(const QPointF& point);
116  void insertPoint(int index, const QPointF& point);
117  void removePoint(int index);
118 
119  int count() const;
120  void cleanup();
121 
122  void optimizeLinePoints();
123 
124  int closestPointIndex(const QPointF& point, qreal delta = Delta) const;
125  int closestSegmentIndex(const QPointF& point, qreal delta = Delta) const;
126 
127  bool isEndPointIndex(int index) const;
128  bool isEndSegmentIndex(int index) const;
129  bool isAutoLayouted() const;
130 
131  bool enableAutoLayout();
132 
133  bool setEndPoints(const QPointF &start, const QPointF &end);
134 
135  void dumpPoints();
136 
137  bool loadFromXMI(QDomElement &qElement);
138  void saveToXMI(QXmlStreamWriter& writer);
139 
140  QBrush brush() const;
141  QPen pen() const;
142  void setPen(const QPen &pen);
143  void updatePenStyle();
144 
145  virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget);
146 
147  QPainterPath path() const;
148 
149  QRectF boundingRect() const;
150  QPainterPath shape() const;
151 
154 
155  void mousePressEvent(QGraphicsSceneMouseEvent *event);
156  void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
157  void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
158 
159  void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
160  void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
161  void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
162 
164 
165  void reconstructSymbols();
166 
167 private:
168  void setStartSymbol(Symbol::SymbolType symbolType);
169  void setEndSymbol(Symbol::SymbolType symbolType);
170 
171  void createSubsetSymbol();
172  void removeSubsetSymbol();
173 
176 
177  void alignSymbols();
178 
179  void createSplinePoints();
180 
182  QVector<QPointF> m_points;
188  QGraphicsLineItem *m_collaborationLineItem;
191  QPen m_pen;
193  static QPainterPath createBezierCurve(QVector<QPointF> points);
194  static QPainterPath createOrthogonalPath(QVector<QPointF> points);
195 
196  qreal m_c1dx{0.0}, m_c1dy{0.0}, m_c2dx{0.0}, m_c2dy{0.0};
197  static const qreal Delta;
198  static const qreal SelectedPointDiameter;
199  static const qreal SelfAssociationMinimumHeight;
200 };
201 
202 #endif
Definition: associationline.h:101
static const qreal Delta
default delta for fuzzy recognition of points closer to point
Definition: associationline.h:197
bool isAutoLayouted() const
Definition: associationline.cpp:272
bool m_autoLayoutSpline
Definition: associationline.h:192
void insertPoint(int index, const QPointF &point)
Definition: associationline.cpp:125
virtual ~AssociationLine()
Definition: associationline.cpp:59
void addPoint(const QPointF &point)
Definition: associationline.cpp:116
void reconstructSymbols()
Definition: associationline.cpp:526
AssociationWidget * m_associationWidget
association widget which this line represents
Definition: associationline.h:181
void setStartSymbol(Symbol::SymbolType symbolType)
Definition: associationline.cpp:599
bool setEndPoints(const QPointF &start, const QPointF &end)
Definition: associationline.cpp:291
QGraphicsLineItem * m_collaborationLineItem
parallel arrow line drawn in case of collaboration message
Definition: associationline.h:188
void setLayout(Uml::LayoutType::Enum layout)
Definition: associationline.cpp:852
void setPen(const QPen &pen)
Definition: associationline.cpp:441
void createCollaborationLine()
Definition: associationline.cpp:665
int count() const
Definition: associationline.cpp:150
qreal m_c2dy
Definition: associationline.h:196
Symbol * m_subsetSymbol
subset symbol
Definition: associationline.h:187
qreal m_c1dx
Definition: associationline.h:196
void removeSubsetSymbol()
Definition: associationline.cpp:656
static const qreal SelfAssociationMinimumHeight
minimum height for self association's loop
Definition: associationline.h:199
void removePoint(int index)
Definition: associationline.cpp:136
void updatePenStyle()
Definition: associationline.cpp:467
bool isEndSegmentIndex(int index) const
Definition: associationline.cpp:263
QPen m_pen
pen used to draw an association line
Definition: associationline.h:191
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
Definition: associationline.cpp:1277
QPointF startPoint() const
Definition: associationline.cpp:103
static QPainterPath createOrthogonalPath(QVector< QPointF > points)
Definition: associationline.cpp:971
Symbol * m_startSymbol
symbol drawn at the end of "first" line segment
Definition: associationline.h:185
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Definition: associationline.cpp:1219
int closestPointIndex(const QPointF &point, qreal delta=Delta) const
Definition: associationline.cpp:200
Uml::LayoutType::Enum layout() const
Definition: associationline.cpp:843
QRectF boundingRect() const
Definition: associationline.cpp:797
qreal m_c1dy
Definition: associationline.h:196
qreal m_c2dx
Definition: associationline.h:196
void alignSymbols()
Definition: associationline.cpp:701
QPainterPath shape() const
Definition: associationline.cpp:809
void hoverEnterEvent(QGraphicsSceneHoverEvent *event)
Definition: associationline.cpp:1231
Symbol * m_endSymbol
symbol drawn at the end of "last" line segment
Definition: associationline.h:186
void setEndSymbol(Symbol::SymbolType symbolType)
Definition: associationline.cpp:623
QPointF point(int index) const
Definition: associationline.cpp:71
int m_activePointIndex
index of active point which can be dragged to modify association line
Definition: associationline.h:183
void cleanup()
Definition: associationline.cpp:158
void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Definition: associationline.cpp:1159
Uml::LayoutType::Enum m_layout
Definition: associationline.h:190
AssociationLine(AssociationWidget *association)
Definition: associationline.cpp:37
bool isEndPointIndex(int index) const
Definition: associationline.cpp:252
bool enableAutoLayout()
Definition: associationline.cpp:277
QBrush brush() const
Definition: associationline.cpp:415
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
Definition: associationline.cpp:1015
void optimizeLinePoints()
Definition: associationline.cpp:174
void calculateInitialEndPoints()
Definition: associationline.cpp:484
static QString toString(Uml::LayoutType::Enum layout)
Definition: associationline.cpp:820
void createSubsetSymbol()
Definition: associationline.cpp:645
static QPainterPath createBezierCurve(QVector< QPointF > points)
Definition: associationline.cpp:935
void removeCollaborationLine()
Definition: associationline.cpp:687
void mousePressEvent(QGraphicsSceneMouseEvent *event)
Definition: associationline.cpp:1139
QPointF endPoint() const
Definition: associationline.cpp:111
void createSplinePoints()
Definition: associationline.cpp:868
int m_activeSegmentIndex
index of active segment
Definition: associationline.h:184
QPainterPath path() const
Definition: associationline.cpp:763
int closestSegmentIndex(const QPointF &point, qreal delta=Delta) const
Definition: associationline.cpp:228
static const qreal SelectedPointDiameter
radius of circles drawn to show "selection"
Definition: associationline.h:198
static Uml::LayoutType::Enum fromString(const QString &layout)
Definition: associationline.cpp:828
QPen pen() const
Definition: associationline.cpp:433
Symbol * m_collaborationLineHead
arrow head drawn at end of m_collaborationLineItem
Definition: associationline.h:189
bool loadFromXMI(QDomElement &qElement)
Definition: associationline.cpp:328
QVector< QPointF > m_points
points representing the association line
Definition: associationline.h:182
void dumpPoints()
Definition: associationline.cpp:317
void saveToXMI(QXmlStreamWriter &writer)
Definition: associationline.cpp:383
bool setPoint(int index, const QPointF &point)
Definition: associationline.cpp:84
void hoverMoveEvent(QGraphicsSceneHoverEvent *event)
Definition: associationline.cpp:1255
This class represents an association inside a diagram. Bugs and comments to umbrello-devel@kde....
Definition: associationwidget.h:47
Definition: associationline.h:28
void setSymbolType(SymbolType symbolType)
Definition: associationline.cpp:1463
void setPen(const QPen &pen)
Definition: associationline.cpp:1551
QBrush m_brush
brush used to fill Symbol
Definition: associationline.h:69
virtual QRectF boundingRect() const
Definition: associationline.cpp:1492
QPen m_pen
pen used to draw Symbol
Definition: associationline.h:68
void setBrush(const QBrush &brush)
Definition: associationline.cpp:1569
static SymbolProperty * symbolTable
a table which stores all symbol properties
Definition: associationline.h:80
virtual ~Symbol()
Definition: associationline.cpp:1448
SymbolEndPoints symbolEndPoints() const
Definition: associationline.cpp:1535
QPen pen() const
Definition: associationline.cpp:1543
SymbolType m_symbolType
current symbol being represented by this item
Definition: associationline.h:70
QBrush brush() const
Definition: associationline.cpp:1561
SymbolType
Definition: associationline.h:36
@ None
Definition: associationline.h:37
@ ClosedArrow
Definition: associationline.h:39
@ Count
Definition: associationline.h:44
@ Diamond
Definition: associationline.h:41
@ OpenArrow
Definition: associationline.h:38
@ CrowFeet
Definition: associationline.h:40
@ Subset
Definition: associationline.h:42
@ Circle
Definition: associationline.h:43
SymbolType symbolType() const
Definition: associationline.cpp:1455
void alignTo(const QLineF &line)
Definition: associationline.cpp:1518
static void setupSymbolTable()
Definition: associationline.cpp:1344
QPair< QPointF, QPointF > SymbolEndPoints
Definition: associationline.h:30
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
Definition: associationline.cpp:1473
virtual QPainterPath shape() const
Definition: associationline.cpp:1502
Symbol(SymbolType symbolType, QGraphicsItem *parent=0)
Definition: associationline.cpp:1437
Enum
Definition: basictypes.h:130
A structure to hold a table of values for all symbols.
Definition: associationline.h:73
QRectF boundRect
Definition: associationline.h:74
QLineF axisLine
Definition: associationline.h:76
SymbolEndPoints endPoints
Definition: associationline.h:77
QPainterPath shape
Definition: associationline.h:75