umbrello 2.34.70-5524f40e1
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 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 = 0);
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
249signals:
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: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:1270
static const QSizeF DefaultMaximumSize
Definition: umlwidget.h:43
void moveByLocal(qreal dx, qreal dy)
Definition: umlwidget.cpp:1386
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:654
bool m_inResizeArea
Definition: umlwidget.h:342
virtual void setTextColor(const QColor &color)
Definition: umlwidget.cpp:1124
virtual bool loadFromXMI(QDomElement &qElement)
Definition: umlwidget.cpp:2210
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:1094
virtual void setLineColorCmd(const QColor &color)
Definition: umlwidget.cpp:1135
UMLWidget(UMLScene *scene, WidgetType type=wt_UMLWidget, UMLObject *o=0)
Definition: umlwidget.cpp:86
virtual void setY(qreal y)
Definition: umlwidget.cpp:1780
bool getStartMove() const
Definition: umlwidget.h:99
virtual bool activate(IDChangeLog *changeLog=0)
Definition: umlwidget.cpp:1196
void setFillColorCmd(const QColor &color)
Definition: umlwidget.cpp:1187
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:1457
qreal m_oldH
Definition: umlwidget.h:333
QSizeF startResizeSize() const
Definition: umlwidget.cpp:621
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:1911
virtual void moveWidgetBy(qreal diffX, qreal diffY)
Definition: umlwidget.cpp:278
void init()
Definition: umlwidget.cpp:705
virtual void setSelected(bool _select)
Definition: umlwidget.cpp:1617
UMLWidget & operator=(const UMLWidget &other)
Definition: umlwidget.cpp:125
void clipSize()
Definition: umlwidget.cpp:1894
QSizeF m_startResizeSize
Definition: umlwidget.h:304
bool isActivated() const
Definition: umlwidget.cpp:1260
QString tags() const
Definition: umlwidget.cpp:2136
void setScene(UMLScene *scene)
Definition: umlwidget.cpp:1713
virtual void constrainMovementForAllWidgets(qreal &diffX, qreal &diffY)
Definition: umlwidget.cpp:301
void setIgnoreSnapToGrid(bool to)
Definition: umlwidget.cpp:1813
void addConnectedUMLObject(UMLObject::ObjectType otype, Uml::AssociationType::Enum type)
int m_nPosX
Definition: umlwidget.h:305
virtual void cleanup()
Definition: umlwidget.cpp:1792
virtual qreal getX() const
Definition: umlwidget.cpp:1731
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:1288
virtual bool showPropertiesDialog()
Definition: umlwidget.cpp:1364
bool m_ignoreSnapToGrid
Definition: umlwidget.h:318
void addWidget(UMLWidget *widget, bool showProperties=true)
Definition: umlwidget.cpp:2295
virtual bool isLocatedIn(const UMLWidget *other) const
Definition: umlwidget.cpp:1414
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:1154
virtual void slotMenuSelection(QAction *action)
Definition: umlwidget.cpp:775
bool wasPositionChanged()
Definition: umlwidget.cpp:1595
void selectSingle(QGraphicsSceneMouseEvent *me)
Definition: umlwidget.cpp:1665
bool wasSizeChanged()
Definition: umlwidget.cpp:1584
void setFixedAspectRatio(bool state)
Definition: umlwidget.h:205
void deselect(QGraphicsSceneMouseEvent *me)
Definition: umlwidget.cpp:1691
virtual void notifyParentResize()
Definition: umlwidget.cpp:646
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:1278
virtual void slotTextColorChanged(Uml::ID::Type viewID)
Definition: umlwidget.cpp:1045
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
Definition: umlwidget.cpp:590
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:1398
virtual void setFillColor(const QColor &color)
Definition: umlwidget.cpp:1175
virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
Definition: umlwidget.cpp:256
virtual void removeAssoc(AssociationWidget *pAssoc)
Definition: umlwidget.cpp:1297
static const int defaultMargin
Definition: umlwidget.h:44
virtual void slotLineColorChanged(Uml::ID::Type viewID)
Definition: umlwidget.cpp:1060
QPointF startMovePosition() const
Definition: umlwidget.cpp:603
void setInstanceName(const QString &instanceName)
Definition: umlwidget.h:158
virtual void setX(qreal x)
Definition: umlwidget.cpp:1765
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:1905
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:1470
void setLineWidthCmd(uint width)
Definition: umlwidget.cpp:1164
void addConnectedWidget(UMLWidget *widget, Uml::AssociationType::Enum type=Uml::AssociationType::Association, AddWidgetOptions options=Default)
Definition: umlwidget.cpp:2258
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:1115
virtual void saveToXMI(QXmlStreamWriter &writer)
Definition: umlwidget.cpp:2188
void forceUpdateFontMetrics(QPainter *painter)
Definition: umlwidget.cpp:2084
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:1025
bool getIgnoreSnapToGrid() const
Definition: umlwidget.cpp:1821
QPointF m_startMovePostion
Definition: umlwidget.h:303
void setSelectionBounds()
Definition: umlwidget.cpp:1603
void resize()
Definition: umlwidget.cpp:1526
virtual void adjustAssocs(qreal dx, qreal dy)
Definition: umlwidget.cpp:1314
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:1345
bool fixedAspectRatio() const
Definition: umlwidget.h:201
bool m_resized
Definition: umlwidget.h:349
virtual qreal getY() const
Definition: umlwidget.cpp:1742
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
Uml::ShowStereoType::Enum showStereotype() const
Definition: umlwidget.cpp:2173
void slotSnapToGrid()
Definition: umlwidget.cpp:1800
virtual void slotWidgetMoved(Uml::ID::Type id)
Definition: umlwidget.cpp:1016
static const int selectionMarkerSize
Definition: umlwidget.h:45
virtual void setFont(const QFont &font)
Definition: umlwidget.cpp:2057
virtual void moveEvent(QGraphicsSceneMouseEvent *event)
Definition: umlwidget.cpp:2183
virtual QSizeF calculateSize(bool withExtensions=true) const
Definition: umlwidget.cpp:1498
void setStartMovePosition(const QPointF &position)
Definition: umlwidget.cpp:612
void setSize(qreal width, qreal height)
Definition: umlwidget.cpp:1831
void selectMultiple(QGraphicsSceneMouseEvent *me)
Definition: umlwidget.cpp:1679
bool resizable() const
Definition: umlwidget.h:209
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=0)
Definition: umlwidget.cpp:1958
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Definition: umlwidget.cpp:534
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:2120
virtual void slotLineWidthChanged(Uml::ID::Type viewID)
Definition: umlwidget.cpp:1077
void setSelectedFlag(bool _select)
Definition: umlwidget.cpp:1607
virtual void setLineColor(const QColor &color)
Definition: umlwidget.cpp:1144
void updateGeometry(bool withAssocs=true)
Definition: umlwidget.cpp:1868
QPointF m_pressOffset
Definition: umlwidget.h:327
virtual void constrain(qreal &width, qreal &height)
Definition: umlwidget.cpp:680
void setFontMetrics(UMLWidget::FontType fontType, QFontMetrics fm)
Definition: umlwidget.cpp:2046
void setFontCmd(const QFont &font)
Definition: umlwidget.cpp:2072
void setUseFillColorCmd(bool fc)
Definition: umlwidget.cpp:1106
QFontMetrics & getFontMetrics(UMLWidget::FontType fontType) const
Definition: umlwidget.cpp:2038
virtual void resizeWidget(qreal newW, qreal newH)
Definition: umlwidget.cpp:637
void sigWidgetMoved(Uml::ID::Type id)
Definition: moc_umlwidget.cpp:176
virtual QPointF getPos() const
Definition: umlwidget.cpp:1753
Common base class for UMLWidget and AssociationWidget.
Definition: widgetbase.h:101
QRectF rect() const
Definition: widgetbase.cpp:844
virtual QFont font() const
Definition: widgetbase.cpp:555
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