/**
* Component layout for {@link Ext.view.BoundList}. Handles constraining the height to the configured maxHeight.
* @class Ext.layout.component.BoundList
* @extends Ext.layout.component.Component
* @private
*/
Ext.define('Ext.layout.component.BoundList', {
extend: 'Ext.layout.component.Component',
alias: 'layout.boundlist',
type: 'component',
beforeLayout: function() {
return this.callParent(arguments) || this.owner.refreshed > 0;
},
onLayout : function(width, height) {
var me = this,
owner = me.owner,
floating = owner.floating,
el = owner.el,
xy = el.getXY(),
isNumber = Ext.isNumber,
minWidth, maxWidth, minHeight, maxHeight,
naturalWidth, naturalHeight, constrainedWidth, constrainedHeight, undef;
if (floating) {
// Position offscreen so the natural width is not affected by the viewport's right edge
el.setXY([-9999,-9999]);
}
// Calculate initial layout
me.setTargetSize(width, height);
// Handle min/maxWidth for auto-width
if (!isNumber(width)) {
minWidth = owner.minWidth;
maxWidth = owner.maxWidth;
if (isNumber(minWidth) || isNumber(maxWidth)) {
naturalWidth = el.getWidth();
if (naturalWidth < minWidth) {
constrainedWidth = minWidth;
}
else if (naturalWidth > maxWidth) {
constrainedWidth = maxWidth;
}
if (constrainedWidth) {
me.setTargetSize(constrainedWidth);
}
}
}
// Handle min/maxHeight for auto-height
if (!isNumber(height)) {
minHeight = owner.minHeight;
maxHeight = owner.maxHeight;
if (isNumber(minHeight) || isNumber(maxHeight)) {
naturalHeight = el.getHeight();
if (naturalHeight < minHeight) {
constrainedHeight = minHeight;
}
else if (naturalHeight > maxHeight) {
constrainedHeight = maxHeight;
}
if (constrainedHeight) {
me.setTargetSize(undef, constrainedHeight);
}
}
}
if (floating) {
// Restore position
el.setXY(xy);
}
},
afterLayout: function() {
var me = this,
toolbar = me.owner.pagingToolbar;
me.callParent();
if (toolbar) {
toolbar.doComponentLayout();
}
},
setTargetSize : function(width, height) {
var me = this,
owner = me.owner,
listHeight = null,
toolbar;
// Size the listEl
if (Ext.isNumber(height)) {
listHeight = height - owner.el.getFrameWidth('tb');
toolbar = owner.pagingToolbar;
if (toolbar) {
listHeight -= toolbar.getHeight();
}
}
me.setElementSize(owner.listEl, null, listHeight);
me.callParent(arguments);
}
});