umbrello  2.32.0
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  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 
168  virtual void setShowStereotype(Uml::ShowStereoType::Enum flag);
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 {
217  FT_BOLD = 1,
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 
236 public 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 
247 signals:
252  void sigWidgetMoved(Uml::ID::Type id);
253 
254 protected:
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 
283 public:
285  Q_DECLARE_FLAGS(AddWidgetOptions, AddWidgetOption)
286 
287 protected:
288  void addConnectedWidget(UMLWidget *widget, Uml::AssociationType::Enum type = Uml::AssociationType::Association, AddWidgetOptions options = Default);
290  void addWidget(UMLWidget *widget, bool showProperties = true);
291 
293 
294  QString m_instanceName;
297 
299 
303  int m_nPosX;
306  QFontMetrics *m_pFontMetrics[FT_INVALID];
309 
312 
319 
322 
325  QPointF m_pressOffset;
326 
328  QPointF m_oldPos;
329 
331  qreal m_oldW, m_oldH;
332 
335 
341 
348 
349 private:
350  void init();
351 
354 };
355 Q_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)
Definition: moc_umlwidget.cpp:176
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