]> source.dussan.org Git - vaadin-framework.git/commitdiff
Test case and fix for #3163 - DateField shows pop-up button in Read-only mode
authorArtur Signell <artur.signell@itmill.com>
Fri, 4 Sep 2009 13:21:07 +0000 (13:21 +0000)
committerArtur Signell <artur.signell@itmill.com>
Fri, 4 Sep 2009 13:21:07 +0000 (13:21 +0000)
svn changeset:8670/svn branch:6.1

src/com/vaadin/terminal/gwt/client/ui/VPopupCalendar.java
src/com/vaadin/terminal/gwt/client/ui/VTextualDate.java
src/com/vaadin/tests/components/datefield/DateFieldReadOnly.java [new file with mode: 0644]

index e6dbe68abbb480a4bfc1147075b54c99a490ca8c..8143eb0ea979f464dcd9da9a88fb2551b8190b7a 100644 (file)
@@ -59,10 +59,34 @@ public class VPopupCalendar extends VTextualDate implements Paintable, Field,
             calendar.updateCalendar();\r
         }\r
         calendarToggle.setEnabled(enabled);\r
+\r
+        handleReadonly();\r
+\r
+    }\r
+\r
+    private void handleReadonly() {\r
+        String currentDisplay = calendarToggle.getElement().getStyle()\r
+                .getProperty("display");\r
+        boolean currentReadonly = (currentDisplay != null && currentDisplay\r
+                .equals("none"));\r
+        if (currentReadonly != readonly) {\r
+            // We need to react only if the read-only status has changed\r
+            if (readonly) {\r
+                calendarToggle.getElement().getStyle().setProperty("display",\r
+                        "none");\r
+            } else {\r
+                calendarToggle.getElement().getStyle().setProperty("display",\r
+                        "");\r
+            }\r
+\r
+            // Force update of textfield size\r
+            updateWidth();\r
+        }\r
+\r
     }\r
 \r
     public void onClick(ClickEvent event) {\r
-        if (event.getSource() == calendarToggle && !open) {\r
+        if (event.getSource() == calendarToggle && !open && !readonly) {\r
             open = true;\r
             calendar.updateCalendar();\r
             // clear previous values\r
@@ -116,7 +140,7 @@ public class VPopupCalendar extends VTextualDate implements Paintable, Field,
 \r
     /**\r
      * Sets focus to Calendar panel.\r
-     *\r
+     * \r
      * @param focus\r
      */\r
     public void setFocus(boolean focus) {\r
index e8e5fe255a9a959a1cc1652cc3f006f8a56a0822..11f335e1527681070d889f954425d346b63b83b1 100644 (file)
@@ -301,6 +301,12 @@ public class VTextualDate extends VDateField implements Paintable, Field,
         return fieldExtraWidth;\r
     }\r
 \r
+    public void updateWidth() {\r
+        needLayout = true;\r
+        fieldExtraWidth = -1;\r
+        iLayout();\r
+    }\r
+\r
     public void iLayout() {\r
         if (needLayout) {\r
             text.setWidth((getOffsetWidth() - getFieldExtraWidth()) + "px");\r
diff --git a/src/com/vaadin/tests/components/datefield/DateFieldReadOnly.java b/src/com/vaadin/tests/components/datefield/DateFieldReadOnly.java
new file mode 100644 (file)
index 0000000..857af3a
--- /dev/null
@@ -0,0 +1,48 @@
+package com.vaadin.tests.components.datefield;\r
+\r
+import java.util.Date;\r
+\r
+import com.vaadin.tests.components.TestBase;\r
+import com.vaadin.ui.Button;\r
+import com.vaadin.ui.DateField;\r
+import com.vaadin.ui.Button.ClickEvent;\r
+import com.vaadin.ui.Button.ClickListener;\r
+\r
+public class DateFieldReadOnly extends TestBase {\r
+\r
+    @Override\r
+    protected String getDescription() {\r
+        return "A read-only DateField should not show the popup button and not be editable.";\r
+    }\r
+\r
+    @Override\r
+    protected Integer getTicketNumber() {\r
+        return 3163;\r
+    }\r
+\r
+    @Override\r
+    protected void setup() {\r
+        final DateField timeField = new DateField("A read-only datefield");\r
+        timeField.setResolution(DateField.RESOLUTION_SEC);\r
+        timeField.setDateFormat("HH:mm:ss");\r
+        timeField.setCaption(null);\r
+        timeField.setIcon(null);\r
+        timeField.setWidth("8em");\r
+        timeField.addStyleName("timeField");\r
+\r
+        timeField.setValue(new Date());\r
+        timeField.setReadOnly(true);\r
+\r
+        addComponent(timeField);\r
+\r
+        Button b = new Button("Switch read-only");\r
+        b.addListener(new ClickListener() {\r
+\r
+            public void buttonClick(ClickEvent event) {\r
+                timeField.setReadOnly(!timeField.isReadOnly());\r
+            }\r
+        });\r
+\r
+        addComponent(b);\r
+    }\r
+}\r