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
\r
/**\r
* Sets focus to Calendar panel.\r
- *\r
+ * \r
* @param focus\r
*/\r
public void setFocus(boolean focus) {\r
--- /dev/null
+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