A Custom Table Header Visualizer

Example G.3. A Custom Table Header Visualizer

public class CustomTableHeaderVisualizer 
	extends AbstractTableHeaderVisualizer
{
  private Composite composite;
  private Rect2D backRect, foreRect;

  public CustomTableHeaderVisualizer()
  {
    CompositeFactory factory = CompositeFactory.newInstance();
    try
    {
      composite = factory.newComposite(CoordinateSystemPool
          .parse("x=Lin[min=0;max=400],y=Lin[min=0;max=400]"));

      composite.addPrimitive(backRect = new Rect2D());
      backRect.set(0, 0, 400, 400);
      composite.addPrimitive(foreRect = new Rect2D());
    } catch (CoordinateSystemParseException e)
    {
      if (Debug.DISPLAY_THROWABLES)
        Debug.printThrowable(e);
    }
  }

  // deep-copy constructor.
  private CustomTableHeaderVisualizer(
      AbstractTableHeaderVisualizer source)
  {
    this.composite = 
      ((CustomTableHeaderVisualizer) source).composite.deepCopy();
  }
  
  public AbstractTableHeaderVisualizer deepCopy()
  {
    return new CustomTableHeaderVisualizer(this);
  }

  // ************************************************************
  // abstract methods AbstractTableHeaderVisualizer

  public Composite getHeaderVisualizer(
      Object value, boolean selected, int index)
  {
    if (index != 3)
      return null;

    if (selected)
    {
      backRect.setPaint(selectedPaintFormat);
      foreRect.setPaint(unselectedPaintFormat);
      foreRect.set(50, 50, 350, 350);
    } else
    {
      backRect.setPaint(unselectedPaintFormat);
      foreRect.setPaint(selectedPaintFormat);
      foreRect.set(100, 100, 300, 300);
    }
    return composite;
  }
}