Browse Source

Take footer into account in column dnd-reorder (#16643)

Change-Id: I0358d1b18f65d40325b6c1bc3f3e4d3b9249fb5f
tags/7.5.0.alpha1
Pekka Hyvönen 9 years ago
parent
commit
3abaa644d9

+ 8
- 6
client/src/com/vaadin/client/widgets/Grid.java View File

import com.vaadin.client.widget.grid.sort.SortOrder; import com.vaadin.client.widget.grid.sort.SortOrder;
import com.vaadin.client.widgets.Escalator.AbstractRowContainer; import com.vaadin.client.widgets.Escalator.AbstractRowContainer;
import com.vaadin.client.widgets.Grid.Editor.State; 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.data.sort.SortDirection; import com.vaadin.shared.data.sort.SortDirection;
import com.vaadin.shared.ui.grid.GridConstants; import com.vaadin.shared.ui.grid.GridConstants;
import com.vaadin.shared.ui.grid.GridStaticCellType; import com.vaadin.shared.ui.grid.GridStaticCellType;
int leftBound = -1; int leftBound = -1;
int rightBound = getColumnCount() + 1; int rightBound = getColumnCount() + 1;


for (int r = 0; r < getHeaderRowCount(); r++) {
HeaderRow headerRow = getHeaderRow(r);
if (!headerRow.hasSpannedCells()) {
final List<StaticRow<?>> rows = new ArrayList<StaticRow<?>>();
rows.addAll(header.getRows());
rows.addAll(footer.getRows());
for (StaticRow<?> row : rows) {
if (!row.hasSpannedCells()) {
continue; continue;
} }
for (int c = frozenColumns; c < getColumnCount(); c++) { for (int c = frozenColumns; c < getColumnCount(); c++) {
HeaderCell cell = headerRow.getCell(getColumn(c));
assert cell != null : "Somehow got a null cell for row:cell "
+ r + ":" + c;
StaticCell cell = row.getCell(getColumn(c));
int colspan = cell.getColspan(); int colspan = cell.getColspan();
if (colspan <= 1) { if (colspan <= 1) {
continue; continue;

+ 74
- 1
uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnReorderTest.java View File

} }


@Test @Test
public void testColumnReorder_cellInsideASpannedHeader_cantBeDroppedOutsideSpannedArea() {
public void testColumnReorder_cellInsideSpannedHeader_cantBeDroppedOutsideSpannedArea() {
// given // given
toggleColumnReorder(); toggleColumnReorder();
selectMenuPath("Component", "Header", "Append row"); selectMenuPath("Component", "Header", "Append row");
assertColumnHeaderOrder(1, 3, 4, 5, 2); assertColumnHeaderOrder(1, 3, 4, 5, 2);
} }


@Test
public void testColumnReorder_footerHasSpannedCells_cantDropInside() {
// given
toggleColumnReorder();
selectMenuPath("Component", "Footer", "Append row");
selectMenuPath("Component", "Footer", "Row 1", "Join columns 1, 2");
assertColumnHeaderOrder(0, 1, 2, 3, 4);

// when
dragAndDropColumnHeader(0, 3, 1, 80);

// then
assertColumnHeaderOrder(0, 3, 1, 2, 4);
}

@Test
public void testColumnReorder_cellInsideASpannedFooter_cantBeDroppedOutsideSpannedArea() {
// given
toggleColumnReorder();
selectMenuPath("Component", "Footer", "Append row");
selectMenuPath("Component", "Footer", "Row 1", "Join columns 1, 2");
assertColumnHeaderOrder(0, 1, 2, 3, 4);

// when
dragAndDropColumnHeader(0, 2, 0, 20);

// then
assertColumnHeaderOrder(0, 2, 1, 3, 4);
}

@Test
public void testColumnReorder_cellInsideTwoCrossingSpanningFooters_cantTouchThis() {
// given
toggleColumnReorder();
selectMenuPath("Component", "Footer", "Append row");
selectMenuPath("Component", "Footer", "Append row");
selectMenuPath("Component", "Footer", "Row 1", "Join column cells 0, 1");
selectMenuPath("Component", "Footer", "Row 2", "Join columns 1, 2");
dragAndDropColumnHeader(0, 3, 0, 10);
assertColumnHeaderOrder(3, 0, 1, 2, 4);

// when
dragAndDropColumnHeader(0, 2, 0, 10);

// then
assertColumnHeaderOrder(3, 0, 1, 2, 4);
}

@Test
public void testColumnReorder_cellsInsideTwoAdjacentSpannedHeaderAndFooter_reorderingLimited() {
// given
toggleColumnReorder();
selectMenuPath("Component", "Header", "Append row");
selectMenuPath("Component", "Footer", "Append row");
selectMenuPath("Component", "Header", "Row 2", "Join columns 3, 4, 5");
dragAndDropColumnHeader(0, 0, 4, 80);
scrollGridHorizontallyTo(0);
dragAndDropColumnHeader(0, 1, 4, 80);
scrollGridHorizontallyTo(0);
selectMenuPath("Component", "Footer", "Row 1", "Join columns 1, 2");
assertColumnHeaderOrder(1, 3, 4, 5, 2);

// when then
dragAndDropColumnHeader(0, 1, 3, 80);
assertColumnHeaderOrder(1, 4, 3, 5, 2);

dragAndDropColumnHeader(0, 2, 4, 10);
assertColumnHeaderOrder(1, 4, 3, 5, 2);

dragAndDropColumnHeader(0, 2, 0, 10);
assertColumnHeaderOrder(1, 3, 4, 5, 2);
}

private void toggleColumnReorder() { private void toggleColumnReorder() {
selectMenuPath("Component", "State", "Column Reordering"); selectMenuPath("Component", "State", "Column Reordering");
} }

Loading…
Cancel
Save