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.awt.Color;
032import java.beans.PropertyChangeEvent;
033
034import org.jfree.chart.ChartFactory;
035import org.jfree.chart.JFreeChart;
036import org.jfree.chart.plot.PlotOrientation;
037import org.jfree.chart.plot.XYPlot;
038import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
039import org.jfree.data.xy.XYDataset;
040import org.jfree.data.xy.XYSeries;
041import org.jfree.data.xy.XYSeriesCollection;
042import org.jfree.ui.RectangleInsets;
043
044/**
045 * A JavaBean that displays a line chart.
046 */
047public class JLineChart extends NumericalXYChart {
048    
049    /**
050     * Creates a new pie chart bean.
051     */
052    public JLineChart() {
053        super();
054    }
055    
056    /**
057     * Creates a default chart.
058     * 
059     * @return The default chart.
060     */
061    protected JFreeChart createDefaultChart() {
062        XYSeriesCollection dataset = new XYSeriesCollection();
063        XYSeries s1 = new XYSeries("Series 1");
064        s1.add(1.0, 5.0);
065        s1.add(2.0, 7.0);
066        s1.add(3.0, 3.0);
067        s1.add(4.0, 6.0);
068        dataset.addSeries(s1);
069        JFreeChart chart = ChartFactory.createXYLineChart("JLineChart - Title", 
070                "X", "Y", dataset, PlotOrientation.VERTICAL, true, true, false);
071        XYPlot plot = (XYPlot) chart.getPlot();
072        plot.setBackgroundPaint(Color.lightGray);
073        plot.setDomainGridlinePaint(Color.white);
074        plot.setRangeGridlinePaint(Color.white);
075        plot.setAxisOffset(new RectangleInsets(4, 4, 4, 4));
076        
077        XYLineAndShapeRenderer r = (XYLineAndShapeRenderer) plot.getRenderer();
078        r.setUseFillPaint(true);
079        r.setBaseFillPaint(Color.white);
080        return chart;
081    }
082    
083    /**
084     * Returns the dataset used by the chart.
085     * 
086     * @return The dataset (possibly <code>null</code>).
087     * 
088     * @see #setDataset(XYDataset)
089     */
090    public XYDataset getDataset() {
091        XYDataset result = null;
092        XYPlot plot = (XYPlot) this.chart.getPlot();
093        if (plot != null) {
094            result = plot.getDataset();
095        }
096        return result;
097    }
098    
099    /**
100     * Sets the dataset used by the chart and sends a 
101     * {@link PropertyChangeEvent} for the <code>dataset</code> property to all
102     * registered listeners.
103     * 
104     * @param dataset  the dataset (<code>null</code> permitted).
105     * 
106     * @see #getDataset()
107     */
108    public void setDataset(XYDataset dataset) {
109        XYPlot plot = (XYPlot) this.chart.getPlot();
110        if (plot != null) {
111            XYDataset old = plot.getDataset();
112            plot.setDataset(dataset);
113            firePropertyChange("dataset", old, dataset);
114        }
115    }
116    
117    /**
118     * Returns <code>true</code> if a shape is drawn to indicate each data 
119     * item, and <code>false</code> otherwise.
120     * 
121     * @return A boolean.
122     * 
123     * @see #setShapesVisible(boolean)
124     */
125    public boolean getShapesVisible() {
126        XYPlot plot = (XYPlot) this.chart.getPlot();
127        if (plot == null) {
128            return false;
129        }
130        XYLineAndShapeRenderer r = (XYLineAndShapeRenderer) plot.getRenderer();
131        if (r == null)  {
132            return false;
133        }
134        return r.getBaseShapesVisible();
135    }
136    
137    /**
138     * Sets a flag that controls whether or not shapes are drawn to highlight
139     * each data item and sends a {@link PropertyChangeEvent} for the 
140     * <code>shapesVisible</code> property to all registered listeners.
141     * 
142     * @param visible  the new flag value.
143     * 
144     * @see #getShapesVisible()
145     */
146    public void setShapesVisible(boolean visible) {
147        XYPlot plot = (XYPlot) this.chart.getPlot();
148        if (plot == null) {
149            return;
150        }
151        XYLineAndShapeRenderer r = (XYLineAndShapeRenderer) plot.getRenderer();
152        if (r == null)  {
153            return;
154        }
155        boolean old = r.getBaseShapesVisible();
156        r.setBaseShapesVisible(visible);       
157        firePropertyChange("shapesVisible", old, visible);
158    }
159    
160}