]> source.dussan.org Git - vaadin-framework.git/commitdiff
Proper implementation for TextField component (some bugs exist).
authorJouni Koivuviita <jouni.koivuviita@itmill.com>
Thu, 14 Jun 2007 12:54:26 +0000 (12:54 +0000)
committerJouni Koivuviita <jouni.koivuviita@itmill.com>
Thu, 14 Jun 2007 12:54:26 +0000 (12:54 +0000)
svn changeset:1719/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java
src/com/itmill/toolkit/terminal/gwt/client/ui/TkPasswordField.java [new file with mode: 0644]
src/com/itmill/toolkit/terminal/gwt/client/ui/TkTextArea.java [new file with mode: 0644]
src/com/itmill/toolkit/terminal/gwt/client/ui/TkTextField.java

index ecb50865ac8c9be47b0e60a6e6178c5dd05e623d..369a60917daaec3f6fa025645800411a155942f5 100644 (file)
@@ -2,6 +2,7 @@ package com.itmill.toolkit.terminal.gwt.client;
 
 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;
@@ -13,6 +14,7 @@ import com.itmill.toolkit.terminal.gwt.client.ui.TkPanel;
 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;
@@ -51,8 +53,13 @@ public class DefaultWidgetFactory implements WidgetFactory {
                        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();
 
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/TkPasswordField.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/TkPasswordField.java
new file mode 100644 (file)
index 0000000..7d6c0be
--- /dev/null
@@ -0,0 +1,25 @@
+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 password field.\r
+ * \r
+ * @author IT Mill Ltd.\r
+ *\r
+ */\r
+public class TkPasswordField extends TkTextField {\r
+       \r
+       public TkPasswordField() {\r
+               super(DOM.createInputPassword());\r
+       }\r
+       \r
+       public void updateFromUIDL(UIDL uidl, Client client) {\r
+               // Call parent renderer explicitly\r
+               super.updateFromUIDL(uidl, client);\r
+               \r
+       }\r
+       \r
+}\r
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/TkTextArea.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/TkTextArea.java
new file mode 100644 (file)
index 0000000..797e0a9
--- /dev/null
@@ -0,0 +1,27 @@
+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
index 64361d055f7815855193a434cd9a586c08e0ecec..5ce96f8e0fb1c2e84a52ef80e09072d3c76cad20 100644 (file)
@@ -1,72 +1,81 @@
 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);
        }
 }