NCL Composer  0.1.5
 All Classes Functions Variables Pages
qnstremovecommand.cpp
1 #include "qnstremovecommand.h"
2 #include "qnstutil.h"
3 
4 QnstRemoveCommand::QnstRemoveCommand(QnstView* view, QnstGraphicsEntity* entity)
5 {
6  this->view = view; parent = "";
7 
8  this->entity = NULL;
9 
10  copy(entity); ignore = true;
11 }
12 
13 QnstRemoveCommand::~QnstRemoveCommand()
14 {
15  delete entity;
16 }
17 
18 void QnstRemoveCommand::copy(QnstGraphicsEntity* entity)
19 {
20  this->entity = QnstUtil::makeGraphicsEntity(entity->getnstType());
21 
22  if (this->entity != NULL)
23  {
24  this->entity->setnstUid(entity->getnstUid());
25  this->entity->setnstId(entity->getnstId());
26 
27  this->entity->setUsrData(entity->getUsrData());
28 
29  this->entity->setTop(entity->getTop());
30  this->entity->setLeft(entity->getLeft());
31  this->entity->setWidth(entity->getWidth());
32  this->entity->setHeight(entity->getHeight());
33 
34  this->entity->setnstGraphicsParent(NULL);
35 
36  foreach(QnstGraphicsEntity* e, entity->getnstGraphicsEntities())
37  {
38  copy(e, this->entity);
39  }
40 
41  if (entity->getnstGraphicsParent() != NULL)
42  {
43  parent = QString(entity->getnstGraphicsParent()->getnstUid());
44  }
45  }
46 }
47 
48 void QnstRemoveCommand::copy(QnstGraphicsEntity* entity,
49  QnstGraphicsEntity* parent)
50 {
51  QnstGraphicsEntity* c = QnstUtil::makeGraphicsEntity(entity->getnstType(),
52  parent);
53 
54  if (c != NULL)
55  {
56  c->setnstUid(entity->getnstUid());
57 
58  c->setnstGraphicsParent(parent);
59 
60  this->entity->setUsrData(entity->getUsrData());
61 
62  c->setnstId(entity->getnstId());
63 
64  c->setTop(entity->getTop());
65  c->setLeft(entity->getLeft());
66  c->setWidth(entity->getWidth());
67  c->setHeight(entity->getHeight());
68 
69  if (c->getnstType() == Qnst::Aggregator)
70  {
71  qDebug() << entity->getnstId() << entity->getWidth() << "x" << entity->getHeight();
72  }
73 
74  parent->addnstGraphicsEntity(c);
75 
76  foreach(QnstGraphicsEntity* e, entity->getnstGraphicsEntities())
77  {
78  copy(e, c);
79  }
80  }
81 }
82 
83 void QnstRemoveCommand::undo()
84 {
85  if (view->entities.contains(parent) || entity->getnstType() == Qnst::Body)
86  {
87  QnstGraphicsEntity* e = QnstUtil::makeGraphicsEntity(entity->getnstType());
88  if(e != NULL)
89  {
90  e->setnstId(entity->getnstId());
91  e->setnstUid(entity->getnstUid());
92 
93  e->setUsrData(entity->getUsrData());
94 
95  if (parent != "")
96  {
97  QnstGraphicsEntity* gparent = view->entities[parent];
98  gparent->addnstGraphicsEntity(e);
99 
100  e->setnstGraphicsParent(gparent);
101  }
102  else
103  {
104  e->setnstGraphicsParent(NULL);
105  }
106 
107  e->setTop(entity->getTop());
108  e->setLeft(entity->getLeft());
109  e->setWidth(entity->getWidth());
110  e->setHeight(entity->getHeight());
111  e->adjust();
112 
113  view->requestEntityAddition(e, true);
114 
115  foreach(QnstGraphicsEntity* c, entity->getnstGraphicsEntities())
116  {
117  paste(c, e);
118  }
119  }
120  }
121 }
122 
123 void QnstRemoveCommand::paste(QnstGraphicsEntity* entity,
124  QnstGraphicsEntity* parent)
125 {
126  QnstGraphicsEntity* e = QnstUtil::makeGraphicsEntity(entity->getnstType(),
127  parent);
128 
129  if (e != NULL)
130  {
131  e->setnstId(entity->getnstId());
132  e->setnstUid(entity->getnstUid());
133  e->setnstGraphicsParent(parent);
134 
135  e->setUsrData(entity->getUsrData());
136 
137  parent->addnstGraphicsEntity(e);
138 
139  e->setTop(entity->getTop());
140  e->setLeft(entity->getLeft());
141  e->setWidth(entity->getWidth());
142  e->setHeight(entity->getHeight());
143  e->adjust();
144 
145  if (e->getnstType() == Qnst::Aggregator)
146  {
147  qDebug() << entity->getWidth() << "x" << entity->getHeight();
148  }
149 
150  view->requestEntityAddition(e, true);
151 
152  foreach(QnstGraphicsEntity* c, entity->getnstGraphicsEntities()){
153  paste(c, e);
154  }
155  }
156 }
157 
158 void QnstRemoveCommand::redo()
159 {
160  if (!ignore)
161  {
162  if (view->entities.contains(entity->getnstUid()))
163  {
164  view->requestEntityRemotion(view->entities[entity->getnstUid()], true);
165  }
166  }
167  else
168  {
169  ignore = false;
170  }
171 }