diff options
author | Artur Signell <artur@vaadin.com> | 2015-02-27 17:14:29 +0200 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2015-03-02 12:44:38 +0000 |
commit | b20922110de26639493a120089c0c38d533e370d (patch) | |
tree | 9c67896f3a8cf22725117f9a5e66780196e67aa7 | |
parent | 6ad7ae90209b8d46271fc5dd65db3077a85f43b8 (diff) | |
download | vaadin-framework-b20922110de26639493a120089c0c38d533e370d.tar.gz vaadin-framework-b20922110de26639493a120089c0c38d533e370d.zip |
Method for requesting column width recalculation (#16748)
Change-Id: I089f08a056a358d9857ce6608293878e2b8bbd9e
6 files changed, 216 insertions, 3 deletions
diff --git a/client/src/com/vaadin/client/connectors/GridConnector.java b/client/src/com/vaadin/client/connectors/GridConnector.java index f263b47642..55f07ecf85 100644 --- a/client/src/com/vaadin/client/connectors/GridConnector.java +++ b/client/src/com/vaadin/client/connectors/GridConnector.java @@ -454,6 +454,11 @@ public class GridConnector extends AbstractHasComponentsConnector implements } }); } + + @Override + public void recalculateColumnWidths() { + getWidget().recalculateColumnWidths(); + } }); getWidget().addSelectionHandler(internalSelectionChangeHandler); diff --git a/client/src/com/vaadin/client/widgets/Grid.java b/client/src/com/vaadin/client/widgets/Grid.java index 71962d6953..f9319b39d2 100644 --- a/client/src/com/vaadin/client/widgets/Grid.java +++ b/client/src/com/vaadin/client/widgets/Grid.java @@ -3027,11 +3027,11 @@ public class Grid<T> extends ResizeComposite implements } if (this.grid != null) { - this.grid.autoColumnWidthsRecalculator.schedule(); + this.grid.recalculateColumnWidths(); } this.grid = grid; if (this.grid != null) { - this.grid.autoColumnWidthsRecalculator.schedule(); + this.grid.recalculateColumnWidths(); updateHeader(); } } @@ -3415,7 +3415,7 @@ public class Grid<T> extends ResizeComposite implements private void scheduleColumnWidthRecalculator() { if (grid != null) { - grid.autoColumnWidthsRecalculator.schedule(); + grid.recalculateColumnWidths(); } else { /* * NOOP @@ -6279,4 +6279,17 @@ public class Grid<T> extends ResizeComposite implements public void resetSizesFromDom() { getEscalator().resetSizesFromDom(); } + + /** + * Requests that the column widths should be recalculated. + * <p> + * The actual recalculation is not necessarily done immediately so you + * cannot rely on the columns being the correct width after the call + * returns. + * + * @since + */ + public void recalculateColumnWidths() { + autoColumnWidthsRecalculator.schedule(); + } } diff --git a/server/src/com/vaadin/ui/Grid.java b/server/src/com/vaadin/ui/Grid.java index a32968bd73..6ab6c6b1a4 100644 --- a/server/src/com/vaadin/ui/Grid.java +++ b/server/src/com/vaadin/ui/Grid.java @@ -5080,4 +5080,17 @@ public class Grid extends AbstractComponent implements SelectionNotifier, public void removeListener(ItemClickListener listener) { removeItemClickListener(listener); } + + /** + * Requests that the column widths should be recalculated. + * <p> + * In most cases Grid will know when column widths need to be recalculated + * but this method can be used to force recalculation in situations when + * grid does not recalculate automatically. + * + * @since + */ + public void recalculateColumnWidths() { + getRpcProxy(GridClientRpc.class).recalculateColumnWidths(); + } } diff --git a/shared/src/com/vaadin/shared/ui/grid/GridClientRpc.java b/shared/src/com/vaadin/shared/ui/grid/GridClientRpc.java index ed849cb361..4ba081b5df 100644 --- a/shared/src/com/vaadin/shared/ui/grid/GridClientRpc.java +++ b/shared/src/com/vaadin/shared/ui/grid/GridClientRpc.java @@ -50,4 +50,9 @@ public interface GridClientRpc extends ClientRpc { */ public void scrollToEnd(); + /** + * Command client Grid to recalculate column widths. + */ + public void recalculateColumnWidths(); + } diff --git a/uitest/src/com/vaadin/tests/components/grid/GridColumnWidthRecalculation.java b/uitest/src/com/vaadin/tests/components/grid/GridColumnWidthRecalculation.java new file mode 100644 index 0000000000..43584eb5e1 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/grid/GridColumnWidthRecalculation.java @@ -0,0 +1,95 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.grid; + +import java.util.ArrayList; + +import com.vaadin.annotations.Theme; +import com.vaadin.data.Container.Indexed; +import com.vaadin.data.Item; +import com.vaadin.data.Property; +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; + +@Theme("valo") +public class GridColumnWidthRecalculation extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + final Grid grid = new Grid(); + + grid.addColumn("Column 1"); + grid.addColumn("Column 2"); + + grid.addRow("Narrow", + "Wiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiide"); + addComponent(grid); + + Button b = new Button("Swap content", new Button.ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + swapData(grid); + } + }); + addComponent(b); + + b = new Button("Swap content and recalculate columns", + new Button.ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + swapData(grid); + grid.recalculateColumnWidths(); + + } + }); + addComponent(b); + } + + @SuppressWarnings("unchecked") + protected void swapData(Grid grid) { + Indexed dataSource = grid.getContainerDataSource(); + Object itemId = dataSource.getItemIds().iterator().next(); + Item item = dataSource.getItem(itemId); + ArrayList<Object> pIds = new ArrayList<Object>( + item.getItemPropertyIds()); + for (int i = 0; i < pIds.size() / 2; i++) { + int j = pIds.size() - 1 - i; + Object pid1 = pIds.get(i); + Object pid2 = pIds.get(j); + + Property<Object> property1 = item.getItemProperty(pid1); + Property<Object> property2 = item.getItemProperty(pid2); + Object tmp = property1.getValue(); + property1.setValue(property2.getValue()); + property2.setValue(tmp); + } + } + + @Override + protected String getTestDescription() { + return "There should be a way to ask Grid to recalculate column widths from server-side."; + } + + @Override + protected Integer getTicketNumber() { + return 16748; + } +} diff --git a/uitest/src/com/vaadin/tests/components/grid/GridColumnWidthRecalculationTest.java b/uitest/src/com/vaadin/tests/components/grid/GridColumnWidthRecalculationTest.java new file mode 100644 index 0000000000..fab3bd8a1c --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/grid/GridColumnWidthRecalculationTest.java @@ -0,0 +1,82 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.grid; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.Dimension; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.testbench.elements.GridElement; +import com.vaadin.testbench.elements.GridElement.GridCellElement; +import com.vaadin.tests.tb3.SingleBrowserTest; + +public class GridColumnWidthRecalculationTest extends SingleBrowserTest { + + private GridElement grid; + + @Before + public void open() { + openTestURL(); + grid = $(GridElement.class).first(); + } + + @Test + public void columnWidthAfterSwap() { + int column0Width = getColumnWidth(0); + int column1Width = getColumnWidth(1); + Assert.assertTrue( + "Column 0 should be narrower than column 1 initially", + column0Width < column1Width); + + $(ButtonElement.class).caption("Swap content").first().click(); + + Assert.assertEquals( + "Column 0 width should not change when swapping contents only", + column0Width, getColumnWidth(0)); + Assert.assertEquals( + "Column 1 width should not change when swapping contents only", + column1Width, getColumnWidth(1)); + } + + @Test + public void columnWidthAfterSwapAndRecalculate() { + int column0Width = getColumnWidth(0); + int column1Width = getColumnWidth(1); + Assert.assertTrue( + "Column 0 should be narrower than column 1 initially", + column0Width < column1Width); + + $(ButtonElement.class).caption("Swap content and recalculate columns") + .first().click(); + + column0Width = getColumnWidth(0); + column1Width = getColumnWidth(1); + + Assert.assertTrue( + "Column 1 should be narrower than column 0 after resize", + column1Width < column0Width); + } + + private int getColumnWidth(int columnIndex) { + GridCellElement headerColumn = grid.getHeaderCells(0).get(columnIndex); + Dimension column1Size = headerColumn.getSize(); + int columnWidth = column1Size.getWidth(); + return columnWidth; + } + +} |