diff options
author | Henri Sara <henri.sara@itmill.com> | 2010-05-27 09:16:39 +0000 |
---|---|---|
committer | Henri Sara <henri.sara@itmill.com> | 2010-05-27 09:16:39 +0000 |
commit | 8c60fc5fb4a2f2f26a7a2842a79ba57f9976c1ee (patch) | |
tree | e601e8f969236e03cc566155955ba36d614cd7ed | |
parent | 12e5f5e5aa852632b5f0c0783f3d1591354669c8 (diff) | |
download | vaadin-framework-8c60fc5fb4a2f2f26a7a2842a79ba57f9976c1ee.tar.gz vaadin-framework-8c60fc5fb4a2f2f26a7a2842a79ba57f9976c1ee.zip |
#5013 AbstractField did not repaint property read-only status changes immediately
svn changeset:13390/svn branch:6.3
3 files changed, 121 insertions, 0 deletions
diff --git a/src/com/vaadin/ui/AbstractField.java b/src/com/vaadin/ui/AbstractField.java index 17e82e86e4..f7d1ddd79e 100644 --- a/src/com/vaadin/ui/AbstractField.java +++ b/src/com/vaadin/ui/AbstractField.java @@ -55,6 +55,7 @@ import com.vaadin.terminal.PaintTarget; */ @SuppressWarnings("serial") public abstract class AbstractField extends AbstractComponent implements Field, + Property.ReadOnlyStatusChangeListener, Property.ReadOnlyStatusChangeNotifier, Action.ShortcutNotifier { /* Private members */ @@ -571,6 +572,12 @@ public abstract class AbstractField extends AbstractComponent implements Field, .isAssignableFrom(dataSource.getClass())) { ((Property.ValueChangeNotifier) dataSource).removeListener(this); } + if (dataSource != null + && Property.ReadOnlyStatusChangeNotifier.class + .isAssignableFrom(dataSource.getClass())) { + ((Property.ReadOnlyStatusChangeNotifier) dataSource) + .removeListener(this); + } // Sets the new data source dataSource = newDataSource; @@ -592,6 +599,10 @@ public abstract class AbstractField extends AbstractComponent implements Field, if (dataSource instanceof Property.ValueChangeNotifier) { ((Property.ValueChangeNotifier) dataSource).addListener(this); } + if (dataSource instanceof Property.ReadOnlyStatusChangeNotifier) { + ((Property.ReadOnlyStatusChangeNotifier) dataSource) + .addListener(this); + } // Copy the validators from the data source if (dataSource instanceof Validatable) { @@ -893,6 +904,16 @@ public abstract class AbstractField extends AbstractComponent implements Field, } /** + * React to read only status changes of the property by requesting a + * repaint. + * + * @see Property.ReadOnlyStatusChangeListener + */ + public void readOnlyStatusChange(Property.ReadOnlyStatusChangeEvent event) { + requestRepaint(); + } + + /** * An <code>Event</code> object specifying the Property whose read-only * status has changed. * diff --git a/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.html b/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.html new file mode 100644 index 0000000000..1e78108e42 --- /dev/null +++ b/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.html @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head profile="http://selenium-ide.openqa.org/profiles/test-case"> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<link rel="selenium.base" href="http://localhost:8888/run/AbstractFieldDataSourceReadOnly" /> +<title>AbstractFieldDataSourceReadOnly</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">AbstractFieldDataSourceReadOnly</td></tr> +</thead><tbody> +<tr> + <td>open</td> + <td>/run/AbstractFieldDataSourceReadOnly</td> + <td></td> +</tr> +<tr> + <td>waitForVaadin</td> + <td></td> + <td></td> +</tr> +<tr> + <td>click</td> + <td>vaadin=runAbstractFieldDataSourceReadOnly::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VButton[0]/domChild[0]/domChild[0]</td> + <td></td> +</tr> +<tr> + <td>waitForVaadin</td> + <td></td> + <td></td> +</tr> +<tr> + <td>screenCapture</td> + <td></td> + <td></td> +</tr> + +</tbody></table> +</body> +</html> diff --git a/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.java b/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.java new file mode 100644 index 0000000000..d439544067 --- /dev/null +++ b/tests/src/com/vaadin/tests/components/abstractfield/AbstractFieldDataSourceReadOnly.java @@ -0,0 +1,58 @@ +package com.vaadin.tests.components.abstractfield;
+
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.Component.Event;
+import com.vaadin.ui.Component.Listener;
+
+public class AbstractFieldDataSourceReadOnly extends TestBase {
+
+ private static class StateHolder {
+ private ObjectProperty textField = new ObjectProperty("");
+
+ public ObjectProperty getTextField() {
+ return textField;
+ }
+
+ public void setTextField(ObjectProperty textField) {
+ this.textField = textField;
+ }
+
+ public void buttonClicked() {
+ textField.setReadOnly(true);
+ }
+ }
+
+ @Override
+ protected void setup() {
+ final StateHolder stateHolder = new StateHolder();
+
+ // Button
+ Button button = new Button("Make data source read-only");
+ button.addListener(new Listener() {
+ public void componentEvent(Event event) {
+ stateHolder.buttonClicked();
+ }
+ });
+
+ // Input field
+ TextField input = new TextField("Field");
+ input.setPropertyDataSource(stateHolder.getTextField());
+
+ addComponent(button);
+ addComponent(input);
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Read-only status changes in data sources are not rendered immediately";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 5013;
+ }
+
+}
|