/*******************************************************************************
* Copyright (c) 2008 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.expanditemkit;
import java.io.IOException;
import org.eclipse.rwt.lifecycle.*;
import org.eclipse.swt.events.ExpandEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.internal.graphics.ResourceFactory;
import org.eclipse.swt.internal.widgets.IExpandBarAdapter;
import org.eclipse.swt.internal.widgets.Props;
import org.eclipse.swt.widgets.*;
public final class ExpandItemLCA extends AbstractWidgetLCA {
// Request parameters that denote ExpandEvents
public static final String EVENT_ITEM_EXPANDED
= "org.eclipse.swt.events.expandItemExpanded";
public static final String EVENT_ITEM_COLLAPSED
= "org.eclipse.swt.events.expandItemCollapsed";
// Property names for preserveValues
public static final String PROP_TEXT = Props.TEXT;
public static final String PROP_IMAGE = Props.IMAGE;
public static final String PROP_EXPANDED = "expanded";
public static final String PROP_ENABLED = "enabled";
public static final String PROP_HEADER_HEIGHT = "headerHeight";
public static final Integer DEFAULT_HEADER_HEIGHT = new Integer( 24 );
public void preserveValues( final Widget widget ) {
ExpandItem expandItem = ( ExpandItem )widget;
IWidgetAdapter adapter = WidgetUtil.getAdapter( widget );
adapter.preserve( PROP_TEXT, expandItem.getText() );
adapter.preserve( PROP_IMAGE, expandItem.getImage() );
adapter.preserve( PROP_EXPANDED,
Boolean.valueOf( expandItem.getExpanded() ) );
adapter.preserve( PROP_ENABLED,
Boolean.valueOf( expandItem.getParent().isEnabled() ) );
adapter.preserve( PROP_HEADER_HEIGHT,
new Integer( expandItem.getHeaderHeight() ) );
IExpandBarAdapter expandBarAdapter = getExpandBarAdapter( expandItem.getParent() );
WidgetLCAUtil.preserveBounds( expandItem,
expandBarAdapter.getBounds( expandItem ) );
}
public void readData( final Widget widget ) {
final ExpandItem expandItem = ( ExpandItem )widget;
if( WidgetLCAUtil.wasEventSent( expandItem, EVENT_ITEM_EXPANDED ) ) {
ProcessActionRunner.add( new Runnable() {
public void run() {
expandItem.setExpanded( true );
ExpandEvent event = createExpandEvent( expandItem );
event.processEvent();
}
} );
}
if( WidgetLCAUtil.wasEventSent( expandItem, EVENT_ITEM_COLLAPSED ) ) {
ProcessActionRunner.add( new Runnable() {
public void run() {
expandItem.setExpanded( false );
ExpandEvent event = createCollapseEvent( expandItem );
event.processEvent();
}
} );
}
}
public void renderInitialization( final Widget widget ) throws IOException {
ExpandItem expandItem = ( ExpandItem )widget;
ExpandBar parent = expandItem.getParent();
JSWriter writer = JSWriter.getWriterFor( expandItem );
Object[] args = new Object[]{ parent };
writer.newWidget( "org.eclipse.swt.widgets.ExpandItem", args );
writer.call( parent, "add", new Object[]{ expandItem } );
WidgetLCAUtil.writeCustomVariant( widget );
}
public void renderChanges( final Widget widget ) throws IOException {
ExpandItem expandItem = ( ExpandItem )widget;
writeText( expandItem );
writeImage( expandItem );
writeExpanded( expandItem );
writeEnabled( expandItem );
writeHeaderHeight( expandItem );
IExpandBarAdapter adapter = getExpandBarAdapter( expandItem.getParent() );
WidgetLCAUtil.writeBounds( expandItem,
expandItem.getParent(),
adapter.getBounds( expandItem ) );
}
public void renderDispose( final Widget widget ) throws IOException {
JSWriter writer = JSWriter.getWriterFor( widget );
writer.dispose();
}
////////////////
// Event helper
private static ExpandEvent createExpandEvent( final ExpandItem expandItem ) {
ExpandEvent event = new ExpandEvent( expandItem.getParent(),
expandItem,
ExpandEvent.EXPAND );
event.item = expandItem;
return event;
}
private static ExpandEvent createCollapseEvent( final ExpandItem expandItem )
{
ExpandEvent event = new ExpandEvent( expandItem.getParent(),
expandItem,
ExpandEvent.COLLAPSE );
event.item = expandItem;
return event;
}
////////////////////////////////////////////
// Helping methods to render JavaScript code
private static void writeText( final ExpandItem item ) throws IOException {
String text = item.getText();
if( WidgetLCAUtil.hasChanged( item, Props.TEXT, text ) ) {
text = WidgetLCAUtil.escapeText( text, false );
JSWriter writer = JSWriter.getWriterFor( item );
writer.set( PROP_TEXT, text );
}
}
private static void writeImage( final ExpandItem item ) throws IOException {
Image image = item.getImage();
if( WidgetLCAUtil.hasChanged( item, PROP_IMAGE, image, null ) ) {
String imagePath;
if( image == null ) {
imagePath = null;
} else {
imagePath = ResourceFactory.getImagePath( image );
}
JSWriter writer = JSWriter.getWriterFor( item );
writer.set( PROP_IMAGE, imagePath );
}
}
private static void writeExpanded( final ExpandItem item ) throws IOException
{
Boolean newValue = Boolean.valueOf( item.getExpanded() );
if( WidgetLCAUtil.hasChanged( item,
PROP_EXPANDED,
newValue,
Boolean.FALSE ) )
{
JSWriter writer = JSWriter.getWriterFor( item );
writer.set( PROP_EXPANDED, newValue );
}
}
private static void writeEnabled( final ExpandItem item ) throws IOException {
Boolean newValue = Boolean.valueOf( item.getParent().isEnabled() );
if( WidgetLCAUtil.hasChanged( item,
PROP_ENABLED,
newValue,
Boolean.TRUE ) )
{
JSWriter writer = JSWriter.getWriterFor( item );
if( newValue.booleanValue() ) {
writer.call( "addState", new Object[] {
"enabled"
} );
} else {
writer.call( "removeState", new Object[] {
"enabled"
} );
}
}
}
private static void writeHeaderHeight( final ExpandItem item )
throws IOException
{
Integer newValue = new Integer( item.getHeaderHeight() );
if( WidgetLCAUtil.hasChanged( item,
PROP_HEADER_HEIGHT,
newValue,
DEFAULT_HEADER_HEIGHT ) )
{
JSWriter writer = JSWriter.getWriterFor( item );
writer.set( PROP_HEADER_HEIGHT, newValue );
}
}
private static IExpandBarAdapter getExpandBarAdapter( final ExpandBar bar ) {
return ( IExpandBarAdapter )bar.getAdapter( IExpandBarAdapter.class );
}
}