/**
* @private
* Base class for Box Layout overflow handlers. These specialized classes are invoked
* when a Box Layout (either an HBox or a VBox) has child items that are either too wide
* (for HBox) or too tall (for VBox) for its container.
*/
Ext.define('Ext.layout.container.boxOverflow.None', {
alternateClassName: 'Ext.layout.boxOverflow.None',
alias: [
'box.overflow.none',
'box.overflow.None' // capitalized for 4.x compat
],
mixins: [
'Ext.mixin.Factoryable'
],
factoryConfig: {
defaultType: 'none'
},
isBoxOverflowHandler: true,
$configPrefixed: false,
$configStrict: false,
constructor: function(config) {
this.initConfig(config);
},
handleOverflow: Ext.emptyFn,
clearOverflow: Ext.emptyFn,
beginLayout: Ext.emptyFn,
beginLayoutCycle: Ext.emptyFn,
calculate: function(ownerContext) {
var me = this,
plan = ownerContext.state.boxPlan,
overflow;
if (plan && plan.tooNarrow) {
overflow = me.handleOverflow(ownerContext);
if (overflow) {
if (overflow.reservedSpace) {
me.layout.publishInnerCtSize(ownerContext, overflow.reservedSpace);
}
// TODO: If we need to use the code below then we will need to pass along
// the new targetSize as state and use it calculate somehow...
//
// if (overflow.recalculate) {
// ownerContext.invalidate({
// state: {
// overflow: overflow
// }
// });
// }
}
}
else {
me.clearOverflow();
}
},
completeLayout: Ext.emptyFn,
finishedLayout: function(ownerContext) {
var me = this,
owner = me.layout.owner,
hiddens,
hiddenCount;
// Only count hidden children if someone is interested when the overflow state changes
if (owner.hasListeners.overflowchange) {
hiddens = owner.query('>[hidden]');
hiddenCount = hiddens.length;
if (hiddenCount !== me.lastHiddenCount) {
owner.fireEvent('overflowchange', me.lastHiddenCount, hiddenCount, hiddens);
me.lastHiddenCount = hiddenCount;
}
}
},
onRemove: Ext.emptyFn,
/**
* @private
* Normalizes an item reference, string id or numerical index into a reference to the item
* @param {Ext.Component/String/Number} item The item reference, id or index
* @return {Ext.Component} The item
*/
getItem: function(item) {
return this.layout.owner.getComponent(item);
},
getOwnerType: function(owner) {
var type;
if (owner.isToolbar) {
type = 'toolbar';
}
else if (owner.isTabBar) {
type = 'tab-bar';
}
else if (owner.isMenu) {
type = 'menu';
}
else if (owner.isBreadcrumb) {
type = 'breadcrumb';
}
else {
type = owner.getXType();
}
return type;
},
getPrefixConfig: Ext.emptyFn,
getSuffixConfig: Ext.emptyFn,
getOverflowCls: function() {
return '';
},
setVertical: function() {
var me = this,
layout = me.layout,
innerCt = layout.innerCt;
innerCt.removeCls(me.getOverflowCls(layout.oppositeDirection));
innerCt.addCls(me.getOverflowCls(layout.direction));
}
});