umbrello 2.32.2
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 = 0);
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 = 0);
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 void moveByLocal(qreal dx, qreal dy);
133
134 virtual void removeAssoc(AssociationWidget* pAssoc);
135 virtual void addAssoc(AssociationWidget* pAssoc);
136
138
142 bool isInstance() const {
143 return m_isInstance;
144 }
145
151 }
152
156 void setInstanceName(const QString &instanceName) {
158 }
159
163 QString instanceName() const {
164 return m_instanceName;
165 }
166
169 QString tags() const;
170
171 virtual bool showPropertiesDialog();
172
173 virtual void adjustAssocs(qreal dx, qreal dy);
174 virtual void adjustUnselectedAssocs(qreal dx, qreal dy);
175
176 bool isActivated() const;
177 void setActivated(bool active = true);
178
179 virtual void cleanup();
180
181 void updateGeometry(bool withAssocs = true);
182
183 void clipSize();
184
185 void forceUpdateFontMetrics(QPainter *painter);
186 void forceUpdateFontMetrics(QFont &font, QPainter *painter);
187
188 virtual bool loadFromXMI1(QDomElement &qElement);
189 virtual void saveToXMI1(QXmlStreamWriter& writer);
190
191 QPointF startMovePosition() const;
192 void setStartMovePosition(const QPointF &position);
193
194 QSizeF startResizeSize() const;
195
196 virtual QSizeF calculateSize(bool withExtensions = true) const;
197 void resize();
198
199 bool fixedAspectRatio() const {
200 return m_fixedAspectRatio;
201 }
202
203 void setFixedAspectRatio(bool state) {
204 m_fixedAspectRatio = state;
205 }
206
207 bool resizable() const {
208 return m_resizable;
209 }
210
211 void setResizable(bool state) {
212 m_resizable = state;
213 }
214
215 typedef enum {
224 FT_INVALID = 8
226
227 virtual void setDefaultFontMetrics(QFont &font, UMLWidget::FontType fontType);
228 virtual void setDefaultFontMetrics(QFont &font, UMLWidget::FontType fontType, QPainter &painter);
229
230 QFontMetrics &getFontMetrics(UMLWidget::FontType fontType) const;
231 void setFontMetrics(UMLWidget::FontType fontType, QFontMetrics fm);
232 void setupFontType(QFont &font, UMLWidget::FontType fontType);
233
234 virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
235
236public Q_SLOTS:
237 virtual void updateWidget();
238 virtual void slotMenuSelection(QAction* action);
239 virtual void slotWidgetMoved(Uml::ID::Type id);
240 virtual void slotFillColorChanged(Uml::ID::Type viewID);
241 virtual void slotLineColorChanged(Uml::ID::Type viewID);
242 virtual void slotTextColorChanged(Uml::ID::Type viewID);
243 virtual void slotLineWidthChanged(Uml::ID::Type viewID);
244
245 void slotSnapToGrid();
246
247signals:
253
254protected:
255 virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent* event);
256 virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
257 virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
258 virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
259 virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
260
261 virtual void moveEvent(QGraphicsSceneMouseEvent *event);
262 virtual void moveWidgetBy(qreal diffX, qreal diffY);
263 virtual void constrainMovementForAllWidgets(qreal &diffX, qreal &diffY);
264 virtual void constrain(qreal& width, qreal& height);
265
266 virtual bool isInResizeArea(QGraphicsSceneMouseEvent *me);
267 virtual QCursor resizeCursor() const;
268
269 void selectSingle(QGraphicsSceneMouseEvent *me);
270 void selectMultiple(QGraphicsSceneMouseEvent *me);
271 void deselect(QGraphicsSceneMouseEvent *me);
272 // void resetSelection();
273
274 void setSelectionBounds();
275
276 void resize(QGraphicsSceneMouseEvent *me);
277
278 bool wasSizeChanged();
279 bool wasPositionChanged();
280
281 virtual void toForeground();
282
283public:
285 Q_DECLARE_FLAGS(AddWidgetOptions, AddWidgetOption)
286
287protected:
290 void addWidget(UMLWidget *widget, bool showProperties = true);
291
293
297
299
309
312
319
322
326
328 QPointF m_oldPos;
329
332
335
341
348
349private:
350 void init();
351
354};
355Q_DECLARE_OPERATORS_FOR_FLAGS(UMLWidget::AddWidgetOptions)
356#endif
QList< QPointer< AssociationWidget > > AssociationWidgetList
Definition: associationwidgetlist.h:15
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:70
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:1274
static const QSizeF DefaultMaximumSize
Definition: umlwidget.h:43
void moveByLocal(qreal dx, qreal dy)
Definition: umlwidget.cpp:1388
void setIsInstance(bool isInstance)
Definition: umlwidget.h:149
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:657
bool m_inResizeArea
Definition: umlwidget.h:340
virtual void setTextColor(const QColor &color)
Definition: umlwidget.cpp:1125
virtual QSizeF minimumSize() const
Definition: umlwidget.cpp:216
QString instanceName() const
Definition: umlwidget.h:163
bool isInstance() const
Definition: umlwidget.h:142
virtual void setUseFillColor(bool fc)
Definition: umlwidget.cpp:1095
virtual void setLineColorCmd(const QColor &color)
Definition: umlwidget.cpp:1136
UMLWidget(UMLScene *scene, WidgetType type=wt_UMLWidget, UMLObject *o=0)
Definition: umlwidget.cpp:86
virtual void setY(qreal y)
Definition: umlwidget.cpp:1738
bool getStartMove() const
Definition: umlwidget.h:99
virtual bool activate(IDChangeLog *changeLog=0)
Definition: umlwidget.cpp:1200
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:353
virtual QCursor resizeCursor() const
Definition: umlwidget.cpp:1419
qreal m_oldH
Definition: umlwidget.h:331
QSizeF startResizeSize() const
Definition: umlwidget.cpp:624
void setResizable(bool state)
Definition: umlwidget.h:211
bool m_ignoreSnapComponentSizeToGrid
Definition: umlwidget.h:317
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Definition: umlwidget.cpp:460
void setupFontType(QFont &font, UMLWidget::FontType fontType)
Definition: umlwidget.cpp:1863
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:1581
UMLWidget & operator=(const UMLWidget &other)
Definition: umlwidget.cpp:125
void clipSize()
Definition: umlwidget.cpp:1846
QSizeF m_startResizeSize
Definition: umlwidget.h:302
bool isActivated() const
Definition: umlwidget.cpp:1264
QString tags() const
Definition: umlwidget.cpp:2088
void setScene(UMLScene *scene)
Definition: umlwidget.cpp:1674
virtual void constrainMovementForAllWidgets(qreal &diffX, qreal &diffY)
Definition: umlwidget.cpp:301
void setIgnoreSnapToGrid(bool to)
Definition: umlwidget.cpp:1768
void addConnectedUMLObject(UMLObject::ObjectType otype, Uml::AssociationType::Enum type)
int m_nPosX
Definition: umlwidget.h:303
virtual void cleanup()
Definition: umlwidget.cpp:1747
virtual qreal getX() const
Definition: umlwidget.cpp:1692
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:328
AssociationWidgetList & associationWidgetList() const
Definition: umlwidget.cpp:1292
virtual bool showPropertiesDialog()
Definition: umlwidget.cpp:1366
bool m_ignoreSnapToGrid
Definition: umlwidget.h:316
void addWidget(UMLWidget *widget, bool showProperties=true)
Definition: umlwidget.cpp:2229
bool m_activated
true if the activate function has been called for this class instance
Definition: umlwidget.h:311
virtual void setLineWidth(uint width)
Definition: umlwidget.cpp:1155
virtual void slotMenuSelection(QAction *action)
Definition: umlwidget.cpp:776
bool wasPositionChanged()
Definition: umlwidget.cpp:1559
void selectSingle(QGraphicsSceneMouseEvent *me)
Definition: umlwidget.cpp:1626
bool wasSizeChanged()
Definition: umlwidget.cpp:1548
void setFixedAspectRatio(bool state)
Definition: umlwidget.h:203
void deselect(QGraphicsSceneMouseEvent *me)
Definition: umlwidget.cpp:1652
virtual void notifyParentResize()
Definition: umlwidget.cpp:649
FontType
Definition: umlwidget.h:215
@ FT_BOLD_UNDERLINE
Definition: umlwidget.h:221
@ FT_BOLD
Definition: umlwidget.h:217
@ FT_ITALIC_UNDERLINE
Definition: umlwidget.h:222
@ FT_INVALID
Definition: umlwidget.h:224
@ FT_NORMAL
Definition: umlwidget.h:216
@ FT_BOLD_ITALIC
Definition: umlwidget.h:220
@ FT_BOLD_ITALIC_UNDERLINE
Definition: umlwidget.h:223
@ FT_UNDERLINE
Definition: umlwidget.h:219
@ FT_ITALIC
Definition: umlwidget.h:218
virtual void addAssoc(AssociationWidget *pAssoc)
Definition: umlwidget.cpp:1282
virtual void slotTextColorChanged(Uml::ID::Type viewID)
Definition: umlwidget.cpp:1046
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
Definition: umlwidget.cpp:593
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:334
void setPenFromSettings(QPainter &p)
Definition: umlwidget.cpp:1400
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:1301
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:606
void setInstanceName(const QString &instanceName)
Definition: umlwidget.h:156
virtual bool loadFromXMI1(QDomElement &qElement)
Definition: umlwidget.cpp:2163
virtual void setX(qreal x)
Definition: umlwidget.cpp:1726
bool m_inMoveArea
Definition: umlwidget.h:340
virtual void saveToXMI1(QXmlStreamWriter &writer)
Definition: umlwidget.cpp:2140
bool m_fixedAspectRatio
Definition: umlwidget.h:318
virtual void setDefaultFontMetrics(QFont &font, UMLWidget::FontType fontType)
Definition: umlwidget.cpp:1857
bool m_isInstance
holds whether this widget is a component instance (i.e. on a deployment diagram)
Definition: umlwidget.h:295
QSizeF m_maximumSize
Definition: umlwidget.h:308
virtual bool isInResizeArea(QGraphicsSceneMouseEvent *me)
Definition: umlwidget.cpp:1432
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:2192
bool m_moved
Definition: umlwidget.h:347
virtual void toForeground()
Definition: umlwidget.cpp:309
virtual QSizeF maximumSize()
Definition: umlwidget.cpp:237
void setTextColorCmd(const QColor &color)
Definition: umlwidget.cpp:1116
void forceUpdateFontMetrics(QPainter *painter)
Definition: umlwidget.cpp:2036
QSizeF m_minimumSize
Definition: umlwidget.h:307
QString m_oldStatusBarMsg
The text in the status bar when the cursor was pressed.
Definition: umlwidget.h:321
bool m_resizable
Definition: umlwidget.h:305
virtual void slotFillColorChanged(Uml::ID::Type viewID)
Definition: umlwidget.cpp:1026
bool getIgnoreSnapToGrid() const
Definition: umlwidget.cpp:1776
QPointF m_startMovePostion
Definition: umlwidget.h:301
void setSelectionBounds()
Definition: umlwidget.cpp:1567
void resize()
Definition: umlwidget.cpp:1488
virtual void adjustAssocs(qreal dx, qreal dy)
Definition: umlwidget.cpp:1318
QString m_instanceName
instance name (used if on a deployment diagram)
Definition: umlwidget.h:294
QFontMetrics * m_pFontMetrics[FT_INVALID]
Definition: umlwidget.h:306
bool m_startMove
Definition: umlwidget.h:300
UMLDoc * m_doc
shortcut for UMLApp::app()->document()
Definition: umlwidget.h:304
virtual void adjustUnselectedAssocs(qreal dx, qreal dy)
Definition: umlwidget.cpp:1349
bool fixedAspectRatio() const
Definition: umlwidget.h:199
bool m_resized
Definition: umlwidget.h:347
virtual qreal getY() const
Definition: umlwidget.cpp:1703
static const QSizeF DefaultMinimumSize
Definition: umlwidget.h:42
qreal m_oldW
The width/height the widget had when the resize started.
Definition: umlwidget.h:331
Uml::ShowStereoType::Enum showStereotype() const
Definition: umlwidget.cpp:2125
void slotSnapToGrid()
Definition: umlwidget.cpp:1755
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:2009
virtual void moveEvent(QGraphicsSceneMouseEvent *event)
Definition: umlwidget.cpp:2135
virtual QSizeF calculateSize(bool withExtensions=true) const
Definition: umlwidget.cpp:1460
void setStartMovePosition(const QPointF &position)
Definition: umlwidget.cpp:615
void setSize(qreal width, qreal height)
Definition: umlwidget.cpp:1786
void selectMultiple(QGraphicsSceneMouseEvent *me)
Definition: umlwidget.cpp:1640
bool resizable() const
Definition: umlwidget.h:207
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=0)
Definition: umlwidget.cpp:1910
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Definition: umlwidget.cpp:541
AddWidgetOption
Definition: umlwidget.h:284
@ Default
Definition: umlwidget.h:284
@ ShowProperties
Definition: umlwidget.h:284
@ NoOption
Definition: umlwidget.h:284
@ SwitchDirection
Definition: umlwidget.h:284
@ SetupSize
Definition: umlwidget.h:284
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:296
virtual void setShowStereotype(Uml::ShowStereoType::Enum flag)
Definition: umlwidget.cpp:2072
virtual void slotLineWidthChanged(Uml::ID::Type viewID)
Definition: umlwidget.cpp:1078
void setSelectedFlag(bool _select)
Definition: umlwidget.cpp:1571
virtual void setLineColor(const QColor &color)
Definition: umlwidget.cpp:1145
void updateGeometry(bool withAssocs=true)
Definition: umlwidget.cpp:1822
QPointF m_pressOffset
Definition: umlwidget.h:325
virtual void constrain(qreal &width, qreal &height)
Definition: umlwidget.cpp:683
void setFontMetrics(UMLWidget::FontType fontType, QFontMetrics fm)
Definition: umlwidget.cpp:1998
void setFontCmd(const QFont &font)
Definition: umlwidget.cpp:2024
void setUseFillColorCmd(bool fc)
Definition: umlwidget.cpp:1107
QFontMetrics & getFontMetrics(UMLWidget::FontType fontType) const
Definition: umlwidget.cpp:1990
virtual void resizeWidget(qreal newW, qreal newH)
Definition: umlwidget.cpp:640
void sigWidgetMoved(Uml::ID::Type id)
virtual QPointF getPos() const
Definition: umlwidget.cpp:1714
Common base class for UMLWidget and AssociationWidget.
Definition: widgetbase.h:101
QRectF rect() const
Definition: widgetbase.cpp:835
virtual QFont font() const
Definition: widgetbase.cpp:550
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