content: /**
   * @(#)DrawingComponent2D.java
   *
   * Copyright 2002 EGANTT LLP. All rights reserved.
   * PROPRIETARY/QPL. Use is subject to license terms.
   */
  package com.egantt.drawing.component;
  
  import java.awt.Graphics;
  import java.awt.event.MouseEvent;
  
  import javax.swing.JComponent;
  
  import com.egantt.awt.graphics.GraphicsState;
  import com.egantt.drawing.DrawingComponent;
  import com.egantt.swing.cell.CellState;
  import com.egantt.swing.component.tooltip.ToolTipState;
  import com.egantt.swing.component.tooltip.state.DrawingToolTipState;
  import com.egantt.util.Trace;
  
  /**
    * Intent: A 2D implementation of a Drawing
    */
  public class DrawingComponent2D extends JComponent implements DrawingComponent
  {
  	private static final long serialVersionUID = -4762638988341558612L;
  
  	protected transient ToolTipState state = new DrawingToolTipState();
  
  	protected DrawingComponentPainter painter;
  	protected GraphicsState graphics;
  	protected CellState cellState;
  
  	// _________________________________________________________________________
  
  	public void setCellState(CellState cellState) {
  		this.cellState = cellState;
  	}
  	
  	public void setComponentPainter(DrawingComponentPainter painter)
  	{
  		this.painter = painter;
  	}
  	
  	public void setGraphicsState(GraphicsState graphics)
  	{
  		this.graphics = graphics;
  	}
  
  	public void setToolTipState(ToolTipState state)
  	{
  		this.state = state;
  	}
  
  	// __________________________________________________________________________
  
  	public String getToolTipText(MouseEvent event)
  	{
  		return state == null 
  			? super.getToolTipText(event) 
  			: state.getToolTipText(event, cellState);
  	}
  
  	// _________________________________________________________________________
  
  	/**
  	 *  Delegates, the painting of this component to a series of graphics objects'
  	 *  known as painters. These painters, do not write to sun graphics instead
  	 *  they write to a GraphicsState object which writes everything out in one go.
  	 */
  	public void paintComponent(Graphics g)
  	{
  		super.paintComponent(g);
  
  		if (isPaintingTile())
  			return;
  
  		graphics.initialise(g);
  
  		try
  		{
  			painter.paint(this, graphics, cellState);
  		}
  		catch (Throwable throwable)
  		{
  		   throwable.printStackTrace(Trace.out);
  		}
  
  		graphics.terminate(g);
  	}
  }
  