@@ -175,7 +175,6 @@ import com.vaadin.client.widget.grid.sort.SortOrder; | |||
import com.vaadin.client.widgets.Escalator.AbstractRowContainer; | |||
import com.vaadin.client.widgets.Escalator.SubPartArguments; | |||
import com.vaadin.client.widgets.Grid.Editor.State; | |||
import com.vaadin.client.widgets.Grid.StaticSection.StaticCell; | |||
import com.vaadin.client.widgets.Grid.StaticSection.StaticRow; | |||
import com.vaadin.shared.Range; | |||
import com.vaadin.shared.Registration; | |||
@@ -5123,8 +5122,11 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>, | |||
@Override | |||
public void onDrop() { | |||
final int draggedColumnIndex = eventCell.getColumnIndex(); | |||
final int colspan = header.getRow(eventCell.getRowIndex()) | |||
.getCell(eventCell.getColumn()).getColspan(); | |||
final StaticRow<?> draggedCellRow = header | |||
.getRow(eventCell.getRowIndex()); | |||
int colspan = draggedCellRow | |||
.getSizeOfCellGroup(getColumn(draggedColumnIndex)); | |||
colspan = colspan == 0 ? 1 : colspan; | |||
if (latestColumnDropIndex != draggedColumnIndex | |||
&& latestColumnDropIndex != draggedColumnIndex + colspan) { | |||
List<Column<?, T>> columns = getColumns(); | |||
@@ -5261,13 +5263,12 @@ 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(); | |||
int colspan = row | |||
.getSizeOfCellGroup(getColumn(cellColumnIndex)); | |||
if (colspan <= 1) { | |||
continue; | |||
} | |||
final int cellColumnRightIndex = cellColumnIndex + row | |||
.getSizeOfCellGroup(getColumn(cellColumnIndex)); | |||
final int cellColumnRightIndex = cellColumnIndex + colspan; | |||
final Range cellRange = Range.between(cellColumnIndex, | |||
cellColumnRightIndex); | |||
final boolean intersects = draggedCellRange |
@@ -0,0 +1,43 @@ | |||
package com.vaadin.tests.components.grid; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import com.vaadin.server.VaadinRequest; | |||
import com.vaadin.tests.components.AbstractTestUI; | |||
import com.vaadin.ui.Grid; | |||
import com.vaadin.ui.Grid.Column; | |||
import com.vaadin.ui.components.grid.HeaderRow; | |||
public class GridReorderMerged extends AbstractTestUI { | |||
@Override | |||
protected void setup(VaadinRequest request) { | |||
Grid<String> grid = new Grid<>(); | |||
List<String> items = new ArrayList<>(); | |||
HeaderRow headerRow = grid.prependHeaderRow(); | |||
for (int i = 1; i < 10; ++i) { | |||
String propertyId = "" + i; | |||
Column<String, ?> column = grid | |||
.addColumn(item -> propertyId.equals(item) ? item : "") | |||
.setId(propertyId).setCaption(propertyId); | |||
column.setHidable(true); | |||
if (i == 5) { | |||
column.setHidden(true); | |||
} | |||
items.add(propertyId); | |||
} | |||
grid.setItems(items); | |||
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 String getTestDescription() { | |||
return "Reordering columns should respect joined cells " | |||
+ "even when some columns are hidden."; | |||
} | |||
} |
@@ -0,0 +1,44 @@ | |||
package com.vaadin.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()); | |||
} | |||
@Test | |||
public void dragMergedReverse() { | |||
openTestURL(); | |||
GridElement grid = $(GridElement.class).first(); | |||
GridCellElement headerCell0_0 = grid.getHeaderCell(0, 0); | |||
GridCellElement headerCell0_4 = grid.getHeaderCell(0, 4); | |||
new Actions(driver).clickAndHold(headerCell0_4) | |||
.moveByOffset(-headerCell0_0.getSize().getWidth(), | |||
headerCell0_0.getSize().getHeight() / 2) | |||
.release().perform(); | |||
// ensure the second merged block got dragged over the first merged | |||
// block entirely | |||
assertEquals("Unexpected column order,", "6", | |||
grid.getHeaderCell(1, 1).getText()); | |||
} | |||
} |