/*******************************************************************************
* 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 com.w4t.dhtml.treeleafkit;
import java.io.IOException;
import org.eclipse.rwt.Adaptable;
import org.eclipse.rwt.internal.lifecycle.HtmlResponseWriter;
import org.eclipse.rwt.internal.util.HTML;
import com.w4t.*;
import com.w4t.dhtml.TreeLeaf;
import com.w4t.dhtml.TreeNodeShift;
import com.w4t.dhtml.renderinfo.TreeLeafInfo;
import com.w4t.internal.adaptable.IRenderInfoAdapter;
import com.w4t.types.WebColor;
import com.w4t.util.DefaultColorScheme;
/** <p>the superclass of all Renderers that render org.eclipse.rap.dhtml.TreeLeaf.</p>
*/
public abstract class TreeLeafRenderer extends Renderer {
private static final String BG_COLOR_BUFFER = "bgColorBuffer";
private static final String COLOR_BUFFER = "colorBuffer";
private static final String VERTICAL_ALIGN_BUFFER = "verticalAlignBuffer";
void setBgColorBuffer( final TreeLeaf treeLeaf,
final WebColor bgColorBuffer )
{
IRenderInfoAdapter adapter = getRenderInfoAdapter( treeLeaf );
adapter.addRenderState( BG_COLOR_BUFFER, bgColorBuffer );
}
WebColor getBgColorBuffer( final TreeLeaf treeLeaf ) {
IRenderInfoAdapter adapter = getRenderInfoAdapter( treeLeaf );
return ( WebColor )adapter.getRenderState( BG_COLOR_BUFFER );
}
void setColorBuffer( final TreeLeaf treeLeaf, final WebColor colorBuffer ) {
IRenderInfoAdapter adapter = getRenderInfoAdapter( treeLeaf );
adapter.addRenderState( COLOR_BUFFER, colorBuffer );
}
WebColor getColorBuffer( final TreeLeaf treeLeaf ) {
IRenderInfoAdapter adapter = getRenderInfoAdapter( treeLeaf );
return ( WebColor )adapter.getRenderState( COLOR_BUFFER );
}
void setVerticalAlignBuffer( final TreeLeaf treeLeaf,
final String verticalAlignBuffer )
{
IRenderInfoAdapter adapter = getRenderInfoAdapter( treeLeaf );
adapter.addRenderState( VERTICAL_ALIGN_BUFFER, verticalAlignBuffer );
}
String getVerticalAlignBuffer( final TreeLeaf treeLeaf) {
IRenderInfoAdapter adapter = getRenderInfoAdapter( treeLeaf );
return ( String )adapter.getRenderState( VERTICAL_ALIGN_BUFFER );
}
IRenderInfoAdapter getRenderInfoAdapter( final TreeLeaf treeLeaf ) {
Class clazz = IRenderInfoAdapter.class;
return ( IRenderInfoAdapter )treeLeaf.getAdapter( clazz );
}
TreeLeafInfo getInfo( final TreeLeaf treeLeaf ) {
Adaptable adaptable = treeLeaf;
IRenderInfoAdapter adapter
= ( IRenderInfoAdapter )adaptable.getAdapter( IRenderInfoAdapter.class );
return ( TreeLeafInfo )adapter.getInfo();
}
Style getStyle( final TreeLeaf treeLeaf ) {
return treeLeaf.getStyle();
}
protected void createDivOpen( final String styleContent,
final TreeLeaf treeLeaf )
throws IOException
{
HtmlResponseWriter out = getResponseWriter();
out.startElement( HTML.DIV, null );
out.writeAttribute( HTML.ID, treeLeaf.getUniqueID(), null );
out.writeAttribute( HTML.CLASS,
getResponseWriter().registerCssClass( styleContent ),
null );
}
void createUniversalAttributes( final TreeLeaf treeLeaf )
throws IOException
{
HtmlResponseWriter out = getResponseWriter();
String style = getStyle( treeLeaf ).toString();
if( !"".equals( style ) ) {
out.writeAttribute( HTML.CLASS,
out.registerCssClass( style ),
null );
}
out.writeAttribute( HTML.TITLE, getTitle( treeLeaf ), null );
}
String getLeafIcon( final TreeLeaf treeLeaf ) {
return getShift( treeLeaf ).getLeafIcon( treeLeaf.getImageSetName() );
}
String getInner( final TreeLeaf treeLeaf ) {
return getShift( treeLeaf ).getInner( treeLeaf.getImageSetName() );
}
String getLast( final TreeLeaf treeLeaf ) {
return getShift( treeLeaf ).getLast( treeLeaf.getImageSetName() );
}
String getLabel( final TreeLeaf treeLeaf ) {
return RenderUtil.resolve( treeLeaf.getLabel() );
}
String getTitle( final TreeLeaf treeLeaf ) {
return RenderUtil.resolve( treeLeaf.getTitle() );
}
// helping methods
//////////////////
private TreeNodeShift getShift( final TreeLeaf treeLeaf ) {
return getInfo( treeLeaf ).getTreeNodeShift();
}
void prepare( final TreeLeaf treeLeaf ) {
// check if the current item is marked
setBgColorBuffer( treeLeaf, getStyle( treeLeaf ).getBgColor() );
setColorBuffer( treeLeaf, getStyle( treeLeaf ).getColor() );
if( getInfo( treeLeaf ).isMarked() ) {
getStyle( treeLeaf ).setColor( treeLeaf.getMarkedColor() );
getStyle( treeLeaf ).setBgColor( treeLeaf.getMarkedBgColor() );
}
setVerticalAlignBuffer( treeLeaf, getStyle( treeLeaf ).getVerticalAlign() );
getStyle( treeLeaf ).setVerticalAlign( getVerticalAlign() );
if( !treeLeaf.isEnabled() ) {
String color
= DefaultColorScheme.get( DefaultColorScheme.ITEM_DISABLED_FONT );
getStyle( treeLeaf ).setColor( new WebColor( color ) );
}
}
abstract String getVerticalAlign();
void postpare( final TreeLeaf treeLeaf ) {
getStyle( treeLeaf ).setColor( getColorBuffer( treeLeaf ) );
getStyle( treeLeaf ).setBgColor( getBgColorBuffer( treeLeaf ) );
getStyle( treeLeaf ).setVerticalAlign( getVerticalAlignBuffer( treeLeaf ) );
}
}