123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- package com.vaadin.tests.components.grid;
-
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
-
- import com.vaadin.server.VaadinRequest;
- import com.vaadin.shared.ui.grid.HeightMode;
- import com.vaadin.tests.components.AbstractReindeerTestUI;
- import com.vaadin.tests.data.bean.Person;
- import com.vaadin.ui.Alignment;
- import com.vaadin.ui.Component;
- import com.vaadin.ui.Grid;
- import com.vaadin.ui.HorizontalLayout;
- import com.vaadin.ui.Label;
- import com.vaadin.ui.RadioButtonGroup;
- import com.vaadin.ui.VerticalLayout;
- import com.vaadin.ui.renderers.NumberRenderer;
-
- /**
- * Tests that Grid gets correct height based on height mode, and resizes
- * properly with details row if height is undefined.
- *
- * @author Vaadin Ltd
- */
- public class GridHeight extends AbstractReindeerTestUI {
-
- static final String FULL = "Full";
- static final String UNDEFINED = "Undefined";
- static final String PX100 = "100px";
- static final Integer ROW3 = 3;
-
- static final Object[] gridHeights = { FULL, UNDEFINED, ROW3 };
- static final String[] gridWidths = { FULL, UNDEFINED };
- static final String[] detailsRowHeights = { FULL, UNDEFINED, PX100 };
-
- private Grid<Person> grid;
- private Map<Person, VerticalLayout> detailsLayouts = new HashMap<>();
- private RadioButtonGroup<String> detailsHeightSelector;
-
- @Override
- protected void setup(VaadinRequest request) {
-
- grid = new Grid<>();
-
- grid.addColumn(Person::getFirstName);
- grid.addColumn(Person::getAge, new NumberRenderer());
-
- grid.setItems(createPersons());
-
- grid.setDetailsGenerator(person -> {
- if (!detailsLayouts.containsKey(person)) {
- createDetailsLayout(person);
- }
- return detailsLayouts.get(person);
- });
-
- grid.addItemClickListener(click -> grid.setDetailsVisible(
- click.getItem(), !grid.isDetailsVisible(click.getItem())));
-
- addComponent(createOptionLayout());
- addComponent(grid);
- }
-
- private List<Person> createPersons() {
- Person person1 = new Person();
- person1.setFirstName("Nicolaus Copernicus");
- person1.setAge(1543);
-
- Person person2 = new Person();
- person2.setFirstName("Galileo Galilei");
- person2.setAge(1564);
-
- Person person3 = new Person();
- person3.setFirstName("Johannes Kepler");
- person3.setAge(1571);
-
- return Arrays.asList(person1, person2, person3);
- }
-
- private void createDetailsLayout(Person person) {
- VerticalLayout detailsLayout = new VerticalLayout();
- setDetailsHeight(detailsLayout, detailsHeightSelector.getValue());
- detailsLayout.setWidth("100%");
-
- Label lbl1 = new Label("details row");
- lbl1.setId("lbl1");
- lbl1.setSizeUndefined();
- detailsLayout.addComponent(lbl1);
- detailsLayout.setComponentAlignment(lbl1, Alignment.MIDDLE_CENTER);
-
- detailsLayouts.put(person, detailsLayout);
- }
-
- private Component createOptionLayout() {
- HorizontalLayout optionLayout = new HorizontalLayout();
- RadioButtonGroup<Object> gridHeightSelector = new RadioButtonGroup<>(
- "Grid height");
- gridHeightSelector.setItems(Arrays.asList(gridHeights));
- gridHeightSelector.setId("gridHeightSelector");
-
- gridHeightSelector.setItemCaptionGenerator(this::generateCaption);
-
- gridHeightSelector.addValueChangeListener(event -> {
- Object value = event.getValue();
- if (UNDEFINED.equals(value)) {
- grid.setHeightUndefined();
- grid.setHeightMode(HeightMode.UNDEFINED);
- } else if (FULL.equals(value)) {
- grid.setHeight("100%");
- grid.setHeightMode(HeightMode.CSS);
- } else if (ROW3.equals(value)) {
- grid.setHeightByRows(ROW3);
- grid.setHeightMode(HeightMode.ROW);
- }
- });
- gridHeightSelector.setValue(UNDEFINED);
- optionLayout.addComponent(gridHeightSelector);
-
- RadioButtonGroup<String> gridWidthSelector = new RadioButtonGroup<>(
- "Grid width", Arrays.asList(gridWidths));
- gridWidthSelector.setId("gridWidthSelector");
- gridWidthSelector.addValueChangeListener(event -> {
- Object value = event.getValue();
- if (UNDEFINED.equals(value)) {
- grid.setWidthUndefined();
- } else if (FULL.equals(value)) {
- grid.setWidth("100%");
- }
- });
- gridWidthSelector.setValue(UNDEFINED);
- optionLayout.addComponent(gridWidthSelector);
-
- detailsHeightSelector = new RadioButtonGroup<>("Details row height");
- detailsHeightSelector.setItems(Arrays.asList(detailsRowHeights));
- detailsHeightSelector.setId("detailsHeightSelector");
- detailsHeightSelector.addValueChangeListener(event -> {
- Object value = event.getValue();
- for (VerticalLayout detailsLayout : detailsLayouts.values()) {
- setDetailsHeight(detailsLayout, value);
- }
- });
- detailsHeightSelector.setValue(PX100);
- optionLayout.addComponent(detailsHeightSelector);
- return optionLayout;
- }
-
- private void setDetailsHeight(VerticalLayout detailsLayout, Object value) {
- if (UNDEFINED.equals(value)) {
- detailsLayout.setHeightUndefined();
- } else if (FULL.equals(value)) {
- detailsLayout.setHeight("100%");
- } else if (PX100.equals(value)) {
- detailsLayout.setHeight(PX100);
- }
- }
-
- @Override
- protected String getTestDescription() {
- return "Grid with undefined height should display all rows and resize when details row is opened."
- + "<br>Grid with full height is always 400px high regardless or details row."
- + "<br>Grid with row height should always be the height of those rows regardless of details row.";
- }
-
- @Override
- protected Integer getTicketNumber() {
- return 19690;
- }
-
- private String generateCaption(Object item) {
- if (item instanceof String) {
- return item.toString();
- } else {
- return item + " rows";
- }
- }
- }
|