Class AbstractTextControl<V>

  • Type Parameters:
    V - The type of value the input text is to represent.
    All Implemented Interfaces:
    com.globalmentor.beans.PropertyBindable, com.globalmentor.beans.PropertyConstrainable, com.globalmentor.model.MutableValued<V>, com.globalmentor.model.Valued<V>, Component, Control, EditComponent, InputFocusableComponent, ValueControl<V>, ValuedComponent<V>, EditListenable, Displayable, Enableable, InfoModel, LabelModel, Model, PresentationModel, ValueModel<V>, DepictedObject
    Direct Known Subclasses:
    TextControl

    public class AbstractTextControl<V>
    extends AbstractEditValueControl<V>
    Control to accept text input from the user representing a particular value type. This control keeps track of literal text entered by the user, distinct from the value stored in the model. The component valid status is updated before any literal text change event is fired. Default converters are available for the following types:
    • char[]
    • java.lang.Boolean
    • java.lang.Float
    • java.lang.Integer
    • java.lang.String
    This control uses a single line feed character to represent each line break.
    Author:
    Garret Wilson
    • Field Detail

      • AUTO_COMMIT_PATTERN_PROPERTY

        public static final java.lang.String AUTO_COMMIT_PATTERN_PROPERTY
        The auto commit pattern bound property.
      • COLUMN_COUNT_PROPERTY

        public static final java.lang.String COLUMN_COUNT_PROPERTY
        The column count bound property.
      • PROVISIONAL_TEXT_PROPERTY

        public static final java.lang.String PROVISIONAL_TEXT_PROPERTY
        The provisional text literal bound property.
      • TEXT_PROPERTY

        public static final java.lang.String TEXT_PROPERTY
        The text literal bound property.
      • VALUE_CONTENT_TYPE_PROPERTY

        public static final java.lang.String VALUE_CONTENT_TYPE_PROPERTY
        The value content type bound property.
    • Constructor Detail

      • AbstractTextControl

        public AbstractTextControl​(java.lang.Class<V> valueClass)
        Value class constructor with a default data model to represent a given type and a default converter.
        Parameters:
        valueClass - The class indicating the type of value held in the model.
        Throws:
        java.lang.NullPointerException - if the given value class is null.
      • AbstractTextControl

        public AbstractTextControl​(ValueModel<V> valueModel)
        Value model constructor with a default converter.
        Parameters:
        valueModel - The component data model.
        Throws:
        java.lang.NullPointerException - if the given value model is null.
      • AbstractTextControl

        public AbstractTextControl​(ValueModel<V> valueModel,
                                   Converter<V,​java.lang.String> converter)
        Value model and converter constructor.
        Parameters:
        valueModel - The component value model.
        converter - The converter for this component.
        Throws:
        java.lang.NullPointerException - if the given value model and/or converter is null.
    • Method Detail

      • getAutoCommitPattern

        public java.util.regex.Pattern getAutoCommitPattern()
        Returns:
        The regular expression pattern that will cause the text automatically to be committed immediately, or null if text should not be committed during entry.
      • setAutoCommitPattern

        public void setAutoCommitPattern​(java.util.regex.Pattern newAutoCommitPattern)
        Sets the The regular expression pattern that will cause the text automatically to be committed immediately. This is a bound property.
        Parameters:
        newAutoCommitPattern - The regular expression pattern that will cause the text automatically to be committed immediately, or null if text should not be committed during entry.
        See Also:
        AUTO_COMMIT_PATTERN_PROPERTY
      • getColumnCount

        public int getColumnCount()
        Returns:
        The estimated number of columns requested to be visible, or -1 if no column count is specified.
      • setColumnCount

        public void setColumnCount​(int newColumnCount)
        Sets the estimated number of columns requested to be visible. This is a bound property of type Integer.
        Parameters:
        newColumnCount - The new requested number of visible columns, or -1 if no column count is specified.
        See Also:
        COLUMN_COUNT_PROPERTY
      • getConverter

        public Converter<V,​java.lang.String> getConverter()
        Returns:
        The converter for this component.
      • setConverter

        public void setConverter​(Converter<V,​java.lang.String> newConverter)
        Sets the converter. This is a bound property
        Parameters:
        newConverter - The converter for this component.
        Throws:
        java.lang.NullPointerException - if the given converter is null.
        See Also:
        ValueControl.CONVERTER_PROPERTY
      • getProvisionalText

        public java.lang.String getProvisionalText()
        Returns:
        The provisional text literal value, or null if there is no provisional literal value.
      • setProvisionalText

        public void setProvisionalText​(java.lang.String newProvisionalText)
        Sets the provisional text literal value. This method updates the valid status before firing a change event. This is a bound property.
        Parameters:
        newProvisionalText - The provisional text literal value.
        See Also:
        PROVISIONAL_TEXT_PROPERTY
      • getText

        public java.lang.String getText()
        Returns:
        The text literal value displayed in the control, or null if there is no literal value.
      • setText

        public void setText​(java.lang.String newText)
        Sets the text literal value displayed in the control. This method updates the provisional text to match and updates the valid status if needed. This is a bound property.
        Parameters:
        newText - The text literal value displayed in the control.
        See Also:
        TEXT_PROPERTY
      • setTextValue

        public void setTextValue​(java.lang.String newText)
                          throws ConversionException,
                                 java.beans.PropertyVetoException
        Sets the text literal value displayed in the control, and then converts the text to an appropriate value and stores it. This is a convenience method.
        Parameters:
        newText - The new text literal value to display in the control and then convert and store as a value.
        Throws:
        ConversionException - if the literal value cannot be converted.
        java.beans.PropertyVetoException - if the provided value is not valid or the change has otherwise been vetoed.
        See Also:
        setText(String), getConverter(), Converter.convertLiteral(Object), AbstractValueControl.setValue(Object)
      • getValueContentType

        public com.globalmentor.net.MediaType getValueContentType()
        Returns:
        The content type of the value.
      • setValueContentType

        public void setValueContentType​(com.globalmentor.net.MediaType newValueContentType)
        Sets the content type of the value. This is a bound property.
        Parameters:
        newValueContentType - The new value content type.
        Throws:
        java.lang.NullPointerException - if the given content type is null.
        java.lang.IllegalArgumentException - if the given content type is not a text content type.
        See Also:
        VALUE_CONTENT_TYPE_PROPERTY
      • determineValid

        protected boolean determineValid()
        Checks the state of the component for validity. This version returns true.

        This version performs no additional checks if the control is disabled.

        This version performs no additional checks if the control is disabled.

        Overrides:
        determineValid in class AbstractValueControl<V>
        Returns:
        true if the component and all children passes all validity tests, else false.
      • determineStatus

        protected Control.Status determineStatus()
        Checks the user input status of the control. If the component has a notification of Notification.Severity.WARN, the status is determined to be Control.Status.WARNING. If the component has a notification of Notification.Severity.ERROR, the status is determined to be Control.Status.ERROR. Otherwise, this version returns null. If the control is disabled null is returned.

        This version checks to see if the provisional literal text can be converted to a valid value. If the provisional literal text cannot be converted, the status is determined to be Control.Status.ERROR. If the provisional literal text can be converted but the converted value is invalid, the status is determined to be Control.Status.WARNING unless the provisional text is the same as the literal text, in which case the status is determined to be Control.Status.ERROR. The default value, even if invalid, is considered valid. If the control is disabled no status is given.

        Overrides:
        determineStatus in class AbstractControl
        Returns:
        The current user input status of the control.
      • validate

        public boolean validate()
        Validates the user input of this component and all child components. The component will be updated with error information.

        This version clears all notifications. This version calls AbstractComponent.updateValid().

        This version validates the associated value model. This version performs no additional checks if the control is disabled.

        This version performs no additional checks if the control is disabled.

        Specified by:
        validate in interface Component
        Overrides:
        validate in class AbstractValueControl<V>
        Returns:
        The current state of Component.isValid() as a convenience.
      • reset

        public void reset()
        Resets the control to its default value.

        This version clears any notification.

        This version resets the control value.

        This version updates the text to match the new value.

        Specified by:
        reset in interface Control
        Overrides:
        reset in class AbstractValueControl<V>
        See Also:
        updateText()