protected void cellsResized(Object[] cells)
	{
		if (cells != null)
		{
			mxIGraphModel model = this.getGraph().getModel();
			
			model.beginUpdate();
			try
			{
				// Finds the top-level swimlanes and adds offsets
				for (int i = 0; i < cells.length; i++)
				{
					if (!this.isSwimlaneIgnored(cells[i]))
					{
						mxGeometry geo = model.getGeometry(cells[i]);
						
						if (geo != null)
						{
							mxRectangle size = new mxRectangle(0, 0, geo.getWidth(), geo.getHeight());
							Object top = cells[i];
							Object current = top;
							
							while (current != null)
							{
								top = current;
								current = model.getParent(current);
								mxRectangle tmp = (graph.isSwimlane(current)) ?
										graph.getStartSize(current) :
										new mxRectangle();
								size.setWidth(size.getWidth() + tmp.getWidth());
								size.setHeight(size.getHeight() + tmp.getHeight());
							}
							
							boolean parentHorizontal = (current != null) ? isCellHorizontal(current) : horizontal;
							resizeSwimlane(top, size.getWidth(), size.getHeight(), parentHorizontal);
						}
					}
				}
			}
			finally
			{
				model.endUpdate();
			}
		}
	}