Repository navigation
Expand file tree
/
Copy pathnode.cpp
More file actions
82 lines (70 loc) · 1.87 KB
/
Copy pathnode.cpp
File metadata and controls
82 lines (70 loc) · 1.87 KB
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
#include "node.h"
#include "edge.h"
#include <QGraphicsScene>
#include <QGraphicsSceneContextMenuEvent>
#include <QMenu>
#include <QPainter>
#include <QDebug>
Node::Node(QGraphicsItem *parent)
: QGraphicsEllipseItem(parent)
{
name = "";
color = Qt::white;
setFlag(QGraphicsItem::ItemIsMovable, true);
setFlag(QGraphicsItem::ItemIsSelectable, true);
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
}
void Node::removeEdge(Edge *edge)
{
int index = edges.indexOf(edge);
if (index != -1)
edges.removeAt(index);
}
void Node::removeEdges()
{
foreach (Edge *edge, edges) {
edge->sourceNode()->removeEdge(edge);
edge->destinationNode()->removeEdge(edge);
scene()->removeItem(edge);
scene()->removeItem(edge->getTextObject());
delete edge->getTextObject();
delete edge;
}
}
void Node::addEdge(Edge *edge)
{
edges.append(edge);
}
QRectF Node::boundingRect() const
{
qreal adjust = 2;
return QRectF( -20 - adjust, -20 - adjust, 40 + adjust, 40 + adjust);
}
QVariant Node::itemChange(GraphicsItemChange change, const QVariant &value)
{
if (change == QGraphicsItem::ItemPositionChange) {
foreach (Edge *edge, edges) {
edge->updatePosition();
}
}
return value;
}
QPainterPath Node::shape() const
{
QPainterPath path;
path.addEllipse(-20, -20, 40, 40);
return path;
}
void Node::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *)
{
QBrush fillNode(color, Qt::SolidPattern);
if (isSelected()) {
QRect rec(-20, -20, 40, 40);
painter->setPen(QPen(Qt::black, 1, Qt::DashLine));
painter->drawRect(rec);
}
painter->setBrush(fillNode);
painter->setPen(QPen(Qt::black, 1));
painter->drawEllipse(-20, -20, 40, 40);
painter->drawText(QRectF(-15, -15, 30, 30), Qt::AlignCenter, name);
}