/**
* @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();
}
});