/*
 * Created on 16.02.2005
 */
package alcatel.test;

import java.awt.Component;
import java.awt.Point;
import java.util.HashMap;

import javax.swing.BorderFactory;
import javax.swing.JTable;
import javax.swing.border.Border;
import javax.swing.table.TableCellRenderer;

import org.apache.batik.swing.JSVGCanvas;

/**
 * @author Wolfgang Reh
 * 
 * TableCellRenderer for SVG line caps. 
 */
public class SVGTableCellRenderer extends JSVGCanvas implements TableCellRenderer
{
	private Border UnselectedBorder = null;
	private Border SelectedBorder = null;
	private boolean IsBordered = true;
	private HashMap CanvasMap = new HashMap();
	
	public SVGTableCellRenderer(boolean IsBordered)
	{
		this.IsBordered = IsBordered;
	}
	
	/* (non-Javadoc)
	 * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
	 */
	public Component getTableCellRendererComponent (JTable table, Object svgData, boolean isSelected, boolean hasFocus, int row, int column)
	{
		SVGData CellContent = (SVGData) svgData;
		Point CellLocation = new Point(row, column);
		JSVGCanvas CellCanvas = (JSVGCanvas) CanvasMap.get(CellLocation);
		if (CellCanvas == null)
		{
			// No SVGUserAgent, no reaction on mouse and no selectable text.
			CellCanvas = new JSVGCanvas(null, false, true);
			CanvasMap.put(CellLocation, CellCanvas);
			CellCanvas.setDocumentState(JSVGCanvas.ALWAYS_STATIC);
			CellCanvas.setSVGDocument(CellContent.getDataDocument());
			System.out.println("Created a new canvas.");
		}
		else
			System.out.println("  Canvas found, reusing 'old' one.");
		
		if (IsBordered)
		{
			if (isSelected)
			{
				if (SelectedBorder == null)
					SelectedBorder = BorderFactory.createMatteBorder(2, 5, 2, 5, table.getSelectionBackground());
				CellCanvas.setBorder(SelectedBorder);
			}
			else
			{
				if (UnselectedBorder == null)
					UnselectedBorder = BorderFactory.createMatteBorder(2, 5, 2, 5, table.getBackground());
				CellCanvas.setBorder(UnselectedBorder);
			}
		}
		
		CellCanvas.setToolTipText(CellContent.getToolTipText());
		return (CellCanvas);
	}

}
