]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix for #7644
authorJonatan Kronqvist <jonatan.kronqvist@itmill.com>
Fri, 23 Sep 2011 12:28:07 +0000 (12:28 +0000)
committerJonatan Kronqvist <jonatan.kronqvist@itmill.com>
Fri, 23 Sep 2011 12:28:07 +0000 (12:28 +0000)
svn changeset:21278/svn branch:6.7

src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java
src/com/vaadin/terminal/gwt/client/ui/VTreeTable.java

index c09508dc584384c12190d48b33a7c71d6a25be85..6384dd71dd3a62fff09da308007d0beeb0698ca8 100644 (file)
@@ -1431,7 +1431,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
             return;
         }
         if (partialRowAdditions.hasAttribute("hide")) {
-            scrollBody.unlinkRows(
+            scrollBody.unlinkAndReindexRows(
                     partialRowAdditions.getIntAttribute("firstprowix"),
                     partialRowAdditions.getIntAttribute("numprows"));
             scrollBody.ensureCacheFilled();
@@ -1441,7 +1441,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
                         partialRowAdditions.getIntAttribute("firstprowix"),
                         partialRowAdditions.getIntAttribute("numprows"));
             } else {
-                scrollBody.insertRows(partialRowAdditions,
+                scrollBody.insertAndReindexRows(partialRowAdditions,
                         partialRowAdditions.getIntAttribute("firstprowix"),
                         partialRowAdditions.getIntAttribute("numprows"));
             }
@@ -4017,6 +4017,18 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
             return insertedRows;
         }
 
+        protected List<VScrollTableRow> insertAndReindexRows(UIDL rowData,
+                int firstIndex, int rows) {
+            List<VScrollTableRow> inserted = insertRows(rowData, firstIndex,
+                    rows);
+            for (int ix = firstIndex + 1; ix < renderedRows.size(); ix++) {
+                VScrollTableRow r = (VScrollTableRow) renderedRows.get(ix);
+                r.setIndex(r.getIndex() + rows);
+            }
+            fixSpacers();
+            return inserted;
+        }
+
         protected void insertRowsDeleteBelow(UIDL rowData, int firstIndex,
                 int rows) {
             unlinkAllRowsStartingAt(firstIndex);
@@ -4084,13 +4096,6 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
             adopt(row);
             int actualIx = index - firstRendered;
             renderedRows.add(actualIx, row);
-
-            // TODO: could this be made more efficient? like looping only once
-            // after all rows have been inserted
-            for (int ix = actualIx + 1; ix < renderedRows.size(); ix++) {
-                VScrollTableRow r = (VScrollTableRow) renderedRows.get(ix);
-                r.setIndex(r.getIndex() + 1);
-            }
         }
 
         public Iterator<Widget> iterator() {
@@ -4139,6 +4144,15 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
             fixSpacers();
         }
 
+        protected void unlinkAndReindexRows(int firstIndex, int count) {
+            unlinkRows(firstIndex, count);
+            for (int ix = firstIndex; ix < renderedRows.size(); ix++) {
+                VScrollTableRow r = (VScrollTableRow) renderedRows.get(ix);
+                r.setIndex(r.getIndex() - count);
+            }
+            fixSpacers();
+        }
+
         protected void unlinkAllRowsStartingAt(int index) {
             if (firstRendered > index) {
                 index = firstRendered;
@@ -4169,10 +4183,6 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
             tBodyElement.removeChild(toBeRemoved.getElement());
             orphan(toBeRemoved);
             renderedRows.remove(index);
-            for (int ix = index; ix < renderedRows.size(); ix++) {
-                VScrollTableRow r = (VScrollTableRow) renderedRows.get(ix);
-                r.setIndex(r.getIndex() - 1);
-            }
         }
 
         @Override
index 28b43a1820b2beb140e2eed1b23a4beef4f67e3d..f7bd0b115dfb2a4ea0f4ed6baacd0c9950ada146 100644 (file)
@@ -479,7 +479,7 @@ public class VTreeTable extends VScrollTable {
                     super.onComplete();
                     // Actually unlink the rows and update the cache after the
                     // animation is done.
-                    unlinkRows(firstIndex, rows);
+                    unlinkAndReindexRows(firstIndex, rows);
                     discardRowsOutsideCacheWindow();
                     ensureCacheFilled();
                 }
@@ -489,7 +489,7 @@ public class VTreeTable extends VScrollTable {
 
         protected List<VScrollTableRow> insertRowsAnimated(UIDL rowData,
                 int firstIndex, int rows) {
-            List<VScrollTableRow> insertedRows = insertRows(rowData,
+            List<VScrollTableRow> insertedRows = insertAndReindexRows(rowData,
                     firstIndex, rows);
             RowExpandAnimation anim = new RowExpandAnimation(insertedRows);
             anim.run(150);