diff options
Diffstat (limited to 'compatibility-client')
3 files changed, 199 insertions, 62 deletions
diff --git a/compatibility-client/src/main/java/com/vaadin/v7/client/connectors/GridConnector.java b/compatibility-client/src/main/java/com/vaadin/v7/client/connectors/GridConnector.java index cf48586d01..cba6fc6565 100644 --- a/compatibility-client/src/main/java/com/vaadin/v7/client/connectors/GridConnector.java +++ b/compatibility-client/src/main/java/com/vaadin/v7/client/connectors/GridConnector.java @@ -389,7 +389,7 @@ public class GridConnector extends AbstractHasComponentsConnector } else { Collection<Column<?, JsonObject>> errorColumns; if (errorColumnsIds != null) { - errorColumns = new ArrayList<Grid.Column<?, JsonObject>>(); + errorColumns = new ArrayList<>(); for (String colId : errorColumnsIds) { errorColumns.add(columnIdToColumn.get(colId)); } @@ -435,7 +435,7 @@ public class GridConnector extends AbstractHasComponentsConnector public void onColumnReorder(ColumnReorderEvent<JsonObject> event) { if (!columnsUpdatedFromState) { List<Column<?, JsonObject>> columns = getWidget().getColumns(); - final List<String> newColumnOrder = new ArrayList<String>(); + final List<String> newColumnOrder = new ArrayList<>(); for (Column<?, JsonObject> column : columns) { if (column instanceof CustomGridColumn) { newColumnOrder.add(((CustomGridColumn) column).id); @@ -494,8 +494,8 @@ public class GridConnector extends AbstractHasComponentsConnector private class CustomDetailsGenerator implements HeightAwareDetailsGenerator { - private final Map<String, ComponentConnector> idToDetailsMap = new HashMap<String, ComponentConnector>(); - private final Map<String, Integer> idToRowIndex = new HashMap<String, Integer>(); + private final Map<String, ComponentConnector> idToDetailsMap = new HashMap<>(); + private final Map<String, Integer> idToRowIndex = new HashMap<>(); @Override public Widget getDetails(int rowIndex) { @@ -544,7 +544,7 @@ public class GridConnector extends AbstractHasComponentsConnector } public void updateConnectorHierarchy(List<ServerConnector> children) { - Set<String> connectorIds = new HashSet<String>(); + Set<String> connectorIds = new HashSet<>(); for (ServerConnector child : children) { if (child instanceof ComponentConnector) { connectorIds.add(child.getConnectorId()); @@ -553,7 +553,7 @@ public class GridConnector extends AbstractHasComponentsConnector } } - Set<String> removedDetails = new HashSet<String>(); + Set<String> removedDetails = new HashSet<>(); for (Entry<String, ComponentConnector> entry : idToDetailsMap .entrySet()) { ComponentConnector connector = entry.getValue(); @@ -626,9 +626,9 @@ public class GridConnector extends AbstractHasComponentsConnector /** * Maps a generated column id to a grid column instance */ - private Map<String, CustomGridColumn> columnIdToColumn = new HashMap<String, CustomGridColumn>(); + private Map<String, CustomGridColumn> columnIdToColumn = new HashMap<>(); - private List<String> columnOrder = new ArrayList<String>(); + private List<String> columnOrder = new ArrayList<>(); /** * {@link #columnsUpdatedFromState} is set to true when @@ -642,7 +642,7 @@ public class GridConnector extends AbstractHasComponentsConnector private RpcDataSource dataSource; /* Used to track Grid editor columns with validation errors */ - private final Map<Column<?, JsonObject>, String> columnToErrorMessage = new HashMap<Column<?, JsonObject>, String>(); + private final Map<Column<?, JsonObject>, String> columnToErrorMessage = new HashMap<>(); private ItemClickHandler itemClickHandler = new ItemClickHandler(); @@ -839,6 +839,11 @@ public class GridConnector extends AbstractHasComponentsConnector } } + // Column resize mode + if (stateChangeEvent.hasPropertyChanged("columnResizeMode")) { + getWidget().setColumnResizeMode(getState().columnResizeMode); + } + // Header and footer if (stateChangeEvent.hasPropertyChanged("header")) { updateHeaderFromState(getState().header); @@ -1101,7 +1106,7 @@ public class GridConnector extends AbstractHasComponentsConnector private void purgeRemovedColumns() { // Get columns still registered in the state - Set<String> columnsInState = new HashSet<String>(); + Set<String> columnsInState = new HashSet<>(); for (GridColumnState columnState : getState().columns) { columnsInState.add(columnState.id); } @@ -1126,7 +1131,7 @@ public class GridConnector extends AbstractHasComponentsConnector } private void onSortStateChange() { - List<SortOrder> sortOrder = new ArrayList<SortOrder>(); + List<SortOrder> sortOrder = new ArrayList<>(); String[] sortColumns = getState().sortColumns; SortDirection[] sortDirs = getState().sortDirs; @@ -1283,7 +1288,7 @@ public class GridConnector extends AbstractHasComponentsConnector * @return displayed error string */ private String getColumnErrors() { - List<String> errors = new ArrayList<String>(); + List<String> errors = new ArrayList<>(); for (Grid.Column<?, JsonObject> c : getWidget().getColumns()) { if (!(c instanceof CustomGridColumn)) { diff --git a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTextField.java b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTextField.java index ffaec8ad20..8357a7649a 100644 --- a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTextField.java +++ b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/VTextField.java @@ -34,6 +34,7 @@ import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.TextBoxBase; import com.vaadin.client.ApplicationConnection; import com.vaadin.client.BrowserInfo; +import com.vaadin.client.DeferredWorker; import com.vaadin.client.WidgetUtil; import com.vaadin.client.ui.Field; import com.vaadin.shared.EventId; @@ -47,7 +48,7 @@ import com.vaadin.v7.shared.ui.textfield.TextFieldConstants; */ @Deprecated public class VTextField extends TextBoxBase implements Field, ChangeHandler, - FocusHandler, BlurHandler, KeyDownHandler { + FocusHandler, BlurHandler, KeyDownHandler, DeferredWorker { /** * The input node CSS classname. @@ -530,4 +531,9 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler, } possibleInputError = false; } + + @Override + public boolean isWorkPending() { + return scheduled; + } } diff --git a/compatibility-client/src/main/java/com/vaadin/v7/client/widgets/Grid.java b/compatibility-client/src/main/java/com/vaadin/v7/client/widgets/Grid.java index 49a6c6b986..0ea348553a 100644 --- a/compatibility-client/src/main/java/com/vaadin/v7/client/widgets/Grid.java +++ b/compatibility-client/src/main/java/com/vaadin/v7/client/widgets/Grid.java @@ -36,6 +36,7 @@ import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.core.shared.GWT; import com.google.gwt.dom.client.BrowserEvents; import com.google.gwt.dom.client.DivElement; +import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.EventTarget; import com.google.gwt.dom.client.NativeEvent; @@ -179,6 +180,7 @@ import com.vaadin.v7.client.widgets.Escalator.SubPartArguments; import com.vaadin.v7.client.widgets.Grid.Editor.State; import com.vaadin.v7.client.widgets.Grid.StaticSection.StaticCell; import com.vaadin.v7.client.widgets.Grid.StaticSection.StaticRow; +import com.vaadin.v7.shared.ui.grid.ColumnResizeMode; import com.vaadin.v7.shared.ui.grid.GridConstants; import com.vaadin.v7.shared.ui.grid.GridConstants.Section; import com.vaadin.v7.shared.ui.grid.GridStaticCellType; @@ -4105,6 +4107,8 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>, private AutoScroller autoScroller = new AutoScroller(this); + private ColumnResizeMode columnResizeMode = ColumnResizeMode.ANIMATED; + private DragAndDropHandler.DragAndDropCallback headerCellDndCallback = new DragAndDropCallback() { private final AutoScrollerCallback autoScrollerCallback = new AutoScrollerCallback() { @@ -5691,63 +5695,164 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>, && staticRow instanceof HeaderRow && ((HeaderRow) staticRow).isDefault()) { + final DivElement resizeElement = Document.get() + .createDivElement(); + resizeElement.addClassName(getStylePrimaryName() + + "-column-resize-simple-indicator"); + final int column = cell.getColumn(); - DragHandle dragger = new DragHandle( - getStylePrimaryName() + "-column-resize-handle", - new DragHandleCallback() { - - private Column<?, T> col = getVisibleColumn( - column); - private double initialWidth = 0; - private double minCellWidth; - - @Override - public void onUpdate(double deltaX, - double deltaY) { - col.setWidth(Math.max(minCellWidth, - initialWidth + deltaX)); - } + final DragHandle dragger = new DragHandle( + getStylePrimaryName() + "-column-resize-handle"); + dragger.addTo(td); - @Override - public void onStart() { - initialWidth = col.getWidthActual(); - - minCellWidth = escalator.getMinCellWidth( - getVisibleColumns().indexOf(col)); - for (Column<?, T> c : getVisibleColumns()) { - if (selectionColumn == c) { - // Don't modify selection column. - continue; - } - - if (c.getWidth() < 0) { - c.setWidth(c.getWidthActual()); - fireEvent( - new ColumnResizeEvent<>(c)); - } - } + // Common functionality for drag handle callback + // implementations + abstract class AbstractDHCallback + implements DragHandleCallback { + protected Column<?, T> col = getVisibleColumn(column); + protected double initialWidth = 0; + protected double minCellWidth; + protected double width; + + protected void dragStarted() { + initialWidth = col.getWidthActual(); + width = initialWidth; + + minCellWidth = escalator.getMinCellWidth( + getVisibleColumns().indexOf(col)); + for (Column<?, T> c : getVisibleColumns()) { + if (selectionColumn == c) { + // Don't modify selection column. + continue; + } - WidgetUtil.setTextSelectionEnabled( - getElement(), false); + if (c.getWidth() < 0) { + c.setWidth(c.getWidthActual()); + fireEvent(new ColumnResizeEvent<>(c)); } + } - @Override - public void onComplete() { - fireEvent(new ColumnResizeEvent<>(col)); + WidgetUtil.setTextSelectionEnabled(getElement(), + false); + } - WidgetUtil.setTextSelectionEnabled( - getElement(), true); - } + protected void dragEnded() { + WidgetUtil.setTextSelectionEnabled(getElement(), + true); + } + } - @Override - public void onCancel() { - col.setWidth(initialWidth); + final DragHandleCallback simpleResizeMode = new AbstractDHCallback() { + @Override + protected void dragEnded() { + super.dragEnded(); + dragger.getElement().removeChild(resizeElement); + } - WidgetUtil.setTextSelectionEnabled( - getElement(), true); - } - }); - dragger.addTo(td); + @Override + public void onStart() { + dragStarted(); + dragger.getElement().appendChild(resizeElement); + resizeElement.getStyle().setLeft( + (dragger.getElement().getOffsetWidth() + - resizeElement.getOffsetWidth()) + * .5, + Unit.PX); + resizeElement.getStyle().setHeight( + col.grid.getOffsetHeight(), Unit.PX); + } + + @Override + public void onUpdate(double deltaX, double deltaY) { + width = Math.max(minCellWidth, + initialWidth + deltaX); + resizeElement.getStyle().setLeft( + (dragger.getElement().getOffsetWidth() + - resizeElement.getOffsetWidth()) + * .5 + (width - initialWidth), + Unit.PX); + } + + @Override + public void onCancel() { + dragEnded(); + } + + @Override + public void onComplete() { + dragEnded(); + + col.setWidth(width); + fireEvent(new ColumnResizeEvent<>(col)); + } + }; + + final DragHandleCallback animatedResizeMode = new AbstractDHCallback() { + @Override + public void onStart() { + dragStarted(); + } + + @Override + public void onUpdate(double deltaX, double deltaY) { + width = Math.max(minCellWidth, + initialWidth + deltaX); + col.setWidth(width); + } + + @Override + public void onCancel() { + dragEnded(); + col.setWidth(initialWidth); + } + + @Override + public void onComplete() { + dragEnded(); + col.setWidth(width); + fireEvent(new ColumnResizeEvent<>(col)); + } + }; + + // DragHandle gets assigned a 'master callback' that + // delegates + // functionality to the correct case-specific implementation + dragger.setCallback(new DragHandleCallback() { + + private DragHandleCallback currentCallback; + + @Override + public void onStart() { + switch (getColumnResizeMode()) { + case SIMPLE: + currentCallback = simpleResizeMode; + break; + case ANIMATED: + currentCallback = animatedResizeMode; + break; + default: + throw new UnsupportedOperationException( + "Support for current column resize mode is not yet implemented"); + } + + currentCallback.onStart(); + } + + @Override + public void onUpdate(double deltaX, double deltaY) { + currentCallback.onUpdate(deltaX, deltaY); + } + + @Override + public void onCancel() { + currentCallback.onCancel(); + } + + @Override + public void onComplete() { + currentCallback.onComplete(); + } + }); } cellFocusHandler.updateFocusedCellStyle(cell, container); @@ -5979,6 +6084,27 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>, return enabled; } + /** + * Sets the column resize mode to use. The default mode is + * {@link ColumnResizeMode.ANIMATED}. + * + * @param mode + * a ColumnResizeMode value + */ + public void setColumnResizeMode(ColumnResizeMode mode) { + columnResizeMode = mode; + } + + /** + * Returns the current column resize mode. The default mode is + * {@link ColumnResizeMode.ANIMATED}. + * + * @return a ColumnResizeMode value + */ + public ColumnResizeMode getColumnResizeMode() { + return columnResizeMode; + } + @Override public void setEnabled(boolean enabled) { if (enabled == this.enabled) { |