diff --git a/eclipse-scout-core/src/form/fields/FormFieldLayout.ts b/eclipse-scout-core/src/form/fields/FormFieldLayout.ts index 3be3d68acdf..26df8f911a3 100644 --- a/eclipse-scout-core/src/form/fields/FormFieldLayout.ts +++ b/eclipse-scout-core/src/form/fields/FormFieldLayout.ts @@ -297,8 +297,7 @@ export class FormFieldLayout extends AbstractLayout { prefSizeField = htmlField.prefSize(options) .add(fieldMargins); } else { - prefSizeField = graphics.prefSize(formField.$fieldContainer, options) - .add(fieldMargins); + prefSizeField = this._getPrefFieldSize(formField, options, fieldMargins); } } @@ -381,4 +380,9 @@ export class FormFieldLayout extends AbstractLayout { } return this.formField.labelWidthInPixel; } + + protected _getPrefFieldSize(formField: FormField, options?: HtmlCompPrefSizeOptions, fieldMargins?: Insets) { + return graphics.prefSize(formField.$fieldContainer, options) + .add(fieldMargins); + } } diff --git a/eclipse-scout-core/src/form/fields/stringfield/StringField.ts b/eclipse-scout-core/src/form/fields/stringfield/StringField.ts index 2ebbc011abf..eef07ce32ee 100644 --- a/eclipse-scout-core/src/form/fields/stringfield/StringField.ts +++ b/eclipse-scout-core/src/form/fields/stringfield/StringField.ts @@ -33,6 +33,7 @@ export class StringField extends BasicField implements StringFieldModel trimText: boolean; wrapText: boolean; mouseClicked: boolean; + fitText: boolean; protected _selectionChangingActionHandler: (event: JQuery.TriggeredEvent) => void; constructor() { @@ -53,6 +54,7 @@ export class StringField extends BasicField implements StringFieldModel this.spellCheckEnabled = false; this.trimText = true; this.wrapText = false; + this.fitText = false; this._selectionChangingActionHandler = this._onSelectionChangingAction.bind(this); } @@ -151,6 +153,9 @@ export class StringField extends BasicField implements StringFieldModel // Restore obfuscated display text. this.$field.val(this.displayText); } + if (this.multilineText && this.fitText) { + this. revalidateLayoutTree(); + } } protected _onMouseWheel(event: JQueryWheelEvent) { @@ -470,6 +475,9 @@ export class StringField extends BasicField implements StringFieldModel } else if (event.type === 'keydown') { // Use set timeout to let the cursor move to the target position setTimeout(this._updateSelection.bind(this)); + if (this.multilineText && this.fitText) { + this. revalidateLayoutTree(); + } } else { this._updateSelection(); } diff --git a/eclipse-scout-core/src/form/fields/stringfield/StringFieldLayout.ts b/eclipse-scout-core/src/form/fields/stringfield/StringFieldLayout.ts index 173db57cb26..ddab352a18e 100644 --- a/eclipse-scout-core/src/form/fields/stringfield/StringFieldLayout.ts +++ b/eclipse-scout-core/src/form/fields/stringfield/StringFieldLayout.ts @@ -7,7 +7,7 @@ * * SPDX-License-Identifier: EPL-2.0 */ -import {FormFieldLayout, graphics, Rectangle, StringField} from '../../../index'; +import {Dimension, FormField, FormFieldLayout, graphics, HtmlCompPrefSizeOptions, Insets, Rectangle, StringField} from '../../../index'; export class StringFieldLayout extends FormFieldLayout { @@ -21,4 +21,19 @@ export class StringFieldLayout extends FormFieldLayout { } super._layoutClearIcon(formField, fieldBounds, right, top); } + + protected override _getPrefFieldSize(formField: FormField, options?: HtmlCompPrefSizeOptions, fieldMargins?: Insets): Dimension { + let prefSize = super._getPrefFieldSize(formField, options, fieldMargins); + if ((formField as StringField).fitText){ + let height = formField.$field.outerHeight(); + let width = formField.$field.outerWidth(); + // set width to 0 to accurately measure scroll height + formField.$field.css('height', 0); + formField.$field.css('width', prefSize.width); + prefSize.height = formField.$field[0].scrollHeight; + formField.$field.css('height', height + 'px'); + formField.$field.css('width', width + 'px'); + } + return prefSize; + } } diff --git a/eclipse-scout-core/src/form/fields/stringfield/StringFieldModel.ts b/eclipse-scout-core/src/form/fields/stringfield/StringFieldModel.ts index 47e0331d86e..22af9120a6b 100644 --- a/eclipse-scout-core/src/form/fields/stringfield/StringFieldModel.ts +++ b/eclipse-scout-core/src/form/fields/stringfield/StringFieldModel.ts @@ -75,4 +75,10 @@ export interface StringFieldModel extends BasicFieldModel { * Default is false. */ wrapText?: boolean; + /** + * Adjust the size of the field to the height of its content + * + * Default is false + */ + fitText?: boolean; }