void EditorView::mouseMoveEvent(QMouseEvent *event) { if (mWheelPressed) { if (mMouseOldPosition != QPointF()) { QRectF rect = sceneRect(); qreal dx = (event->localPos().x() - mMouseOldPosition.x()); qreal dy = (event->localPos().y() - mMouseOldPosition.y()); rect.moveLeft(rect.left() - dx); rect.moveTop(rect.top() - dy); setSceneRect(rect); translate(dx, dy); } mMouseOldPosition = event->localPos(); } QGraphicsView::mouseMoveEvent(event); if (event->buttons() & Qt::RightButton) { setDragMode(NoDrag); } else { if ((event->buttons() & Qt::LeftButton) && (event->modifiers() & Qt::ControlModifier)) { setDragMode(RubberBandDrag); mScene->itemSelectUpdate(); /*} else if ((event->buttons() & Qt::LeftButton) && (event->modifiers() & Qt::ShiftModifier)) { setDragMode(ScrollHandDrag); // (see #615) mScene->itemSelectUpdate();*/ } else if (event->buttons() & Qt::LeftButton ) { EdgeElement *newEdgeEl = dynamic_cast<EdgeElement *>(itemAt(event->pos())); if (newEdgeEl && newEdgeEl->isBreakPointPressed()) { newEdgeEl->breakPointUnpressed(); setDragMode(NoDrag); } } } if (mScene->getNeedDrawGrid()) mScene->invalidate(); }
void EditorView::mouseMoveEvent(QMouseEvent *event) { if (mWheelPressed) { if (mMouseOldPosition != QPointF()) { const qreal scaleFactor = transform().m11(); const qreal dx = (event->localPos().x() - mMouseOldPosition.x()) / scaleFactor; const qreal dy = (event->localPos().y() - mMouseOldPosition.y()) / scaleFactor; viewport()->scroll(dx, dy); scene()->update(); } mMouseOldPosition = event->localPos(); } QGraphicsView::mouseMoveEvent(event); if (event->buttons() & Qt::RightButton) { setDragMode(NoDrag); } else { if ((event->buttons() & Qt::LeftButton) && (event->modifiers() & Qt::ControlModifier)) { setDragMode(RubberBandDrag); } else if (event->buttons() & Qt::LeftButton) { EdgeElement *newEdgeEl = dynamic_cast<EdgeElement *>(itemAt(event->pos())); if (newEdgeEl && newEdgeEl->isBreakPointPressed()) { newEdgeEl->breakPointUnpressed(); setDragMode(NoDrag); } } } }
void ArrangeLinksCommand::arrange() { NodeElement *node = dynamic_cast<NodeElement *>(mElement); EdgeElement *edge = dynamic_cast<EdgeElement *>(mElement); if (node) { arrange(node); } if (edge) { NodeElement *src = edge->src(); NodeElement *dst = edge->dst(); if (src) { arrange(src); } if (dst) { arrange(dst); } } }
void EditorViewMViface::handleEdgeElementsForRowsInserted( const QList<QPair<EdgeElement *, QPersistentModelIndex>> &edges , const QModelIndex &parent ) { for (const QPair<EdgeElement *, QPersistentModelIndex> &p : edges) { EdgeElement *elem = p.first; QPersistentModelIndex current = p.second; if (elem) { QPointF ePos = model()->data(current, roles::positionRole).toPointF(); // setting position before parent definition 'itemChange' to work correctly elem->setPos(ePos); handleAddingSequenceForRowsInserted(parent, elem, current); handleElemDataForRowsInserted(elem, current); elem->adjustLink(); elem->layOut(); } } }
// // p r i n t D i a g r a m s I n U M L G r a p h F o r m a t // void DinoUmlToGraphConverter::printDiagramsInUMLGraphFormat(ofstream &os) { // Traverse diagrams SListConstIterator<UMLGraph*> diagramIt; for (diagramIt = m_diagramGraphsInUMLGraphFormat.begin(); diagramIt.valid(); ++diagramIt) { // Get underlying graphs const Graph &G = (const Graph &)**diagramIt; const GraphAttributes &AG = **diagramIt; // Nodes os << "Classes:" << endl; NodeElement *v; forall_nodes(v,G) { os << "\t" << AG.labelNode(v); os << " with geometry (" << AG.x(v) << ", " << AG.y(v) << ", " << AG.width(v) << ", " << AG.height(v) << ")"; os << endl; } // Edges EdgeElement *e; os << "Relations:" << endl; forall_edges(e,G) { os << "\t"; if (AG.type(e) == Graph::association) os << "Association between "; if (AG.type(e) == Graph::generalization) os << "Generalization between "; os << AG.labelNode(e->source()) << " and " << AG.labelNode(e->target()) << endl; }
bool InsertIntoEdgeCommand::restoreState() { if (mRemoveOldEdge && mCreateSecond && mCreateFirst) { mScene.returnElementsToOldPositions(mElementShifting); mRemoveOldEdge->undo(); mOldEdge = mRemoveOldEdge->elementId(); EdgeElement *edge = mScene.getEdgeById(mOldEdge); edge->setSrc(mScene.getEdgeById(mCreateFirst->result())->src()); edge->setDst(mScene.getEdgeById(mCreateSecond->result())->dst()); mScene.reConnectLink(edge); mGraphicalAssistApi.setConfiguration(edge->id(), mConfiguration); mCreateSecond->undo(); mCreateFirst->undo(); } if (mCreateCommand) { mCreateCommand->undo(); } return true; }
bool InsertIntoEdgeCommand::execute() { if (mCreateCommand) { mCreateCommand->redo(); mFirstId = mCreateCommand->result(); mLastId = mCreateCommand->result(); } EdgeElement *edge = mRemoveOldEdge ? mScene.getEdgeById(mOldEdge) : mScene.edgeForInsertion(mPos); if (!edge) { return true; } NodeElement *oldSrc = edge->src(); NodeElement *oldDst = edge->dst(); if (oldSrc && oldDst && oldSrc->id() != mFirstId && oldDst->id() != mLastId) { mParentId = (mParentId == Id::rootId()) ? mScene.rootItemId() : mParentId; Id type = edge->id().type(); initCommand(mCreateFirst, type); initCommand(mCreateSecond, type); makeLink(mCreateFirst, oldSrc, mScene.getNodeById(mFirstId)); makeLink(mCreateSecond, mScene.getNodeById(mLastId), oldDst); mConfiguration = mGraphicalAssistApi.configuration(edge->id()); if (!mRemoveOldEdge) { mRemoveOldEdge = new RemoveElementCommand(mLogicalAssistApi, mGraphicalAssistApi, mExploser , mScene.rootItemId(), mParentId, edge->id(), mIsLogical , mGraphicalAssistApi.name(edge->id()), mGraphicalAssistApi.position(edge->id())); } mRemoveOldEdge->redo(); mElementShifting.clear(); mScene.resolveOverlaps(mScene.getNodeById(mLastId), mPos, mShift, mElementShifting); mScene.resolveOverlaps(mScene.getNodeById(mFirstId), mPos, mShift, mElementShifting); } return true; }
void PortHandler::connectTemporaryRemovedLinksToPort(const IdList &temporaryRemovedLinks, const QString &direction) { for (const Id &edgeId : temporaryRemovedLinks) { EdgeElement *edge = dynamic_cast<EdgeElement *>( static_cast<EditorViewScene *>(mNode->scene())->getElem(edgeId) ); if (edge == nullptr) { continue; } if (direction == "from") { const QPointF startPos = edge->mapFromItem(mNode , nearestPort(edge->mapToScene(edge->line().first()), edge->fromPortTypes())); edge->placeStartTo(startPos); } else { const QPointF endPos = edge->mapFromItem(mNode , nearestPort(edge->mapToScene(edge->line().last()), edge->toPortTypes())); edge->placeEndTo(endPos); } edge->connectToPort(); } }