Browse Source

Fix for the indexing problems in #7561

svn changeset:20937/svn branch:6.7
tags/6.7.0.rc1
Jonatan Kronqvist 12 years ago
parent
commit
8c6e1de310
1 changed files with 19 additions and 15 deletions
  1. 19
    15
      src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java

+ 19
- 15
src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java View File

@@ -3980,13 +3980,13 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
}
} else {
// insert in the middle
int realIx = firstIndex - firstRendered;
int ix = firstIndex;
while (it.hasNext()) {
VScrollTableRow row = prepareRow((UIDL) it.next());
insertRowAt(row, realIx);
insertRowAt(row, ix);
insertedRows.add(row);
lastRendered++;
realIx++;
ix++;
}
fixSpacers();
}
@@ -4058,11 +4058,12 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
sibling.getElement());
}
adopt(row);
renderedRows.add(index, 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 = index + 1; ix < renderedRows.size(); ix++) {
for (int ix = actualIx + 1; ix < renderedRows.size(); ix++) {
VScrollTableRow r = (VScrollTableRow) renderedRows.get(ix);
r.setIndex(r.getIndex() + 1);
}
@@ -4079,21 +4080,20 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
if (lastRendered - firstRendered < 0) {
return false;
}
int index;
int actualIx;
if (fromBeginning) {
index = 0;
actualIx = 0;
firstRendered++;
} else {
index = renderedRows.size() - 1;
actualIx = renderedRows.size() - 1;
lastRendered--;
}
if (index >= 0) {
unlinkRowAtIndex(index);
if (actualIx >= 0) {
unlinkRowAtActualIndex(actualIx);
fixSpacers();
return true;
} else {
return false;
}
return false;
}

protected void unlinkRows(int firstIndex, int count) {
@@ -4109,7 +4109,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
lastIndex = lastRendered;
}
for (int ix = lastIndex; ix >= firstIndex; ix--) {
unlinkRowAtIndex(ix);
unlinkRowAtActualIndex(actualIndex(ix));
lastRendered--;
}
fixSpacers();
@@ -4120,13 +4120,17 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
index = firstRendered;
}
for (int ix = renderedRows.size() - 1; ix >= index; ix--) {
unlinkRowAtIndex(ix);
unlinkRowAtActualIndex(actualIndex(ix));
lastRendered--;
}
fixSpacers();
}

private void unlinkRowAtIndex(int index) {
private int actualIndex(int index) {
return index - firstRendered;
}

private void unlinkRowAtActualIndex(int index) {
final VScrollTableRow toBeRemoved = (VScrollTableRow) renderedRows
.get(index);
// Unregister row tooltip

Loading…
Cancel
Save