Example #1
0
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());
            }
        }
    }
}
Example #2
0
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());
    }
}