1 #include "qnstgraphicsnode.h"
8 setncgType(Qncg::Node);
9 setnstType(Qnst::Node);
14 QnstGraphicsNode::~QnstGraphicsNode()
19 void QnstGraphicsNode::fit(qreal padding)
22 qreal left = getLeft();
23 qreal width = getWidth();
24 qreal height = getHeight();
27 qreal nextLeft = left;
28 qreal nextWidth = width;
29 qreal nextHeight = height;
33 if (entity->getncgType() == Qncg::Node)
35 if ((entity->getTop()-4) + top < nextTop + padding)
37 nextTop = (entity->getTop()-4) + top - padding;
40 if ((entity->getLeft()-4) + left < nextLeft + padding)
42 nextLeft = (entity->getLeft()-4) + left - padding;
45 if ((entity->getLeft()-4) + entity->getWidth() > nextWidth - padding)
47 nextWidth = (entity->getLeft()-4) + entity->getWidth() + padding;
50 if ((entity->getTop()-4) + entity->getHeight() > nextHeight - padding)
52 nextHeight = (entity->getTop()-4) + entity->getHeight() + padding;
57 if (nextWidth != width)
60 if (nextHeight != height)
61 setHeight(nextHeight);
67 if (entity->getncgType() == Qncg::Node)
69 entity->setTop(entity->getTop() + (top - nextTop));
73 setHeight(getHeight() + (top - nextTop));
81 if (entity->getncgType() == Qncg::Node)
83 entity->setLeft(entity->getLeft() + (left - nextLeft));
87 setWidth(getWidth() + (left - nextLeft));
97 void QnstGraphicsNode::inside()
103 QPointF pa(getLeft()+getWidth()/2, getTop()+getHeight()/2);
104 QPointF pb(parent->getWidth()/2, parent->getHeight()/2);
112 setSelectable(
false);
115 while(!collidesWithItem(parent,Qt::ContainsItemShape))
119 setTop(getTop()+line.pointAt(i).y()-pa.y());
120 setLeft(getLeft()+line.pointAt(i).x()-pa.x());
131 setTop(pb.x()-getHeight()/2);
132 setLeft(pb.y()-getWidth()/2);
135 setSelectable(
true); update();
140 void QnstGraphicsNode::adjust(
bool avoidCollision)
147 if(getnstGraphicsParent() != NULL)
151 int maxInter = 10, inter = 0;
154 if(inter > maxInter)
break;
159 getnstGraphicsParent()->getnstGraphicsEntities())
161 if(
this != entity && entity->getnstType() >= Qnst::Node &&
162 entity->getnstType() <= Qnst::Switch)
167 entity->setSelectable(
false); update();
169 while(collidesWithItem(entity, Qt::IntersectsItemBoundingRect))
172 QPointF pa(getLeft()+getWidth()/2, getTop()+getHeight()/2);
173 QPointF pb(entity->getWidth()/2, entity->getHeight()/2);
177 line.setAngle(qrand()%360);
179 i += (double)(qrand()%100)/10000.0;
181 setTop(getTop()+line.pointAt(i/2).y()-pa.y());
182 setLeft(getLeft()+line.pointAt(i/2).x()-pa.x());
191 entity->setSelectable(
true); update();
196 getnstGraphicsParent()->getnstGraphicsEntities())
198 if(collidesWithItem(entity, Qt::IntersectsItemBoundingRect))
212 if (entity->getnstType() == Qnst::Reference ||
213 entity->getnstType() == Qnst::Link ||
214 entity->getnstType() == Qnst::Mapping ||
215 entity->getnstType() == Qnst::Condition ||
216 entity->getnstType() == Qnst::Action)
226 void QnstGraphicsNode::move(QGraphicsSceneMouseEvent* event)
255 maxx = parent->getWidth() - getWidth() - 4;
256 maxy = parent->getHeight() - getHeight() - 4;
260 maxx = scene()->width() - getWidth();
261 maxy = scene()->height() - getHeight();
265 qreal dx =
event->pos().x() - getPressLeft();
266 qreal dy =
event->pos().y() - getPressTop();
269 qreal nextx = x + dx;
270 qreal nexty = y + dy;
280 void QnstGraphicsNode::resize(QGraphicsSceneMouseEvent* event)
285 qreal w = getWidth();
286 qreal h = getHeight();
296 if (parentItem() != NULL)
317 if (parentItem() != NULL)
319 maxx = parent->getWidth() - getWidth() - 4;
320 maxy = parent->getHeight() - getHeight() - 4;
321 maxw = parent->getWidth() - 4;
322 maxh = parent->getHeight() - 4;
326 maxx = scene()->width() - getWidth();
327 maxy = scene()->height() - getHeight();
328 maxw = scene()->width();
329 maxh = scene()->height();
333 qreal dx =
event->pos().x() - getPressLeft();
334 qreal dy =
event->pos().y() - getPressTop();
339 qreal nextx = x + dx;
340 qreal nexty = y + dy;
341 qreal nextw = w + dw;
342 qreal nexth = h + dh;
345 switch(getncgResize())
379 case Qncg::BottomRight:
401 case Qncg::BottomLeft:
420 setResizeLeft(nextx);
421 setResizeWidth(nextw);
422 setResizeHeight(nexth);