/* * Ext GWT - Ext for GWT * Copyright(c) 2007-2009, Ext JS, LLC. * licensing@extjs.com * * http://extjs.com/license */ package com.extjs.gxt.ui.client.widget.layout; import com.extjs.gxt.ui.client.core.El; import com.extjs.gxt.ui.client.util.Size; import com.extjs.gxt.ui.client.widget.Component; import com.extjs.gxt.ui.client.widget.Container; import com.extjs.gxt.ui.client.widget.Layout; /** * This is a base class for layouts that contain a single item that * automatically expands to fill the layout's container. * * <p /> * Child Widgets are: * <ul> * <li><b>Sized</b> : Yes - expands to fill parent container</li> * <li><b>Positioned</b> : No</li> * </ul> * * <p /> * In the following code, the child panel will be sized to 400 by 400 when the * parent container is sized: * * <code><pre> LayoutContainer container = new LayoutContainer(); container.setLayout(new FitLayout()); ContentPanel panel = new ContentPanel(); container.add(panel); container.setSize(400, 400); * </pre></code> * * @see FitData */ public class FitLayout extends Layout { /** * Creates a new fit layout instance. */ public FitLayout() { monitorResize = true; } @Override protected void onLayout(Container<?> container, El target) { if (container.getItemCount() == 0) { return; } activeItem = activeItem != null ? activeItem : container.getItem(0); super.onLayout(container, target); setItemSize(activeItem, target.getStyleSize()); } protected void setItemSize(Component item, Size size) { if (item != null && item.isRendered() && size.height > 0) { size.width -= getSideMargins(item); size.height -= item.el().getMargins("tb"); setSize(item, size.width, size.height); } } }