NCL Composer  0.1.5
 All Classes Functions Variables Pages
qncggraphicsinterface.cpp
1 #include "qncggraphicsinterface.h"
2 
3 QncgGraphicsInterface::QncgGraphicsInterface(QncgGraphicsEntity* parent)
4  : QncgGraphicsEntity(parent)
5 {
6  setncgType(Qncg::Interface);
7 }
8 
9 QncgGraphicsInterface::~QncgGraphicsInterface()
10 {
11 
12 }
13 
14 void QncgGraphicsInterface::adjust(bool avoidCollision)
15 {
16  QncgGraphicsEntity* parent = getncgGraphicsParent();
17 
18  if (parent != NULL){
19  // setting
20  QPointF pointa(parent->getWidth()/2, parent->getHeight()/2);
21  QPointF pointb(getLeft() + getWidth()/2, getTop() + getHeight()/2);
22 
23  if (pointa == pointb){
24  pointb.setX(pointa.x());
25  pointb.setY(pointa.y() - 10);
26  }
27 
28  QLineF line(pointa,pointb);
29 
30  // adjusting
31  if (parent->contains(pointb)){
32  QPointF pointn = pointb;
33 
34  qreal index = 1.0;
35 
36  if (parent->contains(line.pointAt(index+0.01))){
37  while(parent->contains(pointn)){
38  index += 0.01;
39 
40  pointn = line.pointAt(index);
41  }
42  }
43 
44  setTop(pointn.y() - getHeight()/2);
45  setLeft(pointn.x() - getWidth()/2);
46 
47  }else{
48  QPointF pointn = pointb;
49 
50  qreal index = 1.0;
51 
52  if (!parent->contains(line.pointAt(index-0.01))){
53  while(!parent->contains(pointn)){
54  index -= 0.01;
55 
56  pointn = line.pointAt(index);
57  }
58  }
59 
60  setTop(pointn.y() - getHeight()/2);
61  setLeft(pointn.x() - getWidth()/2);
62  }
63  }
64 
65  // redrawing
66  if (scene() != NULL){
67  scene()->update();
68  }
69 }
70 
71 void QncgGraphicsInterface::move(QGraphicsSceneMouseEvent* event)
72 {
73  // setting
74  qreal x = getLeft();
75  qreal y = getTop();
76 
77  QncgGraphicsEntity* parent = getncgGraphicsParent();
78 
79  qreal minx;
80  qreal miny;
81 
82  if (parent != NULL){
83  minx = 4;
84  miny = 4;
85  }else{
86  minx = 0;
87  miny = 0;
88  }
89 
90  qreal maxx;
91  qreal maxy;
92 
93  if (parent != NULL){
94  maxx = parent->getWidth() - getWidth() - 4;
95  maxy = parent->getHeight() - getHeight() - 4;
96  }else{
97  maxx = scene()->width() - getWidth();
98  maxy = scene()->height() - getHeight();
99  }
100 
101  qreal dx = event->pos().x() - getPressLeft(); // (x1 - x0)
102  qreal dy = event->pos().y() - getPressTop(); // (y1 - y0)
103 
104  qreal nextx = x + dx;
105  qreal nexty = y + dy;
106 
107  // moving
108  setMoveTop(nexty);
109  setMoveLeft(nextx);
110 
111  // redrawing
112  if (scene() != NULL){
113  scene()->update();
114  }
115 }
116 
117 void QncgGraphicsInterface::resize(QGraphicsSceneMouseEvent* event)
118 {
119  // setting
120  qreal x = getLeft();
121  qreal y = getTop();
122  qreal w = getWidth();
123  qreal h = getHeight();
124 
125  QncgGraphicsEntity* parent = getncgGraphicsParent();
126 
127  qreal minx;
128  qreal miny;
129  qreal minw;
130  qreal minh;
131 
132  if (parentItem() != NULL){
133  minx = 4;
134  miny = 4;
135  minw = -1; // not used
136  minh = -1; // not used
137  }else{
138  minx = 0;
139  miny = 0;
140  minw = -1; // not used
141  minh = -1; // not used
142  }
143 
144  qreal maxx;
145  qreal maxy;
146  qreal maxw;
147  qreal maxh;
148 
149  if (parentItem() != NULL){
150  maxx = parent->getWidth() - getWidth() - 4;
151  maxy = parent->getHeight() - getHeight() - 4;
152  maxw = parent->getWidth() - 4;
153  maxh = parent->getHeight() - 4;
154  }else{
155  maxx = scene()->width() - getWidth();
156  maxy = scene()->height() - getHeight();
157  maxw = scene()->width();
158  maxh = scene()->height();
159  }
160 
161  qreal dx = event->pos().x() - getPressLeft(); // (x1 - x0)
162  qreal dy = event->pos().y() - getPressTop(); // (y1 - y0)
163  qreal dw = -dx;
164  qreal dh = -dy;
165 
166  qreal nextx = x + dx;
167  qreal nexty = y + dy;
168  qreal nextw = w + dw;
169  qreal nexth = h + dh;
170 
171  // adjusting
172  switch(getncgResize()){
173 
174  case Qncg::TopLeft:{
175  break;
176  }
177 
178  case Qncg::Top:{
179  nextx = x; // fixed x
180  nextw = w; // fixed width
181 
182  break;
183  }
184 
185  case Qncg::TopRight:{
186  nextx = x; // fixed x
187 
188  nextw = w - dw;
189 
190  break;
191  }
192 
193  case Qncg::Right:{
194  nextx = x; // fixed x
195 
196  nextw = w - dw;
197 
198  nexty = y; // fixed y
199  nexth = h; // fixed height
200 
201  break;
202  }
203 
204  case Qncg::BottomRight:{
205  nextx = x; // fixed x
206 
207  nextw = w - dw;
208 
209  nexty = y; // fixed y
210 
211  nexth = h - dh;
212 
213  break;
214  }
215 
216  case Qncg::Bottom:{
217  nextx = x; // fixed x
218  nextw = w; // fixed width
219 
220  nexty = y; // fixed y
221 
222  nexth = h - dh;
223 
224  break;
225  }
226 
227  case Qncg::BottomLeft:{
228  nexty = y; // fixed y
229 
230  nexth = h - dh;
231 
232  break;
233  }
234 
235  case Qncg::Left:{
236  nexty = y; // fixed y
237  nexth = h; // fixed height
238 
239  break;
240  }
241  default:
242  break;
243  }
244 
245  // resizing
246  setResizeTop(nexty);
247  setResizeLeft(nextx);
248  setResizeWidth(nextw);
249  setResizeHeight(nexth);
250 
251  // redrawing
252  if (scene() != NULL){
253  scene()->update();
254  }
255 }