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: not-yet-released 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 029 package org.jfree.beans; 030 031 import java.beans.PropertyChangeEvent; 032 033 import org.jfree.chart.axis.NumberAxis; 034 import org.jfree.chart.axis.ValueAxis; 035 import org.jfree.chart.plot.XYPlot; 036 037 /** 038 * An XY chart where both the x and y-axes are numerical. 039 */ 040 public 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 }