001    /* ===========================================================
002     * JFreeChart : a free chart library for the Java(tm) platform
003     * ===========================================================
004     *
005     * (C) Copyright 2000-2005, 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     * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
025     * in the United States and other countries.]
026     *
027     * --------------
028     * AxisState.java
029     * --------------
030     * (C) Copyright 2003, 2004, by Object Refinery Limited and Contributors.
031     *
032     * Original Author:  David Gilbert (for Object Refinery Limited);
033     * Contributor(s):   -;
034     *
035     * $Id: AxisState.java,v 1.2.2.1 2005/10/25 20:37:34 mungady Exp $
036     *
037     * Changes
038     * -------
039     * 03-Nov-2003 : Added standard header (DG);
040     * 07-Nov-2003 : Added 'max' attribute (DG);
041     *
042     */
043    
044    package org.jfree.chart.axis;
045    
046    import java.util.List;
047    
048    import org.jfree.ui.RectangleEdge;
049    
050    /**
051     * Instances of this class are used to carry state information for an axis 
052     * during the drawing process.  By retaining this information in a separate 
053     * object, it is possible for multiple threads to draw the same axis to 
054     * different output targets (each drawing will maintain separate state 
055     * information).
056     */
057    public class AxisState {
058    
059        /** The cursor position. */
060        private double cursor;
061        
062        /** The axis ticks. */
063        private List ticks;
064        
065        /** The maximum width/height. */
066        private double max;
067        
068        /**
069         * Creates a new axis state.
070         */
071        public AxisState() {
072            this(0.0);
073        }
074        
075        /**
076         * Creates a new axis state.
077         * 
078         * @param cursor  the cursor.
079         */
080        public AxisState(double cursor) {
081            this.cursor = cursor;
082            this.ticks = new java.util.ArrayList();
083        }
084        
085        /**
086         * Returns the cursor position.
087         * 
088         * @return The cursor position.
089         */
090        public double getCursor() {
091            return this.cursor;
092        }
093    
094        /**
095         * Sets the cursor position.
096         * 
097         * @param cursor  the cursor position.
098         */
099        public void setCursor(double cursor) {
100            this.cursor = cursor;
101        }
102        
103        /**
104         * Moves the cursor outwards by the specified number of units.
105         * 
106         * @param units  the units.
107         * @param edge  the edge.
108         */
109        public void moveCursor(double units, RectangleEdge edge) {
110            if (edge == RectangleEdge.TOP) {
111                cursorUp(units);   
112            }
113            else if (edge == RectangleEdge.BOTTOM) {
114                cursorDown(units);   
115            }
116            else if (edge == RectangleEdge.LEFT) {
117                cursorLeft(units);   
118            }
119            else if (edge == RectangleEdge.RIGHT) {
120                cursorRight(units);   
121            }
122        }
123        
124        /**
125         * Moves the cursor up by the specified number of Java 2D units.
126         * 
127         * @param units  the units.
128         */
129        public void cursorUp(double units) {
130            this.cursor = this.cursor - units;
131        }
132        
133        /**
134         * Moves the cursor down by the specified number of Java 2D units.
135         * 
136         * @param units  the units.
137         */
138        public void cursorDown(double units) {
139            this.cursor = this.cursor + units;
140        }
141        
142        /**
143         * Moves the cursor left by the specified number of Java 2D units.
144         * 
145         * @param units  the units.
146         */
147        public void cursorLeft(double units) {
148            this.cursor = this.cursor - units;
149        }
150        
151        /**
152         * Moves the cursor right by the specified number of Java 2D units.
153         * 
154         * @param units  the units.
155         */
156        public void cursorRight(double units) {
157            this.cursor = this.cursor + units;
158        }
159        
160        /**
161         * Returns the list of ticks.
162         * 
163         * @return The list of ticks.
164         */
165        public List getTicks() {
166            return this.ticks;
167        }
168        
169        /**
170         * Sets the list of ticks.
171         * 
172         * @param ticks  the ticks.
173         */
174        public void setTicks(List ticks) {
175            this.ticks = ticks;
176        }
177        
178        /**
179         * Returns the maximum width/height.
180         * 
181         * @return The maximum width/height.
182         */
183        public double getMax() {
184            return this.max;
185        }
186        
187        /**
188         * Sets the maximum width/height.
189         * 
190         * @param max the maximum width/height.
191         */
192        public void setMax(double max) {
193            this.max = max;
194        }
195    }