/* * 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 java.util.stream.IntStream; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractTestUIWithLog; import com.vaadin.tests.data.bean.Person; import com.vaadin.ui.Button; import com.vaadin.ui.Component; import com.vaadin.ui.Grid; import com.vaadin.ui.Grid.Column; import com.vaadin.ui.TextField; import com.vaadin.ui.components.grid.FooterCell; import com.vaadin.ui.components.grid.FooterRow; import com.vaadin.ui.components.grid.HeaderCell; import com.vaadin.ui.components.grid.HeaderRow; import com.vaadin.ui.renderers.NumberRenderer; public class GridHeaderFooterComponents extends AbstractTestUIWithLog { @Override protected void setup(VaadinRequest request) { final Grid<Person> grid = new Grid<>(); grid.setWidth("800px"); grid.addColumn(Person::getFirstName).setId("action"); grid.addColumn(Person::getLastName).setId("string"); grid.addColumn(Person::getAge, new NumberRenderer()).setId("int"); grid.addColumn(Person::getSalaryDouble, new NumberRenderer()) .setId("double"); grid.setItems(IntStream.range(0, 5).mapToObj(this::createPerson)); final HeaderRow defaultRow = grid.getDefaultHeaderRow(); final HeaderRow toggleVisibilityRow = grid.appendHeaderRow(); final HeaderRow filterRow = grid.appendHeaderRow(); final FooterRow footerRow = grid.appendFooterRow(); final FooterRow toggleVisibilityFooterRow = grid.addFooterRowAt(0); final FooterRow filterFooterRow = grid.addFooterRowAt(0); // Set up a filter for all columns for (Column<Person, ?> column : grid.getColumns()) { final HeaderCell headerCell = filterRow.getCell(column); final FooterCell footerCell = filterFooterRow.getCell(column); headerCell.setComponent(createTextField(column.getId())); footerCell.setComponent(createTextField(column.getId())); toggleVisibilityRow.getCell(column.getId()) .setComponent(new Button("Toggle field", event -> { Component c = headerCell.getComponent(); c.setVisible(!c.isVisible()); })); toggleVisibilityFooterRow.getCell(column.getId()) .setComponent(new Button("Toggle field", event -> { Component c = footerCell.getComponent(); c.setVisible(!c.isVisible()); })); } addComponent(grid); addRemoveHeaderRow(grid, defaultRow); addRemoveHeaderRow(grid, filterRow); addRemoveHeaderRow(grid, toggleVisibilityRow); addRemoveFooterRow(grid, footerRow); addRemoveFooterRow(grid, filterFooterRow); addRemoveFooterRow(grid, toggleVisibilityFooterRow); // Hide first field initially filterRow.getCell("string").getComponent().setVisible(false); filterFooterRow.getCell("string").getComponent().setVisible(false); } private void addRemoveHeaderRow(final Grid<Person> grid, final HeaderRow row) { row.getCell("action").setComponent( new Button("Remove row", event -> grid.removeHeaderRow(row))); } private void addRemoveFooterRow(final Grid<Person> grid, final FooterRow row) { row.getCell("action").setComponent( new Button("Remove row", event -> grid.removeFooterRow(row))); } private Person createPerson(int i) { Person person = new Person(); person.setFirstName(""); person.setLastName("Hello world"); person.setAge(13); person.setSalaryDouble(5.2d); return person; } private TextField createTextField(final Object pid) { TextField filterField = new TextField(); filterField.setWidth("8em"); filterField.setValue("Filter: " + pid); filterField.addValueChangeListener(listener -> { log("value change for field in " + pid + " to " + listener.getValue()); }); return filterField; } }