umbrello  2.39.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 
20 class IDChangeLog;
21 class UMLDoc;
22 class UMLObject;
23 class UMLScene;
24 
25 class QPainter;
26 class QFontMetrics;
27 
35 class UMLWidget : public WidgetBase, public DiagramProxyWidget
36 {
37  Q_OBJECT
38 public:
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 
170  virtual void setShowStereotype(Uml::ShowStereoType::Enum flag);
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 {
219  FT_BOLD = 1,
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 
238 public 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 
249 signals:
254  void sigWidgetMoved(Uml::ID::Type id);
255 
256 protected:
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 
285 public:
287  Q_DECLARE_FLAGS(AddWidgetOptions, AddWidgetOption)
288 
289 protected:
290  void addConnectedWidget(UMLWidget *widget, Uml::AssociationType::Enum type = Uml::AssociationType::Association, AddWidgetOptions options = Default);
292  void addWidget(UMLWidget *widget, bool showProperties = true);
293 
295 
296  QString m_instanceName;
299 
301 
305  int m_nPosX;
308  QFontMetrics *m_pFontMetrics[FT_INVALID];
311 
314 
321 
324 
327  QPointF m_pressOffset;
328 
330  QPointF m_oldPos;
331 
333  qreal m_oldW, m_oldH;
334 
337 
343 
350 
351 private:
352  void init();
353 
356 };
357 Q_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: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: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:2308
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:2271
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: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