return;
}
if (partialRowAdditions.hasAttribute("hide")) {
- scrollBody.unlinkRows(
+ scrollBody.unlinkAndReindexRows(
partialRowAdditions.getIntAttribute("firstprowix"),
partialRowAdditions.getIntAttribute("numprows"));
scrollBody.ensureCacheFilled();
partialRowAdditions.getIntAttribute("firstprowix"),
partialRowAdditions.getIntAttribute("numprows"));
} else {
- scrollBody.insertRows(partialRowAdditions,
+ scrollBody.insertAndReindexRows(partialRowAdditions,
partialRowAdditions.getIntAttribute("firstprowix"),
partialRowAdditions.getIntAttribute("numprows"));
}
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);
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() {
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;
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
super.onComplete();
// Actually unlink the rows and update the cache after the
// animation is done.
- unlinkRows(firstIndex, rows);
+ unlinkAndReindexRows(firstIndex, rows);
discardRowsOutsideCacheWindow();
ensureCacheFilled();
}
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);