umbrello  2.35.1
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,
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
Symbol::Circle
@ Circle
Definition: associationline.h:43
AssociationLine::AssociationLine
AssociationLine(AssociationWidget *association)
Definition: associationline.cpp:37
AssociationLine::createBezierCurve
static QPainterPath createBezierCurve(QVector< QPointF > points)
Definition: associationline.cpp:935
AssociationLine::hoverEnterEvent
void hoverEnterEvent(QGraphicsSceneHoverEvent *event)
Definition: associationline.cpp:1231
AssociationLine::removeCollaborationLine
void removeCollaborationLine()
Definition: associationline.cpp:687
UMLWidget::height
qreal height() const
Definition: umlwidget.h:112
associationline.h
AssociationLine::setPen
void setPen(const QPen &pen)
Definition: associationline.cpp:441
AssociationWidget
This class represents an association inside a diagram. Bugs and comments to umbrello-devel@kde....
Definition: associationwidget.h:46
Symbol::symbolType
SymbolType symbolType() const
Definition: associationline.cpp:1455
Symbol::SymbolProperty
A structure to hold a table of values for all symbols.
Definition: associationline.h:73
Symbol::setPen
void setPen(const QPen &pen)
Definition: associationline.cpp:1551
AssociationLine::m_c2dx
qreal m_c2dx
Definition: associationline.h:196
Symbol::CrowFeet
@ CrowFeet
Definition: associationline.h:40
Symbol::SymbolEndPoints
QPair< QPointF, QPointF > SymbolEndPoints
Definition: associationline.h:30
Symbol::symbolTable
static SymbolProperty * symbolTable
a table which stores all symbol properties
Definition: associationline.h:80
Symbol::setBrush
void setBrush(const QBrush &brush)
Definition: associationline.cpp:1569
x
int x
Definition: cxx11-lambda-functions-and-expressions.h:4
AssociationLine::setPoint
bool setPoint(int index, const QPointF &point)
Definition: associationline.cpp:84
Uml::LayoutType::Enum
Enum
Definition: basictypes.h:130
AssociationLine::createCollaborationLine
void createCollaborationLine()
Definition: associationline.cpp:665
Symbol::shape
virtual QPainterPath shape() const
Definition: associationline.cpp:1502
UMLWidget
The base class for graphical UML objects.
Definition: umlwidget.h:35
AssociationLine::pen
QPen pen() const
Definition: associationline.cpp:433
Uml::AssociationType::Containment
@ Containment
Definition: basictypes.h:102
Uml::AssociationType::Activity
@ Activity
Definition: basictypes.h:108
SymbolPropertyPOD::axisLineEndX
int axisLineEndX
Definition: associationline.cpp:1295
Tracer::instance
static Tracer * instance()
Definition: debug_utils.cpp:110
AssociationLine::closestSegmentIndex
int closestSegmentIndex(const QPointF &point, qreal delta=Delta) const
Definition: associationline.cpp:228
AssociationLine::count
int count() const
Definition: associationline.cpp:150
AssociationLine::updatePenStyle
void updatePenStyle()
Definition: associationline.cpp:467
AssociationLine::createOrthogonalPath
static QPainterPath createOrthogonalPath(QVector< QPointF > points)
Definition: associationline.cpp:971
WidgetBase::umlScene
UMLScene * umlScene() const
Definition: widgetbase.cpp:174
toDoubleFromAnyLocale
qreal toDoubleFromAnyLocale(const QString &s)
Definition: basictypes.cpp:1341
AssociationLine::SelectedPointDiameter
static const qreal SelectedPointDiameter
radius of circles drawn to show "selection"
Definition: associationline.h:198
Symbol::Subset
@ Subset
Definition: associationline.h:42
DEBUG_REGISTER_DISABLED
#define DEBUG_REGISTER_DISABLED(src)
Definition: debug_utils.h:135
AssociationLine::createSplinePoints
void createSplinePoints()
Definition: associationline.cpp:868
DEBUG
#define DEBUG()
Definition: debug_utils.h:127
Uml::AssociationType::State
@ State
Definition: basictypes.h:107
AssociationLine::removePoint
void removePoint(int index)
Definition: associationline.cpp:136
AssociationLine::boundingRect
QRectF boundingRect() const
Definition: associationline.cpp:797
logError0
#define logError0(s)
Definition: uml.h:539
SymbolPropertyPOD
Definition: associationline.cpp:1293
AssociationLine::isEndPointIndex
bool isEndPointIndex(int index) const
Definition: associationline.cpp:252
UMLDoc::dpiScale
qreal dpiScale() const
Definition: umldoc.cpp:2096
AssociationLine::endPoint
QPointF endPoint() const
Definition: associationline.cpp:111
Symbol::SymbolProperty::boundRect
QRectF boundRect
Definition: associationline.h:74
AssociationLine::paint
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
Definition: associationline.cpp:1015
AssociationLine::mouseMoveEvent
void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Definition: associationline.cpp:1159
AssociationLine::insertPoint
void insertPoint(int index, const QPointF &point)
Definition: associationline.cpp:125
AssociationLine::loadFromXMI
bool loadFromXMI(QDomElement &qElement)
Definition: associationline.cpp:328
Symbol::paint
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
Definition: associationline.cpp:1473
WidgetBase::rect
QRectF rect() const
Definition: widgetbase.cpp:844
AssociationLine::m_startSymbol
Symbol * m_startSymbol
symbol drawn at the end of "first" line segment
Definition: associationline.h:185
Uml::AssociationType::UniAssociation
@ UniAssociation
Definition: basictypes.h:105
Uml::AssociationType::Relationship
@ Relationship
Definition: basictypes.h:112
AssociationLine::m_c2dy
qreal m_c2dy
Definition: associationline.h:196
AssociationLine::path
QPainterPath path() const
Definition: associationline.cpp:763
Symbol::m_brush
QBrush m_brush
brush used to fill Symbol
Definition: associationline.h:69
AssociationLine::m_c1dx
qreal m_c1dx
Definition: associationline.h:196
AssociationLine::m_points
QVector< QPointF > m_points
points representing the association line
Definition: associationline.h:182
AssociationLine::fromString
static Uml::LayoutType::Enum fromString(const QString &layout)
Definition: associationline.cpp:828
Symbol::SymbolProperty::shape
QPainterPath shape
Definition: associationline.h:75
UMLScene::widgetAt
UMLWidget * widgetAt(const QPointF &p)
Definition: umlscene.cpp:1086
AssociationLine::calculateInitialEndPoints
void calculateInitialEndPoints()
Definition: associationline.cpp:484
optionstate.h
AssociationLine::m_collaborationLineItem
QGraphicsLineItem * m_collaborationLineItem
parallel arrow line drawn in case of collaboration message
Definition: associationline.h:188
Uml::AssociationType::Anchor
@ Anchor
Definition: basictypes.h:106
Settings::optionState
OptionState & optionState()
Definition: optionstate.cpp:357
AssociationWidget::associationType
Uml::AssociationType::Enum associationType() const
Definition: associationwidget.cpp:1436
AssociationLine::alignSymbols
void alignSymbols()
Definition: associationline.cpp:701
SymbolPropertyPOD::endPoint1x
int endPoint1x
Definition: associationline.cpp:1296
AssociationLine::~AssociationLine
virtual ~AssociationLine()
Definition: associationline.cpp:59
Uml::AssociationType::Child2Category
@ Child2Category
Definition: basictypes.h:111
AssociationWidget::boundingRect
virtual QRectF boundingRect() const
Definition: associationwidget.cpp:3340
SymbolPropertyPOD::boundRectW
int boundRectW
Definition: associationline.cpp:1294
Uml::AssociationType::Aggregation
@ Aggregation
Definition: basictypes.h:94
AssociationLine::optimizeLinePoints
void optimizeLinePoints()
Definition: associationline.cpp:174
Symbol::m_pen
QPen m_pen
pen used to draw Symbol
Definition: associationline.h:68
UMLScene::snappedX
qreal snappedX(qreal x)
Definition: umlscene.cpp:3627
AssociationLine::enableAutoLayout
bool enableAutoLayout()
Definition: associationline.cpp:277
AssociationLine::point
QPointF point(int index) const
Definition: associationline.cpp:71
Uml::LayoutType::Spline
@ Spline
Definition: basictypes.h:135
Symbol::setupSymbolTable
static void setupSymbolTable()
Definition: associationline.cpp:1344
AssociationLine::isEndSegmentIndex
bool isEndSegmentIndex(int index) const
Definition: associationline.cpp:263
UMLScene::fixX
qreal fixX() const
Definition: umlscene.cpp:4613
Uml::LayoutType::Polyline
@ Polyline
Definition: basictypes.h:134
AssociationLine::isAutoLayouted
bool isAutoLayouted() const
Definition: associationline.cpp:272
number
it is up to the author donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License If the distribution and or use of the Library is restricted in certain countries either by patents or by copyrighted the original copyright holder who places the Library under this License may add an geographical distribution limitation excluding those so that distribution is permitted only in or among countries not thus excluded In such this License incorporates the limitation as if written in the body of this License The Free Software Foundation may publish revised and or new versions of the Library General Public License from time to time Such new versions will be similar in spirit to the present but may differ in detail to address new problems or concerns Each version is given a distinguishing version number If the Library specifies a version number of this License which applies to it and any later you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation If the Library does not specify a license version number
Definition: LGPL-2.0-only.txt:368
AssociationLine::m_subsetSymbol
Symbol * m_subsetSymbol
subset symbol
Definition: associationline.h:187
Symbol::ClosedArrow
@ ClosedArrow
Definition: associationline.h:39
a
QString a
Definition: petalnode.cpp:13
umlwidget.h
Uml::LayoutType::Direct
@ Direct
Definition: basictypes.h:132
AssociationLine::m_collaborationLineHead
Symbol * m_collaborationLineHead
arrow head drawn at end of m_collaborationLineItem
Definition: associationline.h:189
AssociationLine::brush
QBrush brush() const
Definition: associationline.cpp:415
Symbol::boundingRect
virtual QRectF boundingRect() const
Definition: associationline.cpp:1492
AssociationLine
Definition: associationline.h:100
SymbolPropertyPOD::endPoint0y
int endPoint0y
Definition: associationline.cpp:1296
Symbol::Count
@ Count
Definition: associationline.h:44
Symbol::symbolEndPoints
SymbolEndPoints symbolEndPoints() const
Definition: associationline.cpp:1535
basictypes.h
symPropData
static const SymbolPropertyPOD symPropData[]
Definition: associationline.cpp:1299
AssociationLine::reconstructSymbols
void reconstructSymbols()
Definition: associationline.cpp:526
Symbol::~Symbol
virtual ~Symbol()
Definition: associationline.cpp:1448
AssociationLine::cleanup
void cleanup()
Definition: associationline.cpp:158
AssociationLine::m_pen
QPen m_pen
pen used to draw an association line
Definition: associationline.h:191
Symbol::OpenArrow
@ OpenArrow
Definition: associationline.h:38
Uml::RoleType::B
@ B
Definition: basictypes.h:238
SymbolPropertyPOD::boundRectH
int boundRectH
Definition: associationline.cpp:1294
Symbol::Symbol
Symbol(SymbolType symbolType, QGraphicsItem *parent=0)
Definition: associationline.cpp:1437
SymbolPropertyPOD::endPoint0x
int endPoint0x
Definition: associationline.cpp:1296
AssociationLine::removeSubsetSymbol
void removeSubsetSymbol()
Definition: associationline.cpp:656
Uml::AssociationType::Enum
Enum
Definition: basictypes.h:92
Uml::AssociationType::Generalization
@ Generalization
Definition: basictypes.h:93
c
type show c for details The hypothetical commands show w and show c should show the appropriate parts of the General Public License Of the commands you use may be called something other than show w and show c
Definition: GPL-2.0-only.txt:301
AssociationLine::hoverLeaveEvent
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
Definition: associationline.cpp:1277
AssociationLine::setStartSymbol
void setStartSymbol(Symbol::SymbolType symbolType)
Definition: associationline.cpp:599
UMLApp::app
static UMLApp * app()
Definition: uml.cpp:349
AssociationLine::setLayout
void setLayout(Uml::LayoutType::Enum layout)
Definition: associationline.cpp:852
Uml::AssociationType::Coll_Mesg_Async
@ Coll_Mesg_Async
Definition: basictypes.h:98
AssociationLine::startPoint
QPointF startPoint() const
Definition: associationline.cpp:103
WidgetBase::isBoxWidget
bool isBoxWidget() const
Definition: widgetbase.h:241
AssociationLine::m_activeSegmentIndex
int m_activeSegmentIndex
index of active segment
Definition: associationline.h:184
Symbol::SymbolProperty::endPoints
SymbolEndPoints endPoints
Definition: associationline.h:77
Symbol::m_symbolType
SymbolType m_symbolType
current symbol being represented by this item
Definition: associationline.h:70
Symbol::alignTo
void alignTo(const QLineF &line)
Definition: associationline.cpp:1518
Symbol::setSymbolType
void setSymbolType(SymbolType symbolType)
Definition: associationline.cpp:1463
SymbolPropertyPOD::boundRectY
int boundRectY
Definition: associationline.cpp:1294
AssociationLine::mousePressEvent
void mousePressEvent(QGraphicsSceneMouseEvent *event)
Definition: associationline.cpp:1139
AssociationLine::m_autoLayoutSpline
bool m_autoLayoutSpline
Definition: associationline.h:192
AssociationLine::closestPointIndex
int closestPointIndex(const QPointF &point, qreal delta=Delta) const
Definition: associationline.cpp:200
AssociationLine::toString
static QString toString(Uml::LayoutType::Enum layout)
Definition: associationline.cpp:820
AssociationLine::m_associationWidget
AssociationWidget * m_associationWidget
association widget which this line represents
Definition: associationline.h:181
associationwidget.h
Settings
Definition: codeviewerstate.cpp:10
AssociationLine::m_layout
Uml::LayoutType::Enum m_layout
Definition: associationline.h:190
AssociationLine::setEndSymbol
void setEndSymbol(Symbol::SymbolType symbolType)
Definition: associationline.cpp:623
AssociationLine::mouseReleaseEvent
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Definition: associationline.cpp:1219
Uml::AssociationType::Coll_Mesg_Self
@ Coll_Mesg_Self
Definition: basictypes.h:100
WidgetBase::lineColor
QColor lineColor() const
Definition: widgetbase.cpp:368
SymbolPropertyPOD::endPoint1y
int endPoint1y
Definition: associationline.cpp:1296
uml.h
Symbol::pen
QPen pen() const
Definition: associationline.cpp:1543
debug_utils.h
UMLScene::snappedY
qreal snappedY(qreal y)
Definition: umlscene.cpp:3645
AssociationLine::m_activePointIndex
int m_activePointIndex
index of active point which can be dragged to modify association line
Definition: associationline.h:183
SymbolPropertyPOD::axisLineStartX
int axisLineStartX
Definition: associationline.cpp:1295
UMLScene
Definition: umlscene.h:64
AssociationLine::m_endSymbol
Symbol * m_endSymbol
symbol drawn at the end of "last" line segment
Definition: associationline.h:186
AssociationLine::setEndPoints
bool setEndPoints(const QPointF &start, const QPointF &end)
Definition: associationline.cpp:291
AssociationLine::createSubsetSymbol
void createSubsetSymbol()
Definition: associationline.cpp:645
AssociationLine::dumpPoints
void dumpPoints()
Definition: associationline.cpp:317
Uml::AssociationType::Composition
@ Composition
Definition: basictypes.h:103
SymbolPropertyPOD::axisLineStartY
int axisLineStartY
Definition: associationline.cpp:1295
AssociationLine::addPoint
void addPoint(const QPointF &point)
Definition: associationline.cpp:116
Symbol::SymbolProperty::axisLine
QLineF axisLine
Definition: associationline.h:76
Uml::LayoutType::Orthogonal
@ Orthogonal
Definition: basictypes.h:133
Uml::LayoutType::fromString
Enum fromString(const QString &item)
Definition: basictypes.cpp:493
b
bool b
Definition: cxx11-null-pointer-constant.h:6
Uml::AssociationType::Coll_Mesg_Sync
@ Coll_Mesg_Sync
Definition: basictypes.h:113
AssociationLine::m_c1dy
qreal m_c1dy
Definition: associationline.h:196
AssociationLine::saveToXMI
void saveToXMI(QXmlStreamWriter &writer)
Definition: associationline.cpp:383
Symbol::brush
QBrush brush() const
Definition: associationline.cpp:1561
Uml::AssociationType::Dependency
@ Dependency
Definition: basictypes.h:95
AssociationLine::Delta
static const qreal Delta
default delta for fuzzy recognition of points closer to point
Definition: associationline.h:197
Uml::LayoutType::toString
QString toString(Enum item)
Definition: basictypes.cpp:473
AssociationLine::layout
Uml::LayoutType::Enum layout() const
Definition: associationline.cpp:843
logWarn2
#define logWarn2(s, a, b)
Definition: uml.h:550
UMLScene::fixY
qreal fixY() const
Definition: umlscene.cpp:4621
AssociationLine::SelfAssociationMinimumHeight
static const qreal SelfAssociationMinimumHeight
minimum height for self association's loop
Definition: associationline.h:199
UMLWidget::width
qreal width() const
Definition: umlwidget.h:119
Symbol
Definition: associationline.h:27
AssociationLine::shape
QPainterPath shape() const
Definition: associationline.cpp:809
Symbol::Diamond
@ Diamond
Definition: associationline.h:41
UMLApp::document
UMLDoc * document() const
Definition: uml.cpp:1139
Uml::AssociationType::Realization
@ Realization
Definition: basictypes.h:104
AssociationLine::hoverMoveEvent
void hoverMoveEvent(QGraphicsSceneHoverEvent *event)
Definition: associationline.cpp:1255
umldoc.h
SymbolPropertyPOD::axisLineEndY
int axisLineEndY
Definition: associationline.cpp:1295
SymbolPropertyPOD::boundRectX
int boundRectX
Definition: associationline.cpp:1294
AssociationWidget::isSelf
bool isSelf() const
Definition: associationwidget.cpp:1426
Uml::AssociationType::Exception
@ Exception
Definition: basictypes.h:109
Symbol::None
@ None
Definition: associationline.h:37
AssociationWidget::widgetForRole
UMLWidget * widgetForRole(Uml::RoleType::Enum role) const
Definition: associationwidget.cpp:1273
Symbol::SymbolType
SymbolType
Definition: associationline.h:36