From 6abb9c5c64c60db47e8f2dde87afaf0e76b2228c Mon Sep 17 00:00:00 2001 From: Aleksi Hietanen Date: Mon, 3 Oct 2016 10:30:05 +0300 Subject: Reintroduce reordering of grid columns Change-Id: If8a23427ef5500a0177081c4be8065d2d5a0ca4c --- .../client/connectors/grid/GridConnector.java | 26 ++++++++++++- .../widget/grid/events/ColumnReorderEvent.java | 45 ++++++++++++++++++++++ .../main/java/com/vaadin/client/widgets/Grid.java | 11 +++++- 3 files changed, 79 insertions(+), 3 deletions(-) (limited to 'client/src') diff --git a/client/src/main/java/com/vaadin/client/connectors/grid/GridConnector.java b/client/src/main/java/com/vaadin/client/connectors/grid/GridConnector.java index 6596137d9d..02909e1fc3 100644 --- a/client/src/main/java/com/vaadin/client/connectors/grid/GridConnector.java +++ b/client/src/main/java/com/vaadin/client/connectors/grid/GridConnector.java @@ -20,7 +20,9 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.EventTarget; @@ -132,7 +134,7 @@ public class GridConnector * the id of the column to get * @return the column with the given id */ - public Column getColumn(String columnId) { + public Column getColumn(String columnId) { return idToColumn.get(columnId); } @@ -180,6 +182,16 @@ public class GridConnector getColumnId(event.getColumn()), event.isHidden()); } }); + getWidget().addColumnReorderHandler(event -> { + if (event.isUserOriginated()) { + List newColumnOrder = mapColumnsToIds( + event.getNewColumnOrder()); + List oldColumnOrder = mapColumnsToIds( + event.getOldColumnOrder()); + getRpcProxy(GridServerRpc.class) + .columnsReordered(newColumnOrder, oldColumnOrder); + } + }); getWidget().addColumnResizeHandler(event -> { Column column = event.getColumn(); getRpcProxy(GridServerRpc.class).columnResized(getColumnId(column), @@ -219,6 +231,13 @@ public class GridConnector layout(); } + @SuppressWarnings("unchecked") + @OnStateChange("columnOrder") + void updateColumnOrder() { + getWidget().setColumnOrder(getState().columnOrder.stream() + .map(this::getColumn).toArray(size -> new Column[size])); + } + /** * Updates the grid header section on state change. */ @@ -446,4 +465,9 @@ public class GridConnector } return false; } + + private List mapColumnsToIds(List> columns) { + return columns.stream().map(this::getColumnId).filter(Objects::nonNull) + .collect(Collectors.toList()); + } } diff --git a/client/src/main/java/com/vaadin/client/widget/grid/events/ColumnReorderEvent.java b/client/src/main/java/com/vaadin/client/widget/grid/events/ColumnReorderEvent.java index 72c0eb5878..0063c20b28 100644 --- a/client/src/main/java/com/vaadin/client/widget/grid/events/ColumnReorderEvent.java +++ b/client/src/main/java/com/vaadin/client/widget/grid/events/ColumnReorderEvent.java @@ -15,7 +15,10 @@ */ package com.vaadin.client.widget.grid.events; +import java.util.List; + import com.google.gwt.event.shared.GwtEvent; +import com.vaadin.client.widgets.Grid.Column; /** * An event for notifying that the columns in the Grid have been reordered. @@ -37,6 +40,48 @@ public class ColumnReorderEvent extends GwtEvent> { return TYPE; } + private final List> oldColumnOrder; + + private final List> newColumnOrder; + + private final boolean userOriginated; + + public ColumnReorderEvent(List> oldColumnOrder, + List> newColumnOrder, boolean userOriginated) { + this.oldColumnOrder = oldColumnOrder; + this.newColumnOrder = newColumnOrder; + this.userOriginated = userOriginated; + } + + /** + * Gets the ordering of columns prior to this event. + * + * @return the list of columns in the grid's order prior to this event + */ + public List> getOldColumnOrder() { + return oldColumnOrder; + } + + /** + * Gets the new ordering of columns. + * + * @return the list of columns in the grid's current order + */ + public List> getNewColumnOrder() { + return newColumnOrder; + } + + /** + * Check whether this event originated from the user reordering columns or + * via API call. + * + * @return {@code true} if columns were reordered by the user, {@code false} + * if not + */ + public boolean isUserOriginated() { + return userOriginated; + } + @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public Type> getAssociatedType() { diff --git a/client/src/main/java/com/vaadin/client/widgets/Grid.java b/client/src/main/java/com/vaadin/client/widgets/Grid.java index eac958fdce..7d6c1369b8 100644 --- a/client/src/main/java/com/vaadin/client/widgets/Grid.java +++ b/client/src/main/java/com/vaadin/client/widgets/Grid.java @@ -4372,7 +4372,7 @@ public class Grid extends ResizeComposite implements HasSelectionHandlers, Column[] array = reordered .toArray(new Column[reordered.size()]); - setColumnOrder(array); + setColumnOrder(true, array); transferCellFocusOnDrop(); } // else no reordering } @@ -8171,6 +8171,12 @@ public class Grid extends ResizeComposite implements HasSelectionHandlers, * array of columns in wanted order */ public void setColumnOrder(Column... orderedColumns) { + setColumnOrder(false, orderedColumns); + } + + private void setColumnOrder(boolean isUserOriginated, + Column... orderedColumns) { + List> oldOrder = new ArrayList<>(columns); ColumnConfiguration conf = getEscalator().getColumnConfiguration(); // Trigger ComplexRenderer.destroy for old content @@ -8221,7 +8227,8 @@ public class Grid extends ResizeComposite implements HasSelectionHandlers, columnHider.updateTogglesOrder(); - fireEvent(new ColumnReorderEvent()); + fireEvent(new ColumnReorderEvent(oldOrder, newOrder, + isUserOriginated)); } /** -- cgit v1.2.3