diff options
author | Marc Englund <marc.englund@itmill.com> | 2009-04-06 13:27:02 +0000 |
---|---|---|
committer | Marc Englund <marc.englund@itmill.com> | 2009-04-06 13:27:02 +0000 |
commit | bdee6749d449ffdf7cf6584d9d67bca6f3d0dd79 (patch) | |
tree | a352b7570bd5888f30af6e1f260fdea87deb240c /src/com | |
parent | aa059edab19e8b10ebd18fb4c42b95c95dd60f49 (diff) | |
download | vaadin-framework-bdee6749d449ffdf7cf6584d9d67bca6f3d0dd79.tar.gz vaadin-framework-bdee6749d449ffdf7cf6584d9d67bca6f3d0dd79.zip |
(merged from 5.4) Implements "input prompt" for ComboBox and TextField. Also includes Sampler samples. Fixes #1455
svn changeset:7337/svn branch:6.0
Diffstat (limited to 'src/com')
12 files changed, 333 insertions, 47 deletions
diff --git a/src/com/itmill/toolkit/demo/sampler/FeatureSet.java b/src/com/itmill/toolkit/demo/sampler/FeatureSet.java index 6c9da622ac..ec521cbc9b 100644 --- a/src/com/itmill/toolkit/demo/sampler/FeatureSet.java +++ b/src/com/itmill/toolkit/demo/sampler/FeatureSet.java @@ -43,6 +43,7 @@ import com.itmill.toolkit.demo.sampler.features.notifications.NotificationWarnin import com.itmill.toolkit.demo.sampler.features.panels.PanelBasic; import com.itmill.toolkit.demo.sampler.features.panels.PanelLight; import com.itmill.toolkit.demo.sampler.features.selects.ComboBoxContains; +import com.itmill.toolkit.demo.sampler.features.selects.ComboBoxInputPrompt; import com.itmill.toolkit.demo.sampler.features.selects.ComboBoxNewItems; import com.itmill.toolkit.demo.sampler.features.selects.ComboBoxPlain; import com.itmill.toolkit.demo.sampler.features.selects.ComboBoxStartsWith; @@ -70,6 +71,7 @@ import com.itmill.toolkit.demo.sampler.features.text.LabelPreformatted; import com.itmill.toolkit.demo.sampler.features.text.LabelRich; import com.itmill.toolkit.demo.sampler.features.text.RichTextEditor; import com.itmill.toolkit.demo.sampler.features.text.TextArea; +import com.itmill.toolkit.demo.sampler.features.text.TextFieldInputPrompt; import com.itmill.toolkit.demo.sampler.features.text.TextFieldSecret; import com.itmill.toolkit.demo.sampler.features.text.TextFieldSingle; import com.itmill.toolkit.demo.sampler.features.trees.TreeActions; @@ -213,6 +215,7 @@ public class FeatureSet extends Feature { new TwinColumnSelect(), // new NativeSelection(), // new ComboBoxPlain(), // + new ComboBoxInputPrompt(), // new ComboBoxStartsWith(), // new ComboBoxContains(), // new ComboBoxNewItems(), // @@ -368,6 +371,7 @@ public class FeatureSet extends Feature { // new TextFieldSingle(), // new TextFieldSecret(), // + new TextFieldInputPrompt(), // new TextArea(), // new RichTextEditor(), // }); diff --git a/src/com/itmill/toolkit/demo/sampler/features/selects/75-ComboBoxInputPrompt.png b/src/com/itmill/toolkit/demo/sampler/features/selects/75-ComboBoxInputPrompt.png Binary files differnew file mode 100644 index 0000000000..3ef7a48faa --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/selects/75-ComboBoxInputPrompt.png diff --git a/src/com/itmill/toolkit/demo/sampler/features/selects/ComboBoxInputPrompt.java b/src/com/itmill/toolkit/demo/sampler/features/selects/ComboBoxInputPrompt.java new file mode 100644 index 0000000000..2155f874f9 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/selects/ComboBoxInputPrompt.java @@ -0,0 +1,44 @@ +package com.itmill.toolkit.demo.sampler.features.selects;
+
+import com.itmill.toolkit.demo.sampler.APIResource;
+import com.itmill.toolkit.demo.sampler.Feature;
+import com.itmill.toolkit.demo.sampler.NamedExternalResource;
+import com.itmill.toolkit.demo.sampler.features.text.TextFieldInputPrompt;
+import com.itmill.toolkit.ui.ComboBox;
+
+public class ComboBoxInputPrompt extends Feature {
+ @Override
+ public String getName() {
+ return "Combobox with input prompt";
+ }
+
+ @Override
+ public String getDescription() {
+ return "ComboBox is a drop-down selection component with single item selection."
+ + " It can have an <i>input prompt</i> - a textual hint that is shown within"
+ + " the select when no value is selected.<br/>"
+ + " You can use an input prompt instead of a caption to save"
+ + " space, but only do so if the function of the ComboBox is"
+ + " still clear when a value is selected and the prompt is no"
+ + " longer visible.";
+ }
+
+ @Override
+ public APIResource[] getRelatedAPI() {
+ return new APIResource[] { new APIResource(ComboBox.class) };
+ }
+
+ @Override
+ public Class[] getRelatedFeatures() {
+ return new Class[] { ComboBoxStartsWith.class, ComboBoxContains.class,
+ ComboBoxNewItems.class, TextFieldInputPrompt.class };
+ }
+
+ @Override
+ public NamedExternalResource[] getRelatedResources() {
+ return new NamedExternalResource[] { new NamedExternalResource(
+ "UI Patterns, Input Prompt",
+ "http://ui-patterns.com/pattern/InputPrompt") };
+ }
+
+}
diff --git a/src/com/itmill/toolkit/demo/sampler/features/selects/ComboBoxInputPromptExample.java b/src/com/itmill/toolkit/demo/sampler/features/selects/ComboBoxInputPromptExample.java new file mode 100644 index 0000000000..4146614659 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/selects/ComboBoxInputPromptExample.java @@ -0,0 +1,39 @@ +package com.itmill.toolkit.demo.sampler.features.selects;
+
+import com.itmill.toolkit.data.Property;
+import com.itmill.toolkit.data.Property.ValueChangeEvent;
+import com.itmill.toolkit.ui.ComboBox;
+import com.itmill.toolkit.ui.VerticalLayout;
+
+public class ComboBoxInputPromptExample extends VerticalLayout implements
+ Property.ValueChangeListener {
+
+ private static final String[] cities = new String[] { "Berlin", "Brussels",
+ "Helsinki", "Madrid", "Oslo", "Paris", "Stockholm" };
+
+ public ComboBoxInputPromptExample() {
+ setMargin(true); // for looks: more 'air'
+
+ // Create & set input prompt
+ ComboBox l = new ComboBox();
+ l.setInputPrompt("Please select a city");
+
+ // configure & load content
+ l.setImmediate(true);
+ l.addListener(this);
+ for (int i = 0; i < cities.length; i++) {
+ l.addItem(cities[i]);
+ }
+
+ // add to the layout
+ addComponent(l);
+ }
+
+ /*
+ * Shows a notification when a selection is made.
+ */
+ public void valueChange(ValueChangeEvent event) {
+ getWindow().showNotification("Selected city: " + event.getProperty());
+
+ }
+}
diff --git a/src/com/itmill/toolkit/demo/sampler/features/text/75-TextFieldInputPrompt.png b/src/com/itmill/toolkit/demo/sampler/features/text/75-TextFieldInputPrompt.png Binary files differnew file mode 100644 index 0000000000..dc7fbb38f9 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/text/75-TextFieldInputPrompt.png diff --git a/src/com/itmill/toolkit/demo/sampler/features/text/TextFieldInputPrompt.java b/src/com/itmill/toolkit/demo/sampler/features/text/TextFieldInputPrompt.java new file mode 100644 index 0000000000..5299916e31 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/text/TextFieldInputPrompt.java @@ -0,0 +1,47 @@ +package com.itmill.toolkit.demo.sampler.features.text;
+
+import com.itmill.toolkit.demo.sampler.APIResource;
+import com.itmill.toolkit.demo.sampler.Feature;
+import com.itmill.toolkit.demo.sampler.FeatureSet;
+import com.itmill.toolkit.demo.sampler.NamedExternalResource;
+import com.itmill.toolkit.demo.sampler.features.selects.ComboBoxInputPrompt;
+import com.itmill.toolkit.demo.sampler.features.selects.ComboBoxNewItems;
+import com.itmill.toolkit.ui.TextField;
+
+public class TextFieldInputPrompt extends Feature {
+ @Override
+ public String getName() {
+ return "Text field with input prompt";
+ }
+
+ @Override
+ public String getDescription() {
+ return " The TextField can have an <i>input prompt</i> - a textual hint that is shown within"
+ + " the field when the field is otherwise empty.<br/>"
+ + " You can use an input prompt instead of a caption to save"
+ + " space, but only do so if the function of the TextField is"
+ + " still clear when a value has been entered and the prompt is no"
+ + " longer visible.";
+ }
+
+ @Override
+ public APIResource[] getRelatedAPI() {
+ return new APIResource[] { new APIResource(TextField.class) };
+ }
+
+ @Override
+ public Class[] getRelatedFeatures() {
+ // TODO update CB -ref to 'suggest' pattern, when available
+ return new Class[] { TextFieldSingle.class, TextFieldSecret.class,
+ ComboBoxInputPrompt.class, ComboBoxNewItems.class,
+ FeatureSet.Texts.class };
+ }
+
+ @Override
+ public NamedExternalResource[] getRelatedResources() {
+ return new NamedExternalResource[] { new NamedExternalResource(
+ "UI Patterns, Input Prompt",
+ "http://ui-patterns.com/pattern/InputPrompt") };
+ }
+
+}
diff --git a/src/com/itmill/toolkit/demo/sampler/features/text/TextFieldInputPromptExample.java b/src/com/itmill/toolkit/demo/sampler/features/text/TextFieldInputPromptExample.java new file mode 100644 index 0000000000..19f995044a --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/text/TextFieldInputPromptExample.java @@ -0,0 +1,49 @@ +package com.itmill.toolkit.demo.sampler.features.text;
+
+import com.itmill.toolkit.data.Property;
+import com.itmill.toolkit.data.Property.ValueChangeEvent;
+import com.itmill.toolkit.ui.TextField;
+import com.itmill.toolkit.ui.VerticalLayout;
+
+public class TextFieldInputPromptExample extends VerticalLayout implements
+ Property.ValueChangeListener {
+
+ public TextFieldInputPromptExample() {
+ // add som 'air' to the layout
+ setSpacing(true);
+ setMargin(true);
+
+ // Username field + input prompt
+ TextField username = new TextField();
+ username.setInputPrompt("Username");
+ // configure & add to layout
+ username.setImmediate(true);
+ username.addListener(this);
+ addComponent(username);
+
+ // Password field + input prompt
+ TextField password = new TextField();
+ password.setInputPrompt("Password");
+ // configure & add to layout
+ password.setSecret(true);
+ password.setImmediate(true);
+ password.addListener(this);
+ addComponent(password);
+
+ // Comment field + input prompt
+ TextField comment = new TextField();
+ comment.setInputPrompt("Comment");
+ // configure & add to layout
+ comment.setRows(3);
+ comment.setImmediate(true);
+ comment.addListener(this);
+ addComponent(comment);
+
+ }
+
+ public void valueChange(ValueChangeEvent event) {
+ getWindow().showNotification("Received " + event.getProperty());
+
+ }
+
+}
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IFilterSelect.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IFilterSelect.java index 3b0fdd7927..f18040d581 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IFilterSelect.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IFilterSelect.java @@ -452,8 +452,7 @@ public class IFilterSelect extends Composite implements Paintable, Field, } if (allowNewItem) { - if (!enteredItemValue.equals(emptyText) - && !enteredItemValue.equals(lastNewItemString)) { + if (!prompting && !enteredItemValue.equals(lastNewItemString)) { /* * Store last sent new item string to avoid double sends */ @@ -469,13 +468,18 @@ public class IFilterSelect extends Composite implements Paintable, Field, } else { if (currentSuggestion != null) { String text = currentSuggestion.getReplacementString(); - tb.setText((text.equals("") ? emptyText : text)); - // TODO add/remove class CLASSNAME_EMPTY + /*- TODO? + if (text.equals("")) { + tb.setText(inputPrompt); + prompting = true; + addStyleDependentName(CLASSNAME_PROMPT); + } else { + tb.setText(text); + prompting = false; + removeStyleDependentName(CLASSNAME_PROMPT); + } + -*/ selectedOptionKey = currentSuggestion.key; - } else { - tb.setText(emptyText); - // TODO add class CLASSNAME_EMPTY - selectedOptionKey = null; } } suggestionPopup.hide(); @@ -546,7 +550,11 @@ public class IFilterSelect extends Composite implements Paintable, Field, private boolean enabled; // shown in unfocused empty field, disappears on focus (e.g "Search here") - private String emptyText = ""; + private static final String CLASSNAME_PROMPT = "prompt"; + private static final String ATTR_INPUTPROMPT = "prompt"; + private String inputPrompt = ""; + private boolean prompting = false; + // Set true when popupopened has been clicked. Cleared on each UIDL-update. // This handles the special case where are not filtering yet and the // selected value has changed on the server-side. See #2119 @@ -555,8 +563,6 @@ public class IFilterSelect extends Composite implements Paintable, Field, private int textboxPadding = -1; private int componentPadding = -1; private int suggestionPopupMinWidth = 0; - // private static final String CLASSNAME_EMPTY = "empty"; - private static final String ATTR_EMPTYTEXT = "emptytext"; /* * Stores the last new item string to avoid double submissions. Cleared on * uidl updates @@ -656,9 +662,11 @@ public class IFilterSelect extends Composite implements Paintable, Field, currentPage = uidl.getIntVariable("page"); - if (uidl.hasAttribute(ATTR_EMPTYTEXT)) { - // "emptytext" changed from server - emptyText = uidl.getStringAttribute(ATTR_EMPTYTEXT); + if (uidl.hasAttribute(ATTR_INPUTPROMPT)) { + // input prompt changed from server + inputPrompt = uidl.getStringAttribute(ATTR_INPUTPROMPT); + } else { + inputPrompt = ""; } suggestionPopup.setPagingEnabled(true); @@ -671,7 +679,7 @@ public class IFilterSelect extends Composite implements Paintable, Field, final UIDL options = uidl.getChildUIDL(0); totalMatches = uidl.getIntAttribute("totalMatches"); - String captions = emptyText; + String captions = inputPrompt; for (final Iterator i = options.getChildIterator(); i.hasNext();) { final UIDL optionUidl = (UIDL) i.next(); @@ -697,9 +705,12 @@ public class IFilterSelect extends Composite implements Paintable, Field, if ((!filtering || popupOpenerClicked) && uidl.hasVariable("selected") && uidl.getStringArrayVariable("selected").length == 0) { // select nulled - tb.setText(emptyText); + if (!filtering || !popupOpenerClicked) { + tb.setText(inputPrompt); + prompting = true; + addStyleDependentName(CLASSNAME_PROMPT); + } selectedOptionKey = null; - // TODO add class CLASSNAME_EMPTY } if (filtering @@ -751,9 +762,17 @@ public class IFilterSelect extends Composite implements Paintable, Field, // normal selection newKey = String.valueOf(suggestion.getOptionKey()); } + String text = suggestion.getReplacementString(); - tb.setText(text.equals("") ? emptyText : text); - // TODO add/remove class CLASSNAME_EMPTY + if ("".equals(newKey)) { + tb.setText(inputPrompt); + prompting = true; + addStyleDependentName(CLASSNAME_PROMPT); + } else { + tb.setText(text); + prompting = false; + removeStyleDependentName(CLASSNAME_PROMPT); + } setSelectedItemIcon(suggestion.getIconUri()); if (!newKey.equals(selectedOptionKey)) { selectedOptionKey = newKey; @@ -844,12 +863,14 @@ public class IFilterSelect extends Composite implements Paintable, Field, case KeyboardListener.KEY_ESCAPE: if (currentSuggestion != null) { String text = currentSuggestion.getReplacementString(); - tb.setText((text.equals("") ? emptyText : text)); - // TODO add/remove class CLASSNAME_EMPTY + tb.setText(text); + prompting = false; + removeStyleDependentName(CLASSNAME_PROMPT); selectedOptionKey = currentSuggestion.key; } else { - tb.setText(emptyText); - // TODO add class CLASSNAME_EMPTY + tb.setText(inputPrompt); + prompting = true; + addStyleDependentName(CLASSNAME_PROMPT); selectedOptionKey = null; } lastFilter = ""; @@ -868,12 +889,14 @@ public class IFilterSelect extends Composite implements Paintable, Field, public void onClick(Widget sender) { if (enabled) { // ask suggestionPopup if it was just closed, we are using GWT - // Popup's - // auto close feature + // Popup's auto close feature if (!suggestionPopup.isJustClosed()) { filterOptions(-1, ""); popupOpenerClicked = true; lastFilter = ""; + } else if (selectedOptionKey == null) { + tb.setText(inputPrompt); + prompting = true; } DOM.eventPreventDefault(DOM.eventGetCurrentEvent()); tb.setFocus(true); @@ -888,13 +911,13 @@ public class IFilterSelect extends Composite implements Paintable, Field, private native int minWidth(String captions) /*-{ if(!captions || captions.length <= 0) - return 0; + return 0; captions = captions.split("|"); var d = $wnd.document.createElement("div"); var html = ""; for(var i=0; i < captions.length; i++) { - html += "<div>" + captions[i] + "</div>"; - // TODO apply same CSS classname as in suggestionmenu + html += "<div>" + captions[i] + "</div>"; + // TODO apply same CSS classname as in suggestionmenu } d.style.position = "absolute"; d.style.top = "0"; @@ -908,9 +931,9 @@ public class IFilterSelect extends Composite implements Paintable, Field, }-*/; public void onFocus(Widget sender) { - if (emptyText.equals(tb.getText())) { + if (prompting) { tb.setText(""); - // TODO remove class CLASSNAME_EMPTY + removeStyleDependentName(CLASSNAME_PROMPT); } addStyleDependentName("focus"); } @@ -920,14 +943,20 @@ public class IFilterSelect extends Composite implements Paintable, Field, // typing so fast the popup was never opened, or it's just closed suggestionPopup.menu.doSelectedItemAction(); } - if ("".equals(tb.getText())) { - tb.setText(emptyText); - // TODO add CLASSNAME_EMPTY + if (selectedOptionKey == null) { + tb.setText(inputPrompt); + prompting = true; + addStyleDependentName(CLASSNAME_PROMPT); } removeStyleDependentName("focus"); } public void focus() { + if (prompting) { + tb.setText(""); + prompting = false; + removeStyleDependentName(CLASSNAME_PROMPT); + } tb.setFocus(true); } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITextField.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITextField.java index 0e342428e8..e21a5fe5b3 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITextField.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITextField.java @@ -47,6 +47,11 @@ public class ITextField extends TextBoxBase implements Paintable, Field, private int extraVerticalPixels = -1; private int maxLength = -1; + private static final String CLASSNAME_PROMPT = "prompt"; + private static final String ATTR_INPUTPROMPT = "prompt"; + private String inputPrompt = null; + private boolean prompting = false; + public ITextField() { this(DOM.createInputText()); } @@ -86,6 +91,8 @@ public class ITextField extends TextBoxBase implements Paintable, Field, setReadOnly(false); } + inputPrompt = uidl.getStringAttribute(ATTR_INPUTPROMPT); + setMaxLength(uidl.hasAttribute("maxLength") ? uidl .getIntAttribute("maxLength") : -1); @@ -95,7 +102,15 @@ public class ITextField extends TextBoxBase implements Paintable, Field, setColumns(new Integer(uidl.getStringAttribute("cols")).intValue()); } - setText(uidl.getStringVariable("text")); + String text = uidl.getStringVariable("text"); + prompting = inputPrompt != null && (text == null || text.equals("")); + if (prompting) { + setText(inputPrompt); + addStyleDependentName(CLASSNAME_PROMPT); + } else { + setText(text); + removeStyleDependentName(CLASSNAME_PROMPT); + } valueBeforeEdit = uidl.getStringVariable("text"); } @@ -103,13 +118,13 @@ public class ITextField extends TextBoxBase implements Paintable, Field, if (newMaxLength > 0) { maxLength = newMaxLength; if (getElement().getTagName().toLowerCase().equals("textarea")) { - // NOP no maxlenght property for textarea + // NOP no maxlength property for textarea } else { getElement().setPropertyInt("maxLength", maxLength); } } else if (maxLength != -1) { if (getElement().getTagName().toLowerCase().equals("textarea")) { - // NOP no maxlenght property for textarea + // NOP no maxlength property for textarea } else { getElement().setAttribute("maxlength", ""); } @@ -125,7 +140,8 @@ public class ITextField extends TextBoxBase implements Paintable, Field, public void onChange(Widget sender) { if (client != null && id != null) { String newText = getText(); - if (newText != null && !newText.equals(valueBeforeEdit)) { + if (!prompting && newText != null + && !newText.equals(valueBeforeEdit)) { client.updateVariable(id, "text", getText(), immediate); valueBeforeEdit = newText; } @@ -142,12 +158,22 @@ public class ITextField extends TextBoxBase implements Paintable, Field, public void onFocus(Widget sender) { addStyleDependentName(CLASSNAME_FOCUS); + if (prompting) { + setText(""); + removeStyleDependentName(CLASSNAME_PROMPT); + } focusedTextField = this; } public void onLostFocus(Widget sender) { removeStyleDependentName(CLASSNAME_FOCUS); focusedTextField = null; + String text = getText(); + prompting = inputPrompt != null && (text == null || "".equals(text)); + if (prompting) { + setText(inputPrompt); + addStyleDependentName(CLASSNAME_PROMPT); + } onChange(sender); } diff --git a/src/com/itmill/toolkit/ui/ComboBox.java b/src/com/itmill/toolkit/ui/ComboBox.java index f29b51b7d9..1c251ef0a0 100644 --- a/src/com/itmill/toolkit/ui/ComboBox.java +++ b/src/com/itmill/toolkit/ui/ComboBox.java @@ -7,6 +7,8 @@ package com.itmill.toolkit.ui; import java.util.Collection;
import com.itmill.toolkit.data.Container;
+import com.itmill.toolkit.terminal.PaintException;
+import com.itmill.toolkit.terminal.PaintTarget;
/**
* A filtering dropdown single-select. Suitable for newItemsAllowed, but it's
@@ -18,7 +20,7 @@ import com.itmill.toolkit.data.Container; */
public class ComboBox extends Select {
- private String emptyText = null;
+ private String inputPrompt = null;
public ComboBox() {
setMultiSelect(false);
@@ -51,21 +53,32 @@ public class ComboBox extends Select { super.setMultiSelect(multiSelect);
}
- /*- TODO enable and test this - client impl exists
- public String getEmptyText() {
- return emptyText;
+ /**
+ * Gets the current input prompt.
+ *
+ * @see #setInputPrompt(String)
+ * @return the current input prompt, or null if not enabled
+ */
+ public String getInputPrompt() {
+ return inputPrompt;
}
- public void setEmptyText(String emptyText) {
- this.emptyText = emptyText;
+ /**
+ * Sets the input prompt - a textual prompt that is displayed when the
+ * select would otherwise be empty, to prompt the user for input.
+ *
+ * @param inputPrompt
+ * the desired input prompt, or null to disable
+ */
+ public void setInputPrompt(String inputPrompt) {
+ this.inputPrompt = inputPrompt;
}
public void paintContent(PaintTarget target) throws PaintException {
- if (emptyText != null) {
- target.addAttribute("emptytext", emptyText);
+ if (inputPrompt != null) {
+ target.addAttribute("prompt", inputPrompt);
}
super.paintContent(target);
}
- -*/
}
diff --git a/src/com/itmill/toolkit/ui/RichTextArea.java b/src/com/itmill/toolkit/ui/RichTextArea.java index 213eb2635b..fad763819d 100644 --- a/src/com/itmill/toolkit/ui/RichTextArea.java +++ b/src/com/itmill/toolkit/ui/RichTextArea.java @@ -8,7 +8,7 @@ import com.itmill.toolkit.terminal.PaintException; import com.itmill.toolkit.terminal.PaintTarget; /** - * A simple RichTextEditor to edit HTML format text. + * A simple RichTextArea to edit HTML format text. * * Note, that using {@link TextField#setMaxLength(int)} method in * {@link RichTextArea} may produce unexpected results as formatting is counted @@ -22,4 +22,13 @@ public class RichTextArea extends TextField { super.paintContent(target); } + /** + * RichTextArea does not support input prompt. + */ + @Override + public void setInputPrompt(String inputPrompt) { + throw new UnsupportedOperationException( + "RichTextArea does not support inputPrompt"); + } + } diff --git a/src/com/itmill/toolkit/ui/TextField.java b/src/com/itmill/toolkit/ui/TextField.java index 0b7336e215..e5572f0b9f 100644 --- a/src/com/itmill/toolkit/ui/TextField.java +++ b/src/com/itmill/toolkit/ui/TextField.java @@ -73,6 +73,8 @@ public class TextField extends AbstractField { */ private boolean nullSettingAllowed = false; + private String inputPrompt = null; + /** * Maximum character count in text field. */ @@ -159,6 +161,10 @@ public class TextField extends AbstractField { target.addAttribute("maxLength", getMaxLength()); } + if (inputPrompt != null) { + target.addAttribute("prompt", inputPrompt); + } + // Adds the number of column and rows final int c = getColumns(); final int r = getRows(); @@ -475,6 +481,26 @@ public class TextField extends AbstractField { } /** + * Gets the current input prompt. + * + * @see #setInputPrompt(String) + * @return the current input prompt, or null if not enabled + */ + public String getInputPrompt() { + return inputPrompt; + } + + /** + * Sets the input prompt - a textual prompt that is displayed when the field + * would otherwise be empty, to prompt the user for input. + * + * @param inputPrompt + */ + public void setInputPrompt(String inputPrompt) { + this.inputPrompt = inputPrompt; + } + + /** * Gets the value formatter of TextField. * * @return the Format used to format the value. |