@Override
	public void moveCell(Object cell, double x, double y)
	{
		mxIGraphModel model = graph.getModel();
		Object parent = model.getParent(cell);

		if (cell instanceof mxICell && parent instanceof mxICell)
		{
			int i = 0;
			double last = 0;
			int childCount = model.getChildCount(parent);

			// Finds index of the closest swimlane
			// TODO: Take into account the orientation
			for (i = 0; i < childCount; i++)
			{
				Object child = model.getChildAt(parent, i);
				mxRectangle bounds = getVertexBounds(child);

				if (bounds != null)
				{
					double tmp = bounds.getX() + bounds.getWidth() / 2;

					if (last < x && tmp > x)
					{
						break;
					}

					last = tmp;
				}
			}

			// Changes child order in parent
			int idx = ((mxICell) parent).getIndex((mxICell) cell);
			idx = Math.max(0, i - ((i > idx) ? 1 : 0));

			model.add(parent, cell, idx);
		}
	}