Browse Source

Prevent a gap within Grid rows in some resize situations. (#11918)

Fixes #11892
tags/8.11.0.alpha1
Anna Koskinen 4 years ago
parent
commit
1313bbbe3b
No account linked to committer's email address
1 changed files with 25 additions and 3 deletions
  1. 25
    3
      client/src/main/java/com/vaadin/client/widgets/Escalator.java

+ 25
- 3
client/src/main/java/com/vaadin/client/widgets/Escalator.java View File

@@ -4578,7 +4578,7 @@ public class Escalator extends Widget
// for a gap if a details row is later closed (e.g. by user)
final int addToBottom = Math.min(rowDiff,
getRowCount() - logicalTargetIndex);
final int addToTop = rowDiff - addToBottom;
final int addToTop = Math.max(rowDiff - addToBottom, 0);

if (addToTop > 0) {
fillAndPopulateEscalatorRowsIfNeeded(0,
@@ -4587,8 +4587,30 @@ public class Escalator extends Widget
updateTopRowLogicalIndex(-addToTop);
}
if (addToBottom > 0) {
fillAndPopulateEscalatorRowsIfNeeded(visualTargetIndex,
logicalTargetIndex, addToBottom);
// take into account that rows may have got added to top as
// well, affects visual but not logical indexing
fillAndPopulateEscalatorRowsIfNeeded(
visualTargetIndex + addToTop, logicalTargetIndex,
addToBottom);

// adding new rows due to resizing may have created a gap in
// the middle, check whether the existing rows need moving
double rowTop = getRowTop(oldTopRowLogicalIndex);
if (rowTop > getRowTop(visualRowOrder.get(addToTop))) {
for (int i = addToTop; i < visualTargetIndex; i++) {

final TableRowElement tr = visualRowOrder.get(i);

setRowPosition(tr, 0, rowTop);
rowTop += getDefaultRowHeight();
SpacerContainer.SpacerImpl spacer = spacerContainer
.getSpacer(oldTopRowLogicalIndex + i);
if (spacer != null) {
spacer.setPosition(0, rowTop);
rowTop += spacer.getHeight();
}
}
}
}
} else if (rowDiff < 0) {
// rows need to be removed

Loading…
Cancel
Save