void SCgPairModeEventHandler::mousePress(QGraphicsSceneMouseEvent *event) { SCgEventHandler::mousePress(event); if (event->button() == Qt::LeftButton) { QPointF mousePos = event->scenePos(); SCgObject *obj = mScene->objectAt(mousePos); // if we not create pair yet and press on scg-object, then // start pair creation if (obj && !mPathItem) startLineCreation(mousePos); else if (obj && obj != mPathItem->parentItem()) { SCgObject *begObj = mObjectAtFirstPoint; SCgObject *endObj = obj; // do not create lines with equivalent begin end end object if (begObj != endObj && begObj && !begObj->isDead()) { SCgContour* c=0; // get parent contour QGraphicsItem* parent = begObj->parentItem(); if(parent && parent == endObj->parentItem()) if (parent->type() == SCgContour::Type) c = static_cast<SCgContour*>(parent); mScene->createPairCommand(mLinePoints, begObj, endObj, c); } endLineCreation(); } // if (obj) } }
//back void SCgCommandObjectDelete::undo() { SCgBaseCommand::undo(); QList<SCgObject*>::iterator it; for (it = mDelList.begin(); it != mDelList.end(); ++it) { SCgObject *object = *it; if(!object->parentItem()) { QGraphicsItem *parent = mParents[object]; object->undel(mScene); object->setParentItem(parent); object->positionChanged(); } } }
void SCgCommandObjectDelete::redo() { mDelList.clear(); mParents.clear(); mObject->del(mDelList); QList<SCgObject*>::iterator it; for (it = mDelList.begin(); it != mDelList.end(); ++it) { SCgObject *object = *it; QGraphicsItem *parent = object->parentItem(); mParents[object] = parent; if(object->scene() == mScene) { object->setParentItem(0); mScene->removeItem(object); } } SCgBaseCommand::redo(); }