microsoft-teamsdiscordmessengercustom-servicesmacoslinuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemail
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.9 KiB
131 lines
4.9 KiB
9 years ago
|
/**
|
||
|
* Component layout for grid column headers which have a title element at the top followed by content.
|
||
|
* @private
|
||
|
*/
|
||
|
Ext.define('Ext.grid.ColumnComponentLayout', {
|
||
|
extend: 'Ext.layout.component.Auto',
|
||
|
alias: 'layout.columncomponent',
|
||
|
|
||
|
type: 'columncomponent',
|
||
|
|
||
|
setWidthInDom: true,
|
||
|
|
||
|
_paddingReset: {
|
||
|
paddingTop: '', // reset back to default padding of the style
|
||
|
paddingBottom: ''
|
||
|
},
|
||
|
|
||
|
columnAutoCls: Ext.baseCSSPrefix + 'column-header-text-container-auto',
|
||
|
|
||
|
beginLayout: function(ownerContext) {
|
||
|
this.callParent(arguments);
|
||
|
ownerContext.titleContext = ownerContext.getEl('titleEl');
|
||
|
},
|
||
|
|
||
|
beginLayoutCycle: function(ownerContext) {
|
||
|
var me = this,
|
||
|
owner = me.owner,
|
||
|
shrinkWrap = ownerContext.widthModel.shrinkWrap;
|
||
|
|
||
|
me.callParent(arguments);
|
||
|
|
||
|
// If shrinkwrapping, allow content width to stretch the element
|
||
|
if (shrinkWrap) {
|
||
|
owner.el.setWidth('');
|
||
|
}
|
||
|
owner.textContainerEl[shrinkWrap ? 'addCls' : 'removeCls'](me.columnAutoCls);
|
||
|
owner.titleEl.setStyle(me._paddingReset);
|
||
|
},
|
||
|
|
||
|
// If not shrink wrapping, push height info down into child items
|
||
|
publishInnerHeight: function(ownerContext, outerHeight) {
|
||
|
var me = this,
|
||
|
owner = me.owner,
|
||
|
innerHeight;
|
||
|
|
||
|
// TreePanels (and grids with hideHeaders: true) set their column container height to zero to hide them.
|
||
|
// This is because they need to lay out in order to calculate widths for the columns (eg flexes).
|
||
|
// If there is no height to lay out, bail out early.
|
||
|
if (owner.getRootHeaderCt().hiddenHeaders) {
|
||
|
ownerContext.setProp('innerHeight', 0);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
|
||
|
// If this ia a group header; that is, it contains subheaders...
|
||
|
// hasRawContent = !(target.isContainer && target.items.items.length > 0)
|
||
|
if (!ownerContext.hasRawContent) {
|
||
|
// We do not have enough information to get the height of the titleEl
|
||
|
if (owner.headerWrap && !ownerContext.hasDomProp('width')) {
|
||
|
me.done = false;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
innerHeight = outerHeight - ownerContext.getBorderInfo().height;
|
||
|
ownerContext.setProp('innerHeight', innerHeight - owner.titleEl.getHeight(), false);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
// We do not need the Direct2D sub pixel measurement here. Just the offsetHeight will do.
|
||
|
// TODO: When https://sencha.jira.com/browse/EXTJSIV-7734 is fixed to not do subpixel adjustment on height,
|
||
|
// remove this override.
|
||
|
measureContentHeight: function(ownerContext) {
|
||
|
return ownerContext.el.dom.offsetHeight;
|
||
|
},
|
||
|
|
||
|
// If not shrink wrapping, push width info down into child items
|
||
|
publishInnerWidth: function(ownerContext, outerWidth) {
|
||
|
// If we are acting as a container, publish the innerWidth for the ColumnLayout to use
|
||
|
if (!ownerContext.hasRawContent) {
|
||
|
ownerContext.setProp('innerWidth', outerWidth - ownerContext.getBorderInfo().width, false);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
// Push content height outwards when we are shrinkwrapping
|
||
|
calculateOwnerHeightFromContentHeight: function (ownerContext, contentHeight) {
|
||
|
var result = this.callParent(arguments),
|
||
|
owner = this.owner;
|
||
|
|
||
|
// If we are NOT a group header, we just use the auto component's measurement
|
||
|
if (!ownerContext.hasRawContent) {
|
||
|
if (!owner.headerWrap || ownerContext.hasDomProp('width')) {
|
||
|
return contentHeight + owner.titleEl.getHeight() + ownerContext.getBorderInfo().height;
|
||
|
}
|
||
|
|
||
|
// We do not have the information to return the height yet because we cannot know
|
||
|
// the final height of the text el
|
||
|
return null;
|
||
|
}
|
||
|
return result;
|
||
|
},
|
||
|
|
||
|
// Push content width outwards when we are shrinkwrapping
|
||
|
calculateOwnerWidthFromContentWidth: function (ownerContext, contentWidth) {
|
||
|
var owner = this.owner,
|
||
|
padWidth = ownerContext.getPaddingInfo().width,
|
||
|
triggerOffset = this.getTriggerOffset(owner, ownerContext),
|
||
|
inner;
|
||
|
|
||
|
// Only measure the content if we're not grouped, otherwise
|
||
|
// the size should be governed by the children
|
||
|
if (owner.isGroupHeader) {
|
||
|
inner = contentWidth;
|
||
|
} else {
|
||
|
inner = Math.max(contentWidth, owner.textEl.getWidth() + ownerContext.titleContext.getPaddingInfo().width);
|
||
|
}
|
||
|
return inner + padWidth + triggerOffset;
|
||
|
},
|
||
|
|
||
|
getTriggerOffset: function(owner, ownerContext) {
|
||
|
var width = 0;
|
||
|
|
||
|
if (ownerContext.widthModel.shrinkWrap && !owner.menuDisabled) {
|
||
|
// If we have any children underneath, then we already have space reserved
|
||
|
if (owner.query('>:not([hidden])').length === 0) {
|
||
|
width = owner.getTriggerElWidth();
|
||
|
}
|
||
|
}
|
||
|
return width;
|
||
|
}
|
||
|
});
|