]> source.dussan.org Git - vaadin-framework.git/commitdiff
fixes #1668
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Tue, 20 May 2008 11:30:01 +0000 (11:30 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Tue, 20 May 2008 11:30:01 +0000 (11:30 +0000)
svn changeset:4564/svn branch:trunk

src/com/itmill/toolkit/ui/Form.java

index 341b0c9a0cca40b06aa180937ef6fe210169933b..332e3ce8632cabf15819b4e658e0dc5f6b6e0965 100644 (file)
@@ -100,6 +100,17 @@ public class Form extends AbstractField implements Item.Editor, Buffered, Item,
      */
     private Collection visibleItemProperties;
 
+    /**
+     * Form needs to repaint itself if child fields value changes due possible
+     * change in form validity.
+     */
+    private ValueChangeListener fieldValueChangeListener = new ValueChangeListener() {
+        public void valueChange(
+                com.itmill.toolkit.data.Property.ValueChangeEvent event) {
+            requestRepaint();
+        }
+    };
+
     /**
      * Contructs a new form with default layout.
      * 
@@ -371,6 +382,7 @@ public class Form extends AbstractField implements Item.Editor, Buffered, Item,
 
         if (propertyId != null && field != null) {
             fields.put(propertyId, field);
+            field.addListener(fieldValueChangeListener);
             propertyIds.addLast(propertyId);
             field.setReadThrough(readThrough);
             field.setWriteThrough(writeThrough);
@@ -441,6 +453,7 @@ public class Form extends AbstractField implements Item.Editor, Buffered, Item,
             propertyIds.remove(id);
             fields.remove(id);
             layout.removeComponent(field);
+            field.removeListener(fieldValueChangeListener);
             return true;
         }
 
@@ -674,6 +687,8 @@ public class Form extends AbstractField implements Item.Editor, Buffered, Item,
         // Replaces the old field with new one
         layout.replaceComponent(oldField, newField);
         fields.put(propertyId, newField);
+        newField.addListener(fieldValueChangeListener);
+        oldField.removeListener(fieldValueChangeListener);
 
         return newField;
     }