/** * @class Ext.Container * @extend Ext.Component * @xtype container * * A Container has all of the abilities of {@link Ext.Component Component}, but lets you nest other Components inside * it. Applications are made up of lots of components, usually nested inside one another. Containers allow you to * render and arrange child Components inside them. * * Most apps have a single top-level Container called a Viewport, * which takes up the entire screen. Inside of this are child components, for example in a mail app the Viewport * Container's two children might be a message List and an email preview pane. * * Containers give the following extra functionality: * * - Adding child Components at instantiation and run time * - Removing child Components * - Specifying a Layout * * Layouts determine how the child Components should be laid out on the screen. In our mail app example we'd use an * HBox layout so that we can pin the email list to the left hand edge of the screen and allow the preview pane to * occupy the rest. There are several layouts, each of which help you achieve your desired * application structure. */ /** * @cfg {Boolean} [autoSize=true] * May be set to `false` for improved layout performance if auto-sizing is not required. * * Some versions of Safari, both desktop and mobile, have very slow performance * if the application has deeply nested containers due to the following WebKit * bug: https://bugs.webkit.org/show_bug.cgi?id=150445 * * Applications that experience performance issues in the affected versions of * Safari may need to turn off autoSizing globally for all `Ext.Container` instances * by placing the following override in the application's "overrides" directory: * * Ext.define('MyApp.overrides.Container', { * override: 'Ext.Container', * config: { * autoSize: false * } * }); * * Once auto-sizing support has turned off by default, it can be selectively * turned back on only on those container instances that explicitly need auto-sizing * behavior by setting `autoSize` to `true`. * * This option can also be used to allow children to be sized in percentage * units as a workaround for the following browser bug: * https://bugs.webkit.org/show_bug.cgi?id=137730 * * To illustrate, the following example should render a 200px by 200px green box * (the container) with a yellow box inside of it (the child item). The child * item's height and width are both set to `'50%'` so the child should render * exactly 100px by 100px in size. * * <Container * height={200} * width={200} * style="background: green" * > * <Component * style="background: yellow" * height="50%" * width="50%" * /> * </Container> * * All browsers except for Safari render the previous example correctly, but * Safari does not assign a height to the component. To make percentage-sized * children work in Safari, simply set `autoSize` to `false` on the container. * * Since the underlying implementation works by absolutely positioning the container's * body element, this option can only be used when the container is not * "shrink wrapping" the content in either direction. When `autoSize` is * set to `false`, shrink wrapped dimension(s) will collapse to 0. * @accessor */ /** * @cfg {Object} [defaults=null] * A set of default configurations to apply to all child Components in this Container. * * It's often useful to specify defaults when creating more than one children with similar configurations. For * example here we can specify that each child has a height of 20px and avoid repeating the declaration for each * one: * * <Container * fullscreen * defaults={{ * height: 20 * }} * > * <Panel>Panel 1</Panel> * <Panel>Panel 2</Panel> * </Container> * * @accessor */ /** * @cfg {String} [buttonAlign=null] * The alignment of any buttons added to this panel. Valid values are 'right', 'left' and 'center' (defaults to * 'right' for buttons/fbar, 'left' for other toolbar types). * * **NOTE:** The preferred way to specify toolbars is to use the {@link #items} config specifying the {@link #docked} * config on the item. Instead of buttonAlign you would add the layout: { pack: 'start' | 'center' | 'end' } * option to the docked item config. * @since 6.5.0 */ /** * @cfg {String/String[]} bodyCls * The CSS class to add to this container's body element. * @since 7.0 */ /** * @cfg {Number} [minButtonWidth=null] * Minimum width of all footer toolbar buttons in pixels. If set, this will be used as the default * value for the {@link Ext.Button#minWidth} config of each Button added to the **footer toolbar** via the * {@link #fbar} or {@link #buttons} configurations. It will be ignored for buttons that have a minWidth configured * some other way, e.g. in their own config object or via the {@link Ext.Container#defaults defaults} of * their parent container. * * @since 6.5.0 */ /** * @cfg {Boolean} [autoDestroy=true] * If `true`, children will be destroyed as soon as they are {@link #method-remove removed} * from this container. * @accessor */ /** @cfg {String} [defaultType=null] * The default {@link Ext.Component xtype} of child Components to create in this Container when a child item * is specified as a raw configuration object, rather than as an instantiated Component. * @accessor */ /** * @cfg {String} defaultFocus * * Specifies a child Component to receive focus when this Container's {@link #method-focus} * method is called. Should be a valid {@link Ext.ComponentQuery query} selector. */ /** * @cfg {Boolean/Object/Ext.Mask/Ext.LoadMask} [masked=null] * A configuration to allow you to mask this container. * * If the value is a boolean, a plain mask will be displayed without a message. * * <Container masked> * Hello World * </Container> * * If the value is a string, it will be used as the message config for an {@link Ext.LoadMask}. * * <Container masked="Please wait..."> * Hello World * </Container> * * For more precise control over the mask, you add a `<LoadMask/>` as a child of the container. * Please refer to the {@link Ext.LoadMask} component to see the props it supports. * * <Container> * <LoadMask message="Please wait..."/> * </Container> * * There are also two convenient methods, {@link #method-mask} and {@link #unmask}, to allow you to mask and unmask * this container at any time. * * @accessor */ /** * @cfg {Object/String} [layout=auto] * Configuration for this Container's layout. Example: * * <Container * layout={{ * type: "hbox", * align: "middle" * }} * > * <Panel * html="hello" * flex={1} * bodyStyle={{ * background: "#000", * color: "#fff" * }} * /> * <Panel * html="world" * flex={2} * bodyStyle={{ * background: "#f00", * color: "#fff" * }} * /> * </Container> * * @accessor */ /** * @cfg {Object/String/Number} [activeItem=0] The item from the {@link #cfg-items} collection that will be active first. This is * usually only meaningful in a {@link Ext.layout.Card card layout}, where only one item can be active at a * time. If passes a string, it will be assumed to be a {@link Ext.ComponentQuery} selector. * @accessor * @evented */ /** * @cfg {Boolean} [weighted=false] * If set to `true`, then child {@link #cfg!items} may be specified as a object, * with each property name specifying an {@link #cfg!itemId}, and the property * value being the child item configuration object. * * When using this scheme, each child item may contain a {@link #cfg!weight} * configuration value which affects its order in this container. Lower weights * are towards the start, higher weights towards the end. */ /** * @event add * Fires whenever item added to the Container. * @param {Ext.Container} this The Container instance. * @param {Object} item The item added to the Container. * @param {Number} index The index of the item within the Container. */ /** * @event remove * Fires whenever item removed from the Container. * @param {Ext.Container} this The Container instance. * @param {Object} item The item removed from the Container. * @param {Number} index The index of the item that was removed. */ /** * @event move * Fires whenever item moved within the Container. * @param {Ext.Container} this The Container instance. * @param {Object} item The item moved within the Container. * @param {Number} toIndex The new index of the item. * @param {Number} fromIndex The old index of the item. */ /** * @event activate * Fires whenever item within the Container is activated. * @param {Object} newActiveItem The new active item within the container. * @param {Ext.Container} this The Container instance. * @param {Object} oldActiveItem The old active item within the container. */ /** * @event deactivate * Fires whenever item within the Container is deactivated. * @param {Object} oldActiveItem The old active item within the container. * @param {Ext.Container} this The Container instance. * @param {Object} newActiveItem The new active item within the container. */