content: /**
   * @(#)AxisPercentagePainter.java
   *
   * Copyright 2002 EGANTT LLP. All rights reserved.
   * PROPRIETARY/QPL. Use is subject to license terms.
   */
  package com.egantt.drawing.painter.axis;
  
  import java.awt.Color;
  import java.awt.Graphics;
  import java.awt.Rectangle;
  import java.awt.Shape;
  
  import com.egantt.awt.graphics.GraphicsContext;
  import com.egantt.drawing.DrawingPainter;
  import com.egantt.model.drawing.ContextResources;
  import com.egantt.model.drawing.DrawingPart;
  import com.egantt.model.drawing.DrawingTransform;
  import com.egantt.model.drawing.StateResources;
  import com.egantt.model.drawing.axis.AxisInterval;
  import com.egantt.model.drawing.axis.AxisView;
  import com.egantt.model.drawing.painter.PainterState;
  import com.egantt.util.Trace;
  
  public class AxisPercentagePainter implements DrawingPainter
  {
  	private static final boolean trace = Trace.getEnable(AxisPercentagePainter.class.getName());
  	public static final String PROGRESS_PAINT = "progressPaint";
  	
  	protected final String axis;
  	
  	public AxisPercentagePainter(String axis) {
  		this.axis = axis;
  	}
  	// __________________________________________________________________________
  
  	public Shape paint(Object key, Graphics g, Rectangle bounds,
  		PainterState state, GraphicsContext context)
  	{	
  		AxisView view = (AxisView) context.get(axis, ContextResources.AXIS_VIEW);
  		if (view == null)
  		{
  			if (trace) Trace.out.println("AxisPercentagePainter - paint: Axis not defined in context [" + axis + "]");
  			// Axis not defined
  			return bounds; 
  		}
  		
  		DrawingPart part = (DrawingPart) state.get(StateResources.DRAWING_PART);
  		if (part == null  || !part.keys().contains(axis))
  		{
  			if (trace) Trace.out.println("AxisPercentagePainter - paint: Axis not defined for DrawingPart axis [" + axis + "]");
  			return bounds; 
  		}
  		
  		final int axisIndex = part.keys().indexOf(axis);
  		
  		AxisInterval interval = part.getInterval()[axisIndex];
  		if (interval == null)  {
  			if (trace) Trace.out.println("AxisPercentagePainter - paint: interval is null for DrawingPart axis [" + axis + "]");
  			return bounds; 
  		}
  		
  		// draw the outer rectangle
  		g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);
  		g.setColor(Color.BLACK);
  		g.draw3DRect(bounds.x, bounds.y, bounds.width - 1, bounds.height - 1, true);
  		
  		Color fillColor = (Color) context.get(key, AxisPercentagePainter.PROGRESS_PAINT);
  		fillColor = fillColor != null ? fillColor : Color.BLACK;
  		
  		int xOffset = Math.min(2, bounds.width - (2 * 2));
  		int yOffset = new Double(bounds.height * 0.30).intValue();
  		
  		{
  			g.setColor(fillColor);
  			DrawingTransform transform = view.getAxis().getTransform();
  			int width = transform.transform(interval.getFinish(), bounds.width) -  transform.transform(interval.getStart(), bounds.width); 
  			//	draw the outer rectangle
  			g.fillRect(bounds.x + xOffset, bounds.y + yOffset, 
  					width - (xOffset * 2) , bounds.height - (yOffset *2));
  		}
  	
  		return bounds;
  	}
  
  	public long width(Object key, Graphics g, Rectangle bounds, GraphicsContext context)
  	{
  		return bounds.width;
  	}
  }