From ff310e8bdbfc773153e4faa9eb5749bb3e44700e Mon Sep 17 00:00:00 2001 From: Johannes Dahlström Date: Fri, 18 Jul 2014 15:33:55 +0300 Subject: Grid header/footer rewrite: add partial shared state support (#13334) Currently supported: * Adding and removal of header and footer rows * Header is single-row by default * Footer is zero-row by default * Text captions * Showing and hiding the whole header or footer * Passing captions and visibility in shared state TODO: * Column spanning * HTML content * Widget content * Component content * Sorting/Indicators * Server side API * Rest of shared state handling Change-Id: Iddd1a596597c3b11ead50bd7d5d7011cd81e2c83 --- server/src/com/vaadin/ui/components/grid/Grid.java | 21 +++++++++++++++++---- .../com/vaadin/ui/components/grid/GridColumn.java | 17 +++++++++++++++-- .../tests/server/component/grid/GridColumns.java | 12 ++++++------ 3 files changed, 38 insertions(+), 12 deletions(-) (limited to 'server') diff --git a/server/src/com/vaadin/ui/components/grid/Grid.java b/server/src/com/vaadin/ui/components/grid/Grid.java index c91924f5a8..e4e6dcf4be 100644 --- a/server/src/com/vaadin/ui/components/grid/Grid.java +++ b/server/src/com/vaadin/ui/components/grid/Grid.java @@ -46,6 +46,8 @@ import com.vaadin.shared.ui.grid.GridColumnState; import com.vaadin.shared.ui.grid.GridServerRpc; import com.vaadin.shared.ui.grid.GridState; import com.vaadin.shared.ui.grid.GridState.SharedSelectionMode; +import com.vaadin.shared.ui.grid.GridStaticSectionState.CellState; +import com.vaadin.shared.ui.grid.GridStaticSectionState.RowState; import com.vaadin.shared.ui.grid.HeightMode; import com.vaadin.shared.ui.grid.ScrollDestination; import com.vaadin.shared.ui.grid.SortDirection; @@ -222,6 +224,11 @@ public class Grid extends AbstractComponent implements SelectionChangeNotifier { * the data source for the grid */ public Grid(final Container.Indexed datasource) { + + getState().header.rows.add(new RowState()); + getState().footer.rows.add(new RowState()); + setColumnFootersVisible(false); + setContainerDataSource(datasource); setSelectionMode(SelectionMode.MULTI); addSelectionChangeListener(new SelectionChangeListener() { @@ -465,7 +472,7 @@ public class Grid extends AbstractComponent implements SelectionChangeNotifier { * true if the header rows should be visible */ public void setColumnHeadersVisible(boolean visible) { - getState().columnHeadersVisible = visible; + getState().header.visible = visible; } /** @@ -474,7 +481,7 @@ public class Grid extends AbstractComponent implements SelectionChangeNotifier { * @return true if the headers of the columns are visible */ public boolean isColumnHeadersVisible() { - return getState(false).columnHeadersVisible; + return getState(false).header.visible; } /** @@ -484,7 +491,7 @@ public class Grid extends AbstractComponent implements SelectionChangeNotifier { * true if the footer rows should be visible */ public void setColumnFootersVisible(boolean visible) { - getState().columnFootersVisible = visible; + getState().footer.visible = visible; } /** @@ -493,7 +500,7 @@ public class Grid extends AbstractComponent implements SelectionChangeNotifier { * @return true if the footer rows should be visible */ public boolean isColumnFootersVisible() { - return getState(false).columnFootersVisible; + return getState(false).footer.visible; } /** @@ -623,6 +630,12 @@ public class Grid extends AbstractComponent implements SelectionChangeNotifier { GridColumnState columnState = new GridColumnState(); columnState.id = columnKeys.key(datasourcePropertyId); getState().columns.add(columnState); + for (RowState row : getState().header.rows) { + row.cells.add(new CellState()); + } + for (RowState row : getState().footer.rows) { + row.cells.add(new CellState()); + } GridColumn column = new GridColumn(this, columnState); columns.put(datasourcePropertyId, column); diff --git a/server/src/com/vaadin/ui/components/grid/GridColumn.java b/server/src/com/vaadin/ui/components/grid/GridColumn.java index 43b2003e35..667b4f86db 100644 --- a/server/src/com/vaadin/ui/components/grid/GridColumn.java +++ b/server/src/com/vaadin/ui/components/grid/GridColumn.java @@ -22,6 +22,7 @@ import com.vaadin.data.util.converter.Converter; import com.vaadin.data.util.converter.ConverterUtil; import com.vaadin.server.VaadinSession; import com.vaadin.shared.ui.grid.GridColumnState; +import com.vaadin.shared.ui.grid.GridStaticSectionState.CellState; import com.vaadin.ui.UI; import com.vaadin.ui.components.grid.renderers.TextRenderer; @@ -88,7 +89,7 @@ public class GridColumn implements Serializable { */ public String getHeaderCaption() throws IllegalStateException { checkColumnIsAttached(); - return state.header; + return getHeaderCellState().text; } /** @@ -102,6 +103,7 @@ public class GridColumn implements Serializable { */ public void setHeaderCaption(String caption) throws IllegalStateException { checkColumnIsAttached(); + getHeaderCellState().text = caption; state.header = caption; grid.markAsDirty(); } @@ -116,7 +118,7 @@ public class GridColumn implements Serializable { */ public String getFooterCaption() throws IllegalStateException { checkColumnIsAttached(); - return state.footer; + return getFooterCellState().text; } /** @@ -130,10 +132,21 @@ public class GridColumn implements Serializable { */ public void setFooterCaption(String caption) throws IllegalStateException { checkColumnIsAttached(); + getFooterCellState().text = caption; state.footer = caption; grid.markAsDirty(); } + private CellState getHeaderCellState() { + int index = grid.getState().columns.indexOf(state); + return grid.getState().header.rows.get(0).cells.get(index); + } + + private CellState getFooterCellState() { + int index = grid.getState().columns.indexOf(state); + return grid.getState().footer.rows.get(0).cells.get(index); + } + /** * Returns the width (in pixels). By default a column is 100px wide. * diff --git a/server/tests/src/com/vaadin/tests/server/component/grid/GridColumns.java b/server/tests/src/com/vaadin/tests/server/component/grid/GridColumns.java index 381135d7ab..9d71d21d59 100644 --- a/server/tests/src/com/vaadin/tests/server/component/grid/GridColumns.java +++ b/server/tests/src/com/vaadin/tests/server/component/grid/GridColumns.java @@ -175,30 +175,30 @@ public class GridColumns { public void testHeaderVisiblility() throws Exception { assertTrue(grid.isColumnHeadersVisible()); - assertTrue(state.columnHeadersVisible); + assertTrue(state.header.visible); grid.setColumnHeadersVisible(false); assertFalse(grid.isColumnHeadersVisible()); - assertFalse(state.columnHeadersVisible); + assertFalse(state.header.visible); grid.setColumnHeadersVisible(true); assertTrue(grid.isColumnHeadersVisible()); - assertTrue(state.columnHeadersVisible); + assertTrue(state.header.visible); } @Test public void testFooterVisibility() throws Exception { assertFalse(grid.isColumnFootersVisible()); - assertFalse(state.columnFootersVisible); + assertFalse(state.footer.visible); grid.setColumnFootersVisible(false); assertFalse(grid.isColumnFootersVisible()); - assertFalse(state.columnFootersVisible); + assertFalse(state.footer.visible); grid.setColumnFootersVisible(true); assertTrue(grid.isColumnFootersVisible()); - assertTrue(state.columnFootersVisible); + assertTrue(state.footer.visible); } @Test -- cgit v1.2.3