umbrello 2.39.0
Umbrello UML Modeller is a Unified Modelling Language (UML) diagram program based on KDE Technology
associationwidget.h
Go to the documentation of this file.
1/*
2 SPDX-License-Identifier: GPL-2.0-or-later
3 SPDX-FileCopyrightText: 2002-2022 Umbrello UML Modeller Authors <umbrello-devel@kde.org>
4*/
5
6#ifndef ASSOCIATIONWIDGET_H
7#define ASSOCIATIONWIDGET_H
8
9#include "associationline.h"
12#include "linkwidget.h"
13#include "messagewidgetlist.h"
14#include "umlwidgetlist.h"
15#include "widgetbase.h"
16
18class UMLScene;
19class UMLAssociation;
20class UMLAttribute;
22class UMLOperation;
23
47{
48 Q_OBJECT
49public:
50 static AssociationWidget* create(UMLScene *scene);
52 (UMLScene *scene, UMLWidget* WidgetA,
53 Uml::AssociationType::Enum assocType, UMLWidget* WidgetB,
54 UMLObject *umlobject = nullptr);
55
56 virtual ~AssociationWidget();
57
58 virtual void setUMLObject(UMLObject *obj);
59
60 //---------- LinkWidget Interface methods implementation from here on.
61
62 virtual void lwSetFont(QFont font);
64
65 virtual UMLOperation *operation();
66 virtual void setOperation(UMLOperation *op);
67
68 virtual QString customOpText();
69 virtual void setCustomOpText(const QString &opText);
70
71 virtual void resetTextPositions();
72
73 virtual void setMessageText(FloatingTextWidget *ft);
74 virtual void setText(FloatingTextWidget *ft, const QString &newText);
75
76 virtual bool showPropertiesDialog();
77
78 virtual QString lwOperationText();
79 virtual UMLClassifier *lwClassifier();
80 virtual void setOperationText(const QString &op);
81
82 virtual void constrainTextPos(qreal &textX, qreal &textY,
83 qreal textWidth, qreal textHeight,
85
86 virtual void calculateNameTextSegment();
87
88 //---------- End LinkWidget Interface methods implementation.
89
91 UMLAttribute* attribute() const;
92
93// AssociationWidget& operator=(const AssociationWidget& other);
94 bool operator==(const AssociationWidget& other) const;
95 bool operator!=(AssociationWidget& other) const;
96
98
100 QString name() const;
101 void setName(const QString &strRole);
102 void setStereotype(const QString &stereo);
103
105 QString roleName(Uml::RoleType::Enum role) const;
106 void setRoleName(const QString &strRole, Uml::RoleType::Enum role);
107
108 QString roleDocumentation(Uml::RoleType::Enum role) const;
109 void setRoleDocumentation(const QString& doc, Uml::RoleType::Enum role);
110
112 QString multiplicity(Uml::RoleType::Enum role) const;
113 void setMultiplicity(const QString& text, Uml::RoleType::Enum role);
114
117
121
126
127 bool containsAsEndpoint(UMLWidget* widget);
128
131
132 bool isCollaboration() const;
133 bool isSelf() const;
134
135 QString toString() const;
136
137 bool isActivated() const;
138 void setActivated(bool active);
139
140 const AssociationLine& associationLine() const;
142
143 virtual bool activate(IDChangeLog *changeLog = nullptr);
144 virtual QRectF boundingRect() const;
145 virtual QPainterPath shape() const;
146
147 void widgetMoved(UMLWidget* widget, qreal x, qreal y);
148
150
151 UMLWidget* onWidget(const QPointF &p);
152 bool onAssociation(const QPointF& point);
153 bool onAssocClassLine(const QPointF& point);
154
156 void createAssocClassLine(ClassifierWidget* classifierWidget,
157 int linePathSegmentIndex);
158
159 void selectAssocClassLine(bool sel = true);
162
163 void setXEntireAssoc(qreal x);
164 void setYEntireAssoc(qreal y);
165
166 void moveMidPointsBy(qreal x, qreal y);
167 void moveEntireAssoc(qreal x, qreal y);
168
169 QFont font() const;
170
171 virtual void setTextColor(const QColor &color);
172 virtual void setLineColor(const QColor &color);
173 virtual void setLineWidth(uint width);
174
176
177 void clipSize();
178
179 bool loadFromXMI(QDomElement& qElement, const UMLWidgetList& widgets,
180 const MessageWidgetList* messages);
181 virtual bool loadFromXMI(QDomElement& qElement);
182 virtual void saveToXMI(QXmlStreamWriter& writer);
183
184 void cleanup();
185
186 bool isPointAddable();
187 bool isPointRemovable();
188 bool isAutoLayouted();
189 bool isLayoutChangeable();
190
191 virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
192 virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
193 virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
194 virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
195
196 virtual void setSelected(bool _select);
197
198public Q_SLOTS: //:TODO: all virtual?
199 virtual void slotMenuSelection(QAction* action);
202
203 void syncToModel();
204
205protected:
206 virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
207
208 virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
209 virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
210 virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
211
212private:
215 void setTextPositionRelatively(Uml::TextRole::Enum role, const QPointF &oldPosition);
216 void setFloatingText(Uml::TextRole::Enum role, const QString& text, FloatingTextWidget* &ft);
217
219
220 void setUMLAssociation(UMLAssociation * assoc);
221
223
224 static Uml::Region::Enum findPointRegion(const QRectF& rect, const QPointF& pos);
225 static bool findIntercept(const QRectF& rect, const QPointF& point, QPointF& result);
226 static QLineF::IntersectType intersect(const QRectF &rect, const QLineF &line,
227 QPointF* intersectionPoint);
228
229 void moveEvent(QGraphicsSceneMouseEvent *me);
230
232
233 static QPointF swapXY(const QPointF &p);
234
235 static QPointF midPoint(const QPointF& p0, const QPointF& p1);
236
241
242 static bool setStartAndEndPoint(AssociationWidget *assocwidget, UMLWidget *pWidget);
243
244 static void updateAssociations(UMLWidget *pWidget, AssociationWidgetList list);
245
246 void setChangeWidget(const QString &strChangeWidget, Uml::RoleType::Enum role);
247
248 bool checkAddPoint(const QPointF &scenePos);
249 bool checkRemovePoint(const QPointF &scenePos);
251
252 bool linePathStartsAt(const UMLWidget* widget) const;
253 bool linePathEndsAt (const UMLWidget* widget) const;
254
256
265
273
275 QGraphicsLineItem *m_pAssocClassLine;
276 QGraphicsRectItem *m_pAssocClassLineSel0;
277 QGraphicsRectItem *m_pAssocClassLineSel1;
278
285
286};
287
288#endif
QList< QPointer< AssociationWidget > > AssociationWidgetList
Definition associationwidgetlist.h:17
Definition associationline.h:101
This class represents an association inside a diagram. Bugs and comments to umbrello-devel@kde....
Definition associationwidget.h:47
Uml::ID::Type widgetLocalIDForRole(Uml::RoleType::Enum role) const
Definition associationwidget.cpp:1499
QPointF m_oldChangeAPoint
Position of role A changeability floatingtext saved by saveIdealTextPositions()
Definition associationwidget.h:269
void setXEntireAssoc(qreal x)
Definition associationwidget.cpp:3265
virtual QRectF boundingRect() const
Definition associationwidget.cpp:3324
QPointF calculateTextPosition(Uml::TextRole::Enum role)
Definition associationwidget.cpp:2134
void syncToModel()
Definition associationwidget.cpp:1728
virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
Definition associationwidget.cpp:3420
void setWidgetForRole(UMLWidget *widget, Uml::RoleType::Enum role)
Definition associationwidget.cpp:792
void cleanup()
Definition associationwidget.cpp:1275
void createPointsSelfAssociation()
Definition associationwidget.cpp:1907
virtual void slotMenuSelection(QAction *action)
Definition associationwidget.cpp:2598
void setTextPosition(Uml::TextRole::Enum role)
Definition associationwidget.cpp:2390
void setActivated(bool active)
Definition associationwidget.cpp:1720
virtual void setOperationText(const QString &op)
Definition associationwidget.cpp:452
void slotAttributeChanged()
Definition associationwidget.cpp:3358
void moveEntireAssoc(qreal x, qreal y)
Definition associationwidget.cpp:3305
virtual void setLineColor(const QColor &color)
Definition associationwidget.cpp:2824
void moveMidPointsBy(qreal x, qreal y)
Definition associationwidget.cpp:3289
virtual void setOperation(UMLOperation *op)
Definition associationwidget.cpp:299
void setYEntireAssoc(qreal y)
Definition associationwidget.cpp:3277
QPointF m_eventScenePos
holds scene pos of contextMenuEvent()
Definition associationwidget.h:284
bool isCollaboration() const
Definition associationwidget.cpp:1409
static bool setStartAndEndPoint(AssociationWidget *assocwidget, UMLWidget *pWidget)
Definition associationwidget.cpp:2992
void mergeAssociationDataIntoUMLRepresentation()
Definition associationwidget.cpp:1762
FloatingTextWidget * m_nameWidget
displays the name of this association
Definition associationwidget.h:283
static AssociationWidget * create(UMLScene *scene)
Definition associationwidget.cpp:99
AssociationWidgetRole m_role[2]
Definition associationwidget.h:282
bool isAutoLayouted()
Definition associationwidget.cpp:1338
void setMultiplicity(const QString &text, Uml::RoleType::Enum role)
Definition associationwidget.cpp:1069
bool checkAddPoint(const QPointF &scenePos)
Definition associationwidget.cpp:2846
QString name() const
Definition associationwidget.cpp:874
virtual UMLOperation * operation()
Definition associationwidget.cpp:290
void computeAssocClassLine()
Definition associationwidget.cpp:2511
QPointF m_oldRoleAPoint
Position of role A name floatingtext saved by saveIdealTextPositions()
Definition associationwidget.h:271
bool linePathStartsAt(const UMLWidget *widget) const
Definition associationwidget.cpp:1190
bool isPointAddable()
Return state if the association line point in the vicinity of the last context menu event position is...
Definition associationwidget.cpp:1315
virtual QString customOpText()
Definition associationwidget.cpp:314
virtual bool showPropertiesDialog()
Definition associationwidget.cpp:411
UMLWidget * onWidget(const QPointF &p)
Definition associationwidget.cpp:3191
FloatingTextWidget * changeabilityWidget(Uml::RoleType::Enum role) const
Definition associationwidget.cpp:835
void createPointsException()
Definition associationwidget.cpp:1961
void createAssocClassLine()
Definition associationwidget.cpp:2466
virtual void setSelected(bool _select)
Definition associationwidget.cpp:3154
virtual void constrainTextPos(qreal &textX, qreal &textY, qreal textWidth, qreal textHeight, Uml::TextRole::Enum tr)
Definition associationwidget.cpp:2244
void updatePointsSelfAssociation()
Definition associationwidget.cpp:1934
UMLAssociation * association() const
Definition associationwidget.cpp:512
QPointF m_oldMultiBPoint
Position of role B multiplicity floatingtext saved by saveIdealTextPositions()
Definition associationwidget.h:268
UMLAttribute * attribute() const
Definition associationwidget.cpp:525
virtual void resetTextPositions()
Definition associationwidget.cpp:332
void calculateEndingPoints()
Definition associationwidget.cpp:1642
QGraphicsLineItem * m_pAssocClassLine
used for connecting assoc. class
Definition associationwidget.h:275
QFont font() const
Definition associationwidget.cpp:2772
FloatingTextWidget * nameWidget() const
Definition associationwidget.cpp:817
QString roleName(Uml::RoleType::Enum role) const
Definition associationwidget.cpp:949
bool isPointRemovable()
Return state if the association line point in the vicinity of the last context menu event position is...
Definition associationwidget.cpp:1330
void setUMLAssociation(UMLAssociation *assoc)
Definition associationwidget.cpp:1360
void setAssociationType(Uml::AssociationType::Enum type)
Definition associationwidget.cpp:1443
QGraphicsRectItem * m_pAssocClassLineSel0
selection decoration for the start point of the assoc. class line
Definition associationwidget.h:276
void clipSize()
Definition associationwidget.cpp:3369
bool m_activated
flag which is true if the activate method has been called for this class instance
Definition associationwidget.h:255
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
Definition associationwidget.cpp:1550
bool linePathEndsAt(const UMLWidget *widget) const
Definition associationwidget.cpp:1223
Uml::AssociationType::Enum m_associationType
is only used if m_pObject is not set
Definition associationwidget.h:281
static Uml::Region::Enum findPointRegion(const QRectF &rect, const QPointF &pos)
Definition associationwidget.cpp:2066
virtual void setMessageText(FloatingTextWidget *ft)
Definition associationwidget.cpp:363
static QPointF swapXY(const QPointF &p)
Definition associationwidget.cpp:2123
QString roleDocumentation(Uml::RoleType::Enum role) const
Definition associationwidget.cpp:1002
static QLineF::IntersectType intersect(const QRectF &rect, const QLineF &line, QPointF *intersectionPoint)
Definition associationwidget.cpp:2975
UMLWidget * widgetForRole(Uml::RoleType::Enum role) const
Definition associationwidget.cpp:1267
const AssociationLine & associationLine() const
Definition associationwidget.cpp:650
void setRoleName(const QString &strRole, Uml::RoleType::Enum role)
Definition associationwidget.cpp:962
bool containsAsEndpoint(UMLWidget *widget)
Definition associationwidget.cpp:1401
void setTextPositionRelatively(Uml::TextRole::Enum role, const QPointF &oldPosition)
Definition associationwidget.cpp:2414
bool operator!=(AssociationWidget &other) const
Definition associationwidget.cpp:642
void setRoleDocumentation(const QString &doc, Uml::RoleType::Enum role)
Definition associationwidget.cpp:991
bool checkAutoLayoutSpline()
Definition associationwidget.cpp:2928
bool onAssociation(const QPointF &point)
Definition associationwidget.cpp:3241
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event)
Definition associationwidget.cpp:2560
virtual UMLClassifier * operationOwner()
Definition associationwidget.cpp:271
virtual void setText(FloatingTextWidget *ft, const QString &newText)
Definition associationwidget.cpp:382
QString toString() const
Definition associationwidget.cpp:1517
static QPointF midPoint(const QPointF &p0, const QPointF &p1)
Definition associationwidget.cpp:2220
virtual void lwSetFont(QFont font)
Definition associationwidget.cpp:257
FloatingTextWidget * multiplicityWidget(Uml::RoleType::Enum role) const
Definition associationwidget.cpp:807
bool loadFromXMI(QDomElement &qElement, const UMLWidgetList &widgets, const MessageWidgetList *messages)
Definition associationwidget.cpp:3493
bool onAssocClassLine(const QPointF &point)
Definition associationwidget.cpp:3213
void removeAssocClassLine()
Definition associationwidget.cpp:2449
Uml::AssociationType::Enum associationType() const
Definition associationwidget.cpp:1430
virtual UMLClassifier * lwClassifier()
Definition associationwidget.cpp:439
void saveIdealTextPositions()
Definition associationwidget.cpp:1815
virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event)
Definition associationwidget.cpp:3412
void selectAssocClassLine(bool sel=true)
Definition associationwidget.cpp:2549
void setStereotype(const QString &stereo)
Definition associationwidget.cpp:921
bool operator==(const AssociationWidget &other) const
Definition associationwidget.cpp:593
virtual void setLineWidth(uint width)
Definition associationwidget.cpp:2835
QPointF m_oldChangeBPoint
Position of role B changeability floatingtext saved by saveIdealTextPositions()
Definition associationwidget.h:270
AssociationWidget(UMLScene *scene)
Definition associationwidget.cpp:69
void setVisibility(Uml::Visibility::Enum value, Uml::RoleType::Enum role)
Definition associationwidget.cpp:1096
bool isActivated() const
Definition associationwidget.cpp:1712
static void updateAssociations(UMLWidget *pWidget, AssociationWidgetList list)
Definition associationwidget.cpp:3097
void slotClassifierListItemRemoved(UMLClassifierListItem *obj)
Definition associationwidget.cpp:3344
virtual void setUMLObject(UMLObject *obj)
Definition associationwidget.cpp:212
QPointF m_oldNamePoint
Position of name floatingtext saved by saveIdealTextPositions()
Definition associationwidget.h:266
AssociationLine m_associationLine
the definition points for the association line
Definition associationwidget.h:279
FloatingTextWidget * roleWidget(Uml::RoleType::Enum role) const
Definition associationwidget.cpp:827
Uml::Changeability::Enum changeability(Uml::RoleType::Enum role) const
Definition associationwidget.cpp:1125
virtual void saveToXMI(QXmlStreamWriter &writer)
Definition associationwidget.cpp:3436
void setName(const QString &strRole)
Definition associationwidget.cpp:885
int m_unNameLineSegment
Definition associationwidget.h:264
bool isLayoutChangeable()
Definition associationwidget.cpp:1352
ClassifierWidget * m_associationClass
used if we have an assoc. class
Definition associationwidget.h:280
virtual QPainterPath shape() const
Definition associationwidget.cpp:3332
void setChangeWidget(const QString &strChangeWidget, Uml::RoleType::Enum role)
Definition associationwidget.cpp:1152
virtual void calculateNameTextSegment()
Definition associationwidget.cpp:472
static bool findIntercept(const QRectF &rect, const QPointF &point, QPointF &result)
Definition associationwidget.cpp:3115
void setFloatingText(Uml::TextRole::Enum role, const QString &text, FloatingTextWidget *&ft)
Definition associationwidget.cpp:1023
virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event)
Definition associationwidget.cpp:3428
void moveEvent(QGraphicsSceneMouseEvent *me)
Definition associationwidget.cpp:1562
void widgetMoved(UMLWidget *widget, qreal x, qreal y)
Definition associationwidget.cpp:1829
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Definition associationwidget.cpp:2590
bool isSelf() const
Definition associationwidget.cpp:1420
virtual bool activate(IDChangeLog *changeLog=nullptr)
Definition associationwidget.cpp:668
Uml::ID::Type widgetIDForRole(Uml::RoleType::Enum role) const
Definition associationwidget.cpp:1479
int m_nLinePathSegmentIndex
anchor for m_pAssocClassLine
Definition associationwidget.h:274
QGraphicsRectItem * m_pAssocClassLineSel1
selection decoration for the end point of the assoc. class line
Definition associationwidget.h:277
FloatingTextWidget * textWidgetByRole(Uml::TextRole::Enum tr) const
Definition associationwidget.cpp:845
QPointF m_oldRoleBPoint
Position of role B name floatingtext saved by saveIdealTextPositions()
Definition associationwidget.h:272
virtual QString lwOperationText()
Definition associationwidget.cpp:428
bool checkRemovePoint(const QPointF &scenePos)
Definition associationwidget.cpp:2895
void setChangeability(Uml::Changeability::Enum value, Uml::RoleType::Enum role)
Definition associationwidget.cpp:1136
QPointF m_oldMultiAPoint
Position of role A multiplicity floatingtext saved by saveIdealTextPositions()
Definition associationwidget.h:267
QString multiplicity(Uml::RoleType::Enum role) const
Definition associationwidget.cpp:1058
Uml::TextRole::Enum calculateNameType(Uml::TextRole::Enum defaultRoleType)
Definition associationwidget.cpp:1242
virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
Definition associationwidget.cpp:3384
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Definition associationwidget.cpp:2937
virtual ~AssociationWidget()
Definition associationwidget.cpp:200
virtual void setTextColor(const QColor &color)
Definition associationwidget.cpp:2800
void updatePointsException()
Definition associationwidget.cpp:1985
virtual void setCustomOpText(const QString &opText)
Definition associationwidget.cpp:323
Definition associationwidgetrole.h:27
Common implementation for class widget and interface widget.
Definition classifierwidget.h:28
Displays a line of text or an operation.
Definition floatingtextwidget.h:32
Definition idchangelog.h:22
Sets up association information.
Definition association.h:29
Sets up attribute information.
Definition attribute.h:23
Information for a non-graphical Concept/Class.
Definition classifier.h:35
A base class for classifier list items (e.g. attributes)
Definition classifierlistitem.h:25
The base class for UML objects.
Definition umlobject.h:70
Definition operation.h:20
Definition umlscene.h:65
The base class for graphical UML objects.
Definition umlwidget.h:36
Common base class for UMLWidget and AssociationWidget.
Definition widgetbase.h:101
QRectF rect() const
Definition widgetbase.cpp:838
int x
Definition cxx11-lambda-functions-and-expressions.h:4
QList< QPointer< MessageWidget > > MessageWidgetList
Definition messagewidgetlist.h:15
Enum
Definition basictypes.h:92
Enum
Definition basictypes.h:202
std::string Type
Definition basictypes.h:371
Enum
Definition basictypes.h:330
Enum
Definition basictypes.h:236
Enum
Definition basictypes.h:176
Enum
Definition basictypes.h:45
Definition visibility.py:1
QList< QPointer< UMLWidget > > UMLWidgetList
Definition umlwidgetlist.h:15