Kaynağa Gözat

Method for requesting column width recalculation (#16748)

Change-Id: I089f08a056a358d9857ce6608293878e2b8bbd9e
tags/7.5.0.alpha1
Artur Signell 9 yıl önce
ebeveyn
işleme
b20922110d

+ 5
- 0
client/src/com/vaadin/client/connectors/GridConnector.java Dosyayı Görüntüle

@@ -454,6 +454,11 @@ public class GridConnector extends AbstractHasComponentsConnector implements
}
});
}

@Override
public void recalculateColumnWidths() {
getWidget().recalculateColumnWidths();
}
});

getWidget().addSelectionHandler(internalSelectionChangeHandler);

+ 16
- 3
client/src/com/vaadin/client/widgets/Grid.java Dosyayı Görüntüle

@@ -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();
}
}

+ 13
- 0
server/src/com/vaadin/ui/Grid.java Dosyayı Görüntüle

@@ -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();
}
}

+ 5
- 0
shared/src/com/vaadin/shared/ui/grid/GridClientRpc.java Dosyayı Görüntüle

@@ -50,4 +50,9 @@ public interface GridClientRpc extends ClientRpc {
*/
public void scrollToEnd();

/**
* Command client Grid to recalculate column widths.
*/
public void recalculateColumnWidths();

}

+ 95
- 0
uitest/src/com/vaadin/tests/components/grid/GridColumnWidthRecalculation.java Dosyayı Görüntüle

@@ -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;
}
}

+ 82
- 0
uitest/src/com/vaadin/tests/components/grid/GridColumnWidthRecalculationTest.java Dosyayı Görüntüle

@@ -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;
}

}

Loading…
İptal
Kaydet