--- /dev/null
+/**
+ * @class Ext.layout.container.AbstractContainer
+ * @extends Ext.layout.Layout
+ * Please refer to sub classes documentation
+ */
+
+Ext.define('Ext.layout.container.AbstractContainer', {
+
+ /* Begin Definitions */
+
+ extend: 'Ext.layout.Layout',
+
+ /* End Definitions */
+
+ type: 'container',
+
+ fixedLayout: true,
+
+ // @private
+ managedHeight: true,
+ // @private
+ managedWidth: true,
+
+ /**
+ * @cfg {Boolean} bindToOwnerCtComponent
+ * Flag to notify the ownerCt Component on afterLayout of a change
+ */
+ bindToOwnerCtComponent: false,
+
+ /**
+ * @cfg {Boolean} bindToOwnerCtContainer
+ * Flag to notify the ownerCt Container on afterLayout of a change
+ */
+ bindToOwnerCtContainer: false,
+
+ /**
+ * @cfg {String} itemCls
+ * <p>An optional extra CSS class that will be added to the container. This can be useful for adding
+ * customized styles to the container or any of its children using standard CSS rules. See
+ * {@link Ext.Component}.{@link Ext.Component#ctCls ctCls} also.</p>
+ * </p>
+ */
+
+ isManaged: function(dimension) {
+ dimension = Ext.String.capitalize(dimension);
+ var me = this,
+ child = me,
+ managed = me['managed' + dimension],
+ ancestor = me.owner.ownerCt;
+
+ if (ancestor && ancestor.layout) {
+ while (ancestor && ancestor.layout) {
+ if (managed === false || ancestor.layout['managed' + dimension] === false) {
+ managed = false;
+ break;
+ }
+ ancestor = ancestor.ownerCt;
+ }
+ }
+ return managed;
+ },
+
+ layout: function() {
+ var me = this,
+ owner = me.owner;
+ if (Ext.isNumber(owner.height) || owner.isViewport) {
+ me.managedHeight = false;
+ }
+ if (Ext.isNumber(owner.width) || owner.isViewport) {
+ me.managedWidth = false;
+ }
+ me.callParent(arguments);
+ },
+
+ /**
+ * Set the size of an item within the Container. We should always use setCalculatedSize.
+ * @private
+ */
+ setItemSize: function(item, width, height) {
+ if (Ext.isObject(width)) {
+ height = width.height;
+ width = width.width;
+ }
+ item.setCalculatedSize(width, height, this.owner);
+ },
+
+ /**
+ * <p>Returns an array of child components either for a render phase (Performed in the beforeLayout method of the layout's
+ * base class), or the layout phase (onLayout).</p>
+ * @return {Array} of child components
+ */
+ getLayoutItems: function() {
+ return this.owner && this.owner.items && this.owner.items.items || [];
+ },
+
+ afterLayout: function() {
+ this.owner.afterLayout(this);
+ },
+ /**
+ * Returns the owner component's resize element.
+ * @return {Ext.core.Element}
+ */
+ getTarget: function() {
+ return this.owner.getTargetEl();
+ },
+ /**
+ * <p>Returns the element into which rendering must take place. Defaults to the owner Container's {@link Ext.AbstractComponent#targetEl}.</p>
+ * May be overridden in layout managers which implement an inner element.
+ * @return {Ext.core.Element}
+ */
+ getRenderTarget: function() {
+ return this.owner.getTargetEl();
+ }
+});