001/* ======================================================
002 * Orson : a free chart beans library based on JFreeChart
003 * ======================================================
004 *
005 * (C) Copyright 2007, by Object Refinery Limited.
006 *
007 * Project Info:  http://www.jfree.org/orson/
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
029package org.jfree.beans;
030
031import java.beans.PropertyChangeEvent;
032
033import org.jfree.chart.axis.NumberAxis;
034import org.jfree.chart.axis.ValueAxis;
035import org.jfree.chart.plot.XYPlot;
036
037/**
038 * An XY chart where both the x and y-axes are numerical.
039 */
040public abstract class NumericalXYChart extends AbstractXYChart {
041
042    /**
043     * The x-axis scale type.  Note that a property editor for this type is 
044     * already registered by the {@link AbstractXYChart} class.
045     */
046    private AxisScale xAxisScale;
047
048    /**
049     * Default constructor.
050     */
051    public NumericalXYChart() {
052        super();
053        this.xAxisScale = AxisScale.FLOAT;
054    }
055    
056    /**
057     * Returns the flag that controls whether or not the auto range calculation
058     * is forced to include zero.
059     * 
060     * @return A boolean.
061     * 
062     * @see #setXAxisAutoRangeIncludesZero(boolean)
063     */
064    public boolean getXAxisAutoRangeIncludesZero() {
065        XYPlot plot = (XYPlot) this.chart.getPlot();
066        if (plot == null) {
067            return false;
068        }
069        NumberAxis xAxis = (NumberAxis) plot.getDomainAxis();
070        return xAxis.getAutoRangeIncludesZero();
071    }
072    
073    /**
074     * Sets the flag that controls whether or not the auto range calculation
075     * is forced to include zero and sends a {@link PropertyChangeEvent} for
076     * the <code>xAxisAutoRangeIncludesZero</code> property to all registered
077     * listeners.
078     * 
079     * @param include  the new flag value.
080     * 
081     * @see #getXAxisAutoRangeIncludesZero()
082     */
083    public void setXAxisAutoRangeIncludesZero(boolean include) {
084        XYPlot plot = (XYPlot) this.chart.getPlot();
085        if (plot == null) {
086            return;
087        }
088        NumberAxis xAxis = (NumberAxis) plot.getDomainAxis();
089        boolean old = xAxis.getAutoRangeIncludesZero();
090        xAxis.setAutoRangeIncludesZero(include);
091        firePropertyChange("xAxisAutoRangeIncludesZero", old, include);
092    }
093    
094    /**
095     * Returns the scale type for the x-axis.
096     * 
097     * @return The scale type for the x-axis.
098     * 
099     * @see #setXAxisScale(AxisScale)
100     */
101    public AxisScale getXAxisScale() {
102        return this.xAxisScale;
103    }
104
105    /**
106     * Sets the scale type for the x-axis and sends a 
107     * {@link PropertyChangeEvent} for the <code>xAxisScale</code> property to
108     * all registered listeners.
109     * 
110     * @param scale  the scale type (<code>null</code> not permitted).
111     * 
112     * @see #getXAxisScale()
113     */
114    public void setXAxisScale(AxisScale scale) {
115        if (scale == null) {
116            throw new IllegalArgumentException("Null 'scale' argument.");
117        }
118        XYPlot plot = (XYPlot) this.chart.getPlot();
119        if (plot != null) {
120            AxisScale old = this.xAxisScale;
121            ValueAxis axis = plot.getDomainAxis();
122            if (AxisScale.INTEGER.equals(scale)) {
123                axis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
124            }
125            else if (AxisScale.FLOAT.equals(scale)) {
126                axis.setStandardTickUnits(NumberAxis.createStandardTickUnits());
127            }
128            firePropertyChange("xAxisScsale", old, scale);
129        }
130    }
131
132}