Change-Id: I089f08a056a358d9857ce6608293878e2b8bbd9etags/7.5.0.alpha1
@@ -454,6 +454,11 @@ public class GridConnector extends AbstractHasComponentsConnector implements | |||
} | |||
}); | |||
} | |||
@Override | |||
public void recalculateColumnWidths() { | |||
getWidget().recalculateColumnWidths(); | |||
} | |||
}); | |||
getWidget().addSelectionHandler(internalSelectionChangeHandler); |
@@ -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(); | |||
} | |||
} |
@@ -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(); | |||
} | |||
} |
@@ -50,4 +50,9 @@ public interface GridClientRpc extends ClientRpc { | |||
*/ | |||
public void scrollToEnd(); | |||
/** | |||
* Command client Grid to recalculate column widths. | |||
*/ | |||
public void recalculateColumnWidths(); | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |