diff options
3 files changed, 41 insertions, 5 deletions
diff --git a/client/src/com/vaadin/client/ui/grid/Grid.java b/client/src/com/vaadin/client/ui/grid/Grid.java index d98927ce18..32de9cccc8 100644 --- a/client/src/com/vaadin/client/ui/grid/Grid.java +++ b/client/src/com/vaadin/client/ui/grid/Grid.java @@ -3140,6 +3140,11 @@ public class Grid<T> extends ResizeComposite implements * array of columns in wanted order */ public void setColumnOrder(GridColumn<?, T>... orderedColumns) { + ColumnConfiguration conf = getEscalator().getColumnConfiguration(); + + // Trigger ComplexRenderer.destroy for old content + conf.removeColumns(0, conf.getColumnCount()); + List<GridColumn<?, T>> newOrder = new ArrayList<GridColumn<?, T>>(); if (selectionColumn != null) { newOrder.add(selectionColumn); @@ -3162,6 +3167,9 @@ public class Grid<T> extends ResizeComposite implements } columns = newOrder; + // Do ComplexRenderer.init and render new content + conf.insertColumns(0, columns.size()); + // Update column widths. for (GridColumn<?, T> column : columns) { column.reapplyWidth(); @@ -3174,10 +3182,6 @@ public class Grid<T> extends ResizeComposite implements for (FooterRow row : footer.getRows()) { row.calculateColspans(); } - - refreshHeader(); - refreshBody(); - refreshFooter(); } /** diff --git a/uitest/src/com/vaadin/tests/components/grid/WidgetRenderers.java b/uitest/src/com/vaadin/tests/components/grid/WidgetRenderers.java index fa39fda3e6..8c6037938c 100644 --- a/uitest/src/com/vaadin/tests/components/grid/WidgetRenderers.java +++ b/uitest/src/com/vaadin/tests/components/grid/WidgetRenderers.java @@ -21,6 +21,8 @@ import com.vaadin.server.Resource; import com.vaadin.server.ThemeResource; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Grid; import com.vaadin.ui.Grid.SelectionMode; import com.vaadin.ui.components.grid.renderers.ButtonRenderer; @@ -49,7 +51,7 @@ public class WidgetRenderers extends AbstractTestUI { item.getItemProperty(ImageRenderer.class).setValue( new ThemeResource("window/img/close.png")); - Grid grid = new Grid(container); + final Grid grid = new Grid(container); grid.setId("test-grid"); grid.setSelectionMode(SelectionMode.NONE); @@ -77,6 +79,15 @@ public class WidgetRenderers extends AbstractTestUI { })); addComponent(grid); + + addComponent(new Button("Change column order", + new Button.ClickListener() { + @Override + public void buttonClick(ClickEvent event) { + grid.setColumnOrder(ImageRenderer.class, + ProgressBarRenderer.class, ButtonRenderer.class); + } + })); } @Override diff --git a/uitest/src/com/vaadin/tests/components/grid/WidgetRenderersTest.java b/uitest/src/com/vaadin/tests/components/grid/WidgetRenderersTest.java index d130eb643c..595e02655b 100644 --- a/uitest/src/com/vaadin/tests/components/grid/WidgetRenderersTest.java +++ b/uitest/src/com/vaadin/tests/components/grid/WidgetRenderersTest.java @@ -16,12 +16,15 @@ package com.vaadin.tests.components.grid; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Test; import org.openqa.selenium.WebElement; import com.vaadin.testbench.By; +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.testbench.elements.NotificationElement; import com.vaadin.tests.annotations.TestCategory; import com.vaadin.tests.components.grid.GridElement.GridCellElement; import com.vaadin.tests.tb3.MultiBrowserTest; @@ -70,6 +73,24 @@ public class WidgetRenderersTest extends MultiBrowserTest { .endsWith("window/img/maximize.png")); } + @Test + public void testColumnReorder() { + setDebug(true); + openTestURL(); + + $(ButtonElement.class).caption("Change column order").first().click(); + + assertFalse("Notification was present", + isElementPresent(NotificationElement.class)); + + assertTrue(getGridCell(0, 0) + .isElementPresent(By.className("gwt-Image"))); + assertTrue(getGridCell(0, 1).isElementPresent( + By.className("v-progressbar"))); + assertTrue(getGridCell(0, 2).isElementPresent( + By.className("gwt-Button"))); + } + GridCellElement getGridCell(int row, int col) { return $(GridElement.class).first().getCell(row, col); } |