package org.vaadin.teemusa.gridextensions.demo; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.vaadin.teemusa.gridextensions.SelectGrid; import org.vaadin.teemusa.gridextensions.cachestrategy.CacheStrategyExtension; import org.vaadin.teemusa.gridextensions.client.tableselection.TableSelectionState.TableSelectionMode; import org.vaadin.teemusa.gridextensions.tableselection.TableSelectionModel; import org.vaadin.teemusa.gridextensions.wrappinggrid.WrappingGrid; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Grid; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.components.grid.HeaderRow; public class HeaderWrapExtensionLayout extends VerticalLayout { private static final String BUTTON_WRAPPING_ENABLED_TEXT = "Turn wrapping off"; private static final String BUTTON_WRAPPING_DISABLED_TEXT = "Turn wrapping on"; public HeaderWrapExtensionLayout() { setMargin(true); final SelectGrid<RowData> grid = new SelectGrid<>(); final WrappingGrid wrap = WrappingGrid.extend(grid); TableSelectionModel<RowData> selectionModel = new TableSelectionModel<>(); selectionModel.setMode(TableSelectionMode.SHIFT); grid.setSelectionModel(selectionModel); generateData(grid, 5, 100); HeaderRow headerRow = grid.prependHeaderRow(); headerRow.join(grid.getColumns().get(1), grid.getColumns().get(2)); HeaderRow headerRow1 = grid.appendHeaderRow(); headerRow1.join(grid.getColumns().get(2), grid.getColumns().get(3)); grid.setWidth("100%"); grid.setHeight("100%"); final Button button = new Button(BUTTON_WRAPPING_DISABLED_TEXT); button.addClickListener(new Button.ClickListener() { int state = 0; public void buttonClick(ClickEvent event) { state = (state + 1) % 2; switch (state) { case 0: // Disable wrapping, attempt to restore original behavior wrap.setWrapping(false); button.setCaption(BUTTON_WRAPPING_DISABLED_TEXT); break; case 1: // Apply wrapping rules wrap.setWrapping(true); button.setCaption(BUTTON_WRAPPING_ENABLED_TEXT); break; } } }); addComponent(button); addComponent(grid); CacheStrategyExtension.extend(grid, 5, 0.2d); } private void generateData(Grid<RowData> g, int cols, int rows) { g.addColumn(RowData::getRowNumber).setCaption("#"); for (int x = 0; x < cols; ++x) { int row = x; g.addColumn(t -> row < t.getValues().length ? t.getValues()[row] : "Empty") .setCaption("Yet another dummy column with extremely long and pointless title " + (x + 1)); } List<RowData> data = new ArrayList<>(); Random r = new Random(); for (int y = 0; y < rows; ++y) { String[] values = new String[cols]; for (int x = 0; x < cols; ++x) { values[x] = "" + r.nextInt() + " babies born last year"; } data.add(new RowData(y, values)); } g.setItems(data); } public static class RowData { private final Integer rowNumber; private final String[] values; RowData(Integer rowNumber, String[] values) { this.rowNumber = rowNumber; this.values = values; } public String[] getValues() { return values; } public Integer getRowNumber() { return rowNumber; } } }