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); } } }
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; }