public void translate(Object cell, double dx, double dy) {
	Rectangle2D rect = getBounds(cell);
	if (isMoveable(cell) && rect != null) {
	    int numChildCells = model.getChildCount(cell);
	    boolean hasChildren = false;
	    for (int i = 0; i < numChildCells; i++) {
		Object childCell = model.getChild(cell, i);
		if (DefaultGraphModel.isVertex(model, childCell)
			&& graphLayoutCache.isVisible(childCell)
			&& cell != childCell) {
		    translate(childCell, dx, dy);
		    hasChildren = true;
		} else if (model.isEdge(childCell) && cell != childCell) {
		    hasChildren = true;
		}
	    }

	    if (!hasChildren) {
		rect.setFrame(rect.getX() + dx, rect.getY() + dy,
			rect.getWidth(), rect.getHeight());
	    }
	}
    }