/** * @(#)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().indexOf(axis) < 0) { 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; } }