| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826 | 
							- <!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-layout-Layout'>/**
 
- </span> * Base Layout class - extended by ComponentLayout and ContainerLayout
 
-  */
 
- Ext.define('Ext.layout.Layout', {
 
-     requires: [
 
-         'Ext.XTemplate'
 
-     ],
 
-     uses: [ 'Ext.layout.Context' ],
 
- <span id='Ext-layout-Layout-property-isLayout'>    /**
 
- </span>     * @property {Boolean} isLayout
 
-      * `true` in this class to identify an object as an instantiated Layout, or subclass thereof.
 
-      */
 
-     isLayout: true,
 
-     initialized: false,
 
-     running: false,
 
-     autoSizePolicy: {
 
-         setsWidth: 0,
 
-         setsHeight: 0
 
-     },
 
-     statics: {
 
-         layoutsByType: {},
 
-         create: function(layout, defaultType) {
 
-             var ClassManager = Ext.ClassManager,
 
-                 layoutsByType = this.layoutsByType,
 
-                 alias, className, config, layoutClass, type, load;
 
-             if (!layout || typeof layout === 'string') {
 
-                 type = layout || defaultType;
 
-                 config = {};                    
 
-             } else if (layout.isLayout) {
 
-                 return layout;
 
-             } else {
 
-                 config = layout;
 
-                 type = layout.type || defaultType;
 
-             }
 
-             if (!(layoutClass = layoutsByType[type])) {
 
-                 alias = 'layout.' + type;
 
-                 className = ClassManager.getNameByAlias(alias);
 
-                 // this is needed to support demand loading of the class
 
-                 if (!className) {
 
-                     load = true;
 
-                 }
 
-                 
 
-                 layoutClass = ClassManager.get(className);
 
-                 if (load || !layoutClass) {
 
-                     return ClassManager.instantiateByAlias(alias, config || {});
 
-                 }
 
-                 layoutsByType[type] = layoutClass;
 
-             }
 
-             return new layoutClass(config);
 
-         }
 
-     },
 
-     constructor : function(config) {
 
-         var me = this;
 
-         me.id = Ext.id(null, me.type + '-');
 
-         Ext.apply(me, config);
 
-         me.layoutCount = 0;
 
-     },
 
- <span id='Ext-layout-Layout-property-done'>    /**
 
- </span>     * @property {Boolean} done Used only during a layout run, this value indicates that a
 
-      * layout has finished its calculations. This flag is set to true prior to the call to
 
-      * {@link #calculate} and should be set to false if this layout has more work to do.
 
-      */
 
- <span id='Ext-layout-Layout-method-beginLayout'>    /**
 
- </span>     * Called before any calculation cycles to prepare for layout.
 
-      * 
 
-      * This is a write phase and DOM reads should be strictly avoided when overridding
 
-      * this method.
 
-      * 
 
-      * @param {Ext.layout.ContextItem} ownerContext The context item for the layout's owner
 
-      * component.
 
-      * @method beginLayout
 
-      */
 
-     beginLayout: Ext.emptyFn,
 
- <span id='Ext-layout-Layout-method-beginLayoutCycle'>    /**
 
- </span>     * Called before any calculation cycles to reset DOM values and prepare for calculation.
 
-      * 
 
-      * This is a write phase and DOM reads should be strictly avoided when overridding
 
-      * this method.
 
-      * 
 
-      * @param {Ext.layout.ContextItem} ownerContext The context item for the layout's owner
 
-      * component.
 
-      * @method beginLayoutCycle
 
-      */
 
-     beginLayoutCycle: function (ownerContext) {
 
-         var me = this,
 
-             context = me.context,
 
-             changed;
 
-         if (me.lastWidthModel != ownerContext.widthModel) {
 
-             if (me.lastWidthModel) {
 
-                 changed = true;
 
-             }
 
-             me.lastWidthModel = ownerContext.widthModel;
 
-         }
 
-         if (me.lastHeightModel != ownerContext.heightModel) {
 
-             if (me.lastWidthModel) {
 
-                 changed = true;
 
-             }
 
-             me.lastHeightModel = ownerContext.heightModel;
 
-         }
 
-         if (changed) {
 
-             (context = ownerContext.context).clearTriggers(me, false);
 
-             context.clearTriggers(me, true);
 
-             me.triggerCount = 0;
 
-         }
 
-     },
 
- <span id='Ext-layout-Layout-method-calculate'>    /**
 
- </span>     * Called to perform the calculations for this layout. This method will be called at
 
-      * least once and may be called repeatedly if the {@link #done} property is cleared
 
-      * before return to indicate that this layout is not yet done. The {@link #done} property
 
-      * is always set to `true` before entering this method.
 
-      * 
 
-      * This is a read phase and DOM writes should be strictly avoided in derived classes.
 
-      * Instead, DOM writes need to be written to {@link Ext.layout.ContextItem} objects to
 
-      *  be flushed at the next opportunity.
 
-      * 
 
-      * @param {Ext.layout.ContextItem} ownerContext The context item for the layout's owner
 
-      * component.
 
-      * @method calculate
 
-      * @abstract
 
-      */
 
- <span id='Ext-layout-Layout-method-completeLayout'>    /**
 
- </span>     * This method (if implemented) is called at the end of the cycle in which this layout
 
-      * completes (by not setting {@link #done} to `false` in {@link #calculate}). It is
 
-      * possible for the layout to complete and yet become invalid before the end of the cycle,
 
-      * in which case, this method will not be called. It is also possible for this method to
 
-      * be called and then later the layout becomes invalidated. This will result in
 
-      * {@link #calculate} being called again, followed by another call to this method.
 
-      * 
 
-      * This is a read phase and DOM writes should be strictly avoided in derived classes.
 
-      * Instead, DOM writes need to be written to {@link Ext.layout.ContextItem} objects to
 
-      * be flushed at the next opportunity.
 
-      * 
 
-      * This method need not be implemented by derived classes and, in fact, should only be
 
-      * implemented when needed.
 
-      * 
 
-      * @param {Ext.layout.ContextItem} ownerContext The context item for the layout's owner
 
-      * component.
 
-      * @method completeLayout
 
-      */
 
- <span id='Ext-layout-Layout-method-finalizeLayout'>    /**
 
- </span>     * This method (if implemented) is called after all layouts have completed. In most
 
-      * ways this is similar to {@link #completeLayout}. This call can cause this (or any
 
-      * layout) to be become invalid (see {@link Ext.layout.Context#invalidate}), but this
 
-      * is best avoided. This method is intended to be where final reads are made and so it
 
-      * is best to avoid invalidating layouts at this point whenever possible. Even so, this
 
-      * method can be used to perform final checks that may require all other layouts to be
 
-      * complete and then invalidate some results.
 
-      * 
 
-      * This is a read phase and DOM writes should be strictly avoided in derived classes.
 
-      * Instead, DOM writes need to be written to {@link Ext.layout.ContextItem} objects to
 
-      * be flushed at the next opportunity.
 
-      * 
 
-      * This method need not be implemented by derived classes and, in fact, should only be
 
-      * implemented when needed.
 
-      * 
 
-      * @param {Ext.layout.ContextItem} ownerContext The context item for the layout's owner
 
-      * component.
 
-      * @method finalizeLayout
 
-      */
 
- <span id='Ext-layout-Layout-method-finishedLayout'>    /**
 
- </span>     * This method is called after all layouts are complete and their calculations flushed
 
-      * to the DOM. No further layouts will be run and this method is only called once per
 
-      * layout run. The base component layout caches `lastComponentSize`.
 
-      * 
 
-      * This is a write phase and DOM reads should be avoided if possible when overridding
 
-      * this method.
 
-      * 
 
-      * This method need not be implemented by derived classes and, in fact, should only be
 
-      * implemented when needed.
 
-      * 
 
-      * @param {Ext.layout.ContextItem} ownerContext The context item for the layout's owner
 
-      * component.
 
-      */
 
-     finishedLayout: function () {
 
-         this.ownerContext = null;
 
-     },
 
-     
 
- <span id='Ext-layout-Layout-method-notifyOwner'>    /**
 
- </span>     * This method (if implemented) is called after all layouts are finished, and all have
 
-      * a `lastComponentSize` cached. No further layouts will be run and this method is only
 
-      * called once per layout run. It is the bookend to {@link #beginLayout}.
 
-      * 
 
-      * This is a write phase and DOM reads should be avoided if possible when overridding
 
-      * this method. This is the catch-all tail method to a layout and so the rules are more
 
-      * relaxed. Even so, for performance reasons, it is best to avoid reading the DOM. If
 
-      * a read is necessary, consider implementing a {@link #finalizeLayout} method to do the
 
-      * required reads.
 
-      * 
 
-      * This method need not be implemented by derived classes and, in fact, should only be
 
-      * implemented when needed.
 
-      * 
 
-      * @param {Ext.layout.ContextItem} ownerContext The context item for the layout's owner
 
-      * component.
 
-      * @method notifyOwner
 
-      */
 
-     
 
-     redoLayout: Ext.emptyFn,
 
-     undoLayout: Ext.emptyFn,
 
-     getAnimatePolicy: function() {
 
-         return this.animatePolicy;
 
-     },
 
- <span id='Ext-layout-Layout-method-getItemSizePolicy'>    /**
 
- </span>     * Returns an object describing how this layout manages the size of the given component.
 
-      * This method must be implemented by any layout that manages components.
 
-      *
 
-      * @param {Ext.Component} item
 
-      *
 
-      * @return {Object} An object describing the sizing done by the layout for this item or
 
-      * null if the layout mimics the size policy of its ownerCt (e.g., 'fit' and 'card').
 
-      * @return {Boolean} return.readsWidth True if the natural/auto width of this component
 
-      * is used by the ownerLayout.
 
-      * @return {Boolean} return.readsHeight True if the natural/auto height of this component
 
-      * is used by the ownerLayout.
 
-      * @return {Boolean} return.setsWidth True if the ownerLayout set this component's width.
 
-      * @return {Boolean} return.setsHeight True if the ownerLayout set this component's height.
 
-      *
 
-      * @protected
 
-      */
 
-     getItemSizePolicy: function (item) {
 
-         return this.autoSizePolicy;
 
-     },
 
-     isItemBoxParent: function (itemContext) {
 
-         return false;
 
-     },
 
-     isItemLayoutRoot: function (item) {
 
-         var sizeModel = item.getSizeModel(),
 
-             width = sizeModel.width,
 
-             height = sizeModel.height;
 
-         // If this component has never had a layout and some of its dimensions are set by
 
-         // its ownerLayout, we cannot be the layoutRoot...
 
-         if (!item.componentLayout.lastComponentSize && (width.calculated || height.calculated)) {
 
-             return false;
 
-         }
 
-         // otherwise an ownerCt whose size is not effected by its content is a root
 
-         return !width.shrinkWrap && !height.shrinkWrap;
 
-     },
 
-     isItemShrinkWrap: function (item) {
 
-         return item.shrinkWrap;
 
-     },
 
-     isRunning: function () {
 
-         return !!this.ownerContext;
 
-     },
 
-     //-----------------------------------------------------
 
-     /*
 
-      * Clears any styles which must be cleared before layout can take place.
 
-      * Only DOM WRITES must be performed at this stage.
 
-      *
 
-      * An entry for the owner's element ID must be created in the layoutContext containing
 
-      * a reference to the target which must be sized/positioned/styled by the layout at
 
-      * the flush stage:
 
-      *
 
-      *     {
 
-      *         target: me.owner
 
-      *     }
 
-      *
 
-      * Component layouts should iterate through managed Elements,
 
-      * pushing an entry for each element:
 
-      *
 
-      *     {
 
-      *         target: childElement
 
-      *     }
 
-      */
 
-     //-----------------------------------------------------
 
-     getItemsRenderTree: function (items, renderCfgs) {
 
-         var length = items.length,
 
-             i, item, itemConfig, result;
 
-         if (length) {
 
-             result = [];
 
-             for (i = 0; i < length; ++i) {
 
-                 item = items[i];
 
-                 // If we are being asked to move an already rendered Component, we must not recalculate its renderTree
 
-                 // and rerun its render process. The Layout's isValidParent check will ensure that the DOM is moved into place.
 
-                 if (!item.rendered) {
 
-                     // If we've already calculated the item's element config, don't calculate it again.
 
-                     // This may happen if the rendering process mutates the owning Container's items
 
-                     // collection, and Ext.layout.Container#getRenderTree runs through the collection again.
 
-                     // Note that the config may be null if a beforerender listener vetoed the operation, so
 
-                     // we must compare to undefined.
 
-                     if (renderCfgs && (renderCfgs[item.id] !== undefined)) {
 
-                         itemConfig = renderCfgs[item.id];
 
-                     } else {
 
-                         // Perform layout preprocessing in the bulk render path
 
-                         this.configureItem(item);
 
-                         itemConfig = item.getRenderTree();
 
-                         if (renderCfgs) {
 
-                             renderCfgs[item.id] = itemConfig;
 
-                         }
 
-                     }
 
-                     // itemConfig mey be null if a beforerender listener vetoed the operation.
 
-                     if (itemConfig) {
 
-                         result.push(itemConfig);
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         return result;
 
-     },
 
-     finishRender: Ext.emptyFn,
 
-     finishRenderItems: function (target, items) {
 
-         var length = items.length,
 
-             i, item;
 
-         for (i = 0; i < length; i++) {
 
-             item = items[i];
 
-             // Only postprocess items which are being rendered. deferredRender may mean that only one has been rendered.
 
-             if (item.rendering) {
 
-                 // Tell the item at which index in the Container it is
 
-                 item.finishRender(i);
 
-                 this.afterRenderItem(item);
 
-             }
 
-         }
 
-     },
 
-     renderChildren: function () {
 
-         var me = this,
 
-             items = me.getLayoutItems(),
 
-             target = me.getRenderTarget();
 
-         me.renderItems(items, target);
 
-     },
 
- <span id='Ext-layout-Layout-method-renderItems'>    /**
 
- </span>     * Iterates over all passed items, ensuring they are rendered.  If the items are already rendered,
 
-      * also determines if the items are in the proper place in the dom.
 
-      * @protected
 
-      */
 
-     renderItems : function(items, target) {
 
-         var me = this,
 
-             ln = items.length,
 
-             i = 0,
 
-             item;
 
-         if (ln) {
 
-             Ext.suspendLayouts();
 
-             for (; i < ln; i++) {
 
-                 item = items[i];
 
-                 if (item && !item.rendered) {
 
-                     me.renderItem(item, target, i);
 
-                 } else if (!me.isValidParent(item, target, i)) {
 
-                     me.moveItem(item, target, i);
 
-                 } else {
 
-                     // still need to configure the item, it may have moved in the container.
 
-                     me.configureItem(item);
 
-                 }
 
-             }
 
-             Ext.resumeLayouts(true);
 
-         }
 
-     },
 
- <span id='Ext-layout-Layout-method-isValidParent'>    /**
 
- </span>     * Validates item is in the proper place in the dom.
 
-      * @protected
 
-      */
 
-     isValidParent : function(item, target, position) {
 
-         var itemDom = item.el ? item.el.dom : Ext.getDom(item),
 
-             targetDom = (target && target.dom) || target;
 
-         // If it's resizable+wrapped, the position element is the wrapper.
 
-         if (itemDom.parentNode && itemDom.parentNode.className.indexOf(Ext.baseCSSPrefix + 'resizable-wrap') !== -1) {
 
-             itemDom = itemDom.parentNode;
 
-         }
 
-         // Test DOM nodes for equality using "===" : http://jsperf.com/dom-equality-test
 
-         if (itemDom && targetDom) {
 
-             if (typeof position == 'number') {
 
-                 return itemDom === targetDom.childNodes[position];
 
-             }
 
-             return itemDom.parentNode === targetDom;
 
-         }
 
-         return false;
 
-     },
 
- <span id='Ext-layout-Layout-method-configureItem'>    /**
 
- </span>     * Called before an item is rendered to allow the layout to configure the item.
 
-      * @param {Ext.Component} item The item to be configured
 
-      * @protected
 
-      */
 
-     configureItem: function(item) {
 
-         item.ownerLayout = this;
 
-     },
 
- <span id='Ext-layout-Layout-method-renderItem'>    /**
 
- </span>     * Renders the given Component into the target Element.
 
-      * @param {Ext.Component} item The Component to render
 
-      * @param {Ext.dom.Element} target The target Element
 
-      * @param {Number} position The position within the target to render the item to
 
-      * @private
 
-      */
 
-     renderItem : function(item, target, position) {
 
-         var me = this;
 
-         if (!item.rendered) {
 
-             me.configureItem(item);
 
-             item.render(target, position);
 
-             me.afterRenderItem(item);
 
-         }
 
-     },
 
- <span id='Ext-layout-Layout-method-moveItem'>    /**
 
- </span>     * Moves Component to the provided target instead.
 
-      * @private
 
-      */
 
-     moveItem : function(item, target, position) {
 
-         target = target.dom || target;
 
-         if (typeof position == 'number') {
 
-             position = target.childNodes[position];
 
-         }
 
-         target.insertBefore(item.el.dom, position || null);
 
-         item.container = Ext.get(target);
 
-         this.configureItem(item);
 
-     },
 
- <span id='Ext-layout-Layout-method-onContentChange'>    /**
 
- </span>     * This method is called when a child item changes in some way. By default this calls
 
-      * {@link Ext.AbstractComponent#updateLayout} on this layout's owner.
 
-      * 
 
-      * @param {Ext.Component} child The child item that has changed.
 
-      * @return {Boolean} True if this layout has handled the content change.
 
-      */
 
-     onContentChange: function () {
 
-         this.owner.updateLayout();
 
-         return true;
 
-     },
 
- <span id='Ext-layout-Layout-method-initLayout'>    /**
 
- </span>     * A one-time initialization method called just before rendering.
 
-      * @protected
 
-      */
 
-     initLayout : function() {
 
-         this.initialized = true;
 
-     },
 
-     // @private Sets the layout owner
 
-     setOwner : function(owner) {
 
-         this.owner = owner;
 
-     },
 
- <span id='Ext-layout-Layout-method-getLayoutItems'>    /**
 
- </span>     * Returns the set of items to layout (empty by default).
 
-      * @protected
 
-      */
 
-     getLayoutItems : function() {
 
-         return [];
 
-     },
 
-     // Placeholder empty functions for subclasses to extend
 
-     afterRenderItem: Ext.emptyFn,
 
-     onAdd : Ext.emptyFn,
 
-     onRemove : Ext.emptyFn,
 
-     onDestroy : Ext.emptyFn,
 
- <span id='Ext-layout-Layout-method-afterRemove'>    /**
 
- </span>     * Removes layout's itemCls and owning Container's itemCls.
 
-      * Clears the managed dimensions flags
 
-      * @protected
 
-      */
 
-     afterRemove : function(item) {
 
-         var me = this,
 
-             el = item.el,
 
-             owner = me.owner,
 
-             removeClasses;
 
-         if (item.rendered) {
 
-             removeClasses = [].concat(me.itemCls || []);
 
-             if (owner.itemCls) {
 
-                 removeClasses = Ext.Array.push(removeClasses, owner.itemCls);
 
-             }
 
-             if (removeClasses.length) {
 
-                 el.removeCls(removeClasses);
 
-             }
 
-         }
 
-         delete item.ownerLayout;
 
-     },
 
- <span id='Ext-layout-Layout-method-destroy'>    /**
 
- </span>     * Destroys this layout. This method removes a `targetCls` from the `target`
 
-      * element and calls `onDestroy`.
 
-      * 
 
-      * A derived class can override either this method or `onDestroy` but in all
 
-      * cases must call the base class versions of these methods to allow the base class to
 
-      * perform its cleanup.
 
-      * 
 
-      * This method (or `onDestroy`) are overridden by subclasses most often to purge
 
-      * event handlers or remove unmanged DOM nodes.
 
-      *
 
-      * @protected
 
-      */
 
-     destroy : function() {
 
-         var me = this,
 
-             target;
 
-         if (me.targetCls) {
 
-             target = me.getTarget();
 
-             if (target) {
 
-                 target.removeCls(me.targetCls);
 
-             }
 
-         }
 
-         me.onDestroy();
 
-     },
 
-     sortWeightedItems: function (items, reverseProp) {
 
-         for (var i = 0, length = items.length; i < length; ++i) {
 
-             items[i].$i = i;
 
-         }
 
-         Ext.Array.sort(items, function (item1, item2) {
 
-             var ret = item2.weight - item1.weight;
 
-             if (!ret) {
 
-                 ret = item1.$i - item2.$i;
 
-                 if (item1[reverseProp]) {
 
-                     ret = -ret;
 
-                 }
 
-             }
 
-             return ret;
 
-         });
 
-         for (i = 0; i < length; ++i) {
 
-             delete items[i].$i;
 
-         }
 
-     }
 
- }, function () {
 
-     var Layout = this,
 
-         sizeModels = {},
 
-         sizeModelsArray = [],
 
-         i, j, n, pairs, sizeModel;
 
-     Layout.prototype.sizeModels = Layout.sizeModels = sizeModels;
 
- <span id='Ext-layout-SizeModel'>    /**
 
- </span>    * This class describes a size determination strategy or algorithm used by the layout
 
-     * system. There are special instances of this class stored as static properties to
 
-     * avoid needless object instantiation. These instances should be treated as readonly.
 
-     * 
 
-     *  * `calculated`
 
-     *  * `configured`
 
-     *  * `constrainedMax`
 
-     *  * `constrainedMin`
 
-     *  * `natural`
 
-     *  * `shrinkWrap`
 
-     *  * `calculatedFromConfigured`
 
-     *  * `calculatedFromNatural`
 
-     *  * `calculatedFromShrinkWrap`
 
-     *
 
-     * Using one of these instances is simply:
 
-     *
 
-     *       var calculated = Ext.layout.SizeModel.calculated;
 
-     *
 
-     * @class Ext.layout.SizeModel
 
-     * @protected
 
-     */
 
-     var SizeModel = function (config) {
 
-         var me = this,
 
-             name = config.name;
 
-         Ext.apply(Ext.apply(me, defaults), config);
 
-         me[name] = true; // set the one special flag that matches our name
 
-         SizeModel[name] = sizeModels[name] = me;
 
-         me.fixed = !(me.auto = me.natural || me.shrinkWrap);
 
- <span id='Ext-layout-SizeModel-property-ordinal'>        /**
 
- </span>         * @prop {Number} ordinal
 
-          * The 0-based ordinal for this `SizeModel` instance.
 
-          * @readonly
 
-          */
 
-         me.ordinal = sizeModelsArray.length;
 
-         sizeModelsArray.push(me);
 
-     };
 
-     Ext.layout.SizeModel = SizeModel;
 
-     var defaults = {
 
- <span id='Ext-layout-SizeModel-property-name'>        /**
 
- </span>        * @property {String} name
 
-         * The name of this size model (e.g., "calculated").
 
-         * @readonly
 
-         */
 
- <span id='Ext-layout-SizeModel-property-auto'>        /**
 
- </span>        * @property {Boolean} auto
 
-         * True if the size is either `natural` or `shrinkWrap`, otherwise false.
 
-         * @readonly
 
-         */
 
- <span id='Ext-layout-SizeModel-property-calculated'>        /**
 
- </span>        * @property {Boolean} calculated
 
-         * True if the size is calculated by the `ownerLayout`.
 
-         * @readonly
 
-         */
 
-         calculated: false,
 
- <span id='Ext-layout-SizeModel-property-configured'>        /**
 
- </span>        * @property {Boolean} configured
 
-         * True if the size is configured (e.g., by a `width` or `minWidth`). The names of
 
-         * configuration properties can be found in the {@link #names} property.
 
-         * @readonly
 
-         */
 
-         configured: false,
 
- <span id='Ext-layout-SizeModel-property-constrainedMax'>        /**
 
- </span>        * @property {Boolean} constrainedMax
 
-         * True if the size is constrained by a `maxWidth` or `maxHeight` configuration. This
 
-         * is a flavor of `configured` (since `maxWidth` and `maxHeight` are config options).
 
-         * If true, the {@link #names} property will be defined as well.
 
-         * @readonly
 
-         */
 
-         constrainedMax: false,
 
- <span id='Ext-layout-SizeModel-property-constrainedMin'>        /**
 
- </span>        * @property {Boolean} constrainedMin
 
-         * True if the size is constrained by a `minWidth` or `minHeight` configuration. This
 
-         * is a flavor of `configured` (since `minWidth` and `minHeight` are config options).
 
-         * If true, the {@link #names} property will be defined as well.
 
-         * @readonly
 
-         */
 
-         constrainedMin: false,
 
- <span id='Ext-layout-SizeModel-property-fixed'>        /**
 
- </span>        * @property {Boolean} fixed
 
-         * True if the size is either `calculated` or `configured`, otherwise false.
 
-         * @readonly
 
-         */
 
- <span id='Ext-layout-SizeModel-property-natural'>        /**
 
- </span>        * @property {Boolean} natural
 
-         * True if the size is determined by CSS and not by content. Such sizes are assumed to
 
-         * be dependent on the container box and measurement occurs on the outer-most element.
 
-         * @readonly
 
-         */
 
-         natural: false,
 
- <span id='Ext-layout-SizeModel-property-shrinkWrap'>        /**
 
- </span>        * @property {Boolean} shrinkWrap
 
-         * True if the size is determined by content irrespective of the container box.
 
-         * @readonly
 
-         */
 
-         shrinkWrap: false,
 
- <span id='Ext-layout-SizeModel-property-calculatedFromConfigured'>        /**
 
- </span>        * @property {Boolean} calculatedFromConfigured
 
-         * True if the size is calculated by the `ownerLayout` based on a configured size.
 
-         * @readonly
 
-         */
 
-         calculatedFromConfigured: false,
 
- <span id='Ext-layout-SizeModel-property-calculatedFromNatural'>        /**
 
- </span>        * @property {Boolean} calculatedFromNatural
 
-         * True if the size is calculated by the `ownerLayout` based on `natural` size model
 
-         * results.
 
-         * @readonly
 
-         */
 
-         calculatedFromNatural: false,
 
- <span id='Ext-layout-SizeModel-property-calculatedFromShrinkWrap'>        /**
 
- </span>        * @property {Boolean} calculatedFromShrinkWrap
 
-         * True if the size is calculated by the `ownerLayout` based on `shrinkWrap` size model
 
-         * results.
 
-         * @readonly
 
-         */
 
-         calculatedFromShrinkWrap: false,
 
- <span id='Ext-layout-SizeModel-property-names'>        /**
 
- </span>        * @property {Object} names An object with the config property names that determine the
 
-         * size.
 
-         * @property {String} names.width The width property name (e.g., 'width').
 
-         * @property {String} names.height The height property name (e.g., 'minHeight').
 
-         * @readonly
 
-         */
 
-         names: null
 
-     };
 
-     //-------------------------------------------------------------------------------
 
-     // These are the 4 fundamental size models.
 
-     new SizeModel({
 
-         name: 'calculated'
 
-     });
 
-     new SizeModel({
 
-         name: 'configured',
 
-         names: { width: 'width', height: 'height' }
 
-     });
 
-     new SizeModel({
 
-         name: 'natural'
 
-     });
 
-     new SizeModel({
 
-         name: 'shrinkWrap'
 
-     });
 
-     //-------------------------------------------------------------------------------
 
-     // These are the size models are flavors of the above but with some extra detail
 
-     // about their dynamic use.
 
-     new SizeModel({
 
-         name: 'calculatedFromConfigured',
 
-         configured: true,
 
-         names: { width: 'width', height: 'height' }
 
-     });
 
-     new SizeModel({
 
-         name: 'calculatedFromNatural',
 
-         natural: true
 
-     });
 
-     new SizeModel({
 
-         name: 'calculatedFromShrinkWrap',
 
-         shrinkWrap: true
 
-     });
 
-     new SizeModel({
 
-         name: 'constrainedMax',
 
-         configured: true,
 
-         constrained: true,
 
-         names: { width: 'maxWidth', height: 'maxHeight' }
 
-     });
 
-     new SizeModel({
 
-         name: 'constrainedMin',
 
-         configured: true,
 
-         constrained: true,
 
-         names: { width: 'minWidth', height: 'minHeight' }
 
-     });
 
-     for (i = 0, n = sizeModelsArray.length; i < n; ++i) {
 
-         sizeModel = sizeModelsArray[i];
 
- <span id='Ext-layout-SizeModel-property-pairsByHeightOrdinal'>        /**
 
- </span>         * An array of objects indexed by the {@link #ordinal} of a height `SizeModel` on
 
-          * a width `SizeModel` to yield an object describing both height and width size
 
-          * models.
 
-          * 
 
-          * Used like this:
 
-          *
 
-          *      widthModel.pairsByHeightOrdinal[heightModel.ordinal]
 
-          *
 
-          * This provides a reusable object equivalent to the following:
 
-          * 
 
-          *      {
 
-          *          width: widthModel,
 
-          *          height: heightModel
 
-          *      }
 
-          *
 
-          * @property {Object[]} pairsByHeightOrdinal
 
-          * @property {Ext.layout.SizeModel} pairsByHeightOrdinal.width The `SizeModel` for
 
-          * the width.
 
-          * @property {Ext.layout.SizeModel} pairsByHeightOrdinal.height The `SizeModel` for
 
-          * the height.
 
-          */
 
-         sizeModel.pairsByHeightOrdinal = pairs = [];
 
-         for (j = 0; j < n; ++j) {
 
-             pairs.push({
 
-                 width: sizeModel,
 
-                 height: sizeModelsArray[j]
 
-             });
 
-         }
 
-     }
 
- });
 
- </pre>
 
- </body>
 
- </html>
 
 
  |