aboutsummaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/src/main/java/com/vaadin/client/widgets/Escalator.java28
1 files changed, 25 insertions, 3 deletions
diff --git a/client/src/main/java/com/vaadin/client/widgets/Escalator.java b/client/src/main/java/com/vaadin/client/widgets/Escalator.java
index 7ad1cabf00..c2e70eeb96 100644
--- a/client/src/main/java/com/vaadin/client/widgets/Escalator.java
+++ b/client/src/main/java/com/vaadin/client/widgets/Escalator.java
@@ -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