You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AbstractGridDnD.java 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package com.vaadin.tests.components.grid;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import java.util.Random;
  5. import java.util.stream.Collectors;
  6. import java.util.stream.Stream;
  7. import com.vaadin.shared.ui.grid.DropMode;
  8. import com.vaadin.tests.components.AbstractTestUIWithLog;
  9. import com.vaadin.tests.util.Person;
  10. import com.vaadin.tests.util.TestDataGenerator;
  11. import com.vaadin.ui.CheckBox;
  12. import com.vaadin.ui.Grid;
  13. import com.vaadin.ui.HorizontalLayout;
  14. import com.vaadin.ui.Layout;
  15. import com.vaadin.ui.RadioButtonGroup;
  16. import com.vaadin.ui.components.grid.GridDragSource;
  17. import com.vaadin.ui.components.grid.GridRowDragger;
  18. import com.vaadin.ui.components.grid.GridDropTarget;
  19. public abstract class AbstractGridDnD extends AbstractTestUIWithLog {
  20. protected final Layout controls = new HorizontalLayout();
  21. protected void initializeTestFor(GridRowDragger<Person> gridDragger) {
  22. initializeTestFor(gridDragger.getGridDragSource().getGrid(),
  23. gridDragger.getGridDropTarget().getGrid(),
  24. gridDragger.getGridDragSource(),
  25. gridDragger.getGridDropTarget());
  26. }
  27. protected void initializeTestFor(Grid<Person> source, Grid<Person> target,
  28. GridDragSource<Person> dragSource,
  29. GridDropTarget<Person> dropTarget) {
  30. // Layout the two grids
  31. Layout layout = new HorizontalLayout();
  32. layout.addComponent(source);
  33. layout.addComponent(target); // noop if source == target
  34. layout.setWidth("100%");
  35. // Selection modes
  36. List<Grid.SelectionMode> selectionModes = Arrays
  37. .asList(Grid.SelectionMode.SINGLE, Grid.SelectionMode.MULTI);
  38. RadioButtonGroup<Grid.SelectionMode> selectionModeSelect = new RadioButtonGroup<>(
  39. "Selection mode", selectionModes);
  40. selectionModeSelect.setSelectedItem(Grid.SelectionMode.SINGLE);
  41. selectionModeSelect.addValueChangeListener(
  42. event -> source.setSelectionMode(event.getValue()));
  43. // Drop locations
  44. List<DropMode> dropLocations = Arrays.asList(DropMode.values());
  45. RadioButtonGroup<DropMode> dropLocationSelect = new RadioButtonGroup<>(
  46. "Allowed drop location", dropLocations);
  47. dropLocationSelect.setSelectedItem(DropMode.BETWEEN);
  48. dropLocationSelect.addValueChangeListener(
  49. event -> dropTarget.setDropMode(event.getValue()));
  50. CheckBox transitionCheckBox = new CheckBox("Transition layout", false);
  51. transitionCheckBox.addValueChangeListener(event -> {
  52. if (event.getValue()) {
  53. layout.addStyleName("transitioned");
  54. } else {
  55. layout.removeStyleName("transitioned");
  56. }
  57. });
  58. CheckBox dropOnSortedGridRows = new CheckBox("Drop on Sorted Grid Rows",
  59. dropTarget.isDropAllowedOnRowsWhenSorted());
  60. dropOnSortedGridRows.addValueChangeListener(event -> {
  61. dropTarget.setDropAllowedOnRowsWhenSorted(event.getValue());
  62. });
  63. RadioButtonGroup<Integer> frozenColumnSelect = new RadioButtonGroup<>(
  64. "Frozen columns", Arrays.asList(new Integer[] { -1, 0, 1 }));
  65. frozenColumnSelect.setValue(source.getFrozenColumnCount());
  66. frozenColumnSelect.addValueChangeListener(event -> {
  67. source.setFrozenColumnCount(event.getValue());
  68. target.setFrozenColumnCount(event.getValue());
  69. });
  70. controls.addComponents(selectionModeSelect, dropLocationSelect,
  71. transitionCheckBox, dropOnSortedGridRows, frozenColumnSelect);
  72. addComponents(controls, layout);
  73. getPage().getStyles()
  74. .add(".transitioned { transform: translate(-30px, 30px);}");
  75. }
  76. protected Grid<Person> createGridAndFillWithData(int numberOfItems) {
  77. Grid<Person> grid = new Grid<>();
  78. grid.setWidth("100%");
  79. grid.setItems(generateItems(numberOfItems));
  80. grid.addColumn(
  81. person -> person.getFirstName() + " " + person.getLastName())
  82. .setCaption("Name");
  83. grid.addColumn(person -> person.getAddress().getStreetAddress())
  84. .setCaption("Street Address");
  85. grid.addColumn(person -> person.getAddress().getCity())
  86. .setCaption("City");
  87. return grid;
  88. }
  89. private List<Person> generateItems(int num) {
  90. return Stream.generate(() -> generateRandomPerson(new Random()))
  91. .limit(num).collect(Collectors.toList());
  92. }
  93. private Person generateRandomPerson(Random r) {
  94. return new Person(TestDataGenerator.getFirstName(r),
  95. TestDataGenerator.getLastName(r), "foo@bar.com",
  96. TestDataGenerator.getPhoneNumber(r),
  97. TestDataGenerator.getStreetAddress(r),
  98. TestDataGenerator.getPostalCode(r),
  99. TestDataGenerator.getCity(r));
  100. }
  101. }