umbrello 25.04.1
Umbrello UML Modeller is a Unified Modelling Language (UML) diagram program based on KDE Technology
umlwidget.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 UMLWIDGET_H
7#define UMLWIDGET_H
8
10#include "basictypes.h"
11#include "optionstate.h"
12#include "umlobject.h"
13#include "umlwidgetlist.h"
14#include "widgetbase.h"
15#include "diagramproxywidget.h"
16
17#include <QCursor>
18#include <QFont>
19
20class IDChangeLog;
21class UMLDoc;
22class UMLObject;
23class UMLScene;
24
25class QPainter;
26class QFontMetrics;
27
36{
37 Q_OBJECT
38public:
39
40 friend class ToolBarStateArrow; // for calling the mouse*Event handlers
41
42 static const QSizeF DefaultMinimumSize;
43 static const QSizeF DefaultMaximumSize;
44 static const int defaultMargin;
45 static const int selectionMarkerSize;
46 static const int resizeMarkerLineCount;
47
48 explicit UMLWidget(UMLScene *scene, WidgetType type = wt_UMLWidget, UMLObject *o = nullptr);
50 virtual ~UMLWidget();
51
52 // Copy constructor - not implemented.
53 // UMLWidget(const UMLWidget& other);
54
55 UMLWidget& operator=(const UMLWidget& other);
56
57 bool operator==(const UMLWidget& other) const;
58
59 virtual QSizeF minimumSize() const;
60 void setMinimumSize(const QSizeF &size);
61
62 virtual QSizeF maximumSize();
63 void setMaximumSize(const QSizeF &size);
64
65 virtual void setUseFillColor(bool fc);
66 void setUseFillColorCmd(bool fc);
67
68 virtual void setTextColor(const QColor &color);
69 void setTextColorCmd(const QColor &color);
70
71 virtual void setLineColor(const QColor &color);
72 virtual void setLineColorCmd(const QColor &color);
73
74 virtual void setLineWidth(uint width);
75 void setLineWidthCmd(uint width);
76
77 virtual void setFillColor(const QColor &color);
78 void setFillColorCmd(const QColor &color);
79
80 void setSelectedFlag(bool _select);
81 virtual void setSelected(bool _select);
82
83 void setScene(UMLScene *scene);
84
85 virtual bool activate(IDChangeLog *changeLog = nullptr);
86
87 void setPenFromSettings(QPainter &p);
88 void setPenFromSettings(QPainter *p);
89
90 virtual void setFont(const QFont &font);
91 void setFontCmd(const QFont &font);
92
99 bool getStartMove() const {
100 return m_startMove;
101 }
102
103 virtual qreal getX() const;
104 virtual qreal getY() const;
105 virtual QPointF getPos() const;
106 virtual void setX(qreal x);
107 virtual void setY(qreal y);
108
112 qreal height() const {
113 return rect().height();
114 }
115
119 qreal width() const {
120 return rect().width();
121 }
122
123 void setSize(qreal width, qreal height);
124 void setSize(const QSizeF& size);
125
126 virtual void resizeWidget(qreal newW, qreal newH);
127 virtual void notifyParentResize();
128
129 bool getIgnoreSnapToGrid() const;
130 void setIgnoreSnapToGrid(bool to);
131
132 virtual bool isLocatedIn(const UMLWidget *other) const;
133
134 void moveByLocal(qreal dx, qreal dy);
135
136 virtual void removeAssoc(AssociationWidget* pAssoc);
137 virtual void addAssoc(AssociationWidget* pAssoc);
138
140
144 bool isInstance() const {
145 return m_isInstance;
146 }
147
153 }
154
158 void setInstanceName(const QString &instanceName) {
160 }
161
165 QString instanceName() const {
166 return m_instanceName;
167 }
168
171 QString tags() const;
172
173 virtual bool showPropertiesDialog();
174
175 virtual void adjustAssocs(qreal dx, qreal dy);
176 virtual void adjustUnselectedAssocs(qreal dx, qreal dy);
177
178 bool isActivated() const;
179 void setActivated(bool active = true);
180
181 virtual void cleanup();
182
183 void updateGeometry(bool withAssocs = true);
184
185 void clipSize();
186
187 void forceUpdateFontMetrics(QPainter *painter);
188 void forceUpdateFontMetrics(QFont &font, QPainter *painter);
189
190 virtual bool loadFromXMI(QDomElement &qElement);
191 virtual void saveToXMI(QXmlStreamWriter& writer);
192
193 QPointF startMovePosition() const;
194 void setStartMovePosition(const QPointF &position);
195
196 QSizeF startResizeSize() const;
197
198 virtual QSizeF calculateSize(bool withExtensions = true) const;
199 void resize();
200
201 bool fixedAspectRatio() const {
202 return m_fixedAspectRatio;
203 }
204
205 void setFixedAspectRatio(bool state) {
206 m_fixedAspectRatio = state;
207 }
208
209 bool resizable() const {
210 return m_resizable;
211 }
212
213 void setResizable(bool state) {
214 m_resizable = state;
215 }
216
217 typedef enum {
226 FT_INVALID = 8
228
229 virtual void setDefaultFontMetrics(QFont &font, UMLWidget::FontType fontType);
230 virtual void setDefaultFontMetrics(QFont &font, UMLWidget::FontType fontType, QPainter &painter);
231
232 QFontMetrics &getFontMetrics(UMLWidget::FontType fontType) const;
233 void setFontMetrics(UMLWidget::FontType fontType, QFontMetrics fm);
234 void setupFontType(QFont &font, UMLWidget::FontType fontType);
235
236 virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr);
237
238public Q_SLOTS:
239 virtual void updateWidget();
240 virtual void slotMenuSelection(QAction* action);
241 virtual void slotWidgetMoved(Uml::ID::Type id);
242 virtual void slotFillColorChanged(Uml::ID::Type viewID);
243 virtual void slotLineColorChanged(Uml::ID::Type viewID);
244 virtual void slotTextColorChanged(Uml::ID::Type viewID);
245 virtual void slotLineWidthChanged(Uml::ID::Type viewID);
246
247 void slotSnapToGrid();
248
249Q_SIGNALS:
255
256protected:
257 virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent* event);
258 virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
259 virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
260 virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
261 virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
262
263 virtual void moveEvent(QGraphicsSceneMouseEvent *event);
264 virtual void moveWidgetBy(qreal diffX, qreal diffY);
265 virtual void constrainMovementForAllWidgets(qreal &diffX, qreal &diffY);
266 virtual void constrain(qreal& width, qreal& height);
267
268 virtual bool isInResizeArea(QGraphicsSceneMouseEvent *me);
269 virtual QCursor resizeCursor() const;
270
271 void selectSingle(QGraphicsSceneMouseEvent *me);
272 void selectMultiple(QGraphicsSceneMouseEvent *me);
273 void deselect(QGraphicsSceneMouseEvent *me);
274 // void resetSelection();
275
276 void setSelectionBounds();
277
278 void resize(QGraphicsSceneMouseEvent *me);
279
280 bool wasSizeChanged();
281 bool wasPositionChanged();
282
283 virtual void toForeground();
284
285public:
287 Q_DECLARE_FLAGS(AddWidgetOptions, AddWidgetOption)
288
289protected:
292 void addWidget(UMLWidget *widget, bool showProperties = true);
293
295
299
301
311
314
321
324
328
330 QPointF m_oldPos;
331
334
337
343
350
351private:
352 void init();
353
356};
357Q_DECLARE_OPERATORS_FOR_FLAGS(UMLWidget::AddWidgetOptions)
358#endif
QList< QPointer< AssociationWidget > > AssociationWidgetList
Definition associationwidgetlist.h:17
This class represents an association inside a diagram. Bugs and comments to umbrello-devel@kde....
Definition associationwidget.h:47
Definition diagramproxywidget.h:25
Definition idchangelog.h:22
Definition toolbarstatearrow.h:26
Definition umldoc.h:63
The base class for UML objects.
Definition umlobject.h:70
ObjectType
Definition umlobject.h:76
Definition umlscene.h:65
The base class for graphical UML objects.
Definition umlwidget.h:36
void setActivated(bool active=true)
Definition umlwidget.cpp:1271
static const QSizeF DefaultMaximumSize
Definition umlwidget.h:43
void moveByLocal(qreal dx, qreal dy)
Definition umlwidget.cpp:1387
void setIsInstance(bool isInstance)
Definition umlwidget.h:151
void setMaximumSize(const QSizeF &size)
Definition umlwidget.cpp:248
static const int resizeMarkerLineCount
Definition umlwidget.h:46
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event)
Definition umlwidget.cpp:361
virtual void updateWidget()
Definition umlwidget.cpp:655
bool m_inResizeArea
Definition umlwidget.h:342
virtual void setTextColor(const QColor &color)
Definition umlwidget.cpp:1125
virtual bool loadFromXMI(QDomElement &qElement)
Definition umlwidget.cpp:2211
virtual QSizeF minimumSize() const
Definition umlwidget.cpp:216
QString instanceName() const
Definition umlwidget.h:165
bool isInstance() const
Definition umlwidget.h:144
virtual void setUseFillColor(bool fc)
Definition umlwidget.cpp:1095
virtual void setLineColorCmd(const QColor &color)
Definition umlwidget.cpp:1136
virtual void setY(qreal y)
Definition umlwidget.cpp:1781
bool getStartMove() const
Definition umlwidget.h:99
void setFillColorCmd(const QColor &color)
Definition umlwidget.cpp:1188
AssociationWidgetList m_Assocs
A list of AssociationWidgets between the UMLWidget and other UMLWidgets in the diagram.
Definition umlwidget.h:355
virtual QCursor resizeCursor() const
Definition umlwidget.cpp:1458
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=nullptr)
Definition umlwidget.cpp:1959
qreal m_oldH
Definition umlwidget.h:333
QSizeF startResizeSize() const
Definition umlwidget.cpp:622
void setResizable(bool state)
Definition umlwidget.h:213
bool m_ignoreSnapComponentSizeToGrid
Definition umlwidget.h:319
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Definition umlwidget.cpp:455
void setupFontType(QFont &font, UMLWidget::FontType fontType)
Definition umlwidget.cpp:1912
virtual void moveWidgetBy(qreal diffX, qreal diffY)
Definition umlwidget.cpp:278
void init()
Definition umlwidget.cpp:706
virtual void setSelected(bool _select)
Definition umlwidget.cpp:1618
UMLWidget & operator=(const UMLWidget &other)
Definition umlwidget.cpp:125
void clipSize()
Definition umlwidget.cpp:1895
QSizeF m_startResizeSize
Definition umlwidget.h:304
bool isActivated() const
Definition umlwidget.cpp:1261
QString tags() const
Definition umlwidget.cpp:2137
void setScene(UMLScene *scene)
Definition umlwidget.cpp:1714
virtual void constrainMovementForAllWidgets(qreal &diffX, qreal &diffY)
Definition umlwidget.cpp:301
void setIgnoreSnapToGrid(bool to)
Definition umlwidget.cpp:1814
void addConnectedUMLObject(UMLObject::ObjectType otype, Uml::AssociationType::Enum type)
int m_nPosX
Definition umlwidget.h:305
virtual void cleanup()
Definition umlwidget.cpp:1793
virtual qreal getX() const
Definition umlwidget.cpp:1732
qreal width() const
Definition umlwidget.h:119
void setMinimumSize(const QSizeF &size)
Definition umlwidget.cpp:227
QPointF m_oldPos
The X/Y position the widget had when the movement started.
Definition umlwidget.h:330
AssociationWidgetList & associationWidgetList() const
Definition umlwidget.cpp:1289
virtual bool showPropertiesDialog()
Definition umlwidget.cpp:1365
bool m_ignoreSnapToGrid
Definition umlwidget.h:318
void addWidget(UMLWidget *widget, bool showProperties=true)
Definition umlwidget.cpp:2309
virtual bool isLocatedIn(const UMLWidget *other) const
Definition umlwidget.cpp:1415
bool m_activated
true if the activate function has been called for this class instance
Definition umlwidget.h:313
virtual void setLineWidth(uint width)
Definition umlwidget.cpp:1155
virtual void slotMenuSelection(QAction *action)
Definition umlwidget.cpp:776
bool wasPositionChanged()
Definition umlwidget.cpp:1596
void selectSingle(QGraphicsSceneMouseEvent *me)
Definition umlwidget.cpp:1666
bool wasSizeChanged()
Definition umlwidget.cpp:1585
void setFixedAspectRatio(bool state)
Definition umlwidget.h:205
void deselect(QGraphicsSceneMouseEvent *me)
Definition umlwidget.cpp:1692
virtual void notifyParentResize()
Definition umlwidget.cpp:647
FontType
Definition umlwidget.h:217
@ FT_BOLD_UNDERLINE
Definition umlwidget.h:223
@ FT_BOLD
Definition umlwidget.h:219
@ FT_ITALIC_UNDERLINE
Definition umlwidget.h:224
@ FT_INVALID
Definition umlwidget.h:226
@ FT_NORMAL
Definition umlwidget.h:218
@ FT_BOLD_ITALIC
Definition umlwidget.h:222
@ FT_BOLD_ITALIC_UNDERLINE
Definition umlwidget.h:225
@ FT_UNDERLINE
Definition umlwidget.h:221
@ FT_ITALIC
Definition umlwidget.h:220
virtual void addAssoc(AssociationWidget *pAssoc)
Definition umlwidget.cpp:1279
virtual void slotTextColorChanged(Uml::ID::Type viewID)
Definition umlwidget.cpp:1046
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
Definition umlwidget.cpp:591
qreal height() const
Definition umlwidget.h:112
virtual ~UMLWidget()
Definition umlwidget.cpp:117
bool m_shiftPressed
If shift or control button were pressed in mouse press event.
Definition umlwidget.h:336
void setPenFromSettings(QPainter &p)
Definition umlwidget.cpp:1399
virtual void setFillColor(const QColor &color)
Definition umlwidget.cpp:1176
virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
Definition umlwidget.cpp:256
virtual void removeAssoc(AssociationWidget *pAssoc)
Definition umlwidget.cpp:1298
static const int defaultMargin
Definition umlwidget.h:44
virtual void slotLineColorChanged(Uml::ID::Type viewID)
Definition umlwidget.cpp:1061
QPointF startMovePosition() const
Definition umlwidget.cpp:604
void setInstanceName(const QString &instanceName)
Definition umlwidget.h:158
virtual void setX(qreal x)
Definition umlwidget.cpp:1766
bool m_inMoveArea
Definition umlwidget.h:342
bool m_fixedAspectRatio
Definition umlwidget.h:320
virtual void setDefaultFontMetrics(QFont &font, UMLWidget::FontType fontType)
Definition umlwidget.cpp:1906
bool m_isInstance
holds whether this widget is a component instance (i.e. on a deployment diagram)
Definition umlwidget.h:297
QSizeF m_maximumSize
Definition umlwidget.h:310
virtual bool isInResizeArea(QGraphicsSceneMouseEvent *me)
Definition umlwidget.cpp:1471
void setLineWidthCmd(uint width)
Definition umlwidget.cpp:1165
void addConnectedWidget(UMLWidget *widget, Uml::AssociationType::Enum type=Uml::AssociationType::Association, AddWidgetOptions options=Default)
Definition umlwidget.cpp:2272
bool m_moved
Definition umlwidget.h:349
virtual void toForeground()
Definition umlwidget.cpp:309
virtual QSizeF maximumSize()
Definition umlwidget.cpp:237
void setTextColorCmd(const QColor &color)
Definition umlwidget.cpp:1116
virtual void saveToXMI(QXmlStreamWriter &writer)
Definition umlwidget.cpp:2189
void forceUpdateFontMetrics(QPainter *painter)
Definition umlwidget.cpp:2085
QSizeF m_minimumSize
Definition umlwidget.h:309
QString m_oldStatusBarMsg
The text in the status bar when the cursor was pressed.
Definition umlwidget.h:323
bool m_resizable
Definition umlwidget.h:307
virtual void slotFillColorChanged(Uml::ID::Type viewID)
Definition umlwidget.cpp:1026
bool getIgnoreSnapToGrid() const
Definition umlwidget.cpp:1822
QPointF m_startMovePostion
Definition umlwidget.h:303
void setSelectionBounds()
Definition umlwidget.cpp:1604
void resize()
Definition umlwidget.cpp:1527
virtual void adjustAssocs(qreal dx, qreal dy)
Definition umlwidget.cpp:1315
QString m_instanceName
instance name (used if on a deployment diagram)
Definition umlwidget.h:296
QFontMetrics * m_pFontMetrics[FT_INVALID]
Definition umlwidget.h:308
bool m_startMove
Definition umlwidget.h:302
UMLDoc * m_doc
shortcut for UMLApp::app()->document()
Definition umlwidget.h:306
virtual void adjustUnselectedAssocs(qreal dx, qreal dy)
Definition umlwidget.cpp:1346
bool fixedAspectRatio() const
Definition umlwidget.h:201
bool m_resized
Definition umlwidget.h:349
virtual qreal getY() const
Definition umlwidget.cpp:1743
static const QSizeF DefaultMinimumSize
Definition umlwidget.h:42
qreal m_oldW
The width/height the widget had when the resize started.
Definition umlwidget.h:333
virtual bool activate(IDChangeLog *changeLog=nullptr)
Definition umlwidget.cpp:1197
Uml::ShowStereoType::Enum showStereotype() const
Definition umlwidget.cpp:2174
void slotSnapToGrid()
Definition umlwidget.cpp:1801
virtual void slotWidgetMoved(Uml::ID::Type id)
Definition umlwidget.cpp:1017
static const int selectionMarkerSize
Definition umlwidget.h:45
virtual void setFont(const QFont &font)
Definition umlwidget.cpp:2058
virtual void moveEvent(QGraphicsSceneMouseEvent *event)
Definition umlwidget.cpp:2184
virtual QSizeF calculateSize(bool withExtensions=true) const
Definition umlwidget.cpp:1499
void setStartMovePosition(const QPointF &position)
Definition umlwidget.cpp:613
void setSize(qreal width, qreal height)
Definition umlwidget.cpp:1832
void selectMultiple(QGraphicsSceneMouseEvent *me)
Definition umlwidget.cpp:1680
bool resizable() const
Definition umlwidget.h:209
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Definition umlwidget.cpp:535
AddWidgetOption
Definition umlwidget.h:286
@ Default
Definition umlwidget.h:286
@ ShowProperties
Definition umlwidget.h:286
@ NoOption
Definition umlwidget.h:286
@ SwitchDirection
Definition umlwidget.h:286
@ SetupSize
Definition umlwidget.h:286
bool operator==(const UMLWidget &other) const
Definition umlwidget.cpp:163
Uml::ShowStereoType::Enum m_showStereotype
if and how the stereotype should be displayed
Definition umlwidget.h:298
virtual void setShowStereotype(Uml::ShowStereoType::Enum flag)
Definition umlwidget.cpp:2121
virtual void slotLineWidthChanged(Uml::ID::Type viewID)
Definition umlwidget.cpp:1078
void setSelectedFlag(bool _select)
Definition umlwidget.cpp:1608
virtual void setLineColor(const QColor &color)
Definition umlwidget.cpp:1145
void updateGeometry(bool withAssocs=true)
Definition umlwidget.cpp:1869
QPointF m_pressOffset
Definition umlwidget.h:327
virtual void constrain(qreal &width, qreal &height)
Definition umlwidget.cpp:681
void setFontMetrics(UMLWidget::FontType fontType, QFontMetrics fm)
Definition umlwidget.cpp:2047
void setFontCmd(const QFont &font)
Definition umlwidget.cpp:2073
void setUseFillColorCmd(bool fc)
Definition umlwidget.cpp:1107
QFontMetrics & getFontMetrics(UMLWidget::FontType fontType) const
Definition umlwidget.cpp:2039
virtual void resizeWidget(qreal newW, qreal newH)
Definition umlwidget.cpp:638
void sigWidgetMoved(Uml::ID::Type id)
Definition moc_umlwidget.cpp:176
virtual QPointF getPos() const
Definition umlwidget.cpp:1754
Common base class for UMLWidget and AssociationWidget.
Definition widgetbase.h:101
QRectF rect() const
Definition widgetbase.cpp:838
virtual QFont font() const
Definition widgetbase.cpp:549
WidgetType
Definition widgetbase.h:107
@ wt_UMLWidget
Definition widgetbase.h:109
int x
Definition cxx11-lambda-functions-and-expressions.h:4
Enum
Definition basictypes.h:92
@ Association
Definition basictypes.h:96
const Type None
special value for uninitialized ID
Definition basictypes.h:373
std::string Type
Definition basictypes.h:371
Enum
Definition basictypes.h:148