Exemplo n.º 1
0
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();
}
Exemplo n.º 2
0
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);
            }
        }
    }
}
Exemplo n.º 3
0
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);
		}
	}
}
Exemplo n.º 4
0
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();
		}
	}
}
Exemplo n.º 5
0
	//
	// 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;
			}
Exemplo n.º 6
0
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;
}
Exemplo n.º 7
0
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;
}
Exemplo n.º 8
0
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();
	}
}