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