diff options
author | Pekka Hyvönen <pekka@vaadin.com> | 2017-10-25 15:46:32 +0300 |
---|---|---|
committer | Pekka Hyvönen <pekka@vaadin.com> | 2017-10-31 11:22:45 +0200 |
commit | c80b53122e1fc0b5ee76082c139333ec8734a636 (patch) | |
tree | bc18c6089e6e94d2d1533f3e0227ab7b24f3d0ba | |
parent | e2acf99e3e284bcfa364cd15156cdf275b081f45 (diff) | |
download | vaadin-framework-c80b53122e1fc0b5ee76082c139333ec8734a636.tar.gz vaadin-framework-c80b53122e1fc0b5ee76082c139333ec8734a636.zip |
Change DropMode to BETWEEN and add Test UIs
5 files changed, 230 insertions, 100 deletions
diff --git a/server/src/main/java/com/vaadin/ui/components/grid/GridDragger.java b/server/src/main/java/com/vaadin/ui/components/grid/GridDragger.java index 07554256e4..6f753db0d5 100644 --- a/server/src/main/java/com/vaadin/ui/components/grid/GridDragger.java +++ b/server/src/main/java/com/vaadin/ui/components/grid/GridDragger.java @@ -62,18 +62,20 @@ public class GridDragger<T> implements Serializable { private boolean removeFromSource = true; /** - * Extends a Grid and makes it's row orderable by dragging entries up or - * down. + * Enables DnD reordering for the rows in the given grid. + * <p> + * {@link DropMode#BETWEEN} is used. * * @param grid * Grid to be extended. */ public GridDragger(Grid<T> grid) { - this(grid, grid, DropMode.ON_TOP_OR_BETWEEN); + this(grid, grid, DropMode.BETWEEN); } /** - * Enables DnD reordering the rows in the given grid. + * Enables DnD reordering the rows in the given grid with the given drop + * mode. * <p> * <em>NOTE: this only works when the grid has a * {@link ListDataProvider}.</em> Use the custom handlers @@ -93,7 +95,7 @@ public class GridDragger<T> implements Serializable { /** * Enables DnD moving of rows from the source grid to the target grid. * <p> - * {@link DropMode#ON_TOP_OR_BETWEEN} is used. + * {@link DropMode#BETWEEN} is used. * <p> * <em>NOTE: this only works when the grids have a * {@link ListDataProvider}.</em> Use the custom handlers @@ -107,14 +109,14 @@ public class GridDragger<T> implements Serializable { * the target grid dropped to. */ public GridDragger(Grid<T> source, Grid<T> target) { - this(source, target, DropMode.ON_TOP_OR_BETWEEN); + this(source, target, DropMode.BETWEEN); } /** * Enables DnD moving of rows from the source grid to the target grid with * the custom data provider updaters. * <p> - * {@link DropMode#ON_TOP_OR_BETWEEN} is used. + * {@link DropMode#BETWEEN} is used. * * @param source * grid dragged from @@ -128,7 +130,7 @@ public class GridDragger<T> implements Serializable { public GridDragger(Grid<T> source, Grid<T> target, TargetDataProviderUpdater<T> targetDataProviderUpdater, SourceDataProviderUpdater<T> sourceDataProviderUpdater) { - this(source, target, DropMode.ON_TOP_OR_BETWEEN); + this(source, target, DropMode.BETWEEN); this.targetDataProviderUpdater = targetDataProviderUpdater; this.sourceDataProviderUpdater = sourceDataProviderUpdater; } @@ -203,7 +205,7 @@ public class GridDragger<T> implements Serializable { * handle updating instead. * <p> * <em>NOTE: this is not triggered when - * {@link #setRemoveItemsFromSourceGrid(boolean)} has been set to + * {@link #setRemoveItemsFromSource(boolean)} has been set to * {@code false}</em> * * @param sourceDataProviderUpdater @@ -318,7 +320,7 @@ public class GridDragger<T> implements Serializable { * {@code true} to remove dropped items, {@code false} to not * remove. */ - public void setRemoveItemsFromSourceGrid(boolean removeFromSource) { + public void setRemoveItemsFromSource(boolean removeFromSource) { this.removeFromSource = removeFromSource; } @@ -335,7 +337,7 @@ public class GridDragger<T> implements Serializable { * @return {@code true} to remove dropped items, {@code false} to not * remove. */ - public boolean isRemoveItemsFromSourceGrid() { + public boolean isRemoveItemsFromSource() { return removeFromSource; } @@ -343,7 +345,7 @@ public class GridDragger<T> implements Serializable { Grid<T> source = getGridDragSource().getGrid(); if (getSourceGridDropHandler() == null) { if (!(source.getDataProvider() instanceof ListDataProvider)) { - throwIllegalStateException(true); + throwIllegalStateExceptionForUnsupportedDataProvider(true); } ListDataProvider<T> listDataProvider = (ListDataProvider<T>) source .getDataProvider(); @@ -361,7 +363,7 @@ public class GridDragger<T> implements Serializable { Grid<T> target = getGridDropTarget().getGrid(); if (targetDataProviderUpdater == null) { if (!(target.getDataProvider() instanceof ListDataProvider)) { - throwIllegalStateException(false); + throwIllegalStateExceptionForUnsupportedDataProvider(false); } ListDataProvider<T> listDataProvider = (ListDataProvider<T>) target .getDataProvider(); @@ -394,7 +396,7 @@ public class GridDragger<T> implements Serializable { } } - private static void throwIllegalStateException(boolean sourceGrid) { + private static void throwIllegalStateExceptionForUnsupportedDataProvider(boolean sourceGrid) { throw new IllegalStateException( new StringBuilder().append(sourceGrid ? "Source " : "Target ") .append("grid does not have a ListDataProvider, cannot automatically ") diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/AbstractGridDnD.java b/uitest/src/main/java/com/vaadin/tests/components/grid/AbstractGridDnD.java new file mode 100644 index 0000000000..4a445ae6f5 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/grid/AbstractGridDnD.java @@ -0,0 +1,115 @@ +package com.vaadin.tests.components.grid; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import com.vaadin.shared.ui.grid.DropMode; +import com.vaadin.tests.components.AbstractTestUIWithLog; +import com.vaadin.tests.util.Person; +import com.vaadin.tests.util.TestDataGenerator; +import com.vaadin.ui.CheckBox; +import com.vaadin.ui.Grid; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Layout; +import com.vaadin.ui.RadioButtonGroup; +import com.vaadin.ui.components.grid.GridDragSource; +import com.vaadin.ui.components.grid.GridDragger; +import com.vaadin.ui.components.grid.GridDropTarget; + +public abstract class AbstractGridDnD extends AbstractTestUIWithLog { + + protected final Layout controls = new HorizontalLayout(); + + protected void initializeTestFor(GridDragger<Person> gridDragger) { + initializeTestFor(gridDragger.getGridDragSource().getGrid(), + gridDragger.getGridDropTarget().getGrid(), + gridDragger.getGridDragSource(), + gridDragger.getGridDropTarget()); + } + + protected void initializeTestFor(Grid<Person> source, Grid<Person> target, + GridDragSource<Person> dragSource, + GridDropTarget<Person> dropTarget) { + // Layout the two grids + Layout layout = new HorizontalLayout(); + + layout.addComponent(source); + layout.addComponent(target); // noop if source == target + layout.setWidth("100%"); + + // Selection modes + List<Grid.SelectionMode> selectionModes = Arrays + .asList(Grid.SelectionMode.SINGLE, Grid.SelectionMode.MULTI); + RadioButtonGroup<Grid.SelectionMode> selectionModeSelect = new RadioButtonGroup<>( + "Selection mode", selectionModes); + selectionModeSelect.setSelectedItem(Grid.SelectionMode.SINGLE); + selectionModeSelect.addValueChangeListener( + event -> source.setSelectionMode(event.getValue())); + + // Drop locations + List<DropMode> dropLocations = Arrays.asList(DropMode.values()); + RadioButtonGroup<DropMode> dropLocationSelect = new RadioButtonGroup<>( + "Allowed drop location", dropLocations); + dropLocationSelect.setSelectedItem(DropMode.BETWEEN); + dropLocationSelect.addValueChangeListener( + event -> dropTarget.setDropMode(event.getValue())); + + CheckBox transitionCheckBox = new CheckBox("Transition layout", false); + transitionCheckBox.addValueChangeListener(event -> { + if (event.getValue()) { + layout.addStyleName("transitioned"); + } else { + layout.removeStyleName("transitioned"); + } + }); + + RadioButtonGroup<Integer> frozenColumnSelect = new RadioButtonGroup<>( + "Frozen columns", Arrays.asList(new Integer[] { -1, 0, 1 })); + frozenColumnSelect.setValue(source.getFrozenColumnCount()); + frozenColumnSelect.addValueChangeListener(event -> { + source.setFrozenColumnCount(event.getValue()); + target.setFrozenColumnCount(event.getValue()); + }); + + controls.addComponents(selectionModeSelect, dropLocationSelect, + transitionCheckBox, frozenColumnSelect); + + addComponents(controls, layout); + + getPage().getStyles() + .add(".transitioned { transform: translate(-30px, 30px);}"); + } + + protected Grid<Person> createGridAndFillWithData(int numberOfItems) { + Grid<Person> grid = new Grid<>(); + grid.setWidth("100%"); + + grid.setItems(generateItems(numberOfItems)); + grid.addColumn( + person -> person.getFirstName() + " " + person.getLastName()) + .setCaption("Name"); + grid.addColumn(person -> person.getAddress().getStreetAddress()) + .setCaption("Street Address"); + grid.addColumn(person -> person.getAddress().getCity()) + .setCaption("City"); + + return grid; + } + + private List<Person> generateItems(int num) { + return Stream.generate(() -> generateRandomPerson(new Random())) + .limit(num).collect(Collectors.toList()); + } + + private Person generateRandomPerson(Random r) { + return new Person(TestDataGenerator.getFirstName(r), + TestDataGenerator.getLastName(r), "foo@bar.com", + TestDataGenerator.getPhoneNumber(r), + TestDataGenerator.getStreetAddress(r), + TestDataGenerator.getPostalCode(r), + TestDataGenerator.getCity(r)); + } +} diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridDragAndDrop.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridDragAndDrop.java index d0bd23110e..ae421a9879 100644 --- a/uitest/src/main/java/com/vaadin/tests/components/grid/GridDragAndDrop.java +++ b/uitest/src/main/java/com/vaadin/tests/components/grid/GridDragAndDrop.java @@ -15,12 +15,9 @@ */ package com.vaadin.tests.components.grid; -import java.util.Arrays; import java.util.List; -import java.util.Random; import java.util.Set; import java.util.stream.Collectors; -import java.util.stream.Stream; import com.vaadin.annotations.Theme; import com.vaadin.annotations.Widgetset; @@ -30,20 +27,14 @@ import com.vaadin.shared.ui.dnd.DropEffect; import com.vaadin.shared.ui.dnd.EffectAllowed; import com.vaadin.shared.ui.grid.DropLocation; import com.vaadin.shared.ui.grid.DropMode; -import com.vaadin.tests.components.AbstractTestUIWithLog; import com.vaadin.tests.util.Person; -import com.vaadin.tests.util.TestDataGenerator; -import com.vaadin.ui.CheckBox; import com.vaadin.ui.Grid; -import com.vaadin.ui.HorizontalLayout; -import com.vaadin.ui.Layout; -import com.vaadin.ui.RadioButtonGroup; import com.vaadin.ui.components.grid.GridDragSource; import com.vaadin.ui.components.grid.GridDropTarget; @Theme("valo") @Widgetset("com.vaadin.DefaultWidgetSet") -public class GridDragAndDrop extends AbstractTestUIWithLog { +public class GridDragAndDrop extends AbstractGridDnD { private Set<Person> draggedItems; @@ -59,69 +50,7 @@ public class GridDragAndDrop extends AbstractTestUIWithLog { Grid<Person> right = createGridAndFillWithData(0); GridDropTarget<Person> dropTarget = applyDropTarget(right); - // Layout the two grids - Layout grids = new HorizontalLayout(); - - grids.addComponents(left, right); - grids.setWidth("100%"); - - // Selection modes - List<Grid.SelectionMode> selectionModes = Arrays - .asList(Grid.SelectionMode.SINGLE, Grid.SelectionMode.MULTI); - RadioButtonGroup<Grid.SelectionMode> selectionModeSelect = new RadioButtonGroup<>( - "Selection mode", selectionModes); - selectionModeSelect.setSelectedItem(Grid.SelectionMode.SINGLE); - selectionModeSelect.addValueChangeListener( - event -> left.setSelectionMode(event.getValue())); - - // Drop locations - List<DropMode> dropLocations = Arrays.asList(DropMode.values()); - RadioButtonGroup<DropMode> dropLocationSelect = new RadioButtonGroup<>( - "Allowed drop location", dropLocations); - dropLocationSelect.setSelectedItem(DropMode.BETWEEN); - dropLocationSelect.addValueChangeListener( - event -> dropTarget.setDropMode(event.getValue())); - - CheckBox transitionCheckBox = new CheckBox("Transition layout", false); - transitionCheckBox.addValueChangeListener(event -> { - if (event.getValue()) { - grids.addStyleName("transitioned"); - } else { - grids.removeStyleName("transitioned"); - } - }); - - RadioButtonGroup<Integer> frozenColumnSelect = new RadioButtonGroup<>( - "Frozen columns", Arrays.asList(new Integer[] { -1, 0, 1 })); - frozenColumnSelect.setValue(left.getFrozenColumnCount()); - frozenColumnSelect.addValueChangeListener(event -> { - left.setFrozenColumnCount(event.getValue()); - right.setFrozenColumnCount(event.getValue()); - }); - - Layout controls = new HorizontalLayout(selectionModeSelect, - dropLocationSelect, transitionCheckBox, frozenColumnSelect); - - addComponents(controls, grids); - - getPage().getStyles() - .add(".transitioned { transform: translate(-30px, 30px);}"); - } - - private Grid<Person> createGridAndFillWithData(int numberOfItems) { - Grid<Person> grid = new Grid<>(); - grid.setWidth("100%"); - - grid.setItems(generateItems(numberOfItems)); - grid.addColumn( - person -> person.getFirstName() + " " + person.getLastName()) - .setCaption("Name"); - grid.addColumn(person -> person.getAddress().getStreetAddress()) - .setCaption("Street Address"); - grid.addColumn(person -> person.getAddress().getCity()) - .setCaption("City"); - - return grid; + initializeTestFor(left, right, dragSource, dropTarget); } private GridDragSource<Person> applyDragSource(Grid<Person> grid) { @@ -213,17 +142,4 @@ public class GridDragAndDrop extends AbstractTestUIWithLog { return dropTarget; } - private List<Person> generateItems(int num) { - return Stream.generate(() -> generateRandomPerson(new Random())) - .limit(num).collect(Collectors.toList()); - } - - private Person generateRandomPerson(Random r) { - return new Person(TestDataGenerator.getFirstName(r), - TestDataGenerator.getLastName(r), "foo@bar.com", - TestDataGenerator.getPhoneNumber(r), - TestDataGenerator.getStreetAddress(r), - TestDataGenerator.getPostalCode(r), - TestDataGenerator.getCity(r)); - } } diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridDraggerOneGrid.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridDraggerOneGrid.java new file mode 100644 index 0000000000..752d0d07d3 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/grid/GridDraggerOneGrid.java @@ -0,0 +1,40 @@ +/* + * Copyright 2000-2016 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.grid; + +import com.vaadin.annotations.Theme; +import com.vaadin.annotations.Widgetset; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.util.Person; +import com.vaadin.ui.Grid; +import com.vaadin.ui.components.grid.GridDragger; + +@Theme("valo") +@Widgetset("com.vaadin.DefaultWidgetSet") +public class GridDraggerOneGrid extends AbstractGridDnD { + + @Override + protected void setup(VaadinRequest request) { + getUI().setMobileHtml5DndEnabled(true); + + Grid<Person> grid = createGridAndFillWithData(50); + + GridDragger<Person> gridDragger = new GridDragger<>(grid); + + initializeTestFor(gridDragger); + } + +} diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridDraggerTwoGrids.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridDraggerTwoGrids.java new file mode 100644 index 0000000000..1c76a25f8f --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/grid/GridDraggerTwoGrids.java @@ -0,0 +1,57 @@ +/* + * Copyright 2000-2016 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.grid; + +import com.vaadin.annotations.Theme; +import com.vaadin.annotations.Widgetset; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.util.Person; +import com.vaadin.ui.CheckBox; +import com.vaadin.ui.Grid; +import com.vaadin.ui.components.grid.GridDragger; + +@Theme("valo") +@Widgetset("com.vaadin.DefaultWidgetSet") +public class GridDraggerTwoGrids extends AbstractGridDnD { + + @Override + protected void setup(VaadinRequest request) { + getUI().setMobileHtml5DndEnabled(true); + + // Drag source Grid + Grid<Person> left = createGridAndFillWithData(50); + + // Drop target Grid + Grid<Person> right = createGridAndFillWithData(0); + + GridDragger<Person> gridDragger = new GridDragger<>(left, right); + + CheckBox addItemsToEnd = new CheckBox("Add Items To End", + gridDragger.isAddItemsToEnd()); + addItemsToEnd.addValueChangeListener( + event -> gridDragger.setAddItemsToEnd(event.getValue())); + CheckBox removeItemsFromSource = new CheckBox( + "Remove items from source grid", + gridDragger.isRemoveItemsFromSource()); + removeItemsFromSource.addValueChangeListener(event -> gridDragger + .setRemoveItemsFromSource(event.getValue())); + + controls.addComponents(addItemsToEnd, removeItemsFromSource); + + initializeTestFor(gridDragger); + } + +} |