import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.Widget;
+import com.itmill.toolkit.terminal.gwt.client.ui.TkPasswordField;
import com.itmill.toolkit.terminal.gwt.client.ui.TkButton;
import com.itmill.toolkit.terminal.gwt.client.ui.TkCheckBox;
import com.itmill.toolkit.terminal.gwt.client.ui.TkEmbedded;
import com.itmill.toolkit.terminal.gwt.client.ui.TkSelect;
import com.itmill.toolkit.terminal.gwt.client.ui.TkTable;
import com.itmill.toolkit.terminal.gwt.client.ui.TkTabsheet;
+import com.itmill.toolkit.terminal.gwt.client.ui.TkTextArea;
import com.itmill.toolkit.terminal.gwt.client.ui.TkTextField;
import com.itmill.toolkit.terminal.gwt.client.ui.TkTree;
import com.itmill.toolkit.terminal.gwt.client.ui.TkUnknownComponent;
return new TkTabsheet();
if ("embedded".equals(tag))
return new TkEmbedded();
- if ("textfield".equals(tag))
+ if ("textfield".equals(tag)) {
+ if(uidl.hasAttribute("multiline"))
+ return new TkTextArea();
+ else if(uidl.hasAttribute("secret") && uidl.getBooleanAttribute("secret"))
+ return new TkPasswordField();
return new TkTextField();
+ }
if ("table".equals(tag))
return new TkTable();
--- /dev/null
+package com.itmill.toolkit.terminal.gwt.client.ui;\r
+\r
+import com.google.gwt.user.client.DOM;\r
+import com.itmill.toolkit.terminal.gwt.client.Client;\r
+import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
+\r
+/**\r
+ * This class represents a multiline textfield (textarea).\r
+ * \r
+ * @author IT Mill Ltd.\r
+ *\r
+ */\r
+public class TkTextArea extends TkTextField {\r
+\r
+ public TkTextArea() {\r
+ super(DOM.createTextArea());\r
+ }\r
+ \r
+ public void updateFromUIDL(UIDL uidl, Client client) {\r
+ // Call parent renderer explicitly\r
+ super.updateFromUIDL(uidl, client);\r
+ \r
+ if(uidl.hasAttribute("rows"))\r
+ setHeight(uidl.getStringAttribute("rows")+"em");\r
+ }\r
+ \r
+}\r
package com.itmill.toolkit.terminal.gwt.client.ui;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.ChangeListener;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.Label;
-import com.google.gwt.user.client.ui.TextArea;
-import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.FocusListener;
import com.google.gwt.user.client.ui.TextBoxBase;
-import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.itmill.toolkit.terminal.gwt.client.Client;
import com.itmill.toolkit.terminal.gwt.client.Paintable;
import com.itmill.toolkit.terminal.gwt.client.UIDL;
-public class TkTextField extends Composite implements
- Paintable, ChangeListener {
-
- String id;
-
- Client client;
+/**
+ * This class represents a basic text input field with one row.
+ *
+ * @author IT Mill Ltd.
+ *
+ */
+public class TkTextField extends TextBoxBase implements
+ Paintable, ChangeListener, FocusListener {
- TextBoxBase field;
- Label caption = new Label();
-
- private VerticalPanel p;
+ /**
+ * The input node CSS classname.
+ */
+ private static final String CLASSNAME = "itk-textfield";
- private boolean multiline = false;
+ /**
+ * This CSS classname is added to the input node on hover.
+ */
+ private static final String CLASSNAME_FOCUS = "itk-textfield-focus";
+
+ private String id;
+
+ private Client client;
private boolean immediate = false;
public TkTextField() {
- p = new VerticalPanel();
- p.add(caption);
- initWidget(p);
+ this(DOM.createInputText());
+ }
+
+ protected TkTextField(Element node) {
+ super(node);
+ setStyleName(CLASSNAME);
+ addChangeListener(this);
+ addFocusListener(this);
}
public void updateFromUIDL(UIDL uidl, Client client) {
this.client = client;
id = uidl.getId();
+
+ if(client.replaceComponentWithCorrectImplementation(this, uidl))
+ return;
+
if(uidl.hasAttribute("immediate") && uidl.getBooleanAttribute("immediate"))
immediate = true;
- if(uidl.hasAttribute("caption"))
- caption.setText(uidl.getStringAttribute("caption"));
- else
- caption.setVisible(false);
- if(field != null && (uidl.hasAttribute("rows") && !multiline )) {
- // field type has changed
- p.remove(p.getWidgetIndex(field));
- }
- if(field == null) {
- if(uidl.hasAttribute("rows")) {
- field = new TextArea();
- multiline = true;
- } else {
- field = new TextBox();
- }
- p.add(field);
- }
- if(multiline)
- field.setHeight(uidl.getStringAttribute("height")+"em");
+
if(uidl.hasAttribute("cols"))
- field.setWidth(uidl.getStringAttribute("cols")+"em");
- field.setText(uidl.getStringVariable("text"));
-
- field.addChangeListener(this);
+ setWidth(uidl.getStringAttribute("cols")+"em");
+
+ setText(uidl.getStringVariable("text"));
+
+ // TODO if either caption, description, icon or error is present,
+ // ask the parent to kindly add those to its list
+ // getParentLayout().updateComponentAdditionals(this);
}
public void onChange(Widget sender) {
- client.updateVariable(id, "text", field.getText() , immediate);
+ client.updateVariable(id, "text", getText() , immediate);
+ }
+
+ public void onFocus(Widget sender) {
+ addStyleName(CLASSNAME_FOCUS);
+ }
+
+ public void onLostFocus(Widget sender) {
+ removeStyleName(CLASSNAME_FOCUS);
}
}