protected void translateState(mxCellState parentState, mxCellState state,
			double dx, double dy)
	{
		if (state != null)
		{
			mxGraph graph = graphComponent.getGraph();
			mxIGraphModel model = graph.getModel();
			Object cell = state.getCell();

			if (model.isVertex(cell))
			{
				state.getView().updateCellState(state);
				mxGeometry geo = graph.getCellGeometry(cell);

				// Moves selection cells and non-relative vertices in
				// the first phase so that edge terminal points will
				// be updated in the second phase
				if ((dx != 0 || dy != 0) && geo != null
						&& (!geo.isRelative() || deltas.get(state) != null))
				{
					state.setX(state.getX() + dx);
					state.setY(state.getY() + dy);
				}
			}

			int childCount = model.getChildCount(cell);

			for (int i = 0; i < childCount; i++)
			{
				translateState(state,
						graph.getView().getState(model.getChildAt(cell, i)),
						dx, dy);
			}
		}
	}