-
Notifications
You must be signed in to change notification settings - Fork 8
/
nodegroup.h
174 lines (124 loc) · 4.27 KB
/
nodegroup.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include "NodeView/NodeView_global.h"
#include "NodeView/stylemanager.h"
#include <QBrush>
#include <QFont>
#include <QGraphicsPolygonItem>
#include <QList>
#include <QPen>
#include <QRectF>
#define BASE_RECT QRectF( -10, -10, 153, 33 )
class Node;
class Connection;
class Socket;
class NodeView;
QT_BEGIN_NAMESPACE
class QGraphicsSceneMouseEvent;
QT_END_NAMESPACE
/*!
* \brief A subclass of QGraphicsPolygonItem that is used
* to represent a node within a NodeView view.
*/
class NodeView_API NodeGroup : public QObject, public QGraphicsPolygonItem {
Q_OBJECT
public:
enum { Type = UserType + 32 };
enum TitleJustify { TitleLeft, TitleRight, TitleCenter };
protected:
NodeView* m_graphWidget;
QPen m_outlinePen;
QPen m_selectedPen;
QBrush m_backgroundBrush;
QBrush m_selectedBrush;
QBrush m_titleBarBrush;
QBrush m_titleBarSelectedBrush;
QRectF m_mainRect;
QPointF m_curPos;
QPointF m_topCorner;
QGraphicsSimpleTextItem m_titleTextItem;
QString m_titleText;
Qt::TextElideMode m_elidedTitle;
TitleJustify m_titleJustify;
protected:
QList<Node*> m_containedNodes;
QRectF m_boundingRect;
static int NextZNode;
public:
/*!
* \brief Constructor
* \param graphWidget The NodeView class that the Node will exist whthin.
* \param parent The QGraphicsItem parent item of the Node.
* \param scene The QGraphicsScene that the Node will be
* displayed within.
*/
NodeGroup( NodeView* graphWidget, QGraphicsItem* parent = 0, QGraphicsScene* scene = 0 );
void addNode( Node* node );
/*!
* \brief Deconstructor
*/
virtual ~NodeGroup();
QBrush backgroundBrush() const;
/*!
* \brief Gets the bounding rectangle of the Node
* \return The bounding rectangle of the Node as a QRectF.
*/
virtual QRectF boundingRect() const;
QList<Node*> containedNodes();
Qt::TextElideMode elidedTitle();
QPen outlinePen() const;
void updateBoundingRect();
QBrush selectedBrush() const;
QPen selectedPen() const;
void setBackgroundBrush( const QBrush& brush );
void setElidedTitle( Qt::TextElideMode mode );
void setOutlinePen( const QPen& pen );
void setSelectedBrush( const QBrush& brush );
void setSelectedPen( const QPen& pen );
void setTitleBarBrush( const QBrush& brush );
void setTitleBarSelectedBrush( const QBrush& brush );
void setTitleJustify( TitleJustify justify );
void setTitleTextBrush( const QBrush& brush );
void setTitleTextFont( const QFont& font );
void setTitleTextPen( const QPen& pen );
void setTitleText( const QString& text );
/*!
* \brief This is the shape of the Node as described by a [QPainterPath](http:
* //qt-project.org/doc/qt-4.8/qpainterpath.html) object.
* \return The QPainterPath that contains the shape of the
* Node.
*/
QPainterPath shape() const;
QBrush titleBarBrush() const;
QBrush titleBarSelectedBrush() const;
TitleJustify titleJustify() const;
QString titleText() const;
QBrush titleTextBrush() const;
QFont titleTextFont() const;
/*!
* \brief This returns the user defined type of a Node
* QGraphicsItem. All
* QGrpahicsItems need to have a type in order to properly
* function within a QGraphicsScene.
* \return The Node object type identifier.
*/
virtual int type() const;
void updateArea();
/*!
* \brief This function performs all the drawing aspects of the Node. Reimplement this function to change the
* appearence of the Node.
* \param painter The QPainter object that will perform the
* drawing. \param option \param widget
*/
virtual void paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget );
protected:
QVariant itemChange( GraphicsItemChange change, const QVariant& value );
void mouseReleaseEvent( QGraphicsSceneMouseEvent* event );
virtual void mouseDoubleClickEvent( QGraphicsSceneMouseEvent* event );
signals:
void doubleClicked( QGraphicsSceneMouseEvent* event );
public slots:
void updateGroup();
void removeNode( Node* node );
};