umbrello  26.08.2
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"
10 #include "associationwidgetlist.h"
11 #include "associationwidgetrole.h"
12 #include "linkwidget.h"
13 #include "messagewidgetlist.h"
14 #include "umlwidgetlist.h"
15 #include "widgetbase.h"
16 
17 class ClassifierWidget;
18 class UMLScene;
19 class UMLAssociation;
20 class UMLAttribute;
22 class UMLOperation;
23 
46 class AssociationWidget : public WidgetBase, public LinkWidget
47 {
48  Q_OBJECT
49 public:
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);
63  virtual UMLClassifier *operationOwner();
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 
90  UMLAssociation* association() const;
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 
125  void setWidgetForRole(UMLWidget* widget, Uml::RoleType::Enum role);
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 
149  void saveIdealTextPositions();
150 
151  UMLWidget* onWidget(const QPointF &p);
152  bool onAssociation(const QPointF& point);
153  bool onAssocClassLine(const QPointF& point);
154 
155  void createAssocClassLine();
156  void createAssocClassLine(ClassifierWidget* classifierWidget,
157  int linePathSegmentIndex);
158 
159  void selectAssocClassLine(bool sel = true);
160  void removeAssocClassLine();
161  void computeAssocClassLine();
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 
175  void calculateEndingPoints();
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 
198 public Q_SLOTS: //:TODO: all virtual?
199  virtual void slotMenuSelection(QAction* action);
201  void slotAttributeChanged();
202 
203  void syncToModel();
204 
205 protected:
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 
212 private:
215  void setTextPositionRelatively(Uml::TextRole::Enum role, const QPointF &oldPosition);
216  void setFloatingText(Uml::TextRole::Enum role, const QString& text, FloatingTextWidget* &ft);
217 
218  AssociationWidget(UMLScene *scene);
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 
239  void createPointsException();
240  void updatePointsException();
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);
250  bool checkAutoLayoutSpline();
251 
252  bool linePathStartsAt(const UMLWidget* widget) const;
253  bool linePathEndsAt (const UMLWidget* widget) const;
254 
255  bool m_activated;
256 
265 
266  QPointF m_oldNamePoint;
271  QPointF m_oldRoleAPoint;
272  QPointF m_oldRoleBPoint;
273 
275  QGraphicsLineItem *m_pAssocClassLine;
276  QGraphicsRectItem *m_pAssocClassLineSel0;
277  QGraphicsRectItem *m_pAssocClassLineSel1;
278 
284  QPointF m_eventScenePos;
285 
286 };
287 
288 #endif
static AssociationWidget * create(UMLScene *scene)
Definition: associationwidget.cpp:99
FloatingTextWidget * changeabilityWidget(Uml::RoleType::Enum role) const
Definition: associationwidget.cpp:835
virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event)
Definition: associationwidget.cpp:3411
Uml::AssociationType::Enum m_associationType
is only used if m_pObject is not set
Definition: associationwidget.h:281
virtual void setSelected(bool _select)
Definition: associationwidget.cpp:3137
void setRoleName(const QString &strRole, Uml::RoleType::Enum role)
Definition: associationwidget.cpp:962
bool isSelf() const
Definition: associationwidget.cpp:1420
void setMultiplicity(const QString &text, Uml::RoleType::Enum role)
Definition: associationwidget.cpp:1069
FloatingTextWidget * nameWidget() const
Definition: associationwidget.cpp:817
UMLWidget * onWidget(const QPointF &p)
Definition: associationwidget.cpp:3174
virtual void setMessageText(FloatingTextWidget *ft)
Definition: associationwidget.cpp:363
UMLWidget * widgetForRole(Uml::RoleType::Enum role) const
Definition: associationwidget.cpp:1267
void setAssociationType(Uml::AssociationType::Enum type)
Definition: associationwidget.cpp:1443
void calculateEndingPoints()
Definition: associationwidget.cpp:1642
void mergeAssociationDataIntoUMLRepresentation()
Definition: associationwidget.cpp:1745
QGraphicsRectItem * m_pAssocClassLineSel0
selection decoration for the start point of the assoc. class line
Definition: associationwidget.h:276
virtual void lwSetFont(QFont font)
Definition: associationwidget.cpp:257
void updatePointsSelfAssociation()
Definition: associationwidget.cpp:1917
Information for a non-graphical Concept/Class.
Definition: umlclassifier.h:34
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Definition: associationwidget.cpp:2920
virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event)
Definition: associationwidget.cpp:3395
void createPointsException()
Definition: associationwidget.cpp:1944
A base class for classifier list items (e.g. attributes)
Definition: umlclassifierlistitem.h:24
Uml::Visibility::Enum visibility(Uml::RoleType::Enum role) const
Definition: associationwidget.cpp:1082
virtual void setOperation(UMLOperation *op)
Definition: associationwidget.cpp:299
void setYEntireAssoc(qreal y)
Definition: associationwidget.cpp:3260
virtual QPainterPath shape() const
Definition: associationwidget.cpp:3315
Enum
Definition: basictypes.h:45
Interface to FloatingTextWidget for AssociationWidget and MessageWidget.
Definition: linkwidget.h:31
Enum
Definition: basictypes.h:330
QPointF m_oldChangeBPoint
Position of role B changeability floatingtext saved by saveIdealTextPositions()
Definition: associationwidget.h:270
static bool findIntercept(const QRectF &rect, const QPointF &point, QPointF &result)
Definition: associationwidget.cpp:3098
QGraphicsLineItem * m_pAssocClassLine
used for connecting assoc. class
Definition: associationwidget.h:275
void setXEntireAssoc(qreal x)
Definition: associationwidget.cpp:3248
virtual void setOperationText(const QString &op)
Definition: associationwidget.cpp:452
QPointF m_oldRoleBPoint
Position of role B name floatingtext saved by saveIdealTextPositions()
Definition: associationwidget.h:272
void moveMidPointsBy(qreal x, qreal y)
Definition: associationwidget.cpp:3272
Common base class for UMLWidget and AssociationWidget.
Definition: widgetbase.h:100
Definition: idchangelog.h:21
virtual UMLClassifier * lwClassifier()
Definition: associationwidget.cpp:439
FloatingTextWidget * roleWidget(Uml::RoleType::Enum role) const
Definition: associationwidget.cpp:827
void computeAssocClassLine()
Definition: associationwidget.cpp:2494
QString roleName(Uml::RoleType::Enum role) const
Definition: associationwidget.cpp:949
Sets up attribute information.
Definition: umlattribute.h:22
void selectAssocClassLine(bool sel=true)
Definition: associationwidget.cpp:2532
virtual void setText(FloatingTextWidget *ft, const QString &newText)
Definition: associationwidget.cpp:382
virtual QString customOpText()
Definition: associationwidget.cpp:314
QPointF m_oldRoleAPoint
Position of role A name floatingtext saved by saveIdealTextPositions()
Definition: associationwidget.h:271
QGraphicsRectItem * m_pAssocClassLineSel1
selection decoration for the end point of the assoc. class line
Definition: associationwidget.h:277
bool checkRemovePoint(const QPointF &scenePos)
Definition: associationwidget.cpp:2878
virtual void calculateNameTextSegment()
Definition: associationwidget.cpp:472
QPointF m_oldMultiBPoint
Position of role B multiplicity floatingtext saved by saveIdealTextPositions()
Definition: associationwidget.h:268
bool onAssociation(const QPointF &point)
Definition: associationwidget.cpp:3224
Uml::TextRole::Enum calculateNameType(Uml::TextRole::Enum defaultRoleType)
Definition: associationwidget.cpp:1242
int x
Definition: cxx11-lambda-functions-and-expressions.h:4
virtual void constrainTextPos(qreal &textX, qreal &textY, qreal textWidth, qreal textHeight, Uml::TextRole::Enum tr)
Definition: associationwidget.cpp:2227
virtual void saveToXMI(QXmlStreamWriter &writer)
Definition: associationwidget.cpp:3419
QPointF calculateTextPosition(Uml::TextRole::Enum role)
Definition: associationwidget.cpp:2117
void removeAssocClassLine()
Definition: associationwidget.cpp:2432
void syncToModel()
Definition: associationwidget.cpp:1711
void setTextPositionRelatively(Uml::TextRole::Enum role, const QPointF &oldPosition)
Definition: associationwidget.cpp:2397
The base class for UML objects.
Definition: umlobject.h:69
This class represents an association inside a diagram. Bugs and comments to umbrello-devel@kde.org or https://bugs.kde.org.
Definition: associationwidget.h:46
virtual UMLOperation * operation()
Definition: associationwidget.cpp:290
FloatingTextWidget * textWidgetByRole(Uml::TextRole::Enum tr) const
Definition: associationwidget.cpp:845
Sets up association information.
Definition: umlassociation.h:28
QPointF m_eventScenePos
holds scene pos of contextMenuEvent()
Definition: associationwidget.h:284
void slotClassifierListItemRemoved(UMLClassifierListItem *obj)
Definition: associationwidget.cpp:3327
Uml::AssociationType::Enum associationType() const
Definition: associationwidget.cpp:1430
virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
Definition: associationwidget.cpp:3403
bool operator==(const AssociationWidget &other) const
Definition: associationwidget.cpp:593
bool isAutoLayouted()
Definition: associationwidget.cpp:1338
QString roleDocumentation(Uml::RoleType::Enum role) const
Definition: associationwidget.cpp:1002
QString name() const
Definition: associationwidget.cpp:874
bool containsAsEndpoint(UMLWidget *widget)
Definition: associationwidget.cpp:1401
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event)
Definition: associationwidget.cpp:2543
bool loadFromXMI(QDomElement &qElement, const UMLWidgetList &widgets, const MessageWidgetList *messages)
Definition: associationwidget.cpp:3476
virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
Definition: associationwidget.cpp:3367
Uml::ID::Type widgetLocalIDForRole(Uml::RoleType::Enum role) const
Definition: associationwidget.cpp:1499
AssociationWidgetRole m_role[2]
Definition: associationwidget.h:282
Definition: associationline.h:100
int m_nLinePathSegmentIndex
anchor for m_pAssocClassLine
Definition: associationwidget.h:274
void setName(const QString &strRole)
Definition: associationwidget.cpp:885
Enum
Definition: basictypes.h:236
Uml::ID::Type widgetIDForRole(Uml::RoleType::Enum role) const
Definition: associationwidget.cpp:1479
FloatingTextWidget * multiplicityWidget(Uml::RoleType::Enum role) const
Definition: associationwidget.cpp:807
void setActivated(bool active)
Definition: associationwidget.cpp:1703
void setTextPosition(Uml::TextRole::Enum role)
Definition: associationwidget.cpp:2373
bool isActivated() const
Definition: associationwidget.cpp:1695
void moveEntireAssoc(qreal x, qreal y)
Definition: associationwidget.cpp:3288
virtual QRectF boundingRect() const
Definition: associationwidget.cpp:3307
QPointF m_oldNamePoint
Position of name floatingtext saved by saveIdealTextPositions()
Definition: associationwidget.h:266
QString multiplicity(Uml::RoleType::Enum role) const
Definition: associationwidget.cpp:1058
Uml::Changeability::Enum changeability(Uml::RoleType::Enum role) const
Definition: associationwidget.cpp:1125
virtual void setCustomOpText(const QString &opText)
Definition: associationwidget.cpp:323
QPointF m_oldChangeAPoint
Position of role A changeability floatingtext saved by saveIdealTextPositions()
Definition: associationwidget.h:269
bool linePathEndsAt(const UMLWidget *widget) const
Definition: associationwidget.cpp:1223
Enum
Definition: basictypes.h:92
virtual void setTextColor(const QColor &color)
Definition: associationwidget.cpp:2783
bool isPointRemovable()
Return state if the association line point in the vicinity of the last context menu event position is...
Definition: associationwidget.cpp:1330
virtual void setUMLObject(UMLObject *obj)
Definition: associationwidget.cpp:212
QPointF m_oldMultiAPoint
Position of role A multiplicity floatingtext saved by saveIdealTextPositions()
Definition: associationwidget.h:267
QList< QPointer< UMLWidget > > UMLWidgetList
Definition: umlwidgetlist.h:13
void createPointsSelfAssociation()
Definition: associationwidget.cpp:1890
virtual QString lwOperationText()
Definition: associationwidget.cpp:428
void setRoleDocumentation(const QString &doc, Uml::RoleType::Enum role)
Definition: associationwidget.cpp:991
void moveEvent(QGraphicsSceneMouseEvent *me)
Definition: associationwidget.cpp:1562
QString toString() const
Definition: associationwidget.cpp:1517
void setChangeability(Uml::Changeability::Enum value, Uml::RoleType::Enum role)
Definition: associationwidget.cpp:1136
virtual UMLClassifier * operationOwner()
Definition: associationwidget.cpp:271
QList< QPointer< MessageWidget > > MessageWidgetList
Definition: messagewidgetlist.h:13
void setUMLAssociation(UMLAssociation *assoc)
Definition: associationwidget.cpp:1360
std::string Type
Definition: basictypes.h:371
Enum
Definition: basictypes.h:176
bool m_activated
flag which is true if the activate method has been called for this class instance ...
Definition: associationwidget.h:255
void updatePointsException()
Definition: associationwidget.cpp:1968
bool isPointAddable()
Return state if the association line point in the vicinity of the last context menu event position is...
Definition: associationwidget.cpp:1315
const AssociationLine & associationLine() const
Definition: associationwidget.cpp:650
static void updateAssociations(UMLWidget *pWidget, AssociationWidgetList list)
Definition: associationwidget.cpp:3080
Enum
Definition: basictypes.h:202
bool checkAddPoint(const QPointF &scenePos)
Definition: associationwidget.cpp:2829
virtual void slotMenuSelection(QAction *action)
Definition: associationwidget.cpp:2581
virtual void setLineColor(const QColor &color)
Definition: associationwidget.cpp:2807
bool checkAutoLayoutSpline()
Definition: associationwidget.cpp:2911
static bool setStartAndEndPoint(AssociationWidget *assocwidget, UMLWidget *pWidget)
Definition: associationwidget.cpp:2975
void clipSize()
Definition: associationwidget.cpp:3352
AssociationLine m_associationLine
the definition points for the association line
Definition: associationwidget.h:279
void setFloatingText(Uml::TextRole::Enum role, const QString &text, FloatingTextWidget *&ft)
Definition: associationwidget.cpp:1023
Definition: umloperation.h:19
void setStereotype(const QString &stereo)
Definition: associationwidget.cpp:921
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
Definition: associationwidget.cpp:1550
bool isLayoutChangeable()
Definition: associationwidget.cpp:1352
Displays a line of text or an operation.
Definition: floatingtextwidget.h:31
virtual bool activate(IDChangeLog *changeLog=nullptr)
Definition: associationwidget.cpp:668
ClassifierWidget * m_associationClass
used if we have an assoc. class
Definition: associationwidget.h:280
QRectF rect() const
Definition: widgetbase.cpp:851
static Uml::Region::Enum findPointRegion(const QRectF &rect, const QPointF &pos)
Definition: associationwidget.cpp:2049
AssociationWidget(UMLScene *scene)
Definition: associationwidget.cpp:69
virtual ~AssociationWidget()
Definition: associationwidget.cpp:200
QFont font() const
Definition: associationwidget.cpp:2755
static QPointF swapXY(const QPointF &p)
Definition: associationwidget.cpp:2106
virtual bool showPropertiesDialog()
Definition: associationwidget.cpp:411
FloatingTextWidget * m_nameWidget
displays the name of this association
Definition: associationwidget.h:283
bool operator!=(AssociationWidget &other) const
Definition: associationwidget.cpp:642
UMLAssociation * association() const
Definition: associationwidget.cpp:512
bool onAssocClassLine(const QPointF &point)
Definition: associationwidget.cpp:3196
Definition: associationwidgetrole.h:27
void setChangeWidget(const QString &strChangeWidget, Uml::RoleType::Enum role)
Definition: associationwidget.cpp:1152
void cleanup()
Definition: associationwidget.cpp:1275
QList< QPointer< AssociationWidget > > AssociationWidgetList
Definition: associationwidgetlist.h:15
void setWidgetForRole(UMLWidget *widget, Uml::RoleType::Enum role)
Definition: associationwidget.cpp:792
void createAssocClassLine()
Definition: associationwidget.cpp:2449
bool isCollaboration() const
Definition: associationwidget.cpp:1409
QString newText(UMLObject::ObjectType type)
Definition: model_utils.cpp:649
int m_unNameLineSegment
Definition: associationwidget.h:264
void widgetMoved(UMLWidget *widget, qreal x, qreal y)
Definition: associationwidget.cpp:1812
static QLineF::IntersectType intersect(const QRectF &rect, const QLineF &line, QPointF *intersectionPoint)
Definition: associationwidget.cpp:2958
virtual void resetTextPositions()
Definition: associationwidget.cpp:332
Common implementation for class widget and interface widget.
Definition: classifierwidget.h:27
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Definition: associationwidget.cpp:2573
void slotAttributeChanged()
Definition: associationwidget.cpp:3341
void saveIdealTextPositions()
Definition: associationwidget.cpp:1798
virtual void setLineWidth(uint width)
Definition: associationwidget.cpp:2818
bool linePathStartsAt(const UMLWidget *widget) const
Definition: associationwidget.cpp:1190
Definition: umlscene.h:65
UMLAttribute * attribute() const
Definition: associationwidget.cpp:525
void setVisibility(Uml::Visibility::Enum value, Uml::RoleType::Enum role)
Definition: associationwidget.cpp:1096
static QPointF midPoint(const QPointF &p0, const QPointF &p1)
Definition: associationwidget.cpp:2203
The base class for graphical UML objects.
Definition: umlwidget.h:35