]> source.dussan.org Git - vaadin-framework.git/commitdiff
table now refreshes its contents and does component attaching etc in right place...
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Fri, 8 Feb 2008 15:12:09 +0000 (15:12 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Fri, 8 Feb 2008 15:12:09 +0000 (15:12 +0000)
svn changeset:3757/svn branch:trunk

src/com/itmill/toolkit/data/util/IndexedContainer.java

index f75755a0fadd601bd8a8fdc834af06af320e465c..6a22ba0758b2b3e8a5f257faf933bd0f05cc9c18 100644 (file)
@@ -297,7 +297,7 @@ public class IndexedContainer implements Container, Container.Indexed,
         }
 
         // Sends a change event
-        fireContentsChange();
+        fireContentsChange(-1);
 
         return true;
     }
@@ -351,7 +351,7 @@ public class IndexedContainer implements Container, Container.Indexed,
         }
 
         // Sends the event
-        fireContentsChange();
+        fireContentsChange(itemIds.size() - 1);
 
         return item;
     }
@@ -374,7 +374,7 @@ public class IndexedContainer implements Container, Container.Indexed,
             filteredItemIds.remove(itemId);
         }
 
-        fireContentsChange();
+        fireContentsChange(-1);
 
         return true;
     }
@@ -668,7 +668,7 @@ public class IndexedContainer implements Container, Container.Indexed,
         if (filteredItemIds != null) {
             updateContainerFiltering();
         } else {
-            fireContentsChange();
+            fireContentsChange(index);
         }
 
         return getItem(newItemId);
@@ -730,16 +730,18 @@ public class IndexedContainer implements Container, Container.Indexed,
      * @VERSION@
      * @since 3.0
      */
-    private class ItemSetChangeEvent extends EventObject implements
+    public class ItemSetChangeEvent extends EventObject implements
             Container.ItemSetChangeEvent {
 
         /**
          * Serial generated by eclipse.
          */
         private static final long serialVersionUID = 3832616279386372147L;
+        private int addedItemIndex;
 
-        private ItemSetChangeEvent(IndexedContainer source) {
+        private ItemSetChangeEvent(IndexedContainer source, int addedItemIndex) {
             super(source);
+            this.addedItemIndex = addedItemIndex;
         }
 
         /**
@@ -751,6 +753,16 @@ public class IndexedContainer implements Container, Container.Indexed,
             return (Container) getSource();
         }
 
+        /**
+         * Iff one item is added, gives its index.
+         * 
+         * @return -1 if either multiple items are changed or some other change
+         *         than add is done.
+         */
+        public int getAddedItemIndex() {
+            return addedItemIndex;
+        }
+
     }
 
     /**
@@ -916,12 +928,15 @@ public class IndexedContainer implements Container, Container.Indexed,
 
     /**
      * Sends Item set change event to all registered interested listeners.
+     * 
+     * @param addedItemIndex
+     *                index of new item if change event was an item addition
      */
-    private void fireContentsChange() {
+    private void fireContentsChange(int addedItemIndex) {
         if (itemSetChangeListeners != null) {
             final Object[] l = itemSetChangeListeners.toArray();
             final Container.ItemSetChangeEvent event = new IndexedContainer.ItemSetChangeEvent(
-                    this);
+                    this, addedItemIndex);
             for (int i = 0; i < l.length; i++) {
                 ((Container.ItemSetChangeListener) l[i])
                         .containerItemSetChange(event);
@@ -1391,7 +1406,7 @@ public class IndexedContainer implements Container, Container.Indexed,
         if (filteredItemIds != null) {
             updateContainerFiltering();
         } else {
-            fireContentsChange();
+            fireContentsChange(-1);
         }
 
         // Remove temporary references
@@ -1713,7 +1728,7 @@ public class IndexedContainer implements Container, Container.Indexed,
             filteredItemIds = null;
             if (filters != null) {
                 filters = null;
-                fireContentsChange();
+                fireContentsChange(-1);
             }
             return;
         }
@@ -1733,7 +1748,7 @@ public class IndexedContainer implements Container, Container.Indexed,
             }
         }
 
-        fireContentsChange();
+        fireContentsChange(-1);
     }
 
     private boolean passesFilters(Item item) {