umbrello  2.31.3
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  * This program is free software; you can redistribute it and/or modify *
3  * it under the terms of the GNU General Public License as published by *
4  * the Free Software Foundation; either version 2 of the License, or *
5  * (at your option) any later version. *
6  * *
7  * copyright (C) 2002-2020 *
8  * Umbrello UML Modeller Authors <umbrello-devel@kde.org> *
9  ***************************************************************************/
10 
11 #ifndef UMLWIDGET_H
12 #define UMLWIDGET_H
13 
14 #include "associationwidgetlist.h"
15 #include "basictypes.h"
16 #include "optionstate.h"
17 #include "umlobject.h"
18 #include "umlwidgetlist.h"
19 #include "widgetbase.h"
20 #include "diagramproxywidget.h"
21 
22 #include <QCursor>
23 #include <QFont>
24 
25 class IDChangeLog;
26 class UMLDoc;
27 class UMLObject;
28 class UMLScene;
29 
30 class QPainter;
31 class QFontMetrics;
32 
40 class UMLWidget : public WidgetBase, public DiagramProxyWidget
41 {
42  Q_OBJECT
43 public:
44 
45  friend class ToolBarStateArrow; // for calling the mouse*Event handlers
46 
47  static const QSizeF DefaultMinimumSize;
48  static const QSizeF DefaultMaximumSize;
49  static const int defaultMargin;
50  static const int selectionMarkerSize;
51  static const int resizeMarkerLineCount;
52 
53  explicit UMLWidget(UMLScene *scene, WidgetType type = wt_UMLWidget, UMLObject *o = 0);
55  virtual ~UMLWidget();
56 
57  // Copy constructor - not implemented.
58  // UMLWidget(const UMLWidget& other);
59 
60  UMLWidget& operator=(const UMLWidget& other);
61 
62  bool operator==(const UMLWidget& other) const;
63 
64  virtual QSizeF minimumSize() const;
65  void setMinimumSize(const QSizeF &size);
66 
67  virtual QSizeF maximumSize();
68  void setMaximumSize(const QSizeF &size);
69 
70  virtual void setUseFillColor(bool fc);
71  void setUseFillColorCmd(bool fc);
72 
73  virtual void setTextColor(const QColor &color);
74  void setTextColorCmd(const QColor &color);
75 
76  virtual void setLineColor(const QColor &color);
77  virtual void setLineColorCmd(const QColor &color);
78 
79  virtual void setLineWidth(uint width);
80  void setLineWidthCmd(uint width);
81 
82  virtual void setFillColor(const QColor &color);
83  void setFillColorCmd(const QColor &color);
84 
85  void setSelectedFlag(bool _select);
86  virtual void setSelected(bool _select);
87 
88  void setScene(UMLScene *scene);
89 
90  virtual bool activate(IDChangeLog* changeLog = 0);
91 
92  void setPenFromSettings(QPainter &p);
93  void setPenFromSettings(QPainter *p);
94 
95  virtual void setFont(const QFont &font);
96  void setFontCmd(const QFont &font);
97 
104  bool getStartMove() const {
105  return m_startMove;
106  }
107 
108  virtual void setX(qreal x);
109  virtual void setY(qreal y);
110 
114  qreal height() const {
115  return rect().height();
116  }
117 
121  qreal width() const {
122  return rect().width();
123  }
124 
125  void setSize(qreal width, qreal height);
126  void setSize(const QSizeF& size);
127 
128  virtual void resizeWidget(qreal newW, qreal newH);
129  virtual void notifyParentResize();
130 
131  bool getIgnoreSnapToGrid() const;
132  void setIgnoreSnapToGrid(bool to);
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 
169  bool showStereotype() const;
170  virtual void setShowStereotype(bool flag);
171 
172  virtual bool showPropertiesDialog();
173 
174  virtual void adjustAssocs(qreal dx, qreal dy);
175  virtual void adjustUnselectedAssocs(qreal dx, qreal dy);
176 
177  bool isActivated() const;
178  void setActivated(bool active = true);
179 
180  virtual void cleanup();
181 
182  void updateGeometry(bool withAssocs = true);
183 
184  void clipSize();
185 
186  void forceUpdateFontMetrics(QPainter *painter);
187  void forceUpdateFontMetrics(QFont &font, QPainter *painter);
188 
189  virtual bool loadFromXMI1(QDomElement &qElement);
190  virtual void saveToXMI1(QDomDocument &qDoc, QDomElement &qElement);
191 
192  QPointF startMovePosition() const;
193  void setStartMovePosition(const QPointF &position);
194 
195  QSizeF startResizeSize() const;
196 
197  virtual QSizeF calculateSize(bool withExtensions = true) const;
198  void resize();
199 
200  bool fixedAspectRatio() const {
201  return m_fixedAspectRatio;
202  }
203 
204  void setFixedAspectRatio(bool state) {
205  m_fixedAspectRatio = state;
206  }
207 
208  bool resizable() const {
209  return m_resizable;
210  }
211 
212  void setResizable(bool state) {
213  m_resizable = state;
214  }
215 
216  typedef enum {
218  FT_BOLD = 1,
226  } FontType;
227 
228  virtual void setDefaultFontMetrics(QFont &font, UMLWidget::FontType fontType);
229  virtual void setDefaultFontMetrics(QFont &font, UMLWidget::FontType fontType, QPainter &painter);
230 
231  QFontMetrics &getFontMetrics(UMLWidget::FontType fontType) const;
232  void setFontMetrics(UMLWidget::FontType fontType, QFontMetrics fm);
233  void setupFontType(QFont &font, UMLWidget::FontType fontType);
234 
235  virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
236 
237 public Q_SLOTS:
238  virtual void updateWidget();
239  virtual void slotMenuSelection(QAction* action);
240  virtual void slotWidgetMoved(Uml::ID::Type id);
241  virtual void slotFillColorChanged(Uml::ID::Type viewID);
242  virtual void slotLineColorChanged(Uml::ID::Type viewID);
243  virtual void slotTextColorChanged(Uml::ID::Type viewID);
244  virtual void slotLineWidthChanged(Uml::ID::Type viewID);
245 
246  void slotSnapToGrid();
247 
248 signals:
253  void sigWidgetMoved(Uml::ID::Type id);
254 
255 protected:
256  virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent* event);
257  virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
258  virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
259  virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
260  virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
261 
262  virtual void moveEvent(QGraphicsSceneMouseEvent *event);
263  virtual void moveWidgetBy(qreal diffX, qreal diffY);
264  virtual void constrainMovementForAllWidgets(qreal &diffX, qreal &diffY);
265  virtual void constrain(qreal& width, qreal& height);
266 
267  virtual bool isInResizeArea(QGraphicsSceneMouseEvent *me);
268  virtual QCursor resizeCursor() const;
269 
270  void selectSingle(QGraphicsSceneMouseEvent *me);
271  void selectMultiple(QGraphicsSceneMouseEvent *me);
272  void deselect(QGraphicsSceneMouseEvent *me);
273  // void resetSelection();
274 
275  void setSelectionBounds();
276 
277  void resize(QGraphicsSceneMouseEvent *me);
278 
279  bool wasSizeChanged();
280  bool wasPositionChanged();
281 
282  virtual void toForeground();
283 
284 public:
286  Q_DECLARE_FLAGS(AddWidgetOptions, AddWidgetOption)
287 
288 protected:
289  void addConnectedWidget(UMLWidget *widget, Uml::AssociationType::Enum type = Uml::AssociationType::Association, AddWidgetOptions options = Default);
291  void addWidget(UMLWidget *widget, bool showProperties = true);
292 
294 
295  QString m_instanceName;
298 
300 
304  int m_nPosX;
307  QFontMetrics *m_pFontMetrics[FT_INVALID];
310 
313 
320 
323 
326  QPointF m_pressOffset;
327 
329  QPointF m_oldPos;
330 
332  qreal m_oldW, m_oldH;
333 
336 
342 
349 
350 private:
351  void init();
352 
355 };
356 Q_DECLARE_OPERATORS_FOR_FLAGS(UMLWidget::AddWidgetOptions)
357 #endif
void setScene(UMLScene *scene)
Definition: umlwidget.cpp:1666
Definition: umlwidget.h:220
void setStartMovePosition(const QPointF &position)
Definition: umlwidget.cpp:607
void selectMultiple(QGraphicsSceneMouseEvent *me)
Definition: umlwidget.cpp:1632
AssociationWidgetList & associationWidgetList() const
Definition: umlwidget.cpp:1284
bool m_inMoveArea
Definition: umlwidget.h:341
virtual bool activate(IDChangeLog *changeLog=0)
Definition: umlwidget.cpp:1192
virtual void slotTextColorChanged(Uml::ID::Type viewID)
Definition: umlwidget.cpp:1038
Definition: umlwidget.h:285
bool m_resized
Definition: umlwidget.h:348
QPointF m_pressOffset
Definition: umlwidget.h:326
virtual void slotLineColorChanged(Uml::ID::Type viewID)
Definition: umlwidget.cpp:1053
bool m_resizable
Definition: umlwidget.h:306
bool getIgnoreSnapToGrid() const
Definition: umlwidget.cpp:1735
void setIgnoreSnapToGrid(bool to)
Definition: umlwidget.cpp:1727
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Definition: umlwidget.cpp:454
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=0)
Definition: umlwidget.cpp:1869
virtual QFont font() const
Definition: widgetbase.cpp:543
static const QSizeF DefaultMinimumSize
Definition: umlwidget.h:47
virtual void constrain(qreal &width, qreal &height)
Definition: umlwidget.cpp:675
bool wasSizeChanged()
Definition: umlwidget.cpp:1540
void addWidget(UMLWidget *widget, bool showProperties=true)
Definition: umlwidget.cpp:2133
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Definition: umlwidget.cpp:534
bool isActivated() const
Definition: umlwidget.cpp:1256
bool m_fixedAspectRatio
Definition: umlwidget.h:319
Common base class for UMLWidget and AssociationWidget.
Definition: widgetbase.h:104
Definition: idchangelog.h:26
QSizeF m_minimumSize
Definition: umlwidget.h:308
static const QSizeF DefaultMaximumSize
Definition: umlwidget.h:48
Definition: umlwidget.h:217
void setSelectionBounds()
Definition: umlwidget.cpp:1559
void setTextColorCmd(const QColor &color)
Definition: umlwidget.cpp:1108
qreal height() const
Definition: umlwidget.h:114
virtual void slotLineWidthChanged(Uml::ID::Type viewID)
Definition: umlwidget.cpp:1070
virtual void setSelected(bool _select)
Definition: umlwidget.cpp:1573
virtual void setLineColorCmd(const QColor &color)
Definition: umlwidget.cpp:1128
void setSize(qreal width, qreal height)
Definition: umlwidget.cpp:1745
void moveByLocal(qreal dx, qreal dy)
Definition: umlwidget.cpp:1380
bool m_ignoreSnapComponentSizeToGrid
Definition: umlwidget.h:318
virtual void notifyParentResize()
Definition: umlwidget.cpp:641
void updateGeometry(bool withAssocs=true)
Definition: umlwidget.cpp:1781
UMLWidget(UMLScene *scene, WidgetType type=wt_UMLWidget, UMLObject *o=0)
Definition: umlwidget.cpp:89
QString instanceName() const
Definition: umlwidget.h:165
Definition: umlwidget.h:223
WidgetType
Definition: widgetbase.h:110
int x
Definition: cxx11-lambda-functions-and-expressions.h:4
bool m_inResizeArea
Definition: umlwidget.h:341
int m_nPosX
Definition: umlwidget.h:304
qreal m_oldH
Definition: umlwidget.h:332
bool wasPositionChanged()
Definition: umlwidget.cpp:1551
void setSelectedFlag(bool _select)
Definition: umlwidget.cpp:1563
void setFixedAspectRatio(bool state)
Definition: umlwidget.h:204
virtual void slotMenuSelection(QAction *action)
Definition: umlwidget.cpp:768
QPointF m_oldPos
The X/Y position the widget had when the movement started.
Definition: umlwidget.h:329
The base class for UML objects.
Definition: umlobject.h:73
This class represents an association inside a diagram. Bugs and comments to umbrello-devel@kde.org or https://bugs.kde.org.
Definition: associationwidget.h:51
void resize()
Definition: umlwidget.cpp:1480
virtual bool loadFromXMI1(QDomElement &qElement)
Definition: umlwidget.cpp:2067
virtual void saveToXMI1(QDomDocument &qDoc, QDomElement &qElement)
Definition: umlwidget.cpp:2045
UMLDoc * m_doc
shortcut for UMLApp::app()->getDocument()
Definition: umlwidget.h:305
AddWidgetOption
Definition: umlwidget.h:285
bool m_activated
true if the activate function has been called for this class instance
Definition: umlwidget.h:312
virtual void updateWidget()
Definition: umlwidget.cpp:649
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
Definition: umlwidget.cpp:585
void forceUpdateFontMetrics(QPainter *painter)
Definition: umlwidget.cpp:1982
static const int defaultMargin
Definition: umlwidget.h:49
virtual void setTextColor(const QColor &color)
Definition: umlwidget.cpp:1117
virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
Definition: umlwidget.cpp:259
virtual void setFillColor(const QColor &color)
Definition: umlwidget.cpp:1168
QPointF m_startMovePostion
Definition: umlwidget.h:302
bool m_shiftPressed
If shift or control button were pressed in mouse press event.
Definition: umlwidget.h:335
QSizeF m_startResizeSize
Definition: umlwidget.h:303
void selectSingle(QGraphicsSceneMouseEvent *me)
Definition: umlwidget.cpp:1618
Definition: umlwidget.h:285
void setLineWidthCmd(uint width)
Definition: umlwidget.cpp:1157
QFontMetrics * m_pFontMetrics[FT_INVALID]
Definition: umlwidget.h:307
void setActivated(bool active=true)
Definition: umlwidget.cpp:1266
Definition: umlwidget.h:219
void setFontMetrics(UMLWidget::FontType fontType, QFontMetrics fm)
Definition: umlwidget.cpp:1944
virtual bool isInResizeArea(QGraphicsSceneMouseEvent *me)
Definition: umlwidget.cpp:1424
Enum
Definition: basictypes.h:106
virtual void moveEvent(QGraphicsSceneMouseEvent *event)
Definition: umlwidget.cpp:2040
Definition: basictypes.h:110
bool m_showStereotype
should the stereotype be displayed
Definition: umlwidget.h:297
qreal m_oldW
The width/height the widget had when the resize started.
Definition: umlwidget.h:332
void setMaximumSize(const QSizeF &size)
Definition: umlwidget.cpp:251
bool getStartMove() const
Definition: umlwidget.h:104
bool m_ignoreSnapToGrid
Definition: umlwidget.h:317
virtual void setLineWidth(uint width)
Definition: umlwidget.cpp:1147
virtual void toForeground()
Definition: umlwidget.cpp:312
virtual bool showPropertiesDialog()
Definition: umlwidget.cpp:1358
Definition: diagramproxywidget.h:29
void sigWidgetMoved(Uml::ID::Type id)
Definition: moc_umlwidget.cpp:176
bool m_startMove
Definition: umlwidget.h:301
virtual void slotFillColorChanged(Uml::ID::Type viewID)
Definition: umlwidget.cpp:1018
Definition: umlwidget.h:225
void setResizable(bool state)
Definition: umlwidget.h:212
virtual void cleanup()
Definition: umlwidget.cpp:1706
void addConnectedWidget(UMLWidget *widget, Uml::AssociationType::Enum type=Uml::AssociationType::Association, AddWidgetOptions options=Default)
Definition: umlwidget.cpp:2096
void setInstanceName(const QString &instanceName)
Definition: umlwidget.h:158
static const int selectionMarkerSize
Definition: umlwidget.h:50
Definition: widgetbase.h:113
std::string Type
Definition: basictypes.h:351
Definition: umlwidget.h:285
virtual QCursor resizeCursor() const
Definition: umlwidget.cpp:1411
Definition: umlwidget.h:218
Definition: umlwidget.h:285
bool fixedAspectRatio() const
Definition: umlwidget.h:200
virtual void setLineColor(const QColor &color)
Definition: umlwidget.cpp:1137
virtual ~UMLWidget()
Definition: umlwidget.cpp:120
void init()
Definition: umlwidget.cpp:698
virtual void adjustUnselectedAssocs(qreal dx, qreal dy)
Definition: umlwidget.cpp:1341
QSizeF startResizeSize() const
Definition: umlwidget.cpp:616
bool operator==(const UMLWidget &other) const
Definition: umlwidget.cpp:166
virtual void removeAssoc(AssociationWidget *pAssoc)
Definition: umlwidget.cpp:1293
ObjectType
Definition: umlobject.h:79
void slotSnapToGrid()
Definition: umlwidget.cpp:1714
Definition: umlwidget.h:222
qreal width() const
Definition: umlwidget.h:121
void addConnectedUMLObject(UMLObject::ObjectType otype, Uml::AssociationType::Enum type)
void deselect(QGraphicsSceneMouseEvent *me)
Definition: umlwidget.cpp:1644
QRectF rect() const
Definition: widgetbase.cpp:831
void setFillColorCmd(const QColor &color)
Definition: umlwidget.cpp:1180
UMLWidget & operator=(const UMLWidget &other)
Definition: umlwidget.cpp:128
QString m_instanceName
instance name (used if on a deployment diagram)
Definition: umlwidget.h:295
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event)
Definition: umlwidget.cpp:364
virtual void setFont(const QFont &font)
Definition: umlwidget.cpp:1955
virtual void moveWidgetBy(qreal diffX, qreal diffY)
Definition: umlwidget.cpp:281
virtual void addAssoc(AssociationWidget *pAssoc)
Definition: umlwidget.cpp:1274
void setPenFromSettings(QPainter &p)
Definition: umlwidget.cpp:1392
Definition: toolbarstatearrow.h:30
virtual void resizeWidget(qreal newW, qreal newH)
Definition: umlwidget.cpp:632
static const int resizeMarkerLineCount
Definition: umlwidget.h:51
void setIsInstance(bool isInstance)
Definition: umlwidget.h:151
QPointF startMovePosition() const
Definition: umlwidget.cpp:598
virtual void setX(qreal x)
Definition: umlwidget.cpp:1685
void setupFontType(QFont &font, UMLWidget::FontType fontType)
Definition: umlwidget.cpp:1822
void clipSize()
Definition: umlwidget.cpp:1805
Definition: umlwidget.h:221
virtual void setShowStereotype(bool flag)
Definition: umlwidget.cpp:2018
virtual void setUseFillColor(bool fc)
Definition: umlwidget.cpp:1087
bool isInstance() const
Definition: umlwidget.h:144
void setUseFillColorCmd(bool fc)
Definition: umlwidget.cpp:1099
virtual QSizeF calculateSize(bool withExtensions=true) const
Definition: umlwidget.cpp:1452
virtual QSizeF maximumSize()
Definition: umlwidget.cpp:240
bool m_isInstance
holds whether this widget is a component instance (i.e. on a deployment diagram)
Definition: umlwidget.h:296
virtual void adjustAssocs(qreal dx, qreal dy)
Definition: umlwidget.cpp:1310
QList< QPointer< AssociationWidget > > AssociationWidgetList
Definition: associationwidgetlist.h:19
QString m_oldStatusBarMsg
The text in the status bar when the cursor was pressed.
Definition: umlwidget.h:322
FontType
Definition: umlwidget.h:216
QFontMetrics & getFontMetrics(UMLWidget::FontType fontType) const
Definition: umlwidget.cpp:1936
virtual void setY(qreal y)
Definition: umlwidget.cpp:1697
AssociationWidgetList m_Assocs
A list of AssociationWidgets between the UMLWidget and other UMLWidgets in the diagram.
Definition: umlwidget.h:354
virtual void constrainMovementForAllWidgets(qreal &diffX, qreal &diffY)
Definition: umlwidget.cpp:304
void setFontCmd(const QFont &font)
Definition: umlwidget.cpp:1970
Definition: umlwidget.h:224
bool m_moved
Definition: umlwidget.h:348
QSizeF m_maximumSize
Definition: umlwidget.h:309
Definition: umlwidget.h:285
bool showStereotype() const
Definition: umlwidget.cpp:2030
bool resizable() const
Definition: umlwidget.h:208
virtual QSizeF minimumSize() const
Definition: umlwidget.cpp:219
const Type None
special value for uninitialized ID
Definition: basictypes.h:353
void setMinimumSize(const QSizeF &size)
Definition: umlwidget.cpp:230
Definition: umlscene.h:68
virtual void slotWidgetMoved(Uml::ID::Type id)
Definition: umlwidget.cpp:1009
Definition: umldoc.h:74
virtual void setDefaultFontMetrics(QFont &font, UMLWidget::FontType fontType)
Definition: umlwidget.cpp:1816
The base class for graphical UML objects.
Definition: umlwidget.h:40