/*
* @(#)AbstractPartPainter.java
*
* Copyright 2002 EGANTT LLP. All rights reserved.
* PROPRIETARY/QPL. Use is subject to license terms.
*/
package com.egantt.drawing.component.painter.part;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Rectangle;
import java.util.Iterator;
import com.egantt.awt.graphics.GraphicsState;
import com.egantt.drawing.component.painter.PartPainter;
import com.egantt.drawing.component.painter.part.view.BasicPartView;
import com.egantt.model.drawing.ContextResources;
import com.egantt.model.drawing.DrawingContext;
import com.egantt.model.drawing.DrawingPart;
import com.egantt.model.drawing.DrawingState;
import com.egantt.model.drawing.DrawingTransform;
import com.egantt.model.drawing.axis.AxisInterval;
import com.egantt.model.drawing.axis.AxisView;
import com.egantt.swing.cell.CellState;
public abstract class AbstractPartPainter implements PartPainter
{
private DrawingContext context = null;
protected Insets insets;
protected PartView view = new BasicPartView();
// _________________________________________________________________________
/**
* Optional Argument the DrawingContext can be overriden as this point if not
* this will come via the Paint method call.
*/
public void setContext(DrawingContext context)
{
this.context = context;
}
public void setInsets(Insets insets)
{
this.insets = insets;
}
public void setView(PartView view)
{
this.view = view;
}
// _________________________________________________________________________
/**
* Implementation in paintProtected
*/
public final void paint(Component c, DrawingPart part, GraphicsState graphics, CellState cellState, DrawingContext context)
{
paintProtected(c, part, graphics, cellState, this.context != null ? this.context : context);
}
// ________________________________________________________________________
protected void paintProtected(Component c, DrawingPart part, GraphicsState graphics, CellState cellState, DrawingContext context)
{
final Object [] keys = part.keys().toArray();
final AxisInterval intervals [] = new AxisInterval[keys.length];
final DrawingTransform transforms [] = new DrawingTransform [keys.length];
DrawingState drawing = cellState.getDrawing();
for (int i=0; i < keys.length; i++)
{
AxisView view = (AxisView) context.get(keys[i], ContextResources.AXIS_VIEW);
drawing.put(keys[i], view);
intervals[i] = view.getInterval();
transforms[i] = view.getTransform();
}
for (Iterator iter = part.values(intervals); iter.hasNext();)
{
Object key = iter.next();
Rectangle bounds = view.create(c, part.getInterval(key, intervals), transforms);
if (bounds == null)
continue;
if (!part.isSummaryPart())
drawing.put(key, bounds);
Graphics g = insets != null
? graphics.create(bounds.x + insets.left
, bounds.y + insets.top, bounds.width + insets.right
, bounds.height + insets.bottom)
: graphics.create(bounds.x, bounds.y,
bounds.width , bounds.height);
if (g != null)
paint(key, c, part, cellState, transforms, g, context);
}
}
protected abstract void paint(Object key, Component c, DrawingPart part,
CellState cellState, DrawingTransform transforms[], Graphics g, DrawingContext context);
}