Upgrade to ExtJS 4.0.7 - Released 10/19/2011
[extjs.git] / docs / source / AbstractContainer.html
index 6a232d3..d22e66a 100644 (file)
@@ -1,8 +1,25 @@
-<!DOCTYPE html><html><head><title>Sencha Documentation Project</title><link rel="stylesheet" href="../reset.css" type="text/css"><link rel="stylesheet" href="../prettify.css" type="text/css"><link rel="stylesheet" href="../prettify_sa.css" type="text/css"><script type="text/javascript" src="../prettify.js"></script></head><body onload="prettyPrint()"><pre class="prettyprint"><pre><span id='Ext-container.AbstractContainer'>/**
+<!DOCTYPE html>
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+  <title>The source code</title>
+  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
+  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
+  <style type="text/css">
+    .highlight { display: block; background-color: #ddd; }
+  </style>
+  <script type="text/javascript">
+    function highlight() {
+      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
+    }
+  </script>
+</head>
+<body onload="prettyPrint(); highlight();">
+  <pre class="prettyprint lang-js"><span id='Ext-container-AbstractContainer'>/**
 </span> * @class Ext.container.AbstractContainer
  * @extends Ext.Component
- * &lt;p&gt;An abstract base class which provides shared methods for Containers across the Sencha product line.&lt;/p&gt;
- * Please refer to sub class's documentation
+ * An abstract base class which provides shared methods for Containers across the Sencha product line.
+ * @private
  */
 Ext.define('Ext.container.AbstractContainer', {
 
@@ -17,12 +34,12 @@ Ext.define('Ext.container.AbstractContainer', {
     ],
 
     /* End Definitions */
-<span id='Ext-container.AbstractContainer-cfg-layout'>    /**
+<span id='Ext-container-AbstractContainer-cfg-layout'>    /**
 </span>     * @cfg {String/Object} layout
-     * &lt;p&gt;&lt;b&gt;*Important&lt;/b&gt;: In order for child items to be correctly sized and
+     * &lt;p&gt;&lt;b&gt;Important&lt;/b&gt;: In order for child items to be correctly sized and
      * positioned, typically a layout manager &lt;b&gt;must&lt;/b&gt; be specified through
      * the &lt;code&gt;layout&lt;/code&gt; configuration option.&lt;/p&gt;
-     * &lt;br&gt;&lt;p&gt;The sizing and positioning of child {@link #items} is the responsibility of
+     * &lt;p&gt;The sizing and positioning of child {@link #items} is the responsibility of
      * the Container's layout manager which creates and manages the type of layout
      * you have in mind.  For example:&lt;/p&gt;
      * &lt;p&gt;If the {@link #layout} configuration is not explicitly specified for
@@ -30,9 +47,8 @@ Ext.define('Ext.container.AbstractContainer', {
      * {@link Ext.layout.container.Auto default layout manager} will be used
      * which does nothing but render child components sequentially into the
      * Container (no sizing or positioning will be performed in this situation).&lt;/p&gt;
-     * &lt;br&gt;&lt;p&gt;&lt;b&gt;&lt;code&gt;layout&lt;/code&gt;&lt;/b&gt; may be specified as either as an Object or
-     * as a String:&lt;/p&gt;&lt;div&gt;&lt;ul class=&quot;mdetail-params&quot;&gt;
-     *
+     * &lt;p&gt;&lt;b&gt;&lt;code&gt;layout&lt;/code&gt;&lt;/b&gt; may be specified as either as an Object or as a String:&lt;/p&gt;
+     * &lt;div&gt;&lt;ul class=&quot;mdetail-params&quot;&gt;
      * &lt;li&gt;&lt;u&gt;Specify as an Object&lt;/u&gt;&lt;/li&gt;
      * &lt;div&gt;&lt;ul class=&quot;mdetail-params&quot;&gt;
      * &lt;li&gt;Example usage:&lt;/li&gt;
@@ -46,7 +62,7 @@ layout: {
      * &lt;li&gt;&lt;code&gt;&lt;b&gt;type&lt;/b&gt;&lt;/code&gt;&lt;/li&gt;
      * &lt;br/&gt;&lt;p&gt;The layout type to be used for this container.  If not specified,
      * a default {@link Ext.layout.container.Auto} will be created and used.&lt;/p&gt;
-     * &lt;br/&gt;&lt;p&gt;Valid layout &lt;code&gt;type&lt;/code&gt; values are:&lt;/p&gt;
+     * &lt;p&gt;Valid layout &lt;code&gt;type&lt;/code&gt; values are:&lt;/p&gt;
      * &lt;div class=&quot;sub-desc&quot;&gt;&lt;ul class=&quot;mdetail-params&quot;&gt;
      * &lt;li&gt;&lt;code&gt;&lt;b&gt;{@link Ext.layout.container.Auto Auto}&lt;/b&gt;&lt;/code&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;Default&lt;/b&gt;&lt;/li&gt;
      * &lt;li&gt;&lt;code&gt;&lt;b&gt;{@link Ext.layout.container.Card card}&lt;/b&gt;&lt;/code&gt;&lt;/li&gt;
@@ -58,7 +74,7 @@ layout: {
      * &lt;/ul&gt;&lt;/div&gt;
      *
      * &lt;li&gt;Layout specific configuration properties&lt;/li&gt;
-     * &lt;br/&gt;&lt;p&gt;Additional layout specific configuration properties may also be
+     * &lt;p&gt;Additional layout specific configuration properties may also be
      * specified. For complete details regarding the valid config options for
      * each layout type, see the layout class corresponding to the &lt;code&gt;type&lt;/code&gt;
      * specified.&lt;/p&gt;
@@ -69,30 +85,26 @@ layout: {
      * &lt;div&gt;&lt;ul class=&quot;mdetail-params&quot;&gt;
      * &lt;li&gt;Example usage:&lt;/li&gt;
      * &lt;pre&gt;&lt;code&gt;
-layout: {
-    type: 'vbox',
-    padding: '5',
-    align: 'left'
-}
+layout: 'vbox'
        &lt;/code&gt;&lt;/pre&gt;
      * &lt;li&gt;&lt;code&gt;&lt;b&gt;layout&lt;/b&gt;&lt;/code&gt;&lt;/li&gt;
-     * &lt;br/&gt;&lt;p&gt;The layout &lt;code&gt;type&lt;/code&gt; to be used for this container (see list
-     * of valid layout type values above).&lt;/p&gt;&lt;br/&gt;
-     * &lt;br/&gt;&lt;p&gt;Additional layout specific configuration properties. For complete
+     * &lt;p&gt;The layout &lt;code&gt;type&lt;/code&gt; to be used for this container (see list
+     * of valid layout type values above).&lt;/p&gt;
+     * &lt;p&gt;Additional layout specific configuration properties. For complete
      * details regarding the valid config options for each layout type, see the
      * layout class corresponding to the &lt;code&gt;layout&lt;/code&gt; specified.&lt;/p&gt;
      * &lt;/ul&gt;&lt;/div&gt;&lt;/ul&gt;&lt;/div&gt;
      */
 
-<span id='Ext-container.AbstractContainer-cfg-activeItem'>    /**
+<span id='Ext-container-AbstractContainer-cfg-activeItem'>    /**
 </span>     * @cfg {String/Number} activeItem
      * A string component id or the numeric index of the component that should be initially activated within the
      * container's layout on render.  For example, activeItem: 'item-1' or activeItem: 0 (index 0 = the first
      * item in the container's collection).  activeItem only applies to layout styles that can display
      * items one at a time (like {@link Ext.layout.container.Card} and {@link Ext.layout.container.Fit}).
      */
-<span id='Ext-container.AbstractContainer-cfg-items'>    /**
-</span>     * @cfg {Object/Array} items
+<span id='Ext-container-AbstractContainer-cfg-items'>    /**
+</span>     * @cfg {Object/Object[]} items
      * &lt;p&gt;A single item, or an array of child Components to be added to this container&lt;/p&gt;
      * &lt;p&gt;&lt;b&gt;Unless configured with a {@link #layout}, a Container simply renders child Components serially into
      * its encapsulating element and performs no sizing or positioning upon them.&lt;/b&gt;&lt;p&gt;
@@ -120,52 +132,57 @@ layout: 'hbox', // The items are arranged horizontally
      * &lt;p&gt;Ext uses lazy rendering. Child Components will only be rendered
      * should it become necessary. Items are automatically laid out when they are first
      * shown (no sizing is done while hidden), or in response to a {@link #doLayout} call.&lt;/p&gt;
-     * &lt;p&gt;Do not specify &lt;code&gt;{@link Ext.panel.Panel#contentEl contentEl}&lt;/code&gt; or 
+     * &lt;p&gt;Do not specify &lt;code&gt;{@link Ext.panel.Panel#contentEl contentEl}&lt;/code&gt; or
      * &lt;code&gt;{@link Ext.panel.Panel#html html}&lt;/code&gt; with &lt;code&gt;items&lt;/code&gt;.&lt;/p&gt;
      */
-<span id='Ext-container.AbstractContainer-cfg-defaults'>    /**
-</span>     * @cfg {Object|Function} defaults
-     * &lt;p&gt;This option is a means of applying default settings to all added items whether added through the {@link #items}
-     * config or via the {@link #add} or {@link #insert} methods.&lt;/p&gt;
-     * &lt;p&gt;If an added item is a config object, and &lt;b&gt;not&lt;/b&gt; an instantiated Component, then the default properties are
-     * unconditionally applied. If the added item &lt;b&gt;is&lt;/b&gt; an instantiated Component, then the default properties are
-     * applied conditionally so as not to override existing properties in the item.&lt;/p&gt;
-     * &lt;p&gt;If the defaults option is specified as a function, then the function will be called using this Container as the
-     * scope (&lt;code&gt;this&lt;/code&gt; reference) and passing the added item as the first parameter. Any resulting object
-     * from that call is then applied to the item as default properties.&lt;/p&gt;
-     * &lt;p&gt;For example, to automatically apply padding to the body of each of a set of
-     * contained {@link Ext.panel.Panel} items, you could pass: &lt;code&gt;defaults: {bodyStyle:'padding:15px'}&lt;/code&gt;.&lt;/p&gt;
-     * &lt;p&gt;Usage:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;
-defaults: {               // defaults are applied to items, not the container
-    autoScroll:true
-},
-items: [
-    {
-        xtype: 'panel',   // defaults &lt;b&gt;do not&lt;/b&gt; have precedence over
-        id: 'panel1',     // options in config objects, so the defaults
-        autoScroll: false // will not be applied here, panel1 will be autoScroll:false
-    },
-    new Ext.panel.Panel({       // defaults &lt;b&gt;do&lt;/b&gt; have precedence over options
-        id: 'panel2',     // options in components, so the defaults
-        autoScroll: false // will be applied here, panel2 will be autoScroll:true.
-    })
-]&lt;/code&gt;&lt;/pre&gt;
+<span id='Ext-container-AbstractContainer-cfg-defaults'>    /**
+</span>     * @cfg {Object/Function} defaults
+     * This option is a means of applying default settings to all added items whether added through the {@link #items}
+     * config or via the {@link #add} or {@link #insert} methods.
+     *
+     * Defaults are applied to both config objects and instantiated components conditionally so as not to override
+     * existing properties in the item (see {@link Ext#applyIf}).
+     *
+     * If the defaults option is specified as a function, then the function will be called using this Container as the
+     * scope (`this` reference) and passing the added item as the first parameter. Any resulting object
+     * from that call is then applied to the item as default properties.
+     *
+     * For example, to automatically apply padding to the body of each of a set of
+     * contained {@link Ext.panel.Panel} items, you could pass: `defaults: {bodyStyle:'padding:15px'}`.
+     *
+     * Usage:
+     *
+     *     defaults: { // defaults are applied to items, not the container
+     *         autoScroll: true
+     *     },
+     *     items: [
+     *         // default will not be applied here, panel1 will be autoScroll: false
+     *         {
+     *             xtype: 'panel',
+     *             id: 'panel1',
+     *             autoScroll: false
+     *         },
+     *         // this component will have autoScroll: true
+     *         new Ext.panel.Panel({
+     *             id: 'panel2'
+     *         })
+     *     ]
      */
 
-<span id='Ext-container.AbstractContainer-cfg-suspendLayout'>    /** @cfg {Boolean} suspendLayout
+<span id='Ext-container-AbstractContainer-cfg-suspendLayout'>    /** @cfg {Boolean} suspendLayout
 </span>     * If true, suspend calls to doLayout.  Useful when batching multiple adds to a container and not passing them
      * as multiple arguments or an array.
      */
     suspendLayout : false,
 
-<span id='Ext-container.AbstractContainer-cfg-autoDestroy'>    /** @cfg {Boolean} autoDestroy
+<span id='Ext-container-AbstractContainer-cfg-autoDestroy'>    /** @cfg {Boolean} autoDestroy
 </span>     * If true the container will automatically destroy any contained component that is removed from it, else
      * destruction must be handled manually.
      * Defaults to true.
      */
     autoDestroy : true,
 
-<span id='Ext-container.AbstractContainer-cfg-defaultType'>     /** @cfg {String} defaultType
+<span id='Ext-container-AbstractContainer-cfg-defaultType'>     /** @cfg {String} defaultType
 </span>      * &lt;p&gt;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.&lt;/p&gt;
       * &lt;p&gt;Defaults to &lt;code&gt;'panel'&lt;/code&gt;.&lt;/p&gt;
@@ -174,28 +191,36 @@ items: [
 
     isContainer : true,
 
+<span id='Ext-container-AbstractContainer-property-layoutCounter'>    /**
+</span>     * The number of container layout calls made on this object.
+     * @property layoutCounter
+     * @type {Number}
+     * @private
+     */
+    layoutCounter : 0,
+
     baseCls: Ext.baseCSSPrefix + 'container',
 
-<span id='Ext-container.AbstractContainer-cfg-bubbleEvents'>    /**
-</span>     * @cfg {Array} bubbleEvents
+<span id='Ext-container-AbstractContainer-cfg-bubbleEvents'>    /**
+</span>     * @cfg {String[]} bubbleEvents
      * &lt;p&gt;An array of events that, when fired, should be bubbled to any parent container.
      * See {@link Ext.util.Observable#enableBubble}.
      * Defaults to &lt;code&gt;['add', 'remove']&lt;/code&gt;.
      */
     bubbleEvents: ['add', 'remove'],
-    
+
     // @private
     initComponent : function(){
         var me = this;
         me.addEvents(
-<span id='Ext-container.AbstractContainer-event-afterlayout'>            /**
+<span id='Ext-container-AbstractContainer-event-afterlayout'>            /**
 </span>             * @event afterlayout
              * Fires when the components in this container are arranged by the associated layout manager.
              * @param {Ext.container.Container} this
-             * @param {ContainerLayout} layout The ContainerLayout implementation for this container
+             * @param {Ext.layout.container.Container} layout The ContainerLayout implementation for this container
              */
             'afterlayout',
-<span id='Ext-container.AbstractContainer-event-beforeadd'>            /**
+<span id='Ext-container-AbstractContainer-event-beforeadd'>            /**
 </span>             * @event beforeadd
              * Fires before any {@link Ext.Component} is added or inserted into the container.
              * A handler can return false to cancel the add.
@@ -204,7 +229,7 @@ items: [
              * @param {Number} index The index at which the component will be added to the container's items collection
              */
             'beforeadd',
-<span id='Ext-container.AbstractContainer-event-beforeremove'>            /**
+<span id='Ext-container-AbstractContainer-event-beforeremove'>            /**
 </span>             * @event beforeremove
              * Fires before any {@link Ext.Component} is removed from the container.  A handler can return
              * false to cancel the remove.
@@ -212,7 +237,7 @@ items: [
              * @param {Ext.Component} component The component being removed
              */
             'beforeremove',
-<span id='Ext-container.AbstractContainer-event-add'>            /**
+<span id='Ext-container-AbstractContainer-event-add'>            /**
 </span>             * @event add
              * @bubbles
              * Fires after any {@link Ext.Component} is added or inserted into the container.
@@ -221,42 +246,14 @@ items: [
              * @param {Number} index The index at which the component was added to the container's items collection
              */
             'add',
-<span id='Ext-container.AbstractContainer-event-remove'>            /**
+<span id='Ext-container-AbstractContainer-event-remove'>            /**
 </span>             * @event remove
              * @bubbles
              * Fires after any {@link Ext.Component} is removed from the container.
              * @param {Ext.container.Container} this
              * @param {Ext.Component} component The component that was removed
              */
-            'remove',
-<span id='Ext-container.AbstractContainer-event-beforecardswitch'>            /**
-</span>             * @event beforecardswitch
-             * Fires before this container switches the active card. This event
-             * is only available if this container uses a CardLayout. Note that
-             * TabPanel and Carousel both get a CardLayout by default, so both
-             * will have this event.
-             * A handler can return false to cancel the card switch.
-             * @param {Ext.container.Container} this
-             * @param {Ext.Component} newCard The card that will be switched to
-             * @param {Ext.Component} oldCard The card that will be switched from
-             * @param {Number} index The index of the card that will be switched to
-             * @param {Boolean} animated True if this cardswitch will be animated
-             */
-            'beforecardswitch',
-<span id='Ext-container.AbstractContainer-event-cardswitch'>            /**
-</span>             * @event cardswitch
-             * Fires after this container switches the active card. If the card
-             * is switched using an animation, this event will fire after the
-             * animation has finished. This event is only available if this container
-             * uses a CardLayout. Note that TabPanel and Carousel both get a CardLayout
-             * by default, so both will have this event.
-             * @param {Ext.container.Container} this
-             * @param {Ext.Component} newCard The card that has been switched to
-             * @param {Ext.Component} oldCard The card that has been switched from
-             * @param {Number} index The index of the card that has been switched to
-             * @param {Boolean} animated True if this cardswitch was animated
-             */
-            'cardswitch'
+            'remove'
         );
 
         // layoutOnShow stack
@@ -270,7 +267,7 @@ items: [
         var me = this,
             items = me.items;
 
-<span id='Ext-container.AbstractContainer-property-items'>        /**
+<span id='Ext-container-AbstractContainer-property-items'>        /**
 </span>         * The MixedCollection containing all the child items of this container.
          * @property items
          * @type Ext.util.MixedCollection
@@ -292,6 +289,20 @@ items: [
         this.callParent();
     },
 
+    renderChildren: function () {
+        var me = this,
+            layout = me.getLayout();
+
+        me.callParent();
+        // this component's elements exist, so now create the child components' elements
+
+        if (layout) {
+            me.suspendLayout = true;
+            layout.renderChildren();
+            delete me.suspendLayout;
+        }
+    },
+
     // @private
     setLayout : function(layout) {
         var currentLayout = this.layout;
@@ -304,7 +315,7 @@ items: [
         layout.setOwner(this);
     },
 
-<span id='Ext-container.AbstractContainer-method-getLayout'>    /**
+<span id='Ext-container-AbstractContainer-method-getLayout'>    /**
 </span>     * Returns the {@link Ext.layout.container.AbstractContainer layout} instance currently associated with this Container.
      * If a layout has not been instantiated yet, that is done first
      * @return {Ext.layout.container.AbstractContainer} The layout
@@ -318,8 +329,8 @@ items: [
         return me.layout;
     },
 
-<span id='Ext-container.AbstractContainer-method-doLayout'>    /**
-</span>     * Manually force this container's layout to be recalculated.  The framwork uses this internally to refresh layouts
+<span id='Ext-container-AbstractContainer-method-doLayout'>    /**
+</span>     * Manually force this container's layout to be recalculated. The framework uses this internally to refresh layouts
      * form most cases.
      * @return {Ext.container.Container} this
      */
@@ -329,7 +340,7 @@ items: [
 
         if (me.rendered &amp;&amp; layout &amp;&amp; !me.suspendLayout) {
             // If either dimension is being auto-set, then it requires a ComponentLayout to be run.
-            if ((!Ext.isNumber(me.width) || !Ext.isNumber(me.height)) &amp;&amp; me.componentLayout.type !== 'autocomponent') {
+            if (!me.isFixedWidth() || !me.isFixedHeight()) {
                 // Only run the ComponentLayout if it is not already in progress
                 if (me.componentLayout.layoutBusy !== true) {
                     me.doComponentLayout();
@@ -338,7 +349,7 @@ items: [
                     }
                 }
             }
-            // Both dimensions defined, run a ContainerLayout
+            // Both dimensions set, either by configuration, or by an owning layout, run a ContainerLayout
             else {
                 // Only run the ContainerLayout if it is not already in progress
                 if (layout.layoutBusy !== true) {
@@ -352,6 +363,7 @@ items: [
 
     // @private
     afterLayout : function(layout) {
+        ++this.layoutCounter;
         this.fireEvent('afterlayout', this, layout);
     },
 
@@ -387,12 +399,8 @@ items: [
 
             if (Ext.isString(config)) {
                 config = Ext.ComponentManager.get(config);
-                Ext.applyIf(config, defaults);
-            } else if (!config.isComponent) {
-                Ext.applyIf(config, defaults);
-            } else {
-                Ext.applyIf(config, defaults);
             }
+            Ext.applyIf(config, defaults);
         }
 
         return config;
@@ -420,7 +428,7 @@ items: [
         return comp.getItemId();
     },
 
-<span id='Ext-container.AbstractContainer-method-add'>    /**
+<span id='Ext-container-AbstractContainer-method-add'>    /**
 </span>
 Adds {@link Ext.Component Component}(s) to this Container.
 
@@ -448,17 +456,17 @@ If adding multiple new child Components, pass them as an array to the `add` meth
     });  // toolbar is rendered
     tb.add([{text:'Button 1'}, {text:'Button 2'}]); // add multiple items. ({@link #defaultType} for {@link Ext.toolbar.Toolbar Toolbar} is 'button')
 
-##Warning:## 
+##Warning:##
 
 Components directly managed by the BorderLayout layout manager
 may not be removed or added.  See the Notes for {@link Ext.layout.container.Border BorderLayout}
 for more details.
 
-     * @param {...Object/Array} Component
+     * @param {Ext.Component[]/Ext.Component...} component
      * Either one or more Components to add or an Array of Components to add.
      * See `{@link #items}` for additional information.
      *
-     * @return {Ext.Component/Array} The Components that were added.
+     * @return {Ext.Component[]/Ext.Component} The Components that were added.
      * @markdown
      */
     add : function() {
@@ -485,13 +493,13 @@ for more details.
             me.suspendLayout = true;
             for (i = 0, ln = items.length; i &lt; ln; i++) {
                 item = items[i];
-                
+
                 //&lt;debug&gt;
                 if (!item) {
                     Ext.Error.raise(&quot;Trying to add a null item as a child of Container with itemId/id: &quot; + me.getItemId());
                 }
                 //&lt;/debug&gt;
-                
+
                 if (index != -1) {
                     item = me.add(index + i, item);
                 } else {
@@ -525,26 +533,10 @@ for more details.
         return cmp;
     },
 
-<span id='Ext-container.AbstractContainer-method-registerFloatingItem'>    /**
-</span>     * @private
-     * &lt;p&gt;Called by Component#doAutoRender&lt;/p&gt;
-     * &lt;p&gt;Register a Container configured &lt;code&gt;floating: true&lt;/code&gt; with this Container's {@link Ext.ZIndexManager ZIndexManager}.&lt;/p&gt;
-     * &lt;p&gt;Components added in ths way will not participate in the layout, but will be rendered
-     * upon first show in the way that {@link Ext.window.Window Window}s are.&lt;/p&gt;
-     * &lt;p&gt;&lt;/p&gt;
-     */
-    registerFloatingItem: function(cmp) {
-        var me = this;
-        if (!me.floatingItems) {
-            me.floatingItems = Ext.create('Ext.ZIndexManager', me);
-        }
-        me.floatingItems.register(cmp);
-    },
-
     onAdd : Ext.emptyFn,
     onRemove : Ext.emptyFn,
 
-<span id='Ext-container.AbstractContainer-method-insert'>    /**
+<span id='Ext-container-AbstractContainer-method-insert'>    /**
 </span>     * Inserts a Component into this Container at a specified index. Fires the
      * {@link #beforeadd} event before inserting, then fires the {@link #add} event after the
      * Component has been inserted.
@@ -566,7 +558,7 @@ for more details.
         return this.add(index, comp);
     },
 
-<span id='Ext-container.AbstractContainer-method-move'>    /**
+<span id='Ext-container-AbstractContainer-method-move'>    /**
 </span>     * Moves a Component within the Container
      * @param {Number} fromIdx The index the Component you wish to move is currently at.
      * @param {Number} toIdx The new index for the Component.
@@ -587,7 +579,7 @@ for more details.
     // @private
     onBeforeAdd : function(item) {
         var me = this;
-        
+
         if (item.ownerCt) {
             item.ownerCt.remove(item, false);
         }
@@ -597,10 +589,10 @@ for more details.
         }
     },
 
-<span id='Ext-container.AbstractContainer-method-remove'>    /**
+<span id='Ext-container-AbstractContainer-method-remove'>    /**
 </span>     * Removes a component from this container.  Fires the {@link #beforeremove} event before removing, then fires
      * the {@link #remove} event after the component has been removed.
-     * @param {Component/String} component The component reference or id to remove.
+     * @param {Ext.Component/String} component The component reference or id to remove.
      * @param {Boolean} autoDestroy (optional) True to automatically invoke the removed Component's {@link Ext.Component#destroy} function.
      * Defaults to the value of this Container's {@link #autoDestroy} config.
      * @return {Ext.Component} component The Component that was removed.
@@ -650,11 +642,11 @@ for more details.
         }
     },
 
-<span id='Ext-container.AbstractContainer-method-removeAll'>    /**
+<span id='Ext-container-AbstractContainer-method-removeAll'>    /**
 </span>     * Removes all components from this container.
      * @param {Boolean} autoDestroy (optional) True to automatically invoke the removed Component's {@link Ext.Component#destroy} function.
      * Defaults to the value of this Container's {@link #autoDestroy} config.
-     * @return {Array} Array of the destroyed components
+     * @return {Ext.Component[]} Array of the destroyed components
      */
     removeAll : function(autoDestroy) {
         var me = this,
@@ -675,9 +667,11 @@ for more details.
             }
         }
 
-        // Resume Layouts now that all items have been removed and do a single layout
+        // Resume Layouts now that all items have been removed and do a single layout (if we removed anything!)
         me.suspendLayout = false;
-        me.doLayout();
+        if (len) {
+            me.doLayout();
+        }
         return items;
     },
 
@@ -714,15 +708,15 @@ for more details.
         return result;
     },
 
-<span id='Ext-container.AbstractContainer-method-cascade'>    /**
+<span id='Ext-container-AbstractContainer-method-cascade'>    /**
 </span>     * Cascades down the component/container heirarchy from this component (passed in the first call), calling the specified function with
      * each component. The scope (&lt;code&gt;this&lt;/code&gt; reference) of the
      * function call will be the scope provided or the current component. The arguments to the function
      * will be the args provided or the current component. If the function returns false at any point,
      * the cascade is stopped on that branch.
      * @param {Function} fn The function to call
-     * @param {Object} scope (optional) The scope of the function (defaults to current component)
-     * @param {Array} args (optional) The args to call the function with. The current component always passed as the last argument.
+     * @param {Object} [scope] The scope of the function (defaults to current component)
+     * @param {Array} [args] The args to call the function with. The current component always passed as the last argument.
      * @return {Ext.Container} this
      */
     cascade : function(fn, scope, origArgs){
@@ -748,7 +742,7 @@ for more details.
         return this;
     },
 
-<span id='Ext-container.AbstractContainer-method-getComponent'>    /**
+<span id='Ext-container-AbstractContainer-method-getComponent'>    /**
 </span>     * Examines this container's &lt;code&gt;{@link #items}&lt;/code&gt; &lt;b&gt;property&lt;/b&gt;
      * and gets a direct child component of this container.
      * @param {String/Number} comp This parameter may be any of the following:
@@ -769,30 +763,35 @@ for more details.
         return this.items.get(comp);
     },
 
-<span id='Ext-container.AbstractContainer-method-query'>    /**
+<span id='Ext-container-AbstractContainer-method-query'>    /**
 </span>     * Retrieves all descendant components which match the passed selector.
      * Executes an Ext.ComponentQuery.query using this container as its root.
-     * @param {String} selector Selector complying to an Ext.ComponentQuery selector
-     * @return {Array} Ext.Component's which matched the selector
+     * @param {String} selector (optional) Selector complying to an Ext.ComponentQuery selector.
+     * If no selector is specified all items will be returned.
+     * @return {Ext.Component[]} Components which matched the selector
      */
     query : function(selector) {
+        selector = selector || '*';
         return Ext.ComponentQuery.query(selector, this);
     },
 
-<span id='Ext-container.AbstractContainer-method-child'>    /**
+<span id='Ext-container-AbstractContainer-method-child'>    /**
 </span>     * Retrieves the first direct child of this container which matches the passed selector.
      * The passed in selector must comply with an Ext.ComponentQuery selector.
-     * @param {String} selector An Ext.ComponentQuery selector
+     * @param {String} selector (optional) An Ext.ComponentQuery selector. If no selector is
+     * specified, the first child will be returned.
      * @return Ext.Component
      */
     child : function(selector) {
+        selector = selector || '';
         return this.query('&gt; ' + selector)[0] || null;
     },
 
-<span id='Ext-container.AbstractContainer-method-down'>    /**
+<span id='Ext-container-AbstractContainer-method-down'>    /**
 </span>     * Retrieves the first descendant of this container which matches the passed selector.
      * The passed in selector must comply with an Ext.ComponentQuery selector.
-     * @param {String} selector An Ext.ComponentQuery selector
+     * @param {String} selector (optional) An Ext.ComponentQuery selector. If no selector is
+     * specified, the first child will be returned.
      * @return Ext.Component
      */
     down : function(selector) {
@@ -824,20 +823,20 @@ for more details.
             }
         }
         layoutCollection.clear();
-    },    
-    
+    },
+
     //@private
     // Enable all immediate children that was previously disabled
     onEnable: function() {
         Ext.Array.each(this.query('[isFormField]'), function(item) {
             if (item.resetDisable) {
                 item.enable();
-                delete item.resetDisable;             
+                delete item.resetDisable;
             }
         });
         this.callParent();
     },
-    
+
     // @private
     // Disable all immediate children that was previously disabled
     onDisable: function() {
@@ -850,7 +849,7 @@ for more details.
         this.callParent();
     },
 
-<span id='Ext-container.AbstractContainer-method-beforeLayout'>    /**
+<span id='Ext-container-AbstractContainer-method-beforeLayout'>    /**
 </span>     * Occurs before componentLayout is run. Returning false from this method will prevent the containerLayout
      * from being executed.
      */
@@ -871,9 +870,11 @@ for more details.
         }
 
         Ext.destroy(
-            me.layout,
-            me.floatingItems
+            me.layout
         );
         me.callParent();
     }
-});</pre></pre></body></html>
\ No newline at end of file
+});
+</pre>
+</body>
+</html>