blob: e675d4fe417031dc2d5574d3fbb587eb216fab4e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002-2006 Innoopract Informationssysteme GmbH.
* 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:
* Innoopract Informationssysteme GmbH - initial API and implementation
******************************************************************************/
package org.eclipse.swt.internal.widgets.treekit;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.TreeEvent;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.lifecycle.*;
import org.eclipse.swt.widgets.*;
import com.w4t.engine.service.ContextProvider;
public final class TreeLCA extends AbstractWidgetLCA {
// Property names used by preserve mechanism
private static final String PROP_SELECTION_LISTENERS = "selectionListeners";
private static final String PROP_TREE_LISTENERS = "treeListeners";
public void preserveValues( final Widget widget ) {
Tree tree = ( Tree )widget;
ControlLCAUtil.preserveValues( ( Control )widget );
IWidgetAdapter adapter = WidgetUtil.getAdapter( tree );
adapter.preserve( PROP_SELECTION_LISTENERS,
Boolean.valueOf( SelectionEvent.hasListener( tree ) ) );
adapter.preserve( PROP_TREE_LISTENERS,
Boolean.valueOf( TreeEvent.hasListener( tree ) ) );
}
public void readData( final Widget widget ) {
Tree tree = ( Tree )widget;
readSelection( tree );
processWidgetSelectedEvent( tree );
processWidgetDefaultSelectedEvent( tree );
}
public void renderInitialization( final Widget widget ) throws IOException {
JSWriter writer = JSWriter.getWriterFor( widget );
StringBuffer style = new StringBuffer();
if( ( widget.getStyle() & SWT.MULTI ) != 0 ) {
style.append( "multi|" );
}
if( ( widget.getStyle() & SWT.CHECK ) != 0 ) {
style.append( "check|" );
}
writer.newWidget( "org.eclipse.swt.widgets.Tree",
new Object[] { style.toString() } );
ControlLCAUtil.writeStyleFlags( widget );
}
public void renderChanges( final Widget widget ) throws IOException {
Tree tree = ( Tree )widget;
ControlLCAUtil.writeChanges( tree );
updateSelectionListener( tree );
updateTreeListener( tree );
}
public void renderDispose( final Widget widget ) throws IOException {
JSWriter writer = JSWriter.getWriterFor( widget );
writer.dispose();
}
private static void processWidgetSelectedEvent( final Tree tree ) {
HttpServletRequest request = ContextProvider.getRequest();
String eventName = JSConst.EVENT_WIDGET_SELECTED;
if( WidgetLCAUtil.wasEventSent( tree, eventName ) ) {
Rectangle bounds = new Rectangle( 0, 0, 0, 0 );
String itemId = request.getParameter( eventName + ".item" );
Item treeItem = ( Item )WidgetUtil.find( tree, itemId );
String detailStr = request.getParameter( eventName + ".detail" );
int detail = "check".equals( detailStr ) ? SWT.CHECK : SWT.NONE;
int eventType = SelectionEvent.WIDGET_SELECTED;
SelectionEvent event = new SelectionEvent( tree,
treeItem,
eventType,
bounds,
null,
true,
detail );
event.processEvent();
}
}
private static void processWidgetDefaultSelectedEvent( final Tree tree ) {
HttpServletRequest request = ContextProvider.getRequest();
String eventName = JSConst.EVENT_WIDGET_DEFAULT_SELECTED;
if( WidgetLCAUtil.wasEventSent( tree, eventName ) ) {
Rectangle bounds = new Rectangle( 0, 0, 0, 0 );
String itemId = request.getParameter( eventName + ".item" );
Item treeItem = ( Item )WidgetUtil.find( tree, itemId );
int detail = SWT.NONE;
int eventType = SelectionEvent.WIDGET_DEFAULT_SELECTED;
SelectionEvent event = new SelectionEvent( tree,
treeItem,
eventType ,
bounds,
null,
true,
detail );
event.processEvent();
}
}
// //////////////////////////////////////////
// Helping methods to read client-side state
private static void readSelection( final Tree tree ) {
String value = WidgetLCAUtil.readPropertyValue( tree, "selection" );
if( value != null ) {
String[] values = value.split( "," );
TreeItem[] selectedItems = new TreeItem[ values.length ];
for( int i = 0; i < values.length; i++ ) {
selectedItems[ i ] = ( TreeItem )WidgetUtil.find( tree, values[ i ] );
}
tree.setSelection( selectedItems );
}
}
/////////////////////////////////////////////////////////////
// Helping methods to write JavaScript for changed properties
private static void updateSelectionListener( final Tree tree )
throws IOException
{
Boolean newValue = Boolean.valueOf( SelectionEvent.hasListener( tree ) );
String prop = PROP_SELECTION_LISTENERS;
if( WidgetLCAUtil.hasChanged( tree, prop, newValue, Boolean.FALSE ) ) {
JSWriter writer = JSWriter.getWriterFor( tree );
writer.set( "selectionListeners", newValue );
}
}
private static void updateTreeListener( final Tree tree )
throws IOException
{
Boolean newValue = Boolean.valueOf( TreeEvent.hasListener( tree ) );
String prop = PROP_TREE_LISTENERS;
if( WidgetLCAUtil.hasChanged( tree, prop, newValue, Boolean.FALSE ) ) {
JSWriter writer = JSWriter.getWriterFor( tree );
writer.set( "treeListeners", newValue );
}
}
}