From 6992d121de4c8b142410592faf218774ed200d58 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Fri, 4 Sep 2009 13:21:07 +0000 Subject: [PATCH] Test case and fix for #3163 - DateField shows pop-up button in Read-only mode svn changeset:8670/svn branch:6.1 --- .../gwt/client/ui/VPopupCalendar.java | 28 ++++++++++- .../terminal/gwt/client/ui/VTextualDate.java | 6 +++ .../datefield/DateFieldReadOnly.java | 48 +++++++++++++++++++ 3 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 src/com/vaadin/tests/components/datefield/DateFieldReadOnly.java 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); + } +} -- 2.39.5