From 54055b5ab81af631273118222e10f32809563e36 Mon Sep 17 00:00:00 2001 From: Jonatan Kronqvist Date: Fri, 23 Sep 2011 12:28:07 +0000 Subject: [PATCH] Fix for #7644 svn changeset:21278/svn branch:6.7 --- .../terminal/gwt/client/ui/VScrollTable.java | 36 ++++++++++++------- .../terminal/gwt/client/ui/VTreeTable.java | 4 +-- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java index c09508dc58..6384dd71dd 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java @@ -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 insertAndReindexRows(UIDL rowData, + int firstIndex, int rows) { + List 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 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 diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTreeTable.java b/src/com/vaadin/terminal/gwt/client/ui/VTreeTable.java index 28b43a1820..f7bd0b115d 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VTreeTable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VTreeTable.java @@ -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 insertRowsAnimated(UIDL rowData, int firstIndex, int rows) { - List insertedRows = insertRows(rowData, + List insertedRows = insertAndReindexRows(rowData, firstIndex, rows); RowExpandAnimation anim = new RowExpandAnimation(insertedRows); anim.run(150); -- 2.39.5