/*
*
*/
package ext.egantt.component.field.manager;
import com.egantt.awt.graphics.GraphicsState;
import com.egantt.drawing.component.DrawingComponent2D;
import com.egantt.drawing.component.painter.state.BasicStatePainter;
import com.egantt.model.component.ComponentManager;
import com.egantt.model.drawing.DrawingContext;
import ext.egantt.model.drawing.state.*;
import com.egantt.swing.cell.CellEditor;
import com.egantt.swing.cell.editor.adapter.JTableEditorAdapter;
import com.egantt.swing.cell.editor.state.ManagedStateEditor;
import com.egantt.swing.cell.renderer.adapter.JTableRendererAdapter;
import com.egantt.swing.cell.renderer.state.ManagedStateRenderer;
import com.egantt.swing.component.ComponentContext;
import com.egantt.swing.component.repaint.manager.DrawingRepaintManager;
import java.awt.Dimension;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.table.JTableHeader;
public class DefaultFieldManager
implements ComponentManager
{
public DefaultFieldManager(GraphicsState state, DrawingContext context)
{
this.state = state;
this.context = context;
}
public void registerComponent(JComponent component, ComponentContext componentContext)
{
stateManager.registerComponent(component, componentContext);
if(component instanceof JTable)
setFields((JTable)component, componentContext);
}
public void unregisterComponent(JComponent jcomponent)
{
}
protected void setFields(JTable table, ComponentContext componentContext)
{
ManagedStateRenderer renderer = createStateRenderer(state, context, stateManager, componentContext);
table.getTableHeader().setDefaultRenderer(new JTableRendererAdapter(renderer, false, true));
table.getTableHeader().setPreferredSize(new Dimension(0, 30));
table.setDefaultRenderer(com.egantt.model.drawing.state.AbstractDrawingState.class, new JTableRendererAdapter(renderer, false, false));
renderer = createStateRenderer(state, context, stateManager, componentContext);
ManagedStateEditor editor = new ManagedStateEditor(renderer, stateManager, context);
JTableEditorAdapter editorAdapter = new JTableEditorAdapter(editor);
table.setDefaultEditor(com.egantt.model.drawing.state.SingletonDrawingState.class, editorAdapter);
table.setDefaultEditor(ext.egantt.model.drawing.state.BasicDrawingState.class, editorAdapter);
table.setDefaultEditor(com.egantt.model.drawing.state.AbstractDrawingState.class, editorAdapter);
}
protected CellEditor createStateEditor(GraphicsState state, DrawingContext context, DrawingRepaintManager repaintManager, ComponentContext componentContext)
{
return new ManagedStateEditor(createStateRenderer(state, context, repaintManager, componentContext), repaintManager, context);
}
private ManagedStateRenderer createStateRenderer(GraphicsState state, DrawingContext context, DrawingRepaintManager repaintManager, ComponentContext componentContext)
{
DrawingComponent2D component = new DrawingComponent2D();
component.setGraphicsState(state);
component.setPreferredSize(new Dimension(0, 30));
ManagedStateRenderer cellRenderer = new ManagedStateRenderer(component, repaintManager, componentContext);
cellRenderer.setComponentPainter(new BasicStatePainter(context));
return cellRenderer;
}
protected final DrawingContext context;
protected final DrawingRepaintManager stateManager = new DrawingRepaintManager();
protected final GraphicsState state;
}