/*******************************************************************************
* Copyright (c) 2002, 2009 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
* EclipseSource - ongoing development
******************************************************************************/
package org.eclipse.ui.forms.internal.widgets.togglehyperlinkkit;
import java.io.IOException;
import org.eclipse.rwt.graphics.Graphics;
import org.eclipse.rwt.lifecycle.*;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.internal.graphics.ResourceFactory;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.forms.widgets.*;
/* (intentionally non-JavaDoc'ed)
* This class serves as the LCA for org.eclipse.ui.forms.widgets.TreeNode and
* org.eclipse.ui.forms.widgets.Twistie.
*/
public final class ToggleHyperlinkLCA extends AbstractWidgetLCA {
static final String PROP_EXPANDED
= "expanded"; //$NON-NLS-1$
static final String PROP_SELECTION_LISTENERS
= "selectionListeners"; //$NON-NLS-1$
private static final String PREFIX
= "resource/widget/rap/hyperlink/"; //$NON-NLS-1$
private static final String MINUS_GIF = PREFIX + "minus.gif"; //$NON-NLS-1$
private static final String PLUS_GIF = PREFIX + "plus.gif"; //$NON-NLS-1$
private static final String TWISTIE_COLLAPSE_GIF
= PREFIX + "twistie_collapse.gif"; //$NON-NLS-1$
private static final String TWISTIE_COLLAPSE_HOVER_GIF
= PREFIX + "twistie_collapse_hover.gif"; //$NON-NLS-1$
private static final String TWISTIE_EXPAND_GIF
= PREFIX + "twistie_expand.gif"; //$NON-NLS-1$
private static final String TWISTIE_EXPAND_HOVER_GIF
= PREFIX + "twistie_expand_hover.gif"; //$NON-NLS-1$
private static final JSListenerInfo SELECTION_LISTENER
= new JSListenerInfo( "click", //$NON-NLS-1$
"org.eclipse.ui.forms.widgets.ToggleHyperlink.onClick", //$NON-NLS-1$
JSListenerType.ACTION );
public void preserveValues( final Widget widget ) {
ToggleHyperlink hyperlink = ( ToggleHyperlink )widget;
ControlLCAUtil.preserveValues( hyperlink );
IWidgetAdapter adapter = WidgetUtil.getAdapter( hyperlink );
adapter.preserve( PROP_EXPANDED,
Boolean.valueOf( hyperlink.isExpanded() ) );
boolean hasListener = SelectionEvent.hasListener( hyperlink );
adapter.preserve( PROP_SELECTION_LISTENERS,
Boolean.valueOf( hasListener ) );
}
public void readData( final Widget widget ) {
// It is not neccessary to read the expanded state as a HyperlinkListener
// will always be registered (see ToggleHyperlink).
ControlLCAUtil.processSelection( widget, null, false );
}
public void renderInitialization( final Widget widget ) throws IOException {
ToggleHyperlink hyperlink = ( ToggleHyperlink )widget;
JSWriter writer = JSWriter.getWriterFor( hyperlink );
writer.newWidget( "org.eclipse.ui.forms.widgets.ToggleHyperlink" ); //$NON-NLS-1$
WidgetLCAUtil.writeCustomVariant( widget );
writeImages( hyperlink );
}
public void renderChanges( final Widget widget ) throws IOException {
ToggleHyperlink hyperlink = ( ToggleHyperlink )widget;
ControlLCAUtil.writeChanges( hyperlink );
writeExpanded( hyperlink );
writeSelectionListener( hyperlink );
}
public void renderDispose( final Widget widget ) throws IOException {
JSWriter writer = JSWriter.getWriterFor( widget );
writer.dispose();
}
////////////////
// Write changes
private void writeImages( final ToggleHyperlink hyperlink )
throws IOException
{
JSWriter writer = JSWriter.getWriterFor( hyperlink );
Image[] images = getImages( hyperlink );
String[] imageNames = new String[ images.length ];
for( int i = 0; i < imageNames.length; i++ ) {
imageNames[ i ] = ResourceFactory.getImagePath( images[ i ] );
}
writer.set( "images", imageNames ); //$NON-NLS-1$
}
private static void writeExpanded( final ToggleHyperlink hyperlink )
throws IOException
{
JSWriter writer = JSWriter.getWriterFor( hyperlink );
Boolean newValue = Boolean.valueOf( hyperlink.isExpanded() );
writer.set( PROP_EXPANDED,
"expanded", //$NON-NLS-1$
newValue,
Boolean.FALSE );
}
private static void writeSelectionListener( final ToggleHyperlink hyperlink )
throws IOException
{
JSWriter writer = JSWriter.getWriterFor( hyperlink );
writer.updateListener( SELECTION_LISTENER,
PROP_SELECTION_LISTENERS,
SelectionEvent.hasListener( hyperlink ) );
}
/* (intentiaonally non-JavaDoc'ed)
* Returns four images for:
* collapsedNormal, collapsedHover, expandedNormal, expandedHover
*/
private static Image[] getImages( final ToggleHyperlink hyperlink ) {
ClassLoader classLoader = ToggleHyperlinkLCA.class.getClassLoader();
Image[] result;
if( hyperlink instanceof TreeNode ) {
result = new Image[] {
Graphics.getImage( MINUS_GIF, classLoader ),
null,
Graphics.getImage( PLUS_GIF, classLoader ),
null
};
} else if( hyperlink instanceof Twistie ) {
result = new Image[] {
Graphics.getImage( TWISTIE_COLLAPSE_GIF, classLoader ),
Graphics.getImage( TWISTIE_COLLAPSE_HOVER_GIF, classLoader ),
Graphics.getImage( TWISTIE_EXPAND_GIF, classLoader ),
Graphics.getImage( TWISTIE_EXPAND_HOVER_GIF, classLoader )
};
} else {
result = new Image[] { null, null, null, null };
}
return result;
}
}