    001/* ===========================================================
    002 * JFreeChart : a free chart library for the Java(tm) platform
    003 * ===========================================================
    004 *
    005 * (C) Copyright 2000-2011, by Object Refinery Limited and Contributors.
    006 *
    007 * Project Info:  http://www.jfree.org/jfreechart/index.html
    008 *
    009 * This library is free software; you can redistribute it and/or modify it
    010 * under the terms of the GNU Lesser General Public License as published by
    011 * the Free Software Foundation; either version 2.1 of the License, or
    012 * (at your option) any later version.
    013 *
    014 * This library is distributed in the hope that it will be useful, but
    015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
    017 * License for more details.
    018 *
    019 * You should have received a copy of the GNU Lesser General Public
    020 * License along with this library; if not, write to the Free Software
    021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
    022 * USA.
    023 *
    024 * [Oracle and Java are registered trademarks of Oracle and/or its affiliates.
    025 * Other names may be trademarks of their respective owners.]
    026 *
    027 * --------------
    028 * AxisState.java
    029 * --------------
    030 * (C) Copyright 2003-2008, by Object Refinery Limited and Contributors.
    031 *
    032 * Original Author:  David Gilbert (for Object Refinery Limited);
    033 * Contributor(s):   -;
    034 *
    035 * Changes
    036 * -------
    037 * 03-Nov-2003 : Added standard header (DG);
    038 * 07-Nov-2003 : Added 'max' attribute (DG);
    039 *
    040 */
    041
    042package org.jfree.chart.axis;
    043
    044import java.util.List;
    045
    046import org.jfree.ui.RectangleEdge;
    047
    048/**
    049 * Instances of this class are used to carry state information for an axis
    050 * during the drawing process.  By retaining this information in a separate
    051 * object, it is possible for multiple threads to draw the same axis to
    052 * different output targets (each drawing will maintain separate state
    053 * information).
    054 */
    055public class AxisState {
    056
    057    /** The cursor position. */
    058    private double cursor;
    059
    060    /** The axis ticks. */
    061    private List ticks;
    062
    063    /** The maximum width/height. */
    064    private double max;
    065
    066    /**
    067     * Creates a new axis state.
    068     */
    069    public AxisState() {
    070        this(0.0);
    071    }
    072
    073    /**
    074     * Creates a new axis state.
    075     *
    076     * @param cursor  the cursor.
    077     */
    078    public AxisState(double cursor) {
    079        this.cursor = cursor;
    080        this.ticks = new java.util.ArrayList();
    081    }
    082
    083    /**
    084     * Returns the cursor position.
    085     *
    086     * @return The cursor position.
    087     */
    088    public double getCursor() {
    089        return this.cursor;
    090    }
    091
    092    /**
    093     * Sets the cursor position.
    094     *
    095     * @param cursor  the cursor position.
    096     */
    097    public void setCursor(double cursor) {
    098        this.cursor = cursor;
    099    }
    100
    101    /**
    102     * Moves the cursor outwards by the specified number of units.
    103     *
    104     * @param units  the units.
    105     * @param edge  the edge.
    106     */
    107    public void moveCursor(double units, RectangleEdge edge) {
    108        if (edge == RectangleEdge.TOP) {
    109            cursorUp(units);
    110        }
    111        else if (edge == RectangleEdge.BOTTOM) {
    112            cursorDown(units);
    113        }
    114        else if (edge == RectangleEdge.LEFT) {
    115            cursorLeft(units);
    116        }
    117        else if (edge == RectangleEdge.RIGHT) {
    118            cursorRight(units);
    119        }
    120    }
    121
    122    /**
    123     * Moves the cursor up by the specified number of Java 2D units.
    124     *
    125     * @param units  the units.
    126     */
    127    public void cursorUp(double units) {
    128        this.cursor = this.cursor - units;
    129    }
    130
    131    /**
    132     * Moves the cursor down by the specified number of Java 2D units.
    133     *
    134     * @param units  the units.
    135     */
    136    public void cursorDown(double units) {
    137        this.cursor = this.cursor + units;
    138    }
    139
    140    /**
    141     * Moves the cursor left by the specified number of Java 2D units.
    142     *
    143     * @param units  the units.
    144     */
    145    public void cursorLeft(double units) {
    146        this.cursor = this.cursor - units;
    147    }
    148
    149    /**
    150     * Moves the cursor right by the specified number of Java 2D units.
    151     *
    152     * @param units  the units.
    153     */
    154    public void cursorRight(double units) {
    155        this.cursor = this.cursor + units;
    156    }
    157
    158    /**
    159     * Returns the list of ticks.
    160     *
    161     * @return The list of ticks.
    162     */
    163    public List getTicks() {
    164        return this.ticks;
    165    }
    166
    167    /**
    168     * Sets the list of ticks.
    169     *
    170     * @param ticks  the ticks.
    171     */
    172    public void setTicks(List ticks) {
    173        this.ticks = ticks;
    174    }
    175
    176    /**
    177     * Returns the maximum width/height.
    178     *
    179     * @return The maximum width/height.
    180     */
    181    public double getMax() {
    182        return this.max;
    183    }
    184
    185    /**
    186     * Sets the maximum width/height.
    187     *
    188     * @param max the maximum width/height.
    189     */
    190    public void setMax(double max) {
    191        this.max = max;
    192    }
    193}