From e0fcd1cfe0cea7dac124df0d86bf74f8d8c4f9be Mon Sep 17 00:00:00 2001 From: Aleksi Hietanen Date: Mon, 17 Oct 2016 10:13:33 +0300 Subject: Grid html/component content in headers Change-Id: Ie6129b51d15d4f30a6b4c034999ff02deec1c6a7 --- .../client/connectors/grid/GridConnector.java | 35 ++++++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'client') diff --git a/client/src/main/java/com/vaadin/client/connectors/grid/GridConnector.java b/client/src/main/java/com/vaadin/client/connectors/grid/GridConnector.java index a19c955fc4..ad5f8200ea 100644 --- a/client/src/main/java/com/vaadin/client/connectors/grid/GridConnector.java +++ b/client/src/main/java/com/vaadin/client/connectors/grid/GridConnector.java @@ -54,6 +54,7 @@ import com.vaadin.client.widget.grid.sort.SortOrder; import com.vaadin.client.widgets.Grid; import com.vaadin.client.widgets.Grid.Column; import com.vaadin.client.widgets.Grid.FooterRow; +import com.vaadin.client.widgets.Grid.HeaderCell; import com.vaadin.client.widgets.Grid.HeaderRow; import com.vaadin.shared.MouseEventDetails; import com.vaadin.shared.data.DataCommunicatorConstants; @@ -66,6 +67,7 @@ import com.vaadin.shared.ui.grid.GridConstants.Section; import com.vaadin.shared.ui.grid.GridServerRpc; import com.vaadin.shared.ui.grid.GridState; import com.vaadin.shared.ui.grid.SectionState; +import com.vaadin.shared.ui.grid.SectionState.CellState; import com.vaadin.shared.ui.grid.SectionState.RowState; import elemental.json.JsonObject; @@ -255,14 +257,41 @@ public class GridConnector for (RowState rowState : state.rows) { HeaderRow row = grid.appendHeaderRow(); + if (rowState.defaultHeader) { + grid.setDefaultHeaderRow(row); + } + rowState.cells.forEach((columnId, cellState) -> { - row.getCell(getColumn(columnId)).setText(cellState.text); + updateHeaderCellFromState(row.getCell(getColumn(columnId)), + cellState); }); + } + } - if (rowState.defaultHeader) { - grid.setDefaultHeaderRow(row); + private void updateHeaderCellFromState(HeaderCell cell, + CellState cellState) { + switch (cellState.type) { + case TEXT: + cell.setText(cellState.text); + break; + case HTML: + cell.setHtml(cellState.html); + break; + case WIDGET: + ComponentConnector connector = (ComponentConnector) cellState.connector; + if (connector != null) { + cell.setWidget(connector.getWidget()); + } else { + // This happens if you do setVisible(false) on the component on + // the server side + cell.setWidget(null); } + break; + default: + throw new IllegalStateException( + "unexpected cell type: " + cellState.type); } + cell.setStyleName(cellState.styleName); } /** -- cgit v1.2.3