umbrello  2.32.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-2020 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 loadFromXMI1(QDomElement &qElement);
138  void saveToXMI1(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 c1dx{0.0}, c1dy{0.0}, c2dx{0.0}, 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:931
AssociationLine::hoverEnterEvent
void hoverEnterEvent(QGraphicsSceneHoverEvent *event)
Definition: associationline.cpp:1230
AssociationLine::removeCollaborationLine
void removeCollaborationLine()
Definition: associationline.cpp:681
UMLWidget::height
qreal height() const
Definition: umlwidget.h:112
AssociationLine::loadFromXMI1
bool loadFromXMI1(QDomElement &qElement)
Definition: associationline.cpp:324
associationline.h
AssociationLine::setPen
void setPen(const QPen &pen)
Definition: associationline.cpp:436
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:1422
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:1518
Symbol::CrowFeet
@ CrowFeet
Definition: associationline.h:40
Symbol::SymbolEndPoints
QPair< QPointF, QPointF > SymbolEndPoints
Definition: associationline.h:30
Symbol::setBrush
void setBrush(const QBrush &brush)
Definition: associationline.cpp:1536
x
int x
Definition: cxx11-lambda-functions-and-expressions.h:4
AssociationLine::setPoint
bool setPoint(int index, const QPointF &point)
Definition: associationline.cpp:83
Uml::LayoutType::Enum
Enum
Definition: basictypes.h:130
AssociationLine::createCollaborationLine
void createCollaborationLine()
Definition: associationline.cpp:659
Symbol::shape
virtual QPainterPath shape() const
Definition: associationline.cpp:1469
UMLWidget
The base class for graphical UML objects.
Definition: umlwidget.h:35
AssociationLine::pen
QPen pen() const
Definition: associationline.cpp:428
Uml::AssociationType::Containment
@ Containment
Definition: basictypes.h:102
Uml::AssociationType::Activity
@ Activity
Definition: basictypes.h:108
Tracer::instance
static Tracer * instance()
Definition: debug_utils.cpp:22
AssociationLine::closestSegmentIndex
int closestSegmentIndex(const QPointF &point, qreal delta=Delta) const
Definition: associationline.cpp:224
AssociationLine::count
int count() const
Definition: associationline.cpp:148
AssociationLine::updatePenStyle
void updatePenStyle()
Definition: associationline.cpp:462
AssociationLine::createOrthogonalPath
static QPainterPath createOrthogonalPath(QVector< QPointF > points)
Definition: associationline.cpp:967
WidgetBase::umlScene
UMLScene * umlScene() const
Definition: widgetbase.cpp:169
toDoubleFromAnyLocale
qreal toDoubleFromAnyLocale(const QString &s)
Definition: basictypes.cpp:1335
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:118
AssociationLine::createSplinePoints
void createSplinePoints()
Definition: associationline.cpp:864
Uml::AssociationType::State
@ State
Definition: basictypes.h:107
AssociationLine::removePoint
void removePoint(int index)
Definition: associationline.cpp:134
AssociationLine::boundingRect
QRectF boundingRect() const
Definition: associationline.cpp:793
AssociationLine::isEndPointIndex
bool isEndPointIndex(int index) const
Definition: associationline.cpp:248
UMLDoc::dpiScale
qreal dpiScale() const
Definition: umldoc.cpp:2041
AssociationLine::endPoint
QPointF endPoint() const
Definition: associationline.cpp:109
Symbol::SymbolProperty::boundRect
QRectF boundRect
Definition: associationline.h:74
AssociationLine::paint
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
Definition: associationline.cpp:1011
AssociationLine::mouseMoveEvent
void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Definition: associationline.cpp:1159
AssociationLine::insertPoint
void insertPoint(int index, const QPointF &point)
Definition: associationline.cpp:123
Symbol::paint
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
Definition: associationline.cpp:1440
WidgetBase::rect
QRectF rect() const
Definition: widgetbase.cpp:835
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::path
QPainterPath path() const
Definition: associationline.cpp:757
Symbol::m_brush
QBrush m_brush
brush used to fill Symbol
Definition: associationline.h:69
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:824
Symbol::SymbolProperty::shape
QPainterPath shape
Definition: associationline.h:75
UMLScene::widgetAt
UMLWidget * widgetAt(const QPointF &p)
Definition: umlscene.cpp:1070
AssociationLine::calculateInitialEndPoints
void calculateInitialEndPoints()
Definition: associationline.cpp:479
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:1400
AssociationLine::alignSymbols
void alignSymbols()
Definition: associationline.cpp:695
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:3855
Uml::AssociationType::Aggregation
@ Aggregation
Definition: basictypes.h:94
AssociationLine::optimizeLinePoints
void optimizeLinePoints()
Definition: associationline.cpp:172
Symbol::m_pen
QPen m_pen
pen used to draw Symbol
Definition: associationline.h:68
UMLScene::snappedX
qreal snappedX(qreal x)
Definition: umlscene.cpp:3605
AssociationLine::c2dy
qreal c2dy
Definition: associationline.h:196
AssociationLine::enableAutoLayout
bool enableAutoLayout()
Definition: associationline.cpp:273
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:1325
AssociationLine::isEndSegmentIndex
bool isEndSegmentIndex(int index) const
Definition: associationline.cpp:259
Uml::LayoutType::Polyline
@ Polyline
Definition: basictypes.h:134
AssociationLine::isAutoLayouted
bool isAutoLayouted() const
Definition: associationline.cpp:268
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::c1dx
qreal c1dx
Definition: associationline.h:196
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
uWarning
#define uWarning()
Definition: debug_utils.h:110
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:410
Symbol::boundingRect
virtual QRectF boundingRect() const
Definition: associationline.cpp:1459
AssociationLine
Definition: associationline.h:100
Symbol::Count
@ Count
Definition: associationline.h:44
Symbol::symbolEndPoints
SymbolEndPoints symbolEndPoints() const
Definition: associationline.cpp:1502
Symbol::symbolTable
static SymbolProperty symbolTable[Symbol::Count]
a table which stores all symbol properties
Definition: associationline.h:80
basictypes.h
AssociationLine::reconstructSymbols
void reconstructSymbols()
Definition: associationline.cpp:520
Symbol::~Symbol
virtual ~Symbol()
Definition: associationline.cpp:1415
AssociationLine::cleanup
void cleanup()
Definition: associationline.cpp:156
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
Symbol::Symbol
Symbol(SymbolType symbolType, QGraphicsItem *parent=0)
Definition: associationline.cpp:1404
AssociationLine::removeSubsetSymbol
void removeSubsetSymbol()
Definition: associationline.cpp:650
Uml::AssociationType::Enum
Enum
Definition: basictypes.h:92
Uml::AssociationType::Generalization
@ Generalization
Definition: basictypes.h:93
AssociationLine::hoverLeaveEvent
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
Definition: associationline.cpp:1276
AssociationLine::c2dx
qreal c2dx
Definition: associationline.h:196
AssociationLine::setStartSymbol
void setStartSymbol(Symbol::SymbolType symbolType)
Definition: associationline.cpp:593
UMLApp::app
static UMLApp * app()
Definition: uml.cpp:275
AssociationLine::setLayout
void setLayout(Uml::LayoutType::Enum layout)
Definition: associationline.cpp:848
Uml::AssociationType::Coll_Mesg_Async
@ Coll_Mesg_Async
Definition: basictypes.h:98
AssociationLine::startPoint
QPointF startPoint() const
Definition: associationline.cpp:101
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:1485
Symbol::setSymbolType
void setSymbolType(SymbolType symbolType)
Definition: associationline.cpp:1430
AssociationLine::mousePressEvent
void mousePressEvent(QGraphicsSceneMouseEvent *event)
Definition: associationline.cpp:1135
AssociationLine::m_autoLayoutSpline
bool m_autoLayoutSpline
Definition: associationline.h:192
AssociationLine::closestPointIndex
int closestPointIndex(const QPointF &point, qreal delta=Delta) const
Definition: associationline.cpp:198
AssociationLine::toString
static QString toString(Uml::LayoutType::Enum layout)
Definition: associationline.cpp:816
AssociationLine::m_associationWidget
AssociationWidget * m_associationWidget
association widget which this line represents
Definition: associationline.h:181
AssociationLine::c1dy
qreal c1dy
Definition: associationline.h:196
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:617
DEBUG
#define DEBUG(src)
Definition: debug_utils.h:115
AssociationLine::mouseReleaseEvent
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Definition: associationline.cpp:1218
Uml::AssociationType::Coll_Mesg_Self
@ Coll_Mesg_Self
Definition: basictypes.h:100
WidgetBase::lineColor
QColor lineColor() const
Definition: widgetbase.cpp:363
uError
#define uError()
Definition: debug_utils.h:109
uml.h
Symbol::pen
QPen pen() const
Definition: associationline.cpp:1510
debug_utils.h
UMLScene::snappedY
qreal snappedY(qreal y)
Definition: umlscene.cpp:3623
AssociationLine::m_activePointIndex
int m_activePointIndex
index of active point which can be dragged to modify association line
Definition: associationline.h:183
UMLScene
Definition: umlscene.h:64
DBG_SRC
#define DBG_SRC
Definition: import_utils.cpp:38
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:287
AssociationLine::createSubsetSymbol
void createSubsetSymbol()
Definition: associationline.cpp:639
AssociationLine::dumpPoints
void dumpPoints()
Definition: associationline.cpp:313
Uml::AssociationType::Composition
@ Composition
Definition: basictypes.h:103
AssociationLine::addPoint
void addPoint(const QPointF &point)
Definition: associationline.cpp:114
Symbol::SymbolProperty::axisLine
QLineF axisLine
Definition: associationline.h:76
AssociationLine::saveToXMI1
void saveToXMI1(QXmlStreamWriter &writer)
Definition: associationline.cpp:378
Uml::LayoutType::Orthogonal
@ Orthogonal
Definition: basictypes.h:133
Uml::LayoutType::fromString
Enum fromString(const QString &item)
Definition: basictypes.cpp:491
b
bool b
Definition: cxx11-null-pointer-constant.h:6
Uml::AssociationType::Coll_Mesg_Sync
@ Coll_Mesg_Sync
Definition: basictypes.h:113
Symbol::brush
QBrush brush() const
Definition: associationline.cpp:1528
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:471
AssociationLine::layout
Uml::LayoutType::Enum layout() const
Definition: associationline.cpp:839
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:805
Symbol::Diamond
@ Diamond
Definition: associationline.h:41
UMLApp::document
UMLDoc * document() const
Definition: uml.cpp:1063
Uml::AssociationType::Realization
@ Realization
Definition: basictypes.h:104
AssociationLine::hoverMoveEvent
void hoverMoveEvent(QGraphicsSceneHoverEvent *event)
Definition: associationline.cpp:1254
umldoc.h
AssociationWidget::isSelf
bool isSelf() const
Definition: associationwidget.cpp:1390
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:1231
Symbol::SymbolType
SymbolType
Definition: associationline.h:36