Fixes #12377tags/8.14.0.beta1
@@ -4629,11 +4629,14 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>, | |||
} | |||
final boolean isDraggedCellRow = row.equals(draggedCellRow); | |||
for (int cellColumnIndex = frozenColumns; cellColumnIndex < getColumnCount(); cellColumnIndex++) { | |||
StaticCell cell = row.getCell(getColumn(cellColumnIndex)); | |||
int colspan = cell.getColspan(); | |||
if (colspan <= 1) { | |||
// some of the columns might be hidden, use cell groups | |||
// rather than cell spans to determine actual span | |||
Set<Column<?, ?>> cellGroup = row | |||
.getCellGroupForColumn(getColumn(cellColumnIndex)); | |||
if (cellGroup == null) { | |||
continue; | |||
} | |||
int colspan = cellGroup.size(); | |||
final int cellColumnRightIndex = cellColumnIndex + colspan; | |||
final Range cellRange = Range.between(cellColumnIndex, | |||
cellColumnRightIndex); |
@@ -0,0 +1,45 @@ | |||
package com.vaadin.v7.tests.components.grid; | |||
import com.vaadin.server.VaadinRequest; | |||
import com.vaadin.tests.components.AbstractTestUI; | |||
import com.vaadin.v7.ui.Grid; | |||
import com.vaadin.v7.ui.Grid.Column; | |||
import com.vaadin.v7.ui.Grid.HeaderRow; | |||
@SuppressWarnings("deprecation") | |||
public class GridReorderMerged extends AbstractTestUI { | |||
@SuppressWarnings("unchecked") | |||
@Override | |||
protected void setup(VaadinRequest request) { | |||
Grid grid = new Grid(); | |||
HeaderRow headerRow = grid.prependHeaderRow(); | |||
for (int i = 1; i < 10; ++i) { | |||
String propertyId = "" + i; | |||
Column column = grid.addColumn(propertyId); | |||
column.setHidable(true); | |||
if (i == 5) { | |||
column.setHidden(true); | |||
} | |||
// add one value per row for easier visualization | |||
grid.getContainerDataSource().addItem(i).getItemProperty(propertyId) | |||
.setValue(propertyId); | |||
} | |||
headerRow.join("1", "2", "3").setText("1"); | |||
headerRow.join("4", "5", "6").setText("2"); // middle column hidden | |||
headerRow.join("7", "8", "9").setText("3"); | |||
grid.setColumnReorderingAllowed(true); | |||
addComponent(grid); | |||
} | |||
@Override | |||
protected Integer getTicketNumber() { | |||
return 12377; | |||
} | |||
@Override | |||
protected String getTestDescription() { | |||
return "Reordering columns should respect joined cells " | |||
+ "even when some columns are hidden."; | |||
} | |||
} |
@@ -0,0 +1,27 @@ | |||
package com.vaadin.v7.tests.components.grid; | |||
import static org.junit.Assert.assertEquals; | |||
import org.junit.Test; | |||
import org.openqa.selenium.interactions.Actions; | |||
import com.vaadin.testbench.elements.GridElement; | |||
import com.vaadin.testbench.elements.GridElement.GridCellElement; | |||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||
public class GridReorderMergedTest extends MultiBrowserTest { | |||
@Test | |||
public void dragMerged() { | |||
openTestURL(); | |||
GridElement grid = $(GridElement.class).first(); | |||
GridCellElement headerCell0_0 = grid.getHeaderCell(0, 0); | |||
GridCellElement headerCell0_4 = grid.getHeaderCell(0, 4); | |||
new Actions(driver).dragAndDrop(headerCell0_0, headerCell0_4).perform(); | |||
// ensure the first merged block got dragged over the entire second | |||
// merged block | |||
assertEquals("Unexpected column order,", "6", | |||
grid.getHeaderCell(1, 1).getText()); | |||
} | |||
} |