X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/0494b8d9b9bb03ab6c22b34dae81261e3cd7e3e6..7a654f8d43fdb43d78b63d90528bed6e86b608cc:/src/layout/component/field/Text.js diff --git a/src/layout/component/field/Text.js b/src/layout/component/field/Text.js new file mode 100644 index 00000000..898d631a --- /dev/null +++ b/src/layout/component/field/Text.js @@ -0,0 +1,69 @@ +/** + * @private + * @class Ext.layout.component.field.Text + * @extends Ext.layout.component.field.Field + * Layout class for {@link Ext.form.field.Text} fields. Handles sizing the input field. + */ +Ext.define('Ext.layout.component.field.Text', { + extend: 'Ext.layout.component.field.Field', + alias: 'layout.textfield', + requires: ['Ext.util.TextMetrics'], + + type: 'textfield', + + + /** + * Allow layout to proceed if the {@link Ext.form.field.Text#grow} config is enabled and the value has + * changed since the last layout. + */ + beforeLayout: function(width, height) { + var me = this, + owner = me.owner, + lastValue = this.lastValue, + value = owner.getRawValue(); + this.lastValue = value; + return me.callParent(arguments) || (owner.grow && value !== lastValue); + }, + + + /** + * Size the field body contents given the total dimensions of the bodyEl, taking into account the optional + * {@link Ext.form.field.Text#grow} configurations. + * @param {Number} width The bodyEl width + * @param {Number} height The bodyEl height + */ + sizeBodyContents: function(width, height) { + var size = this.adjustForGrow(width, height); + this.setElementSize(this.owner.inputEl, size[0], size[1]); + }, + + + /** + * Given the target bodyEl dimensions, adjust them if necessary to return the correct final + * size based on the text field's {@link Ext.form.field.Text#grow grow config}. + * @param {Number} width The bodyEl width + * @param {Number} height The bodyEl height + * @return {Array} [inputElWidth, inputElHeight] + */ + adjustForGrow: function(width, height) { + var me = this, + owner = me.owner, + inputEl, value, calcWidth, + result = [width, height]; + + if (owner.grow) { + inputEl = owner.inputEl; + + // Find the width that contains the whole text value + value = (inputEl.dom.value || (owner.hasFocus ? '' : owner.emptyText) || '') + owner.growAppend; + calcWidth = inputEl.getTextWidth(value) + inputEl.getBorderWidth("lr") + inputEl.getPadding("lr"); + + // Constrain + result[0] = Ext.Number.constrain(calcWidth, owner.growMin, + Math.max(owner.growMin, Math.min(owner.growMax, Ext.isNumber(width) ? width : Infinity))); + } + + return result; + } + +});