Adjust Nebula Grid to the client-side tree event renaming
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 a72a3dc..1c89874 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
@@ -59,8 +59,8 @@
public void readData( Widget widget ) {
GridColumnGroup group = ( GridColumnGroup )widget;
- processTreeEvent( group, ClientMessageConst.EVENT_TREE_EXPANDED );
- processTreeEvent( group, ClientMessageConst.EVENT_TREE_COLLAPSED );
+ processTreeEvent( group, ClientMessageConst.EVENT_EXPAND );
+ processTreeEvent( group, ClientMessageConst.EVENT_COLLAPSE );
}
@Override
@@ -99,7 +99,7 @@
private static void processTreeEvent( final GridColumnGroup group, String eventName ) {
if( WidgetLCAUtil.wasEventSent( group, eventName ) ) {
- final boolean expanded = eventName.equals( ClientMessageConst.EVENT_TREE_EXPANDED );
+ final boolean expanded = eventName.equals( ClientMessageConst.EVENT_EXPAND );
ProcessActionRunner.add( new Runnable() {
public void run() {
group.setExpanded( expanded );
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA.java
index 6264c10..6a9fcf3 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA.java
@@ -22,13 +22,11 @@
import org.eclipse.nebula.widgets.grid.internal.IGridItemAdapter;
import org.eclipse.rap.rwt.internal.protocol.ClientObjectFactory;
import org.eclipse.rap.rwt.internal.protocol.IClientObject;
-import org.eclipse.rap.rwt.internal.protocol.ClientMessageConst;
import org.eclipse.rap.rwt.internal.protocol.ProtocolUtil;
import org.eclipse.rap.rwt.lifecycle.AbstractWidgetLCA;
import org.eclipse.rap.rwt.lifecycle.ProcessActionRunner;
import org.eclipse.rap.rwt.lifecycle.WidgetLCAUtil;
import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
-import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
@@ -67,8 +65,7 @@
public void readData( Widget widget ) {
GridItem item = ( GridItem )widget;
readChecked( item );
- processTreeEvent( item, ClientMessageConst.EVENT_TREE_EXPANDED );
- processTreeEvent( item, ClientMessageConst.EVENT_TREE_COLLAPSED );
+ readExpanded( item );
}
@Override
@@ -145,19 +142,15 @@
}
}
- private static void processTreeEvent( final GridItem item, String eventName ) {
- if( WidgetLCAUtil.wasEventSent( item, eventName ) ) {
- final boolean expanded = eventName.equals( ClientMessageConst.EVENT_TREE_EXPANDED );
+ private static void readExpanded( final GridItem item ) {
+ final String expanded = WidgetLCAUtil.readPropertyValue( item, PROP_EXPANDED );
+ if( expanded != null ) {
ProcessActionRunner.add( new Runnable() {
public void run() {
- item.setExpanded( expanded );
+ item.setExpanded( Boolean.valueOf( expanded ).booleanValue() );
+ preserveProperty( item, PROP_EXPANDED, item.isExpanded() );
}
} );
- if( expanded ) {
- item.fireEvent( SWT.Expand );
- } else {
- item.fireEvent( SWT.Collapse );
- }
}
}
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java
index 05b2094..fd0413a 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java
@@ -43,6 +43,7 @@
import org.eclipse.swt.internal.widgets.ICellToolTipAdapter;
import org.eclipse.swt.internal.widgets.ICellToolTipProvider;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.ScrollBar;
import org.eclipse.swt.widgets.Widget;
@@ -82,6 +83,8 @@
private static final String PROP_SCROLLBARS_SELECTION_LISTENER = "scrollBarsSelection";
private static final String PROP_SELECTION_LISTENER = "Selection";
private static final String PROP_DEFAULT_SELECTION_LISTENER = "DefaultSelection";
+ private static final String PROP_EXPAND_LISTENER = "Expand";
+ private static final String PROP_COLLAPSE_LISTENER = "Collapse";
// TODO: [if] Sync toolTipText in GridItemLCA when it's possible on the client
private static final String PROP_ENABLE_CELL_TOOLTIP = "enableCellToolTip";
private static final String PROP_CELL_TOOLTIP_TEXT = "cellToolTipText";
@@ -113,6 +116,8 @@
readCellToolTipTextRequested( grid );
processSelectionEvent( grid, ClientMessageConst.EVENT_SELECTION );
processSelectionEvent( grid, ClientMessageConst.EVENT_DEFAULT_SELECTION );
+ processTreeEvent( grid, SWT.Expand, "Expand" );
+ processTreeEvent( grid, SWT.Collapse, "Collapse" );
ControlLCAUtil.processEvents( grid );
ControlLCAUtil.processKeyEvents( grid );
ControlLCAUtil.processMenuDetect( grid );
@@ -149,6 +154,8 @@
preserveListener( grid,
PROP_DEFAULT_SELECTION_LISTENER,
grid.isListening( SWT.DefaultSelection ) );
+ preserveListener( grid, PROP_EXPAND_LISTENER, hasExpandListener( grid ) );
+ preserveListener( grid, PROP_COLLAPSE_LISTENER, hasCollapseListener( grid ) );
preserveProperty( grid, PROP_ENABLE_CELL_TOOLTIP, CellToolTipUtil.isEnabledFor( grid ) );
preserveProperty( grid, PROP_CELL_TOOLTIP_TEXT, null );
}
@@ -187,6 +194,8 @@
PROP_DEFAULT_SELECTION_LISTENER,
grid.isListening( SWT.DefaultSelection ),
false );
+ renderListener( grid, PROP_EXPAND_LISTENER, hasExpandListener( grid ), false );
+ renderListener( grid, PROP_COLLAPSE_LISTENER, hasCollapseListener( grid ), false );
renderProperty( grid, PROP_ENABLE_CELL_TOOLTIP, CellToolTipUtil.isEnabledFor( grid ), false );
renderProperty( grid, PROP_CELL_TOOLTIP_TEXT, getCellToolTipText( grid ), null );
}
@@ -369,6 +378,30 @@
}
}
+ private static boolean hasExpandListener( Grid grid ) {
+ // Always render listen for Expand and Collapse, currently required for scrollbar
+ // visibility update and setData events.
+ return true;
+ }
+
+ private static boolean hasCollapseListener( Grid grid ) {
+ // Always render listen for Expand and Collapse, currently required for scrollbar
+ // visibility update and setData events.
+ return true;
+ }
+
+ /////////////////////////////////
+ // Process expand/collapse events
+
+ private static void processTreeEvent( Grid grid, int eventType, String eventName ) {
+ if( WidgetLCAUtil.wasEventSent( grid, eventName ) ) {
+ String value = readEventPropertyValue( grid, eventName, ClientMessageConst.EVENT_PARAM_ITEM );
+ Event event = new Event();
+ event.item = getItem( grid, value );
+ grid.notifyListeners( eventType, event );
+ }
+ }
+
///////////////
// Item Metrics
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkip/GridColumnGroupLCA_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkip/GridColumnGroupLCA_Test.java
index fc79bac..88ccce4 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkip/GridColumnGroupLCA_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridcolumngroupkip/GridColumnGroupLCA_Test.java
@@ -245,7 +245,7 @@
group.addListener( SWT.Expand, new LoggingTreeListener( events ) );
group.setExpanded( false );
- Fixture.fakeNotifyOperation( getId( group ), ClientMessageConst.EVENT_TREE_EXPANDED, null );
+ Fixture.fakeNotifyOperation( getId( group ), ClientMessageConst.EVENT_EXPAND, null );
Fixture.readDataAndProcessAction( group );
assertEquals( 1, events.size() );
@@ -258,7 +258,7 @@
List<Event> events = new LinkedList<Event>();
group.addListener( SWT.Collapse, new LoggingTreeListener( events ) );
- Fixture.fakeNotifyOperation( getId( group ), ClientMessageConst.EVENT_TREE_COLLAPSED, null );
+ Fixture.fakeNotifyOperation( getId( group ), ClientMessageConst.EVENT_COLLAPSE, null );
Fixture.readDataAndProcessAction( group );
assertEquals( 1, events.size() );
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA_Test.java
index 67a3dfa..9f19e90 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/griditemkit/GridItemLCA_Test.java
@@ -14,11 +14,12 @@
import static org.eclipse.nebula.widgets.grid.GridTestUtil.createGridItems;
import static org.eclipse.nebula.widgets.grid.GridTestUtil.loadImage;
import static org.eclipse.nebula.widgets.grid.internal.gridkit.GridLCATestUtil.jsonEquals;
-import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_TREE_EXPANDED;
import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId;
import java.io.IOException;
+import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import org.eclipse.nebula.widgets.grid.Grid;
import org.eclipse.nebula.widgets.grid.GridItem;
@@ -621,8 +622,9 @@
grid.addListener( SWT.Expand, new LoggingTreeListener( events ) );
new GridItem( item, SWT.NONE );
- Fixture.fakeNotifyOperation( getId( item ), ClientMessageConst.EVENT_TREE_EXPANDED, null );
- Fixture.readDataAndProcessAction( item );
+ Fixture.fakeSetParameter( getId( item ), "expanded", Boolean.TRUE );
+ fakeTreeEvent( item, ClientMessageConst.EVENT_EXPAND );
+ Fixture.readDataAndProcessAction( display );
assertEquals( 1, events.size() );
Event event = events.get( 0 );
@@ -637,8 +639,9 @@
new GridItem( item, SWT.NONE );
item.setExpanded( true );
- Fixture.fakeNotifyOperation( getId( item ), ClientMessageConst.EVENT_TREE_COLLAPSED, null );
- Fixture.readDataAndProcessAction( item );
+ Fixture.fakeSetParameter( getId( item ), "expanded", Boolean.FALSE );
+ fakeTreeEvent( item, ClientMessageConst.EVENT_COLLAPSE );
+ Fixture.readDataAndProcessAction( display );
assertEquals( 1, events.size() );
Event event = events.get( 0 );
@@ -653,7 +656,7 @@
GridItem[] items = createGridItems( grid, 5, 10 );
Fixture.markInitialized( grid );
- Fixture.fakeNotifyOperation( getId( items[ 0 ] ), EVENT_TREE_EXPANDED, null );
+ Fixture.fakeSetParameter( getId( items[ 0 ] ), "expanded", Boolean.TRUE );
Fixture.executeLifeCycleFromServerThread();
Message message = Fixture.getProtocolMessage();
@@ -661,6 +664,12 @@
assertTrue( jsonEquals( "[ false, true ]", actual ) );
}
+ private static void fakeTreeEvent( GridItem item, String eventName ) {
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put( ClientMessageConst.EVENT_PARAM_ITEM, getId( item ) );
+ Fixture.fakeNotifyOperation( getId( item.getParent() ), eventName, parameters );
+ }
+
//////////////////
// Helping classes
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java
index fb244f9..d862e15 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java
@@ -1083,6 +1083,20 @@
assertEquals( Boolean.TRUE, message.findCreateProperty( grid, "markupEnabled" ) );
}
+ public void testRenderAddExpandListener() throws Exception {
+ lca.renderChanges( grid );
+
+ Message message = Fixture.getProtocolMessage();
+ assertEquals( Boolean.TRUE, message.findListenProperty( grid, "Expand" ) );
+ }
+
+ public void testRenderAddCollapseListener() throws Exception {
+ lca.renderChanges( grid );
+
+ Message message = Fixture.getProtocolMessage();
+ assertEquals( Boolean.TRUE, message.findListenProperty( grid, "Collapse" ) );
+ }
+
//////////////////
// Helping methods