From eba78039628c3f6b092338d0ff8da3b6821741e4 Mon Sep 17 00:00:00 2001 From: Anna Koskinen Date: Wed, 5 Dec 2018 08:53:13 +0200 Subject: Improvements to updating spacer indexes. (#11353) * Improvements to updating spacer indexes. - When details rows are moved down, indexes need to be updated from bottom up. Fixes #11352 --- .../main/java/com/vaadin/client/widgets/Escalator.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 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 cc207c10c0..c559c36c18 100644 --- a/client/src/main/java/com/vaadin/client/widgets/Escalator.java +++ b/client/src/main/java/com/vaadin/client/widgets/Escalator.java @@ -5606,10 +5606,19 @@ public class Escalator extends Widget */ public void shiftSpacersByRows(int index, int numberOfRows) { final double pxDiff = numberOfRows * body.getDefaultRowHeight(); - for (SpacerContainer.SpacerImpl spacer : getSpacersForRowAndAfter( - index)) { - spacer.setPositionDiff(0, pxDiff); - spacer.setRowIndex(spacer.getRow() + numberOfRows); + List spacers = new ArrayList<>( + getSpacersForRowAndAfter(index)); + if (numberOfRows < 0) { + for (SpacerContainer.SpacerImpl spacer : spacers) { + spacer.setPositionDiff(0, pxDiff); + spacer.setRowIndex(spacer.getRow() + numberOfRows); + } + } else { + for (int i = spacers.size() - 1; i >= 0; --i) { + SpacerContainer.SpacerImpl spacer = spacers.get(i); + spacer.setPositionDiff(0, pxDiff); + spacer.setRowIndex(spacer.getRow() + numberOfRows); + } } } -- cgit v1.2.3