diff options
Diffstat (limited to 'src/com/vaadin/ui/TextField.java')
-rw-r--r-- | src/com/vaadin/ui/TextField.java | 479 |
1 files changed, 60 insertions, 419 deletions
diff --git a/src/com/vaadin/ui/TextField.java b/src/com/vaadin/ui/TextField.java index c2d0aee29f..81e586a505 100644 --- a/src/com/vaadin/ui/TextField.java +++ b/src/com/vaadin/ui/TextField.java @@ -4,15 +4,8 @@ package com.vaadin.ui; -import java.text.Format; -import java.util.Map; - import com.vaadin.data.Property; import com.vaadin.event.FieldEvents; -import com.vaadin.event.FieldEvents.BlurEvent; -import com.vaadin.event.FieldEvents.BlurListener; -import com.vaadin.event.FieldEvents.FocusEvent; -import com.vaadin.event.FieldEvents.FocusListener; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.gwt.client.ui.VTextField; @@ -40,20 +33,14 @@ import com.vaadin.ui.ClientWidget.LoadStyle; */ @SuppressWarnings("serial") @ClientWidget(value = VTextField.class, loadStyle = LoadStyle.EAGER) -public class TextField extends AbstractField implements +public class TextField extends AbstractTextField implements FieldEvents.BlurNotifier, FieldEvents.FocusNotifier { - /* Private members */ - - /** - * Value formatter used to format the string contents. - */ - private Format format; - /** - * Number of visible columns in the TextField. + * Tells if input is used to enter sensitive information that is not echoed + * to display. Typically passwords. */ - private int columns = 0; + private boolean secret = false; /** * Number of visible rows in a multiline TextField. Value 0 implies a @@ -67,35 +54,15 @@ public class TextField extends AbstractField implements private boolean wordwrap = true; /** - * Tells if input is used to enter sensitive information that is not echoed - * to display. Typically passwords. - */ - private boolean secret = false; - - /** - * Null representation. - */ - private String nullRepresentation = "null"; - - /** - * Is setting to null from non-null value allowed by setting with null - * representation . + * Number of visible columns in the TextField. */ - private boolean nullSettingAllowed = false; + private int columns = 0; private String inputPrompt = null; - /** - * Maximum character count in text field. - */ - private int maxLength = -1; - private int selectionPosition = -1; - private int selectionLength; - /* Constructors */ - /** * Constructs an empty <code>TextField</code> with no caption. */ @@ -156,173 +123,67 @@ public class TextField extends AbstractField implements setCaption(caption); } - /* Component basic features */ + /** + * Gets the secret property on and off. If a field is used to enter + * secretinformation the information is not echoed to display. + * + * @return <code>true</code> if the field is used to enter secret + * information, <code>false</code> otherwise. + * + * @deprecated use {@link PasswordField} instead + */ + @Deprecated + public boolean isSecret() { + return secret; + } - /* - * Paints this component. Don't add a JavaDoc comment here, we use the - * default documentation from implemented interface. + /** + * Sets the secret property on and off. If a field is used to enter + * secretinformation the information is not echoed to display. + * + * @param secret + * the value specifying if the field is used to enter secret + * information. + * @deprecated use {@link PasswordField} instead */ + @Deprecated + public void setSecret(boolean secret) { + if (this.secret != secret) { + this.secret = secret; + requestRepaint(); + } + } + @Override public void paintContent(PaintTarget target) throws PaintException { - super.paintContent(target); - - // Sets the secret attribute if (isSecret()) { target.addAttribute("secret", true); } - - if (getMaxLength() >= 0) { - target.addAttribute("maxLength", getMaxLength()); - } - - if (inputPrompt != null) { - target.addAttribute("prompt", inputPrompt); - } - if (selectionPosition != -1) { - target.addAttribute("selpos", selectionPosition); - target.addAttribute("sellen", selectionLength); - selectionPosition = -1; - } - // Adds the number of column and rows final int columns = getColumns(); - final int rows = getRows(); if (columns != 0) { target.addAttribute("cols", String.valueOf(columns)); } + final int rows = getRows(); if (rows != 0) { target.addAttribute("rows", String.valueOf(rows)); target.addAttribute("multiline", true); - if (!wordwrap) { + if (!isWordwrap()) { target.addAttribute("wordwrap", false); } } - // Adds the content as variable - String value = getFormattedValue(); - if (value == null) { - value = getNullRepresentation(); - } - if (value == null) { - throw new IllegalStateException( - "Null values are not allowed if the null-representation is null"); - } - target.addVariable(this, "text", value); - } - - /** - * Gets the formatted string value. Sets the field value by using the - * assigned Format. - * - * @return the Formatted value. - * @see #setFormat(Format) - * @see Format - * @deprecated - */ - @Deprecated - protected String getFormattedValue() { - Object v = getValue(); - if (v == null) { - return null; - } - return v.toString(); - } - - /* - * Gets the value of the field, but uses formatter is given. Don't add a - * JavaDoc comment here, we use the default documentation from implemented - * interface. - */ - @Override - public Object getValue() { - Object v = super.getValue(); - if (format == null || v == null) { - return v; - } - try { - return format.format(v); - } catch (final IllegalArgumentException e) { - return v; - } - } - - /* - * (non-Javadoc) - * - * @see com.vaadin.ui.AbstractField#changeVariables(java.lang.Object, - * java.util.Map) - */ - @Override - public void changeVariables(Object source, Map<String, Object> variables) { - - super.changeVariables(source, variables); - - // Sets the text - if (variables.containsKey("text") && !isReadOnly()) { - - // Only do the setting if the string representation of the value - // has been updated - String newValue = (String) variables.get("text"); - - // server side check for max length - if (getMaxLength() != -1 && newValue.length() > getMaxLength()) { - newValue = newValue.substring(0, getMaxLength()); - } - final String oldValue = getFormattedValue(); - if (newValue != null - && (oldValue == null || isNullSettingAllowed()) - && newValue.equals(getNullRepresentation())) { - newValue = null; - } - if (newValue != oldValue - && (newValue == null || !newValue.equals(oldValue))) { - boolean wasModified = isModified(); - setValue(newValue, true); - - // If the modified status changes, or if we have a formatter, - // repaint is needed after all. - if (format != null || wasModified != isModified()) { - requestRepaint(); - } - } + if (getInputPrompt() != null) { + target.addAttribute("prompt", getInputPrompt()); } - if (variables.containsKey(FocusEvent.EVENT_ID)) { - fireEvent(new FocusEvent(this)); - } - if (variables.containsKey(BlurEvent.EVENT_ID)) { - fireEvent(new BlurEvent(this)); + if (selectionPosition != -1) { + target.addAttribute("selpos", selectionPosition); + target.addAttribute("sellen", selectionLength); + selectionPosition = -1; } - } - - /* Text field configuration */ - - /** - * Gets the number of columns in the editor. If the number of columns is set - * 0, the actual number of displayed columns is determined implicitly by the - * adapter. - * - * @return the number of columns in the editor. - */ - public int getColumns() { - return columns; - } - - /** - * Sets the number of columns in the editor. If the number of columns is set - * 0, the actual number of displayed columns is determined implicitly by the - * adapter. - * - * @param columns - * the number of columns to set. - */ - public void setColumns(int columns) { - if (columns < 0) { - columns = 0; - } - this.columns = columns; - requestRepaint(); + super.paintContent(target); } /** @@ -363,56 +224,6 @@ public class TextField extends AbstractField implements } /** - * Sets the height of the {@link TextField} instance. - * - * <p> - * Setting height for {@link TextField} also has a side-effect that puts - * {@link TextField} into multiline mode (aka "textarea"). Multiline mode - * can also be achieved by calling {@link #setRows(int)}. The height value - * overrides the number of rows set by {@link #setRows(int)}. - * <p> - * If you want to set height of single line {@link TextField}, call - * {@link #setRows(int)} with value 0 after setting the height. Setting rows - * to 0 resets the side-effect. - * - * @see com.vaadin.ui.AbstractComponent#setHeight(float, int) - */ - @Override - public void setHeight(float height, int unit) { - super.setHeight(height, unit); - if (height > 1) { - /* - * In html based terminals we most commonly want to make component - * to be textarea if height is defined. Setting row field above 0 - * will render component as textarea. - */ - rows = 2; - } - } - - /** - * Sets the height of the {@link TextField} instance. - * - * <p> - * Setting height for {@link TextField} also has a side-effect that puts - * {@link TextField} into multiline mode (aka "textarea"). Multiline mode - * can also be achieved by calling {@link #setRows(int)}. The height value - * overrides the number of rows set by {@link #setRows(int)}. - * <p> - * If you want to set height of single line {@link TextField}, call - * {@link #setRows(int)} with value 0 after setting the height. Setting rows - * to 0 resets the side-effect. - * - * @see com.vaadin.ui.AbstractComponent#setHeight(java.lang.String) - */ - @Override - public void setHeight(String height) { - // will call setHeight(float, int) the actually does the magic. Method - // is overridden just to document side-effects. - super.setHeight(height); - } - - /** * Tests if the editor is in word-wrap mode. * * @return <code>true</code> if the component is in the word-wrap mode, @@ -445,131 +256,31 @@ public class TextField extends AbstractField implements } } - /* Property features */ - - /* - * Gets the edited property's type. Don't add a JavaDoc comment here, we use - * the default documentation from implemented interface. - */ - @Override - public Class getType() { - return String.class; - } - /** - * Gets the secret property on and off. If a field is used to enter - * secretinformation the information is not echoed to display. + * Gets the number of columns in the editor. If the number of columns is set + * 0, the actual number of displayed columns is determined implicitly by the + * adapter. * - * @return <code>true</code> if the field is used to enter secret - * information, <code>false</code> otherwise. + * @return the number of columns in the editor. */ - public boolean isSecret() { - return secret; + public int getColumns() { + return columns; } /** - * Sets the secret property on and off. If a field is used to enter - * secretinformation the information is not echoed to display. + * Sets the number of columns in the editor. If the number of columns is set + * 0, the actual number of displayed columns is determined implicitly by the + * adapter. * - * @param secret - * the value specifying if the field is used to enter secret - * information. + * @param columns + * the number of columns to set. */ - public void setSecret(boolean secret) { - if (this.secret != secret) { - this.secret = secret; - requestRepaint(); + public void setColumns(int columns) { + if (columns < 0) { + columns = 0; } - } - - /** - * Gets the null-string representation. - * - * <p> - * The null-valued strings are represented on the user interface by - * replacing the null value with this string. If the null representation is - * set null (not 'null' string), painting null value throws exception. - * </p> - * - * <p> - * The default value is string 'null'. - * </p> - * - * @return the String Textual representation for null strings. - * @see TextField#isNullSettingAllowed() - */ - public String getNullRepresentation() { - return nullRepresentation; - } - - /** - * Is setting nulls with null-string representation allowed. - * - * <p> - * If this property is true, writing null-representation string to text - * field always sets the field value to real null. If this property is - * false, null setting is not made, but the null values are maintained. - * Maintenance of null-values is made by only converting the textfield - * contents to real null, if the text field matches the null-string - * representation and the current value of the field is null. - * </p> - * - * <p> - * By default this setting is false - * </p> - * - * @return boolean Should the null-string represenation be always converted - * to null-values. - * @see TextField#getNullRepresentation() - */ - public boolean isNullSettingAllowed() { - return nullSettingAllowed; - } - - /** - * Sets the null-string representation. - * - * <p> - * The null-valued strings are represented on the user interface by - * replacing the null value with this string. If the null representation is - * set null (not 'null' string), painting null value throws exception. - * </p> - * - * <p> - * The default value is string 'null' - * </p> - * - * @param nullRepresentation - * Textual representation for null strings. - * @see TextField#setNullSettingAllowed(boolean) - */ - public void setNullRepresentation(String nullRepresentation) { - this.nullRepresentation = nullRepresentation; - } - - /** - * Sets the null conversion mode. - * - * <p> - * If this property is true, writing null-representation string to text - * field always sets the field value to real null. If this property is - * false, null setting is not made, but the null values are maintained. - * Maintenance of null-values is made by only converting the textfield - * contents to real null, if the text field matches the null-string - * representation and the current value of the field is null. - * </p> - * - * <p> - * By default this setting is false. - * </p> - * - * @param nullSettingAllowed - * Should the null-string represenation be always converted to - * null-values. - * @see TextField#getNullRepresentation() - */ - public void setNullSettingAllowed(boolean nullSettingAllowed) { - this.nullSettingAllowed = nullSettingAllowed; + this.columns = columns; + requestRepaint(); } /** @@ -594,76 +305,6 @@ public class TextField extends AbstractField implements } /** - * Gets the value formatter of TextField. - * - * @return the Format used to format the value. - * @deprecated replaced by {@link com.vaadin.data.util.PropertyFormatter} - */ - @Deprecated - public Format getFormat() { - return format; - } - - /** - * Gets the value formatter of TextField. - * - * @param format - * the Format used to format the value. Null disables the - * formatting. - * @deprecated replaced by {@link com.vaadin.data.util.PropertyFormatter} - */ - @Deprecated - public void setFormat(Format format) { - this.format = format; - requestRepaint(); - } - - @Override - protected boolean isEmpty() { - return super.isEmpty() || toString().length() == 0; - } - - /** - * Returns the maximum number of characters in the field. Value -1 is - * considered unlimited. Terminal may however have some technical limits. - * - * @return the maxLength - */ - public int getMaxLength() { - return maxLength; - } - - /** - * Sets the maximum number of characters in the field. Value -1 is - * considered unlimited. Terminal may however have some technical limits. - * - * @param maxLength - * the maxLength to set - */ - public void setMaxLength(int maxLength) { - this.maxLength = maxLength; - requestRepaint(); - } - - public void addListener(FocusListener listener) { - addListener(FocusEvent.EVENT_ID, FocusEvent.class, listener, - FocusListener.focusMethod); - } - - public void removeListener(FocusListener listener) { - removeListener(FocusEvent.EVENT_ID, FocusEvent.class, listener); - } - - public void addListener(BlurListener listener) { - addListener(BlurEvent.EVENT_ID, BlurEvent.class, listener, - BlurListener.blurMethod); - } - - public void removeListener(BlurListener listener) { - removeListener(BlurEvent.EVENT_ID, BlurEvent.class, listener); - } - - /** * Selects all text in the field. * * @since 6.4 |