package prolog.treeview;

import java.awt.*;
import prolog.ui.*;
import prolog.model.*;

/**
 * the statement node renderer is used to render
 * a object of the class StatementNode
 */
public class StatementNodeRenderer
	implements
		INodeRenderer
{
	/**
	 * the static factlist renderer used to render the fact list.
	 * one renderer is enough for all statement node renderers.
	 * it is created when the first statement renderer is created.
	 */
	protected static FactListRenderer gvRenderer = null;

	/**
	 * constructor
	 */
	public StatementNodeRenderer( ISymbolTable symbolTable )
	{
		if( gvRenderer == null )
			gvRenderer = new FactListRenderer( symbolTable );
	}

	/**
	 * renders the given object into the given graphic context
	 * @param g - the graphic context to render into
	 * @param rect - the rect where to render into
	 * @param obj - the node content that should be rendered
	 */
	public void renderNode( Graphics2D g, Rectangle rect, Object obj )
	{
		StatementResult result = (StatementResult)obj;
		Rectangle rt = (Rectangle) rect.clone();
		if( result.getResult() != null )
			gvRenderer.render( g, rt, result.getResult() );
	}

	/**
	 * calculates the require size this renderer require to render
	 * the given object
	 * @return the size of the rendered object
	 */
	public Dimension calculateDimension( Object obj )
	{
		return gvRenderer.getDimension( ((StatementResult)obj).getResult() );
	}
}
