summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2015-02-27 17:14:29 +0200
committerVaadin Code Review <review@vaadin.com>2015-03-02 12:44:38 +0000
commitb20922110de26639493a120089c0c38d533e370d (patch)
tree9c67896f3a8cf22725117f9a5e66780196e67aa7
parent6ad7ae90209b8d46271fc5dd65db3077a85f43b8 (diff)
downloadvaadin-framework-b20922110de26639493a120089c0c38d533e370d.tar.gz
vaadin-framework-b20922110de26639493a120089c0c38d533e370d.zip
Method for requesting column width recalculation (#16748)
Change-Id: I089f08a056a358d9857ce6608293878e2b8bbd9e
-rw-r--r--client/src/com/vaadin/client/connectors/GridConnector.java5
-rw-r--r--client/src/com/vaadin/client/widgets/Grid.java19
-rw-r--r--server/src/com/vaadin/ui/Grid.java13
-rw-r--r--shared/src/com/vaadin/shared/ui/grid/GridClientRpc.java5
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/GridColumnWidthRecalculation.java95
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/GridColumnWidthRecalculationTest.java82
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;
+ }
+
+}