/*
* @(#)BasicStateRenderer.java
*
* Copyright 2002 EGANTT LLP. All rights reserved.
* PROPRIETARY/QPL. Use is subject to license terms.
*/
package com.egantt.swing.cell.renderer.state;
import java.util.Iterator;
import javax.swing.JComponent;
import com.egantt.drawing.DrawingComponent;
import com.egantt.drawing.component.DrawingComponentPainter;
import com.egantt.model.drawing.DrawingState;
import com.egantt.swing.cell.CellRenderer;
import com.egantt.swing.cell.CellState;
import com.egantt.swing.component.ComponentContext;
import com.egantt.swing.component.ComponentResources;
import ext.egantt.util.reflect.ReflectionHelper;
/**
* DrawingCellRender is used as a wrapper around the drawing in order to insert
* it into a JTable Cell
*/
public class BasicStateRenderer implements CellRenderer
{
protected final DrawingComponent component;
protected DrawingComponentPainter painter;
public BasicStateRenderer(DrawingComponent component, ComponentContext context)
{
this.component = component;
for (Iterator iter = ReflectionHelper.fields(ComponentResources.class); iter.hasNext();)
{
String field = (String) iter.next();
Object value = context.get(field);
if (field != null && field.length() > 0)
ReflectionHelper.set(component, field, value);
}
}
// _________________________________________________________________________
public void setComponentPainter(DrawingComponentPainter painter)
{
this.painter = painter; // need to keep this @link #setDrawingState
component.setComponentPainter(painter);
}
// _________________________________________________________________________
public JComponent getComponent(CellState cellState, JComponent parent)
{
Object value = cellState.getValue();
if (!(value instanceof DrawingState))
return null;
initialize(cellState);
return (JComponent) component;
}
// _________________________________________________________________________
/**
* Should be called only internally from the @see #getTableCellRenderComponent
*/
protected void initialize(CellState cellState)
{
component.setCellState(cellState);
}
}