Add support for GridColumnGroup header word wrap (server-side only)
- add GridColumnGroup#get/setHeaderWordWrap
- render "headerWordWrap" property in GridColumnGroupLCA
Change-Id: I35be18b331dc15b099628e143158c991e53f1853
Signed-off-by: Ivan Furnadjiev <ivan@eclipsesource.com>
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumn.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumn.java
index 4f14a6d..865777b 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumn.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumn.java
@@ -912,6 +912,8 @@
public void setHeaderWordWrap( boolean wordWrap ) {
checkWidget();
this.headerWordWrap = wordWrap;
+ parent.layoutCache.invalidateHeaderHeight();
+ parent.scheduleRedraw();
}
/**
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumnGroup.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumnGroup.java
index a32eec6..43f29d4 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumnGroup.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/GridColumnGroup.java
@@ -47,6 +47,7 @@
private List<GridColumn> columns = new ArrayList<GridColumn>();
private boolean expanded = true;
private Font headerFont;
+ private boolean headerWordWrap;
/**
* Constructs a new instance of this class given its parent (which must be a Grid) and a style
@@ -268,6 +269,30 @@
parent.scheduleRedraw();
}
+ /**
+ * Sets whether or not text is word-wrapped in the header for this column group.
+ * If Grid.setAutoHeight(true) is set, the row height is adjusted to accommodate
+ * word-wrapped text.
+ * @param wordWrap Set to true to wrap the text, false otherwise
+ * @see #getHeaderWordWrap()
+ */
+ public void setHeaderWordWrap( boolean wordWrap ) {
+ checkWidget();
+ headerWordWrap = wordWrap;
+ parent.layoutCache.invalidateHeaderHeight();
+ parent.scheduleRedraw();
+ }
+
+ /**
+ * Returns whether or not text is word-wrapped in the header for this column group.
+ * @return true if the header wraps its text.
+ * @see GridColumn#setHeaderWordWrap(boolean)
+ */
+ public boolean getHeaderWordWrap() {
+ checkWidget();
+ return headerWordWrap;
+ }
+
void newColumn( GridColumn column ) {
columns.add( column );
}
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA.java
index 9681cac..963854d 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA.java
@@ -47,6 +47,7 @@
private static final String PROP_VISIBLE = "visibility";
private static final String PROP_FONT = "font";
private static final String PROP_EXPANDED = "expanded";
+ private static final String PROP_HEADER_WORD_WRAP = "headerWordWrap";
private static final String PROP_EXPAND_LISTENER = "Expand";
private static final String PROP_COLLAPSE_LISTENER = "Collapse";
@@ -72,6 +73,7 @@
preserveProperty( group, PROP_VISIBLE, isVisible( group ) );
preserveProperty( group, PROP_FONT, group.getHeaderFont() );
preserveProperty( group, PROP_EXPANDED, group.getExpanded() );
+ preserveProperty( group, PROP_HEADER_WORD_WRAP, group.getHeaderWordWrap() );
preserveListener( group, PROP_EXPAND_LISTENER, hasExpandListener( group ) );
preserveListener( group, PROP_COLLAPSE_LISTENER, hasCollapseListener( group ) );
}
@@ -87,6 +89,7 @@
renderProperty( group, PROP_VISIBLE, isVisible( group ), true );
renderFont( group, PROP_FONT, group.getHeaderFont() );
renderProperty( group, PROP_EXPANDED, group.getExpanded(), true );
+ renderProperty( group, PROP_HEADER_WORD_WRAP, group.getHeaderWordWrap(), false );
renderListener( group, PROP_EXPAND_LISTENER, hasExpandListener( group ), false );
renderListener( group, PROP_COLLAPSE_LISTENER, hasCollapseListener( group ), false );
}
diff --git a/examples/org.eclipse.rap.nebula.widgets.grid.demo.standalone/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java b/examples/org.eclipse.rap.nebula.widgets.grid.demo.standalone/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java
index 8c49f31..1451773 100644
--- a/examples/org.eclipse.rap.nebula.widgets.grid.demo.standalone/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java
+++ b/examples/org.eclipse.rap.nebula.widgets.grid.demo.standalone/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java
@@ -408,6 +408,9 @@
for( GridColumn column : grid.getColumns() ) {
column.setHeaderWordWrap( button.getSelection() );
}
+ for( GridColumnGroup group : grid.getColumnGroups() ) {
+ group.setHeaderWordWrap( button.getSelection() );
+ }
}
} );
}
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumnGroup_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumnGroup_Test.java
index e6fa3ca..e332043 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumnGroup_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumnGroup_Test.java
@@ -168,4 +168,25 @@
group.setHeaderFont( font );
}
+ @Test
+ public void testGetHeaderWordWrap_Initial() {
+ assertFalse( group.getHeaderWordWrap() );
+ }
+
+ @Test
+ public void testGetHeaderWordWrap() {
+ group.setHeaderWordWrap( true );
+
+ assertTrue( group.getHeaderWordWrap() );
+ }
+
+ @Test
+ public void testGetHeaderWordWrap_invalidatesCachedHeaderHeight() {
+ grid.getHeaderHeight();
+
+ group.setHeaderWordWrap( true );
+
+ assertFalse( grid.layoutCache.hasHeaderHeight() );
+ }
+
}
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumn_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumn_Test.java
index eab0f5b..e514d27 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumn_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/GridColumn_Test.java
@@ -771,6 +771,15 @@
}
@Test
+ public void testGetHeaderWordWrap_invalidatesCachedHeaderHeight() {
+ grid.getHeaderHeight();
+
+ column.setHeaderWordWrap( true );
+
+ assertFalse( grid.layoutCache.hasHeaderHeight() );
+ }
+
+ @Test
public void testGetWordWrap_Initial() {
assertFalse( column.getWordWrap() );
}
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA_Test.java
index 66f4501..47e753e 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkit/GridColumnGroupLCA_Test.java
@@ -436,4 +436,35 @@
assertNull( message.findSetOperation( group, "customVariant" ) );
}
+ @Test
+ public void testRenderInitialHeaderWordWrap() throws IOException {
+ lca.render( group );
+
+ TestMessage message = Fixture.getProtocolMessage();
+ CreateOperation operation = message.findCreateOperation( group );
+ assertTrue( operation.getProperties().names().indexOf( "headerWordWrap" ) == -1 );
+ }
+
+ @Test
+ public void testRenderHeaderWordWrap() throws IOException {
+ group.setHeaderWordWrap( true );
+ lca.renderChanges( group );
+
+ TestMessage message = Fixture.getProtocolMessage();
+ assertEquals( JsonValue.TRUE, message.findSetProperty( group, "headerWordWrap" ) );
+ }
+
+ @Test
+ public void testRenderHeaderWordWrapUnchanged() throws IOException {
+ Fixture.markInitialized( display );
+ Fixture.markInitialized( group );
+
+ group.setHeaderWordWrap( true );
+ Fixture.preserveWidgets();
+ lca.renderChanges( group );
+
+ TestMessage message = Fixture.getProtocolMessage();
+ assertNull( message.findSetOperation( group, "headerWordWrap" ) );
+ }
+
}