NCL Composer  0.1.5
 All Classes Functions Variables Pages
node.cpp
1 #include "node.h"
2 
3 Node::Node(QncgGraphicsEntity* parent)
4  : QncgGraphicsNode(parent)
5 {
6  createActions();
7  createMenus();
8  createConnections();
9 }
10 
11 Node::~Node()
12 {
13 
14 }
15 
16 void Node::createActions()
17 {
18  // node menu
19  nodeAction = new QAction(this);
20  nodeAction->setText(tr("Node"));
21 
22  nodeAction->setEnabled(true);
23 }
24 
25 void Node::createMenus()
26 {
27  // insert menu
28  insertMenu = new QMenu();
29  insertMenu->setTitle(tr("Insert"));
30 
31  insertMenu->addAction(nodeAction);
32 
33  insertMenu->setEnabled(true);
34 
35  // context menu
36  contextMenu = new QMenu();
37  contextMenu->addMenu(insertMenu);
38 }
39 
40 void Node::createConnections()
41 {
42  connect(this, SIGNAL(entityChanged()), SLOT(requestEntityChange()));
43  connect(this, SIGNAL(entitySelected()), SLOT(requestEntitySelection()));
44 
45  connect(nodeAction, SIGNAL(triggered()), SLOT(performNode()));
46 }
47 
48 void Node::requestEntityChange()
49 {
50  emit entityChanged(this);
51 }
52 
53 void Node::requestEntitySelection()
54 {
55  emit entitySelected(this);
56 }
57 
58 void Node::performNode()
59 {
60  Node* entity = new Node(this);
61  entity->setTop(getHeight()/2 - 100/2);
62  entity->setLeft(getWidth()/2 - 100/2);
63  entity->setWidth(100);
64  entity->setHeight(100);
65  entity->adjust();
66 
67  connect(entity, SIGNAL(entityChanged(QncgGraphicsEntity*)), SIGNAL(entityChanged(QncgGraphicsEntity*)));
68  connect(entity, SIGNAL(entitySelected(QncgGraphicsEntity*)), SIGNAL(entitySelected(QncgGraphicsEntity*)));
69 
70  addncgGraphicsEntity(entity);
71 }
72 
73 void Node::draw(QPainter* painter)
74 {
75  painter->setBrush(QBrush(QColor("#C1FFC1")));
76  painter->drawRect(4+20/2, 4+20/2, getWidth()-1-20, getHeight()-1-20);
77 
78  if (isMoving()){
79  painter->setBrush(Qt::NoBrush);
80  painter->setPen(QPen(QBrush(Qt::black), 0)); // 0px = cosmetic border
81 
82  painter->drawRect(getMoveLeft()+4-getLeft(),getMoveTop()+4-getTop(),getWidth()-1,getHeight()-1);
83 
84  }else if (isResizing()){
85  painter->setBrush(Qt::NoBrush);
86  painter->setPen(QPen(QBrush(Qt::black), 0)); // 0px = cosmetic border
87 
88  painter->drawRect(getResizeLeft()+4-getLeft(),getResizeTop()+4-getTop(),getResizeWidth()-1,getResizeHeight()-1);
89  }
90 }
91 
92 void Node::delineate(QPainterPath* painter) const
93 {
94  painter->addRect(4+20/2, 4+20/2, getWidth()-20, getHeight()-20);
95 }
96 
97 void Node::contextMenuEvent(QGraphicsSceneContextMenuEvent* event)
98 {
99  QncgGraphicsNode::contextMenuEvent(event);
100 
101  if (!event->isAccepted())
102  {
103  contextMenu->exec(event->screenPos());
104 
105  event->accept();
106  }
107 }