package jas.plot;
import java.awt.Color;
import java.awt.FontMetrics;
/**
* Subclasses encapsulate details for a particular axis type.
* @see DoubleAxis
* @see DateAxis
* @see StringAxis
* @see TimeAxis
* @author Jonas Gifford
*/
public abstract class AxisType implements java.io.Externalizable
{
/**
* This method is called by the Axis object that receives this object, so
* you never need to call this yourself.
* @param the axis this type will be used on
*/
final void setAxis(Axis axis)
{
this.axis = axis;
}
/**
* Given a length for the axis, calculate and return the space required
* for the axis component. Calculate new labels if necessary. Set fields
* in the object <code>sizeRequirements</code>. You should invoke this method
* on the <code>Axis</code> object instead of on this class directly.
* @see #sizeRequirements
* @see Axis
* @see Axis#assumeAxisLength(int)
*/
abstract void assumeAxisLength(int length);
/**
* Return a subclass of CoordinateTransformation specific to the
* type of this axis.
*/
abstract CoordinateTransformation getCoordinateTransformation();
/**
* Paint the axis labels, ticks, etc.
* @param g the Graphics object to paint with
* @param origin the actual location of the origin (from top left)
* @param axisLength the length of the axis to mark up
* @param textColor the text color
* @param majorTickMarkColor the color of the major ticks
* @param minorTickMarkColor the color of the minor ticks
*/
abstract void paintAxis(PlotGraphics g, double originX, double originY, double axisLength, Color textColor,
Color majorTickMarkColor, Color minorTickMarkColor);
/**
* The length is defined as the distance drawn above the axis and the distance
* below the axis, <B>not</B> the total length of the line.
* The layout manager needs this value to calculate space requirements.
*/
abstract int getMajorTickMarkLength();
final int longestStringLength(FontMetrics fm, final AxisLabel[] labels)
{
int longestLength = 0;
for (int i = 0; i < labels.length; i++)
{
int length = fm.stringWidth(labels[i].text);
if (length > longestLength)
longestLength = length;
}
return longestLength;
}
final public Axis getAxis()
{
return axis;
}
/** the axis object this type will be used on */
protected Axis axis;
boolean labelsValid;
final SpaceRequirements spaceRequirements = new SpaceRequirements();
}