umbrello  2.32.3
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  * This program is free software; you can redistribute it and/or modify *
3  * it under the terms of the GNU General Public License as published by *
4  * the Free Software Foundation; either version 2 of the License, or *
5  * (at your option) any later version. *
6  * *
7  * copyright (C) 2002-2020 *
8  * Umbrello UML Modeller Authors <umbrello-devel@kde.org> *
9  ***************************************************************************/
10 
11 #ifndef ASSOCIATIONLINE_H
12 #define ASSOCIATIONLINE_H
13 
14 #include "basictypes.h"
15 
16 #include <QGraphicsObject>
17 #include <QList>
18 #include <QPen>
19 #include <QPoint>
20 
21 // forward declarations
22 class AssociationWidget;
23 class QDomDocument;
24 class QDomElement;
25 class QPainter;
26 class QXmlStreamWriter;
27 
32 class Symbol : public QGraphicsItem
33 {
34  public:
35  typedef QPair<QPointF, QPointF> SymbolEndPoints;
36 
41  enum SymbolType {
42  None = -1,
49  Count
50  };
51 
52  explicit Symbol(SymbolType symbolType, QGraphicsItem *parent = 0);
53  virtual ~Symbol();
54 
55  SymbolType symbolType() const;
57 
58  virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
59 
60  virtual QRectF boundingRect() const;
61  virtual QPainterPath shape() const;
62 
63  void alignTo(const QLineF& line);
65 
66  QPen pen() const;
67  void setPen(const QPen &pen);
68 
69  QBrush brush() const;
70  void setBrush(const QBrush& brush);
71 
72  private:
73  QPen m_pen;
74  QBrush m_brush;
76 
78  struct SymbolProperty {
79  QRectF boundRect;
80  QPainterPath shape;
81  QLineF axisLine;
83  };
84 
86  static void setupSymbolTable();
87 };
88 
105 class AssociationLine : public QGraphicsObject
106 {
107  Q_OBJECT
108 public:
109  static QString toString(Uml::LayoutType::Enum layout);
110  static Uml::LayoutType::Enum fromString(const QString& layout);
111 
112  explicit AssociationLine(AssociationWidget *association);
113  virtual ~AssociationLine();
114 
115  QPointF point(int index) const;
116  bool setPoint(int index, const QPointF& point);
117  QPointF startPoint() const;
118  QPointF endPoint() const;
119 
120  void addPoint(const QPointF& point);
121  void insertPoint(int index, const QPointF& point);
122  void removePoint(int index);
123 
124  int count() const;
125  void cleanup();
126 
127  void optimizeLinePoints();
128 
129  int closestPointIndex(const QPointF& point, qreal delta = Delta) const;
130  int closestSegmentIndex(const QPointF& point, qreal delta = Delta) const;
131 
132  bool isEndPointIndex(int index) const;
133  bool isEndSegmentIndex(int index) const;
134  bool isAutoLayouted() const;
135 
136  bool enableAutoLayout();
137 
138  bool setEndPoints(const QPointF &start, const QPointF &end);
139 
140  void dumpPoints();
141 
142  bool loadFromXMI1(QDomElement &qElement);
143  void saveToXMI1(QXmlStreamWriter& writer);
144 
145  QBrush brush() const;
146  QPen pen() const;
147  void setPen(const QPen &pen);
148  void updatePenStyle();
149 
150  virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget);
151 
152  QPainterPath path() const;
153 
154  QRectF boundingRect() const;
155  QPainterPath shape() const;
156 
159 
160  void mousePressEvent(QGraphicsSceneMouseEvent *event);
161  void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
162  void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
163 
164  void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
165  void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
166  void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
167 
169 
170  void reconstructSymbols();
171 
172 private:
173  void setStartSymbol(Symbol::SymbolType symbolType);
174  void setEndSymbol(Symbol::SymbolType symbolType);
175 
176  void createSubsetSymbol();
177  void removeSubsetSymbol();
178 
181 
182  void alignSymbols();
183 
184  void createSplinePoints();
185 
187  QVector<QPointF> m_points;
193  QGraphicsLineItem *m_collaborationLineItem;
196  QPen m_pen;
198  static QPainterPath createBezierCurve(QVector<QPointF> points);
199  static QPainterPath createOrthogonalPath(QVector<QPointF> points);
200 
201  qreal c1dx{0.0}, c1dy{0.0}, c2dx{0.0}, c2dy{0.0};
202  static const qreal Delta;
203  static const qreal SelectedPointDiameter;
204  static const qreal SelfAssociationMinimumHeight;
205 };
206 
207 #endif
Definition: associationline.h:106
static const qreal Delta
default delta for fuzzy recognition of points closer to point
Definition: associationline.h:202
bool isAutoLayouted() const
Definition: associationline.cpp:273
bool m_autoLayoutSpline
Definition: associationline.h:197
bool loadFromXMI1(QDomElement &qElement)
Definition: associationline.cpp:329
void insertPoint(int index, const QPointF &point)
Definition: associationline.cpp:128
virtual ~AssociationLine()
Definition: associationline.cpp:64
void addPoint(const QPointF &point)
Definition: associationline.cpp:119
qreal c1dx
Definition: associationline.h:201
void reconstructSymbols()
Definition: associationline.cpp:525
AssociationWidget * m_associationWidget
association widget which this line represents
Definition: associationline.h:186
void setStartSymbol(Symbol::SymbolType symbolType)
Definition: associationline.cpp:597
bool setEndPoints(const QPointF &start, const QPointF &end)
Definition: associationline.cpp:292
QGraphicsLineItem * m_collaborationLineItem
parallel arrow line drawn in case of collaboration message
Definition: associationline.h:193
void setLayout(Uml::LayoutType::Enum layout)
Definition: associationline.cpp:852
void setPen(const QPen &pen)
Definition: associationline.cpp:441
qreal c2dy
Definition: associationline.h:201
void createCollaborationLine()
Definition: associationline.cpp:663
int count() const
Definition: associationline.cpp:153
Symbol * m_subsetSymbol
subset symbol
Definition: associationline.h:192
void removeSubsetSymbol()
Definition: associationline.cpp:654
static const qreal SelfAssociationMinimumHeight
minimum height for self association's loop
Definition: associationline.h:204
void removePoint(int index)
Definition: associationline.cpp:139
void updatePenStyle()
Definition: associationline.cpp:467
bool isEndSegmentIndex(int index) const
Definition: associationline.cpp:264
QPen m_pen
pen used to draw an association line
Definition: associationline.h:196
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
Definition: associationline.cpp:1280
QPointF startPoint() const
Definition: associationline.cpp:106
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:190
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Definition: associationline.cpp:1222
int closestPointIndex(const QPointF &point, qreal delta=Delta) const
Definition: associationline.cpp:203
Uml::LayoutType::Enum layout() const
Definition: associationline.cpp:843
QRectF boundingRect() const
Definition: associationline.cpp:797
qreal c1dy
Definition: associationline.h:201
qreal c2dx
Definition: associationline.h:201
void alignSymbols()
Definition: associationline.cpp:699
QPainterPath shape() const
Definition: associationline.cpp:809
void saveToXMI1(QXmlStreamWriter &writer)
Definition: associationline.cpp:383
void hoverEnterEvent(QGraphicsSceneHoverEvent *event)
Definition: associationline.cpp:1234
Symbol * m_endSymbol
symbol drawn at the end of "last" line segment
Definition: associationline.h:191
void setEndSymbol(Symbol::SymbolType symbolType)
Definition: associationline.cpp:621
QPointF point(int index) const
Definition: associationline.cpp:76
int m_activePointIndex
index of active point which can be dragged to modify association line
Definition: associationline.h:188
void cleanup()
Definition: associationline.cpp:161
void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Definition: associationline.cpp:1163
Uml::LayoutType::Enum m_layout
Definition: associationline.h:195
AssociationLine(AssociationWidget *association)
Definition: associationline.cpp:42
bool isEndPointIndex(int index) const
Definition: associationline.cpp:253
bool enableAutoLayout()
Definition: associationline.cpp:278
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:177
void calculateInitialEndPoints()
Definition: associationline.cpp:484
static QString toString(Uml::LayoutType::Enum layout)
Definition: associationline.cpp:820
void createSubsetSymbol()
Definition: associationline.cpp:643
static QPainterPath createBezierCurve(QVector< QPointF > points)
Definition: associationline.cpp:935
void removeCollaborationLine()
Definition: associationline.cpp:685
void mousePressEvent(QGraphicsSceneMouseEvent *event)
Definition: associationline.cpp:1139
QPointF endPoint() const
Definition: associationline.cpp:114
void createSplinePoints()
Definition: associationline.cpp:868
int m_activeSegmentIndex
index of active segment
Definition: associationline.h:189
QPainterPath path() const
Definition: associationline.cpp:761
int closestSegmentIndex(const QPointF &point, qreal delta=Delta) const
Definition: associationline.cpp:229
static const qreal SelectedPointDiameter
radius of circles drawn to show "selection"
Definition: associationline.h:203
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:194
QVector< QPointF > m_points
points representing the association line
Definition: associationline.h:187
void dumpPoints()
Definition: associationline.cpp:318
bool setPoint(int index, const QPointF &point)
Definition: associationline.cpp:88
void hoverMoveEvent(QGraphicsSceneHoverEvent *event)
Definition: associationline.cpp:1258
This class represents an association inside a diagram. Bugs and comments to umbrello-devel@kde....
Definition: associationwidget.h:52
Definition: associationline.h:33
void setSymbolType(SymbolType symbolType)
Definition: associationline.cpp:1434
void setPen(const QPen &pen)
Definition: associationline.cpp:1522
QBrush m_brush
brush used to fill Symbol
Definition: associationline.h:74
virtual QRectF boundingRect() const
Definition: associationline.cpp:1463
QPen m_pen
pen used to draw Symbol
Definition: associationline.h:73
void setBrush(const QBrush &brush)
Definition: associationline.cpp:1540
virtual ~Symbol()
Definition: associationline.cpp:1419
SymbolEndPoints symbolEndPoints() const
Definition: associationline.cpp:1506
QPen pen() const
Definition: associationline.cpp:1514
SymbolType m_symbolType
current symbol being represented by this item
Definition: associationline.h:75
QBrush brush() const
Definition: associationline.cpp:1532
SymbolType
Definition: associationline.h:41
@ None
Definition: associationline.h:42
@ ClosedArrow
Definition: associationline.h:44
@ Count
Definition: associationline.h:49
@ Diamond
Definition: associationline.h:46
@ OpenArrow
Definition: associationline.h:43
@ CrowFeet
Definition: associationline.h:45
@ Subset
Definition: associationline.h:47
@ Circle
Definition: associationline.h:48
SymbolType symbolType() const
Definition: associationline.cpp:1426
void alignTo(const QLineF &line)
Definition: associationline.cpp:1489
static void setupSymbolTable()
Definition: associationline.cpp:1329
QPair< QPointF, QPointF > SymbolEndPoints
Definition: associationline.h:35
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
Definition: associationline.cpp:1444
virtual QPainterPath shape() const
Definition: associationline.cpp:1473
static SymbolProperty symbolTable[Symbol::Count]
a table which stores all symbol properties
Definition: associationline.h:85
Symbol(SymbolType symbolType, QGraphicsItem *parent=0)
Definition: associationline.cpp:1408
Enum
Definition: basictypes.h:144
A structure to hold a table of values for all symbols.
Definition: associationline.h:78
QRectF boundRect
Definition: associationline.h:79
QLineF axisLine
Definition: associationline.h:81
SymbolEndPoints endPoints
Definition: associationline.h:82
QPainterPath shape
Definition: associationline.h:80