void ConditionalRelation::updateBoxesCoordinates(unsigned int boxId) { // Move related boxes, except boxId's box (already moved by user) QList<BasicBox *>::iterator it; BasicBox *box = _scene->getBox(boxId), *curBox; float curBoxX, boxX = box->getLeftGripPoint().x(); for(it=_boxesAttached.begin() ; it!=_boxesAttached.end() ; it++) { curBox = *it; if(curBox->ID() != box->ID()) { curBoxX = curBox->getLeftGripPoint().x(); if(boxX != curBoxX) { curBox->moveBy(boxX - curBoxX, 0.); _scene->boxMoved(curBox->ID()); } } } }
void Relation::mouseMoveEvent(QGraphicsSceneMouseEvent * event) { QGraphicsItem::mouseMoveEvent(event); double eventPosX = mapFromScene(event->scenePos()).x(); double startX = mapFromScene(_start).x(); if (_leftHandleSelected) { changeBounds(_abstract->maxBound() == NO_BOUND ? std::max(eventPosX - startX, 0.) : std::min((float)std::max(eventPosX - startX, 0.), _abstract->maxBound()), _abstract->maxBound()); _scene->changeRelationBounds(_abstract->ID(), NO_LENGTH, _abstract->minBound(), _abstract->maxBound()); update(); } else if (_rightHandleSelected) { _scene->changeRelationBounds(_abstract->ID(), NO_LENGTH, _abstract->minBound(), std::max((float)std::max(eventPosX - startX, 0.), _abstract->minBound())); update(); } else if (_middleHandleSelected) { BasicBox *rightBox = _scene->getBox(_abstract->secondBox()); _scene->changeRelationBounds(_abstract->ID(), NO_LENGTH, NO_BOUND, NO_BOUND); qreal factorX = 2 * (eventPosX - _mouseClickPosSave.x()); rightBox->moveBy(factorX, 0.); rightBox->setTopLeft(rightBox->getTopLeft() + QPointF(factorX, 0.)); rightBox->updateStuff(); _scene->boxMoved(rightBox->ID()); } }