summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorJohannes Dahlström <johannesd@vaadin.com>2014-07-18 15:33:55 +0300
committerJohannes Dahlström <johannesd@vaadin.com>2014-07-24 13:11:03 +0300
commitff310e8bdbfc773153e4faa9eb5749bb3e44700e (patch)
treebd76ffae2a26ef15f7a59b8e53004bbaf46a385f /server
parent7b749fb90f159ce285bc562a17293fbcd0d97400 (diff)
downloadvaadin-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')
-rw-r--r--server/src/com/vaadin/ui/components/grid/Grid.java21
-rw-r--r--server/src/com/vaadin/ui/components/grid/GridColumn.java17
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/grid/GridColumns.java12
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