Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. package com.vaadin.tests.components.grid;
  2. import java.util.Arrays;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import com.vaadin.server.VaadinRequest;
  7. import com.vaadin.shared.ui.grid.HeightMode;
  8. import com.vaadin.tests.components.AbstractReindeerTestUI;
  9. import com.vaadin.tests.data.bean.Person;
  10. import com.vaadin.ui.Alignment;
  11. import com.vaadin.ui.Component;
  12. import com.vaadin.ui.Grid;
  13. import com.vaadin.ui.HorizontalLayout;
  14. import com.vaadin.ui.Label;
  15. import com.vaadin.ui.RadioButtonGroup;
  16. import com.vaadin.ui.VerticalLayout;
  17. import com.vaadin.ui.renderers.NumberRenderer;
  18. /**
  19. * Tests that Grid gets correct height based on height mode, and resizes
  20. * properly with details row if height is undefined.
  21. *
  22. * @author Vaadin Ltd
  23. */
  24. public class GridHeight extends AbstractReindeerTestUI {
  25. static final String FULL = "Full";
  26. static final String UNDEFINED = "Undefined";
  27. static final String PX100 = "100px";
  28. static final Integer ROW3 = 3;
  29. static final Object[] gridHeights = { FULL, UNDEFINED, ROW3 };
  30. static final String[] gridWidths = { FULL, UNDEFINED };
  31. static final String[] detailsRowHeights = { FULL, UNDEFINED, PX100 };
  32. private Grid<Person> grid;
  33. private Map<Person, VerticalLayout> detailsLayouts = new HashMap<>();
  34. private RadioButtonGroup<String> detailsHeightSelector;
  35. @Override
  36. protected void setup(VaadinRequest request) {
  37. grid = new Grid<>();
  38. grid.addColumn(Person::getFirstName);
  39. grid.addColumn(Person::getAge, new NumberRenderer());
  40. grid.setItems(createPersons());
  41. grid.setDetailsGenerator(person -> {
  42. if (!detailsLayouts.containsKey(person)) {
  43. createDetailsLayout(person);
  44. }
  45. return detailsLayouts.get(person);
  46. });
  47. grid.addItemClickListener(click -> grid.setDetailsVisible(
  48. click.getItem(), !grid.isDetailsVisible(click.getItem())));
  49. addComponent(createOptionLayout());
  50. addComponent(grid);
  51. }
  52. private List<Person> createPersons() {
  53. Person person1 = new Person();
  54. person1.setFirstName("Nicolaus Copernicus");
  55. person1.setAge(1543);
  56. Person person2 = new Person();
  57. person2.setFirstName("Galileo Galilei");
  58. person2.setAge(1564);
  59. Person person3 = new Person();
  60. person3.setFirstName("Johannes Kepler");
  61. person3.setAge(1571);
  62. return Arrays.asList(person1, person2, person3);
  63. }
  64. private void createDetailsLayout(Person person) {
  65. VerticalLayout detailsLayout = new VerticalLayout();
  66. setDetailsHeight(detailsLayout, detailsHeightSelector.getValue());
  67. detailsLayout.setWidth("100%");
  68. Label lbl1 = new Label("details row");
  69. lbl1.setId("lbl1");
  70. lbl1.setSizeUndefined();
  71. detailsLayout.addComponent(lbl1);
  72. detailsLayout.setComponentAlignment(lbl1, Alignment.MIDDLE_CENTER);
  73. detailsLayouts.put(person, detailsLayout);
  74. }
  75. private Component createOptionLayout() {
  76. HorizontalLayout optionLayout = new HorizontalLayout();
  77. RadioButtonGroup<Object> gridHeightSelector = new RadioButtonGroup<>(
  78. "Grid height");
  79. gridHeightSelector.setItems(Arrays.asList(gridHeights));
  80. gridHeightSelector.setId("gridHeightSelector");
  81. gridHeightSelector.setItemCaptionGenerator(this::generateCaption);
  82. gridHeightSelector.addValueChangeListener(event -> {
  83. Object value = event.getValue();
  84. if (UNDEFINED.equals(value)) {
  85. grid.setHeightUndefined();
  86. grid.setHeightMode(HeightMode.UNDEFINED);
  87. } else if (FULL.equals(value)) {
  88. grid.setHeight("100%");
  89. grid.setHeightMode(HeightMode.CSS);
  90. } else if (ROW3.equals(value)) {
  91. grid.setHeightByRows(ROW3);
  92. grid.setHeightMode(HeightMode.ROW);
  93. }
  94. });
  95. gridHeightSelector.setValue(UNDEFINED);
  96. optionLayout.addComponent(gridHeightSelector);
  97. RadioButtonGroup<String> gridWidthSelector = new RadioButtonGroup<>(
  98. "Grid width", Arrays.asList(gridWidths));
  99. gridWidthSelector.setId("gridWidthSelector");
  100. gridWidthSelector.addValueChangeListener(event -> {
  101. Object value = event.getValue();
  102. if (UNDEFINED.equals(value)) {
  103. grid.setWidthUndefined();
  104. } else if (FULL.equals(value)) {
  105. grid.setWidth("100%");
  106. }
  107. });
  108. gridWidthSelector.setValue(UNDEFINED);
  109. optionLayout.addComponent(gridWidthSelector);
  110. detailsHeightSelector = new RadioButtonGroup<>("Details row height");
  111. detailsHeightSelector.setItems(Arrays.asList(detailsRowHeights));
  112. detailsHeightSelector.setId("detailsHeightSelector");
  113. detailsHeightSelector.addValueChangeListener(event -> {
  114. Object value = event.getValue();
  115. for (VerticalLayout detailsLayout : detailsLayouts.values()) {
  116. setDetailsHeight(detailsLayout, value);
  117. }
  118. });
  119. detailsHeightSelector.setValue(PX100);
  120. optionLayout.addComponent(detailsHeightSelector);
  121. return optionLayout;
  122. }
  123. private void setDetailsHeight(VerticalLayout detailsLayout, Object value) {
  124. if (UNDEFINED.equals(value)) {
  125. detailsLayout.setHeightUndefined();
  126. } else if (FULL.equals(value)) {
  127. detailsLayout.setHeight("100%");
  128. } else if (PX100.equals(value)) {
  129. detailsLayout.setHeight(PX100);
  130. }
  131. }
  132. @Override
  133. protected String getTestDescription() {
  134. return "Grid with undefined height should display all rows and resize when details row is opened."
  135. + "<br>Grid with full height is always 400px high regardless or details row."
  136. + "<br>Grid with row height should always be the height of those rows regardless of details row.";
  137. }
  138. @Override
  139. protected Integer getTicketNumber() {
  140. return 19690;
  141. }
  142. private String generateCaption(Object item) {
  143. if (item instanceof String) {
  144. return item.toString();
  145. } else {
  146. return item + " rows";
  147. }
  148. }
  149. }