![JAR search and dependency download from the Maven repository](/logo.png)
rwt.widgets.util.GridSynchronizer.js Maven / Gradle / Ivy
/*******************************************************************************
* Copyright (c) 2014, 2020 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
namespace( "rwt.widgets.util" );
rwt.widgets.util.GridSynchronizer = function( grid ) {
this._grid = grid;
this._grid.addEventListener( "selectionChanged", this._onSelectionChanged, this );
this._grid.addEventListener( "focusItemChanged", this._onFocusItemChanged, this );
this._grid.addEventListener( "focusCellChanged", this._onFocusCellChanged, this );
this._grid.addEventListener( "topItemChanged", this._onTopItemChanged, this );
this._grid.addEventListener( "scrollLeftChanged", this._onScrollLeftChanged, this );
this._grid.getRootItem().addEventListener( "update", this._onItemUpdate, this );
};
rwt.widgets.util.GridSynchronizer.prototype = {
_onSelectionChanged : function( event ) {
if( !rwt.remote.EventUtil.getSuspended() ) {
var item = event.item;
var type = event.type;
var connection = rwt.remote.Connection.getInstance();
if( type === "selection" ) {
connection.getRemoteObject( this._grid ).set( "selection", this._getSelectionList() );
if( this._grid.getRenderConfig().cellSelection ) {
connection.getRemoteObject( this._grid ).set( "cellSelection", this._getCellSelectionList() );
}
} else if( type === "check" ) {
connection.getRemoteObject( item ).set( "checked", item.isChecked() );
} else if( type === "cellCheck" ) {
connection.getRemoteObject( item ).set( "cellChecked", this._getCellChecked( item ) );
}
this._notifySelectionChanged( event );
}
},
_notifySelectionChanged : function( event ) {
var detail;
var type = event.type;
if( type === "check" || type === "cellCheck") {
detail = "check";
} else if( type === "cell" ) {
detail = "cell";
} else if( type === "hyperlink" ) {
detail = "hyperlink";
}
var properties = {
"item" : this._getItemId( event.item ),
"detail" : detail,
"index" : event.index,
"text" : event.text
};
if( type === "defaultSelection" ) {
rwt.remote.EventUtil.notifyDefaultSelected( this._grid, properties );
} else {
rwt.remote.EventUtil.notifySelected( this._grid, properties );
}
},
_onFocusItemChanged : function() {
if( !rwt.remote.EventUtil.getSuspended() ) {
var connection = rwt.remote.Connection.getInstance();
var itemId = this._getItemId( this._grid.getFocusItem() );
connection.getRemoteObject( this._grid ).set( "focusItem", itemId );
}
},
_onFocusCellChanged : function() {
if( !rwt.remote.EventUtil.getSuspended() ) {
var connection = rwt.remote.Connection.getInstance();
var focusCell = this._grid.getRenderConfig().cellOrder[ this._grid.getFocusCell() ];
connection.getRemoteObject( this._grid ).set( "focusCell", focusCell );
}
},
_onTopItemChanged : function() {
if( !rwt.remote.EventUtil.getSuspended() ) {
var vScroll = this._grid.getVerticalBar();
var connection = rwt.remote.Connection.getInstance();
var remoteObject = connection.getRemoteObject( this._grid );
remoteObject.set( "topItemIndex", this._grid.getTopItemIndex() );
if( vScroll.getHasSelectionListener() ) {
connection.onNextSend( function() {
connection.getRemoteObject( vScroll ).notify( "Selection" );
}, this );
}
if( remoteObject.isListening( "SetData" ) ) {
connection.onNextSend( function() {
remoteObject.notify( "SetData" );
}, this );
}
if( vScroll.getHasSelectionListener() || remoteObject.isListening( "SetData" ) ) {
connection.sendDelayed( 400 );
}
}
},
_onScrollLeftChanged : function() {
// TODO [tb] : There should be a check for suspended,
// but currently this is needed to sync the value with the
// server when the scrollbars are hidden by the server.
var hScroll = this._grid.getHorizontalBar();
var connection = rwt.remote.Connection.getInstance();
var remoteObject = connection.getRemoteObject( this._grid );
remoteObject.set( "scrollLeft", hScroll.getValue() );
if( hScroll.getHasSelectionListener() ) {
connection.onNextSend( function() {
connection.getRemoteObject( hScroll ).notify( "Selection" );
}, this );
connection.sendDelayed( 400 );
}
},
_onItemUpdate : function( event ) {
if( !rwt.remote.EventUtil.getSuspended() || event.rendering ) {
var connection = rwt.remote.Connection.getInstance();
if( event.msg === "height" ) {
connection.getRemoteObject( event.target ).set( "height", event.target.getOwnHeight() );
} else if( event.msg === "expanded" || event.msg === "collapsed" ) {
var expanded = event.msg === "expanded";
connection.getRemoteObject( event.target ).set( "expanded", expanded );
connection.getRemoteObject( this._grid ).notify( expanded ? "Expand" : "Collapse", {
"item" : this._getItemId( event.target )
} );
}
}
},
_getSelectionList : function() {
var result = [];
var selection = this._grid.getSelection();
for( var i = 0; i < selection.length; i++ ) {
result.push( this._getItemId( selection[ i ] ) );
}
return result;
},
_getCellSelectionList : function() {
var result = [];
var selection = this._grid.getSelection();
for( var i = 0; i < selection.length; i++ ) {
var itemId = this._getItemId( selection[ i ] );
var cellSelection = selection[ i ].getCellSelection();
for( var j = 0; j < cellSelection.length; j++ ) {
result.push( [ itemId, cellSelection[ j ] ] );
}
}
return result;
},
_getCellChecked : function( item ) {
var cellChecked = item.getCellChecked();
var result = [];
for( var i = 0; i < this._grid.getRenderConfig().columnCount; i++ ) {
result[ i ] = cellChecked[ i ] === true;
}
return result;
},
_getItemId : function( item ) {
var ObjectRegistry = rwt.remote.ObjectRegistry;
var result;
if( item.isCached() ) {
result = ObjectRegistry.getId( item );
} else {
var parent = item.getParent();
if( parent.isRootItem() ) {
result = ObjectRegistry.getId( this._grid );
} else {
result = ObjectRegistry.getId( parent );
}
result += "#" + parent.indexOf( item );
}
return result;
}
};
© 2015 - 2025 Weber Informatics LLC | Privacy Policy