diff options
author | Johannes Dahlström <johannesd@vaadin.com> | 2014-07-18 15:33:55 +0300 |
---|---|---|
committer | Johannes Dahlström <johannesd@vaadin.com> | 2014-07-24 13:11:03 +0300 |
commit | ff310e8bdbfc773153e4faa9eb5749bb3e44700e (patch) | |
tree | bd76ffae2a26ef15f7a59b8e53004bbaf46a385f /server | |
parent | 7b749fb90f159ce285bc562a17293fbcd0d97400 (diff) | |
download | vaadin-framework-ff310e8bdbfc773153e4faa9eb5749bb3e44700e.tar.gz vaadin-framework-ff310e8bdbfc773153e4faa9eb5749bb3e44700e.zip |
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
Diffstat (limited to 'server')
3 files changed, 38 insertions, 12 deletions
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 { * <code>true</code> 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 <code>true</code> 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 { * <code>true</code> 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 <code>true</code> 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 |