1 /* ===========================================================
2  * JFreeChart : a free chart library for the Java(tm) platform
3  * ===========================================================
4  *
5  * (C) Copyright 2000-2013, by Object Refinery Limited and Contributors.
6  *
7  * Project Info:  http://www.jfree.org/jfreechart/index.html
8  *
9  * This library is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU Lesser General Public License as published by
11  * the Free Software Foundation; either version 2.1 of the License, or
12  * (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17  * License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
22  * USA.
23  *
24  * [Oracle and Java are registered trademarks of Oracle and/or its affiliates.
25  * Other names may be trademarks of their respective owners.]
26  *
27  * -------------------
28  * XYItemRenderer.java
29  * -------------------
30  * (C) Copyright 2001-2011, by Object Refinery Limited and Contributors.
31  *
32  * Original Author:  David Gilbert (for Object Refinery Limited);
33  * Contributor(s):   Mark Watson (www.markwatson.com);
34  *                   Sylvain Vieujot;
35  *                   Focus Computer Services Limited;
36  *                   Richard Atkinson;
37  *
38  * Changes
39  * -------
40  * 19-Oct-2001 : Version 1, based on code by Mark Watson (DG);
41  * 22-Oct-2001 : Renamed DataSource.java --> Dataset.java etc. (DG);
42  * 13-Dec-2001 : Changed return type of drawItem from void --> Shape.  The area
43  *               returned can be used as the tooltip region.
44  * 23-Jan-2002 : Added DrawInfo parameter to drawItem() method (DG);
45  * 28-Mar-2002 : Added a property change listener mechanism.  Now renderers do
46  *               not have to be immutable (DG);
47  * 04-Apr-2002 : Added the initialise() method (DG);
48  * 09-Apr-2002 : Removed the translated zero from the drawItem method, it can
49  *               be calculated inside the initialise method if it is required.
50  *               Added a new getToolTipGenerator() method.  Changed the return
51  *               type for drawItem() to void (DG);
52  * 24-May-2002 : Added ChartRenderingInfo the initialise method API (DG);
53  * 25-Jun-2002 : Removed redundant import (DG);
54  * 20-Aug-2002 : Added get/setURLGenerator methods to interface (DG);
55  * 02-Oct-2002 : Fixed errors reported by Checkstyle (DG);
56  * 18-Nov-2002 : Added methods for drawing grid lines (DG);
57  * 17-Jan-2003 : Moved plot classes into a separate package (DG);
58  * 27-Jan-2003 : Added shape lookup table (DG);
59  * 05-Jun-2003 : Added domain and range grid bands (sponsored by Focus Computer
60  *               Services Ltd) (DG);
61  * 27-Jul-2003 : Added getRangeType() to support stacked XY area charts (RA);
62  * 16-Sep-2003 : Changed ChartRenderingInfo --> PlotRenderingInfo (DG);
63  * 25-Feb-2004 : Replaced CrosshairInfo with CrosshairState.  Renamed
64  *               XYToolTipGenerator --> XYItemLabelGenerator (DG);
65  * 26-Feb-2004 : Added lots of new methods (DG);
66  * 30-Apr-2004 : Added getRangeExtent() method (DG);
67  * 06-May-2004 : Added methods for controlling item label visibility (DG);
68  * 13-May-2004 : Removed property change listener mechanism (DG);
69  * 18-May-2004 : Added item label font and paint methods (DG);
70  * 10-Sep-2004 : Removed redundant getRangeType() method (DG);
71  * 06-Oct-2004 : Replaced getRangeExtent() with findRangeBounds() and added
72  *               findDomainBounds (DG);
73  * 23-Nov-2004 : Changed drawRangeGridLine() --> drawRangeLine() (DG);
74  * 07-Jan-2005 : Removed deprecated method (DG);
75  * 24-Feb-2005 : Now extends LegendItemSource (DG);
76  * 20-Apr-2005 : Renamed XYLabelGenerator --> XYItemLabelGenerator (DG);
77  * ------------- JFREECHART 1.0.x ---------------------------------------------
78  * 19-Apr-2007 : Deprecated seriesVisible and seriesVisibleInLegend flags (DG);
79  * 20-Apr-2007 : Deprecated paint, fillPaint, outlinePaint, stroke,
80  *               outlineStroke, shape, itemLabelsVisible, itemLabelFont,
81  *               itemLabelPaint, positiveItemLabelPosition,
82  *               negativeItemLabelPosition and createEntities override
83  *               fields (DG);
84  *
85  */
86 
87 package org.jfree.chart.renderer.xy;
88 
89 import java.awt.Font;
90 import java.awt.Graphics2D;
91 import java.awt.Paint;
92 import java.awt.Shape;
93 import java.awt.Stroke;
94 import java.awt.geom.Rectangle2D;
95 
96 import org.jfree.chart.LegendItem;
97 import org.jfree.chart.LegendItemSource;
98 import org.jfree.chart.annotations.XYAnnotation;
99 import org.jfree.chart.axis.ValueAxis;
100 import org.jfree.chart.event.RendererChangeEvent;
101 import org.jfree.chart.event.RendererChangeListener;
102 import org.jfree.chart.labels.ItemLabelPosition;
103 import org.jfree.chart.labels.XYItemLabelGenerator;
104 import org.jfree.chart.labels.XYSeriesLabelGenerator;
105 import org.jfree.chart.labels.XYToolTipGenerator;
106 import org.jfree.chart.plot.CrosshairState;
107 import org.jfree.chart.plot.Marker;
108 import org.jfree.chart.plot.PlotRenderingInfo;
109 import org.jfree.chart.plot.XYPlot;
110 import org.jfree.chart.urls.XYURLGenerator;
111 import org.jfree.data.Range;
112 import org.jfree.data.xy.XYDataset;
113 import org.jfree.ui.Layer;
114 
115 /**
116  * Interface for rendering the visual representation of a single (x, y) item on
117  * an {@link XYPlot}.
118  * <p>
119  * To support cloning charts, it is recommended that renderers implement both
120  * the {@link Cloneable} and <code>PublicCloneable</code> interfaces.
121  */
122 public interface XYItemRenderer extends LegendItemSource {
123 
124     /**
125      * Returns the plot that this renderer has been assigned to.
126      *
127      * @return The plot.
128      */
getPlot()129     public XYPlot getPlot();
130 
131     /**
132      * Sets the plot that this renderer is assigned to.  This method will be
133      * called by the plot class...you do not need to call it yourself.
134      *
135      * @param plot  the plot.
136      */
setPlot(XYPlot plot)137     public void setPlot(XYPlot plot);
138 
139     /**
140      * Returns the number of passes through the data required by the renderer.
141      *
142      * @return The pass count.
143      */
getPassCount()144     public int getPassCount();
145 
146     /**
147      * Returns the lower and upper bounds (range) of the x-values in the
148      * specified dataset.
149      *
150      * @param dataset  the dataset (<code>null</code> permitted).
151      *
152      * @return The range.
153      */
findDomainBounds(XYDataset dataset)154     public Range findDomainBounds(XYDataset dataset);
155 
156     /**
157      * Returns the lower and upper bounds (range) of the y-values in the
158      * specified dataset.  The implementation of this method will take
159      * into account the presentation used by the renderers (for example,
160      * a renderer that "stacks" values will return a bigger range than
161      * a renderer that doesn't).
162      *
163      * @param dataset  the dataset (<code>null</code> permitted).
164      *
165      * @return The range (or <code>null</code> if the dataset is
166      *         <code>null</code> or empty).
167      */
findRangeBounds(XYDataset dataset)168     public Range findRangeBounds(XYDataset dataset);
169 
170     /**
171      * Add a renderer change listener.
172      *
173      * @param listener  the listener.
174      *
175      * @see #removeChangeListener(RendererChangeListener)
176      */
addChangeListener(RendererChangeListener listener)177     public void addChangeListener(RendererChangeListener listener);
178 
179     /**
180      * Removes a change listener.
181      *
182      * @param listener  the listener.
183      *
184      * @see #addChangeListener(RendererChangeListener)
185      */
removeChangeListener(RendererChangeListener listener)186     public void removeChangeListener(RendererChangeListener listener);
187 
188 
189     //// VISIBLE //////////////////////////////////////////////////////////////
190 
191     /**
192      * Returns a boolean that indicates whether or not the specified item
193      * should be drawn (this is typically used to hide an entire series).
194      *
195      * @param series  the series index.
196      * @param item  the item index.
197      *
198      * @return A boolean.
199      */
getItemVisible(int series, int item)200     public boolean getItemVisible(int series, int item);
201 
202     /**
203      * Returns a boolean that indicates whether or not the specified series
204      * should be drawn (this is typically used to hide an entire series).
205      *
206      * @param series  the series index.
207      *
208      * @return A boolean.
209      */
isSeriesVisible(int series)210     public boolean isSeriesVisible(int series);
211 
212     /**
213      * Returns the flag that controls whether a series is visible.
214      *
215      * @param series  the series index (zero-based).
216      *
217      * @return The flag (possibly <code>null</code>).
218      *
219      * @see #setSeriesVisible(int, Boolean)
220      */
getSeriesVisible(int series)221     public Boolean getSeriesVisible(int series);
222 
223     /**
224      * Sets the flag that controls whether a series is visible and sends a
225      * {@link RendererChangeEvent} to all registered listeners.
226      *
227      * @param series  the series index (zero-based).
228      * @param visible  the flag (<code>null</code> permitted).
229      *
230      * @see #getSeriesVisible(int)
231      */
setSeriesVisible(int series, Boolean visible)232     public void setSeriesVisible(int series, Boolean visible);
233 
234     /**
235      * Sets the flag that controls whether a series is visible and, if
236      * requested, sends a {@link RendererChangeEvent} to all registered
237      * listeners.
238      *
239      * @param series  the series index.
240      * @param visible  the flag (<code>null</code> permitted).
241      * @param notify  notify listeners?
242      *
243      * @see #getSeriesVisible(int)
244      */
setSeriesVisible(int series, Boolean visible, boolean notify)245     public void setSeriesVisible(int series, Boolean visible, boolean notify);
246 
247     /**
248      * Returns the base visibility for all series.
249      *
250      * @return The base visibility.
251      *
252      * @see #setBaseSeriesVisible(boolean)
253      */
getBaseSeriesVisible()254     public boolean getBaseSeriesVisible();
255 
256     /**
257      * Sets the base visibility and sends a {@link RendererChangeEvent} to all
258      * registered listeners.
259      *
260      * @param visible  the flag.
261      *
262      * @see #getBaseSeriesVisible()
263      */
setBaseSeriesVisible(boolean visible)264     public void setBaseSeriesVisible(boolean visible);
265 
266     /**
267      * Sets the base visibility and, if requested, sends
268      * a {@link RendererChangeEvent} to all registered listeners.
269      *
270      * @param visible  the visibility.
271      * @param notify  notify listeners?
272      *
273      * @see #getBaseSeriesVisible()
274      */
setBaseSeriesVisible(boolean visible, boolean notify)275     public void setBaseSeriesVisible(boolean visible, boolean notify);
276 
277     // SERIES VISIBLE IN LEGEND (not yet respected by all renderers)
278 
279     /**
280      * Returns <code>true</code> if the series should be shown in the legend,
281      * and <code>false</code> otherwise.
282      *
283      * @param series  the series index.
284      *
285      * @return A boolean.
286      */
isSeriesVisibleInLegend(int series)287     public boolean isSeriesVisibleInLegend(int series);
288 
289     /**
290      * Returns the flag that controls whether a series is visible in the
291      * legend.  This method returns only the "per series" settings - to
292      * incorporate the override and base settings as well, you need to use the
293      * {@link #isSeriesVisibleInLegend(int)} method.
294      *
295      * @param series  the series index (zero-based).
296      *
297      * @return The flag (possibly <code>null</code>).
298      *
299      * @see #setSeriesVisibleInLegend(int, Boolean)
300      */
getSeriesVisibleInLegend(int series)301     public Boolean getSeriesVisibleInLegend(int series);
302 
303     /**
304      * Sets the flag that controls whether a series is visible in the legend
305      * and sends a {@link RendererChangeEvent} to all registered listeners.
306      *
307      * @param series  the series index (zero-based).
308      * @param visible  the flag (<code>null</code> permitted).
309      *
310      * @see #getSeriesVisibleInLegend(int)
311      */
setSeriesVisibleInLegend(int series, Boolean visible)312     public void setSeriesVisibleInLegend(int series, Boolean visible);
313 
314     /**
315      * Sets the flag that controls whether a series is visible in the legend
316      * and, if requested, sends a {@link RendererChangeEvent} to all registered
317      * listeners.
318      *
319      * @param series  the series index.
320      * @param visible  the flag (<code>null</code> permitted).
321      * @param notify  notify listeners?
322      *
323      * @see #getSeriesVisibleInLegend(int)
324      */
setSeriesVisibleInLegend(int series, Boolean visible, boolean notify)325     public void setSeriesVisibleInLegend(int series, Boolean visible,
326                                          boolean notify);
327 
328     /**
329      * Returns the base visibility in the legend for all series.
330      *
331      * @return The base visibility.
332      *
333      * @see #setBaseSeriesVisibleInLegend(boolean)
334      */
getBaseSeriesVisibleInLegend()335     public boolean getBaseSeriesVisibleInLegend();
336 
337     /**
338      * Sets the base visibility in the legend and sends a
339      * {@link RendererChangeEvent} to all registered listeners.
340      *
341      * @param visible  the flag.
342      *
343      * @see #getBaseSeriesVisibleInLegend()
344      */
setBaseSeriesVisibleInLegend(boolean visible)345     public void setBaseSeriesVisibleInLegend(boolean visible);
346 
347     /**
348      * Sets the base visibility in the legend and, if requested, sends
349      * a {@link RendererChangeEvent} to all registered listeners.
350      *
351      * @param visible  the visibility.
352      * @param notify  notify listeners?
353      *
354      * @see #getBaseSeriesVisibleInLegend()
355      */
setBaseSeriesVisibleInLegend(boolean visible, boolean notify)356     public void setBaseSeriesVisibleInLegend(boolean visible, boolean notify);
357 
358 
359     //// PAINT ////////////////////////////////////////////////////////////////
360 
361     /**
362      * Returns the paint used to color data items as they are drawn.
363      *
364      * @param row  the row (or series) index (zero-based).
365      * @param column  the column (or category) index (zero-based).
366      *
367      * @return The paint (never <code>null</code>).
368      */
getItemPaint(int row, int column)369     public Paint getItemPaint(int row, int column);
370 
371     /**
372      * Returns the paint used to color an item drawn by the renderer.
373      *
374      * @param series  the series index (zero-based).
375      *
376      * @return The paint (possibly <code>null</code>).
377      *
378      * @see #setSeriesPaint(int, Paint)
379      */
getSeriesPaint(int series)380     public Paint getSeriesPaint(int series);
381 
382     /**
383      * Sets the paint used for a series and sends a {@link RendererChangeEvent}
384      * to all registered listeners.
385      *
386      * @param series  the series index (zero-based).
387      * @param paint  the paint (<code>null</code> permitted).
388      *
389      * @see #getSeriesPaint(int)
390      */
setSeriesPaint(int series, Paint paint)391     public void setSeriesPaint(int series, Paint paint);
392 
393     // FIXME: add setSeriesPaint(int, Paint, boolean)?
394 
395     /**
396      * Returns the base (or default) paint.
397      *
398      * @return The base paint (never <code>null</code>).
399      *
400      * @see #setBasePaint(Paint)
401      */
getBasePaint()402     public Paint getBasePaint();
403 
404     /**
405      * Sets the base paint and sends a {@link RendererChangeEvent} to all
406      * registered listeners.
407      *
408      * @param paint  the paint (<code>null</code> not permitted).
409      *
410      * @see #getBasePaint()
411      */
setBasePaint(Paint paint)412     public void setBasePaint(Paint paint);
413 
414     // FIXME: add setBasePaint(int, Paint, boolean)?
415 
416 //    // FILL PAINT
417 //
418 //    /**
419 //     * Returns the paint used to fill data items as they are drawn.
420 //     *
421 //     * @param row  the row (or series) index (zero-based).
422 //     * @param column  the column (or category) index (zero-based).
423 //     *
424 //     * @return The paint (never <code>null</code>).
425 //     */
426 //    public Paint getItemFillPaint(int row, int column);
427 //
428 //    /**
429 //     * Returns the paint used to fill an item drawn by the renderer.
430 //     *
431 //     * @param series  the series index (zero-based).
432 //     *
433 //     * @return The paint (possibly <code>null</code>).
434 //     */
435 //    public Paint getSeriesFillPaint(int series);
436 //
437 //    /**
438 //     * Sets the paint used for a series and sends a
439 //     * {@link RendererChangeEvent} to all registered listeners.
440 //     *
441 //     * @param series  the series index (zero-based).
442 //     * @param paint  the paint (<code>null</code> permitted).
443 //     */
444 //    public void setSeriesFillPaint(int series, Paint paint);
445 //
446 //    // FIXME: add setSeriesFillPaint(int, Paint, boolean)?
447 //
448 //    /**
449 //     * Returns the base paint.
450 //     *
451 //     * @return The base paint (never <code>null</code>).
452 //     */
453 //    public Paint getBaseFillPaint();
454 //
455 //    /**
456 //     * Sets the base paint and sends a {@link RendererChangeEvent} to all
457 //     * registered listeners.
458 //     *
459 //     * @param paint  the paint (<code>null</code> not permitted).
460 //     */
461 //    public void setBaseFillPaint(Paint paint);
462 //
463 //    // FIXME: add setBaseFillPaint(int, Paint, boolean)?
464 
465     //// OUTLINE PAINT ////////////////////////////////////////////////////////
466 
467     /**
468      * Returns the paint used to outline data items as they are drawn.
469      *
470      * @param row  the row (or series) index (zero-based).
471      * @param column  the column (or category) index (zero-based).
472      *
473      * @return The paint (never <code>null</code>).
474      */
getItemOutlinePaint(int row, int column)475     public Paint getItemOutlinePaint(int row, int column);
476 
477     /**
478      * Returns the paint used to outline an item drawn by the renderer.
479      *
480      * @param series  the series (zero-based index).
481      *
482      * @return The paint (possibly <code>null</code>).
483      *
484      * @see #setSeriesOutlinePaint(int, Paint)
485      */
getSeriesOutlinePaint(int series)486     public Paint getSeriesOutlinePaint(int series);
487 
488     /**
489      * Sets the paint used for a series outline and sends a
490      * {@link RendererChangeEvent} to all registered listeners.
491      *
492      * @param series  the series index (zero-based).
493      * @param paint  the paint (<code>null</code> permitted).
494      *
495      * @see #getSeriesOutlinePaint(int)
496      */
setSeriesOutlinePaint(int series, Paint paint)497     public void setSeriesOutlinePaint(int series, Paint paint);
498 
499     // FIXME: add setSeriesOutlinePaint(int, Paint, boolean)?
500 
501     /**
502      * Returns the base (or default) outline paint.
503      *
504      * @return The paint (never <code>null</code>).
505      *
506      * @see #setBaseOutlinePaint(Paint)
507      */
getBaseOutlinePaint()508     public Paint getBaseOutlinePaint();
509 
510     /**
511      * Sets the base outline paint and sends a {@link RendererChangeEvent} to
512      * all registered listeners.
513      *
514      * @param paint  the paint (<code>null</code> not permitted).
515      *
516      * @see #getBaseOutlinePaint()
517      */
setBaseOutlinePaint(Paint paint)518     public void setBaseOutlinePaint(Paint paint);
519 
520     // FIXME: add setBaseOutlinePaint(Paint, boolean)?
521 
522     //// STROKE ///////////////////////////////////////////////////////////////
523 
524     /**
525      * Returns the stroke used to draw data items.
526      *
527      * @param row  the row (or series) index (zero-based).
528      * @param column  the column (or category) index (zero-based).
529      *
530      * @return The stroke (never <code>null</code>).
531      */
getItemStroke(int row, int column)532     public Stroke getItemStroke(int row, int column);
533 
534     /**
535      * Returns the stroke used to draw the items in a series.
536      *
537      * @param series  the series (zero-based index).
538      *
539      * @return The stroke (possibly <code>null</code>).
540      *
541      * @see #setSeriesStroke(int, Stroke)
542      */
getSeriesStroke(int series)543     public Stroke getSeriesStroke(int series);
544 
545     /**
546      * Sets the stroke used for a series and sends a
547      * {@link RendererChangeEvent} to all registered listeners.
548      *
549      * @param series  the series index (zero-based).
550      * @param stroke  the stroke (<code>null</code> permitted).
551      *
552      * @see #getSeriesStroke(int)
553      */
setSeriesStroke(int series, Stroke stroke)554     public void setSeriesStroke(int series, Stroke stroke);
555 
556     // FIXME: add setSeriesStroke(int, Stroke, boolean) ?
557 
558     /**
559      * Returns the base (or default) stroke.
560      *
561      * @return The base stroke (never <code>null</code>).
562      *
563      * @see #setBaseStroke(Stroke)
564      */
getBaseStroke()565     public Stroke getBaseStroke();
566 
567     /**
568      * Sets the base stroke and sends a {@link RendererChangeEvent} to all
569      * registered listeners.
570      *
571      * @param stroke  the stroke (<code>null</code> not permitted).
572      *
573      * @see #getBaseStroke()
574      */
setBaseStroke(Stroke stroke)575     public void setBaseStroke(Stroke stroke);
576 
577     // FIXME: add setBaseStroke(Stroke, boolean) ?
578 
579     //// OUTLINE STROKE ///////////////////////////////////////////////////////
580 
581     /**
582      * Returns the stroke used to outline data items.  The default
583      * implementation passes control to the lookupSeriesOutlineStroke method.
584      * You can override this method if you require different behaviour.
585      *
586      * @param row  the row (or series) index (zero-based).
587      * @param column  the column (or category) index (zero-based).
588      *
589      * @return The stroke (never <code>null</code>).
590      */
getItemOutlineStroke(int row, int column)591     public Stroke getItemOutlineStroke(int row, int column);
592 
593     /**
594      * Returns the stroke used to outline the items in a series.
595      *
596      * @param series  the series (zero-based index).
597      *
598      * @return The stroke (possibly <code>null</code>).
599      *
600      * @see #setSeriesOutlineStroke(int, Stroke)
601      */
getSeriesOutlineStroke(int series)602     public Stroke getSeriesOutlineStroke(int series);
603 
604     /**
605      * Sets the outline stroke used for a series and sends a
606      * {@link RendererChangeEvent} to all registered listeners.
607      *
608      * @param series  the series index (zero-based).
609      * @param stroke  the stroke (<code>null</code> permitted).
610      *
611      * @see #getSeriesOutlineStroke(int)
612      */
setSeriesOutlineStroke(int series, Stroke stroke)613     public void setSeriesOutlineStroke(int series, Stroke stroke);
614 
615     // FIXME: add setSeriesOutlineStroke(int, Stroke, boolean) ?
616 
617     /**
618      * Returns the base outline stroke.
619      *
620      * @return The stroke (never <code>null</code>).
621      *
622      * @see #setBaseOutlineStroke(Stroke)
623      */
getBaseOutlineStroke()624     public Stroke getBaseOutlineStroke();
625 
626     /**
627      * Sets the base outline stroke and sends a {@link RendererChangeEvent} to
628      * all registered listeners.
629      *
630      * @param stroke  the stroke (<code>null</code> not permitted).
631      *
632      * @see #getBaseOutlineStroke()
633      */
setBaseOutlineStroke(Stroke stroke)634     public void setBaseOutlineStroke(Stroke stroke);
635 
636     // FIXME: add setBaseOutlineStroke(Stroke, boolean) ?
637 
638     //// SHAPE ////////////////////////////////////////////////////////////////
639 
640     /**
641      * Returns a shape used to represent a data item.
642      *
643      * @param row  the row (or series) index (zero-based).
644      * @param column  the column (or category) index (zero-based).
645      *
646      * @return The shape (never <code>null</code>).
647      */
getItemShape(int row, int column)648     public Shape getItemShape(int row, int column);
649 
650     /**
651      * Returns a shape used to represent the items in a series.
652      *
653      * @param series  the series (zero-based index).
654      *
655      * @return The shape (possibly <code>null</code>).
656      *
657      * @see #setSeriesShape(int, Shape)
658      */
getSeriesShape(int series)659     public Shape getSeriesShape(int series);
660 
661     /**
662      * Sets the shape used for a series and sends a {@link RendererChangeEvent}
663      * to all registered listeners.
664      *
665      * @param series  the series index (zero-based).
666      * @param shape  the shape (<code>null</code> permitted).
667      *
668      * @see #getSeriesShape(int)
669      */
setSeriesShape(int series, Shape shape)670     public void setSeriesShape(int series, Shape shape);
671 
672     // FIXME: add setSeriesShape(int, Shape, boolean) ?
673 
674     /**
675      * Returns the base shape.
676      *
677      * @return The shape (never <code>null</code>).
678      *
679      * @see #setBaseShape(Shape)
680      */
getBaseShape()681     public Shape getBaseShape();
682 
683     /**
684      * Sets the base shape and sends a {@link RendererChangeEvent} to all
685      * registered listeners.
686      *
687      * @param shape  the shape (<code>null</code> not permitted).
688      *
689      * @see #getBaseShape()
690      */
setBaseShape(Shape shape)691     public void setBaseShape(Shape shape);
692 
693     // FIXME: add setBaseShape(Shape, boolean) ?
694 
695 
696     //// LEGEND ITEMS /////////////////////////////////////////////////////////
697 
698     /**
699      * Returns a legend item for a series from a dataset.
700      *
701      * @param datasetIndex  the dataset index.
702      * @param series  the series (zero-based index).
703      *
704      * @return The legend item (possibly <code>null</code>).
705      */
getLegendItem(int datasetIndex, int series)706     public LegendItem getLegendItem(int datasetIndex, int series);
707 
708 
709     //// LEGEND ITEM LABEL GENERATOR //////////////////////////////////////////
710 
711     /**
712      * Returns the legend item label generator.
713      *
714      * @return The legend item label generator (never <code>null</code>).
715      *
716      * @see #setLegendItemLabelGenerator(XYSeriesLabelGenerator)
717      */
getLegendItemLabelGenerator()718     public XYSeriesLabelGenerator getLegendItemLabelGenerator();
719 
720     /**
721      * Sets the legend item label generator and sends a
722      * {@link RendererChangeEvent} to all registered listeners.
723      *
724      * @param generator  the generator (<code>null</code> not permitted).
725      */
setLegendItemLabelGenerator(XYSeriesLabelGenerator generator)726     public void setLegendItemLabelGenerator(XYSeriesLabelGenerator generator);
727 
728 
729     //// TOOL TIP GENERATOR ///////////////////////////////////////////////////
730 
731     /**
732      * Returns the tool tip generator for a data item.
733      *
734      * @param row  the row index (zero based).
735      * @param column  the column index (zero based).
736      *
737      * @return The generator (possibly <code>null</code>).
738      */
getToolTipGenerator(int row, int column)739     public XYToolTipGenerator getToolTipGenerator(int row, int column);
740 
741     /**
742      * Returns the tool tip generator for a series.
743      *
744      * @param series  the series index (zero based).
745      *
746      * @return The generator (possibly <code>null</code>).
747      *
748      * @see #setSeriesToolTipGenerator(int, XYToolTipGenerator)
749      */
getSeriesToolTipGenerator(int series)750     public XYToolTipGenerator getSeriesToolTipGenerator(int series);
751 
752     /**
753      * Sets the tool tip generator for a series and sends a
754      * {@link RendererChangeEvent} to all registered listeners.
755      *
756      * @param series  the series index (zero based).
757      * @param generator  the generator (<code>null</code> permitted).
758      *
759      * @see #getSeriesToolTipGenerator(int)
760      */
setSeriesToolTipGenerator(int series, XYToolTipGenerator generator)761     public void setSeriesToolTipGenerator(int series,
762                                           XYToolTipGenerator generator);
763 
764     /**
765      * Returns the base tool tip generator.
766      *
767      * @return The generator (possibly <code>null</code>).
768      *
769      * @see #setBaseToolTipGenerator(XYToolTipGenerator)
770      */
getBaseToolTipGenerator()771     public XYToolTipGenerator getBaseToolTipGenerator();
772 
773     /**
774      * Sets the base tool tip generator and sends a {@link RendererChangeEvent}
775      * to all registered listeners.
776      *
777      * @param generator  the generator (<code>null</code> permitted).
778      *
779      * @see #getBaseToolTipGenerator()
780      */
setBaseToolTipGenerator(XYToolTipGenerator generator)781     public void setBaseToolTipGenerator(XYToolTipGenerator generator);
782 
783     //// URL GENERATOR ////////////////////////////////////////////////////////
784 
785 
786     /**
787      * Returns the URL generator for HTML image maps.
788      *
789      * @return The URL generator (possibly null).
790      */
getURLGenerator()791     public XYURLGenerator getURLGenerator();
792 
793     /**
794      * Sets the URL generator for HTML image maps.
795      *
796      * @param urlGenerator the URL generator (null permitted).
797      */
setURLGenerator(XYURLGenerator urlGenerator)798     public void setURLGenerator(XYURLGenerator urlGenerator);
799 
800     //// ITEM LABELS VISIBLE //////////////////////////////////////////////////
801 
802     /**
803      * Returns <code>true</code> if an item label is visible, and
804      * <code>false</code> otherwise.
805      *
806      * @param row  the row index (zero-based).
807      * @param column  the column index (zero-based).
808      *
809      * @return A boolean.
810      */
isItemLabelVisible(int row, int column)811     public boolean isItemLabelVisible(int row, int column);
812 
813     /**
814      * Returns <code>true</code> if the item labels for a series are visible,
815      * and <code>false</code> otherwise.
816      *
817      * @param series  the series index (zero-based).
818      *
819      * @return A boolean.
820      */
isSeriesItemLabelsVisible(int series)821     public boolean isSeriesItemLabelsVisible(int series);
822 
823     /**
824      * Sets a flag that controls the visibility of the item labels for a
825      * series and sends a {@link RendererChangeEvent} to all registered
826      * listeners.
827      *
828      * @param series  the series index (zero-based).
829      * @param visible  the flag.
830      *
831      * @see #isSeriesItemLabelsVisible(int)
832      */
setSeriesItemLabelsVisible(int series, boolean visible)833     public void setSeriesItemLabelsVisible(int series, boolean visible);
834 
835     /**
836      * Sets a flag that controls the visibility of the item labels for a series.
837      *
838      * @param series  the series index (zero-based).
839      * @param visible  the flag (<code>null</code> permitted).
840      *
841      * @see #isSeriesItemLabelsVisible(int)
842      */
setSeriesItemLabelsVisible(int series, Boolean visible)843     public void setSeriesItemLabelsVisible(int series, Boolean visible);
844 
845     /**
846      * Sets the visibility of item labels for a series and, if requested,
847      * sends a {@link RendererChangeEvent} to all registered listeners.
848      *
849      * @param series  the series index (zero-based).
850      * @param visible  the visible flag.
851      * @param notify  a flag that controls whether or not listeners are
852      *                notified.
853      *
854      * @see #isSeriesItemLabelsVisible(int)
855      */
setSeriesItemLabelsVisible(int series, Boolean visible, boolean notify)856     public void setSeriesItemLabelsVisible(int series, Boolean visible,
857                                            boolean notify);
858 
859     /**
860      * Returns the base setting for item label visibility.
861      *
862      * @return A flag (possibly <code>null</code>).
863      *
864      * @see #setBaseItemLabelsVisible(boolean)
865      */
getBaseItemLabelsVisible()866     public Boolean getBaseItemLabelsVisible();
867 
868     /**
869      * Sets the base flag that controls whether or not item labels are visible.
870      *
871      * @param visible  the flag.
872      *
873      * @see #getBaseItemLabelsVisible()
874      */
setBaseItemLabelsVisible(boolean visible)875     public void setBaseItemLabelsVisible(boolean visible);
876 
877     /**
878      * Sets the base setting for item label visibility.
879      *
880      * @param visible  the flag (<code>null</code> permitted).
881      *
882      * @see #getBaseItemLabelsVisible()
883      */
setBaseItemLabelsVisible(Boolean visible)884     public void setBaseItemLabelsVisible(Boolean visible);
885 
886     /**
887      * Sets the base visibility for item labels and, if requested, sends a
888      * {@link RendererChangeEvent} to all registered listeners.
889      *
890      * @param visible  the visibility flag.
891      * @param notify  a flag that controls whether or not listeners are
892      *                notified.
893      *
894      * @see #getBaseItemLabelsVisible()
895      */
setBaseItemLabelsVisible(Boolean visible, boolean notify)896     public void setBaseItemLabelsVisible(Boolean visible, boolean notify);
897 
898 
899     //// ITEM LABEL GENERATOR /////////////////////////////////////////////////
900 
901     /**
902      * Returns the item label generator for a data item.
903      *
904      * @param row  the row index (zero based).
905      * @param column  the column index (zero based).
906      *
907      * @return The generator (possibly <code>null</code>).
908      */
getItemLabelGenerator(int row, int column)909     public XYItemLabelGenerator getItemLabelGenerator(int row, int column);
910 
911     /**
912      * Returns the item label generator for a series.
913      *
914      * @param series  the series index (zero based).
915      *
916      * @return The generator (possibly <code>null</code>).
917      *
918      * @see #setSeriesItemLabelGenerator(int, XYItemLabelGenerator)
919      */
getSeriesItemLabelGenerator(int series)920     public XYItemLabelGenerator getSeriesItemLabelGenerator(int series);
921 
922     /**
923      * Sets the item label generator for a series and sends a
924      * {@link RendererChangeEvent} to all registered listeners.
925      *
926      * @param series  the series index (zero based).
927      * @param generator  the generator (<code>null</code> permitted).
928      *
929      * @see #getSeriesItemLabelGenerator(int)
930      */
setSeriesItemLabelGenerator(int series, XYItemLabelGenerator generator)931     public void setSeriesItemLabelGenerator(int series,
932                                             XYItemLabelGenerator generator);
933 
934     // FIXME:
935 
936     /**
937      * Returns the base item label generator.
938      *
939      * @return The generator (possibly <code>null</code>).
940      *
941      * @see #setBaseItemLabelGenerator(XYItemLabelGenerator)
942      */
getBaseItemLabelGenerator()943     public XYItemLabelGenerator getBaseItemLabelGenerator();
944 
945     /**
946      * Sets the base item label generator and sends a
947      * {@link RendererChangeEvent} to all registered listeners.
948      *
949      * @param generator  the generator (<code>null</code> permitted).
950      *
951      * @see #getBaseItemLabelGenerator()
952      */
setBaseItemLabelGenerator(XYItemLabelGenerator generator)953     public void setBaseItemLabelGenerator(XYItemLabelGenerator generator);
954 
955     //// ITEM LABEL FONT ///////////////////////////////////////////////////////
956 
957     /**
958      * Returns the font for an item label.
959      *
960      * @param row  the row index (zero-based).
961      * @param column  the column index (zero-based).
962      *
963      * @return The font (never <code>null</code>).
964      */
getItemLabelFont(int row, int column)965     public Font getItemLabelFont(int row, int column);
966 
967     /**
968      * Returns the font for all the item labels in a series.
969      *
970      * @param series  the series index (zero-based).
971      *
972      * @return The font (possibly <code>null</code>).
973      */
getSeriesItemLabelFont(int series)974     public Font getSeriesItemLabelFont(int series);
975 
976     /**
977      * Sets the item label font for a series and sends a
978      * {@link RendererChangeEvent} to all registered listeners.
979      *
980      * @param series  the series index (zero-based).
981      * @param font  the font (<code>null</code> permitted).
982      *
983      * @see #getSeriesItemLabelFont(int)
984      */
setSeriesItemLabelFont(int series, Font font)985     public void setSeriesItemLabelFont(int series, Font font);
986 
987     /**
988      * Returns the base item label font (this is used when no other font
989      * setting is available).
990      *
991      * @return The font (<code>never</code> null).
992      *
993      * @see #setBaseItemLabelFont(Font)
994      */
getBaseItemLabelFont()995     public Font getBaseItemLabelFont();
996 
997     /**
998      * Sets the base item label font and sends a {@link RendererChangeEvent}
999      * to all registered listeners.
1000      *
1001      * @param font  the font (<code>null</code> not permitted).
1002      *
1003      * @see #getBaseItemLabelFont()
1004      */
setBaseItemLabelFont(Font font)1005     public void setBaseItemLabelFont(Font font);
1006 
1007     //// ITEM LABEL PAINT  /////////////////////////////////////////////////////
1008 
1009     /**
1010      * Returns the paint used to draw an item label.
1011      *
1012      * @param row  the row index (zero based).
1013      * @param column  the column index (zero based).
1014      *
1015      * @return The paint (never <code>null</code>).
1016      */
getItemLabelPaint(int row, int column)1017     public Paint getItemLabelPaint(int row, int column);
1018 
1019     /**
1020      * Returns the paint used to draw the item labels for a series.
1021      *
1022      * @param series  the series index (zero based).
1023      *
1024      * @return The paint (possibly <code>null</code>).
1025      *
1026      * @see #setSeriesItemLabelPaint(int, Paint)
1027      */
getSeriesItemLabelPaint(int series)1028     public Paint getSeriesItemLabelPaint(int series);
1029 
1030     /**
1031      * Sets the item label paint for a series and sends a
1032      * {@link RendererChangeEvent} to all registered listeners.
1033      *
1034      * @param series  the series (zero based index).
1035      * @param paint  the paint (<code>null</code> permitted).
1036      *
1037      * @see #getSeriesItemLabelPaint(int)
1038      */
setSeriesItemLabelPaint(int series, Paint paint)1039     public void setSeriesItemLabelPaint(int series, Paint paint);
1040 
1041     /**
1042      * Returns the base item label paint.
1043      *
1044      * @return The paint (never <code>null</code>).
1045      */
getBaseItemLabelPaint()1046     public Paint getBaseItemLabelPaint();
1047 
1048     /**
1049      * Sets the base item label paint and sends a {@link RendererChangeEvent}
1050      * to all registered listeners.
1051      *
1052      * @param paint  the paint (<code>null</code> not permitted).
1053      */
setBaseItemLabelPaint(Paint paint)1054     public void setBaseItemLabelPaint(Paint paint);
1055 
1056     // POSITIVE ITEM LABEL POSITION...
1057 
1058     /**
1059      * Returns the item label position for positive values.
1060      *
1061      * @param row  the row index (zero-based).
1062      * @param column  the column index (zero-based).
1063      *
1064      * @return The item label position (never <code>null</code>).
1065      */
getPositiveItemLabelPosition(int row, int column)1066     public ItemLabelPosition getPositiveItemLabelPosition(int row, int column);
1067 
1068     /**
1069      * Returns the item label position for all positive values in a series.
1070      *
1071      * @param series  the series index (zero-based).
1072      *
1073      * @return The item label position (never <code>null</code>).
1074      */
getSeriesPositiveItemLabelPosition(int series)1075     public ItemLabelPosition getSeriesPositiveItemLabelPosition(int series);
1076 
1077     /**
1078      * Sets the item label position for all positive values in a series and
1079      * sends a {@link RendererChangeEvent} to all registered listeners.
1080      *
1081      * @param series  the series index (zero-based).
1082      * @param position  the position (<code>null</code> permitted).
1083      */
setSeriesPositiveItemLabelPosition(int series, ItemLabelPosition position)1084     public void setSeriesPositiveItemLabelPosition(int series,
1085                                                    ItemLabelPosition position);
1086 
1087     /**
1088      * Sets the item label position for all positive values in a series and (if
1089      * requested) sends a {@link RendererChangeEvent} to all registered
1090      * listeners.
1091      *
1092      * @param series  the series index (zero-based).
1093      * @param position  the position (<code>null</code> permitted).
1094      * @param notify  notify registered listeners?
1095      */
setSeriesPositiveItemLabelPosition(int series, ItemLabelPosition position, boolean notify)1096     public void setSeriesPositiveItemLabelPosition(int series,
1097                                                    ItemLabelPosition position,
1098                                                    boolean notify);
1099 
1100     /**
1101      * Returns the base positive item label position.
1102      *
1103      * @return The position (never <code>null</code>).
1104      */
getBasePositiveItemLabelPosition()1105     public ItemLabelPosition getBasePositiveItemLabelPosition();
1106 
1107     /**
1108      * Sets the base positive item label position.
1109      *
1110      * @param position  the position (<code>null</code> not permitted).
1111      */
setBasePositiveItemLabelPosition(ItemLabelPosition position)1112     public void setBasePositiveItemLabelPosition(ItemLabelPosition position);
1113 
1114     /**
1115      * Sets the base positive item label position and, if requested, sends a
1116      * {@link RendererChangeEvent} to all registered listeners.
1117      *
1118      * @param position  the position (<code>null</code> not permitted).
1119      * @param notify  notify registered listeners?
1120      */
setBasePositiveItemLabelPosition(ItemLabelPosition position, boolean notify)1121     public void setBasePositiveItemLabelPosition(ItemLabelPosition position,
1122                                                  boolean notify);
1123 
1124 
1125     // NEGATIVE ITEM LABEL POSITION...
1126 
1127     /**
1128      * Returns the item label position for negative values.  This method can be
1129      * overridden to provide customisation of the item label position for
1130      * individual data items.
1131      *
1132      * @param row  the row index (zero-based).
1133      * @param column  the column (zero-based).
1134      *
1135      * @return The item label position (never <code>null</code>).
1136      */
getNegativeItemLabelPosition(int row, int column)1137     public ItemLabelPosition getNegativeItemLabelPosition(int row, int column);
1138 
1139     /**
1140      * Returns the item label position for all negative values in a series.
1141      *
1142      * @param series  the series index (zero-based).
1143      *
1144      * @return The item label position (never <code>null</code>).
1145      */
getSeriesNegativeItemLabelPosition(int series)1146     public ItemLabelPosition getSeriesNegativeItemLabelPosition(int series);
1147 
1148     /**
1149      * Sets the item label position for negative values in a series and sends a
1150      * {@link RendererChangeEvent} to all registered listeners.
1151      *
1152      * @param series  the series index (zero-based).
1153      * @param position  the position (<code>null</code> permitted).
1154      */
setSeriesNegativeItemLabelPosition(int series, ItemLabelPosition position)1155     public void setSeriesNegativeItemLabelPosition(int series,
1156                                                    ItemLabelPosition position);
1157 
1158     /**
1159      * Sets the item label position for negative values in a series and (if
1160      * requested) sends a {@link RendererChangeEvent} to all registered
1161      * listeners.
1162      *
1163      * @param series  the series index (zero-based).
1164      * @param position  the position (<code>null</code> permitted).
1165      * @param notify  notify registered listeners?
1166      */
setSeriesNegativeItemLabelPosition(int series, ItemLabelPosition position, boolean notify)1167     public void setSeriesNegativeItemLabelPosition(int series,
1168                                                    ItemLabelPosition position,
1169                                                    boolean notify);
1170 
1171     /**
1172      * Returns the base item label position for negative values.
1173      *
1174      * @return The position (never <code>null</code>).
1175      */
getBaseNegativeItemLabelPosition()1176     public ItemLabelPosition getBaseNegativeItemLabelPosition();
1177 
1178     /**
1179      * Sets the base item label position for negative values and sends a
1180      * {@link RendererChangeEvent} to all registered listeners.
1181      *
1182      * @param position  the position (<code>null</code> not permitted).
1183      */
setBaseNegativeItemLabelPosition(ItemLabelPosition position)1184     public void setBaseNegativeItemLabelPosition(ItemLabelPosition position);
1185 
1186     /**
1187      * Sets the base negative item label position and, if requested, sends a
1188      * {@link RendererChangeEvent} to all registered listeners.
1189      *
1190      * @param position  the position (<code>null</code> not permitted).
1191      * @param notify  notify registered listeners?
1192      */
setBaseNegativeItemLabelPosition(ItemLabelPosition position, boolean notify)1193     public void setBaseNegativeItemLabelPosition(ItemLabelPosition position,
1194                                                  boolean notify);
1195 
1196 
1197     // CREATE ENTITIES
1198     // FIXME:  these methods should be defined
1199 
1200 //    public boolean getItemCreateEntity(int series, int item);
1201 //
1202 //    public Boolean getSeriesCreateEntities(int series);
1203 //
1204 //    public void setSeriesCreateEntities(int series, Boolean create);
1205 //
1206 //    public void setSeriesCreateEntities(int series, Boolean create,
1207 //            boolean notify);
1208 //
1209 //    public boolean getBaseCreateEntities();
1210 //
1211 //    public void setBaseCreateEntities(boolean create);
1212 //
1213 //    public void setBaseCreateEntities(boolean create, boolean notify);
1214 
1215     //// ANNOTATIONS //////////////////////////////////////////////////////////
1216 
1217     /**
1218      * Adds an annotation and sends a {@link RendererChangeEvent} to all
1219      * registered listeners.  The annotation is added to the foreground
1220      * layer.
1221      *
1222      * @param annotation  the annotation (<code>null</code> not permitted).
1223      */
addAnnotation(XYAnnotation annotation)1224     public void addAnnotation(XYAnnotation annotation);
1225 
1226     /**
1227      * Adds an annotation to the specified layer.
1228      *
1229      * @param annotation  the annotation (<code>null</code> not permitted).
1230      * @param layer  the layer (<code>null</code> not permitted).
1231      */
addAnnotation(XYAnnotation annotation, Layer layer)1232     public void addAnnotation(XYAnnotation annotation, Layer layer);
1233 
1234     /**
1235      * Removes the specified annotation and sends a {@link RendererChangeEvent}
1236      * to all registered listeners.
1237      *
1238      * @param annotation  the annotation to remove (<code>null</code> not
1239      *                    permitted).
1240      *
1241      * @return A boolean to indicate whether or not the annotation was
1242      *         successfully removed.
1243      */
removeAnnotation(XYAnnotation annotation)1244     public boolean removeAnnotation(XYAnnotation annotation);
1245 
1246     /**
1247      * Removes all annotations and sends a {@link RendererChangeEvent}
1248      * to all registered listeners.
1249      */
removeAnnotations()1250     public void removeAnnotations();
1251 
1252     /**
1253      * Draws all the annotations for the specified layer.
1254      *
1255      * @param g2  the graphics device.
1256      * @param dataArea  the data area.
1257      * @param domainAxis  the domain axis.
1258      * @param rangeAxis  the range axis.
1259      * @param layer  the layer.
1260      * @param info  the plot rendering info.
1261      */
drawAnnotations(Graphics2D g2, Rectangle2D dataArea, ValueAxis domainAxis, ValueAxis rangeAxis, Layer layer, PlotRenderingInfo info)1262     public void drawAnnotations(Graphics2D g2,
1263                                 Rectangle2D dataArea,
1264                                 ValueAxis domainAxis,
1265                                 ValueAxis rangeAxis,
1266                                 Layer layer,
1267                                 PlotRenderingInfo info);
1268 
1269     //// DRAWING //////////////////////////////////////////////////////////////
1270 
1271     /**
1272      * Initialises the renderer then returns the number of 'passes' through the
1273      * data that the renderer will require (usually just one).  This method
1274      * will be called before the first item is rendered, giving the renderer
1275      * an opportunity to initialise any state information it wants to maintain.
1276      * The renderer can do nothing if it chooses.
1277      *
1278      * @param g2  the graphics device.
1279      * @param dataArea  the area inside the axes.
1280      * @param plot  the plot.
1281      * @param dataset  the dataset.
1282      * @param info  an optional info collection object to return data back to
1283      *              the caller.
1284      *
1285      * @return The number of passes the renderer requires.
1286      */
initialise(Graphics2D g2, Rectangle2D dataArea, XYPlot plot, XYDataset dataset, PlotRenderingInfo info)1287     public XYItemRendererState initialise(Graphics2D g2,
1288                                           Rectangle2D dataArea,
1289                                           XYPlot plot,
1290                                           XYDataset dataset,
1291                                           PlotRenderingInfo info);
1292 
1293     /**
1294      * Called for each item to be plotted.
1295      * <p>
1296      * The {@link XYPlot} can make multiple passes through the dataset,
1297      * depending on the value returned by the renderer's initialise() method.
1298      *
1299      * @param g2  the graphics device.
1300      * @param state  the renderer state.
1301      * @param dataArea  the area within which the data is being rendered.
1302      * @param info  collects drawing info.
1303      * @param plot  the plot (can be used to obtain standard color
1304      *              information etc).
1305      * @param domainAxis  the domain axis.
1306      * @param rangeAxis  the range axis.
1307      * @param dataset  the dataset.
1308      * @param series  the series index (zero-based).
1309      * @param item  the item index (zero-based).
1310      * @param crosshairState  crosshair information for the plot
1311      *                        (<code>null</code> permitted).
1312      * @param pass  the pass index.
1313      */
drawItem(Graphics2D g2, XYItemRendererState state, Rectangle2D dataArea, PlotRenderingInfo info, XYPlot plot, ValueAxis domainAxis, ValueAxis rangeAxis, XYDataset dataset, int series, int item, CrosshairState crosshairState, int pass)1314     public void drawItem(Graphics2D g2,
1315                          XYItemRendererState state,
1316                          Rectangle2D dataArea,
1317                          PlotRenderingInfo info,
1318                          XYPlot plot,
1319                          ValueAxis domainAxis,
1320                          ValueAxis rangeAxis,
1321                          XYDataset dataset,
1322                          int series,
1323                          int item,
1324                          CrosshairState crosshairState,
1325                          int pass);
1326 
1327     /**
1328      * Fills a band between two values on the axis.  This can be used to color
1329      * bands between the grid lines.
1330      *
1331      * @param g2  the graphics device.
1332      * @param plot  the plot.
1333      * @param axis  the domain axis.
1334      * @param dataArea  the data area.
1335      * @param start  the start value.
1336      * @param end  the end value.
1337      */
fillDomainGridBand(Graphics2D g2, XYPlot plot, ValueAxis axis, Rectangle2D dataArea, double start, double end)1338     public void fillDomainGridBand(Graphics2D g2,
1339                                    XYPlot plot,
1340                                    ValueAxis axis,
1341                                    Rectangle2D dataArea,
1342                                    double start, double end);
1343 
1344     /**
1345      * Fills a band between two values on the range axis.  This can be used to
1346      * color bands between the grid lines.
1347      *
1348      * @param g2  the graphics device.
1349      * @param plot  the plot.
1350      * @param axis  the range axis.
1351      * @param dataArea  the data area.
1352      * @param start  the start value.
1353      * @param end  the end value.
1354      */
fillRangeGridBand(Graphics2D g2, XYPlot plot, ValueAxis axis, Rectangle2D dataArea, double start, double end)1355     public void fillRangeGridBand(Graphics2D g2,
1356                                   XYPlot plot,
1357                                   ValueAxis axis,
1358                                   Rectangle2D dataArea,
1359                                   double start, double end);
1360 
1361     /**
1362      * Draws a grid line against the domain axis.
1363      *
1364      * @param g2  the graphics device.
1365      * @param plot  the plot.
1366      * @param axis  the value axis.
1367      * @param dataArea  the area for plotting data (not yet adjusted for any
1368      *                  3D effect).
1369      * @param value  the value.
1370      */
drawDomainGridLine(Graphics2D g2, XYPlot plot, ValueAxis axis, Rectangle2D dataArea, double value)1371     public void drawDomainGridLine(Graphics2D g2,
1372                                    XYPlot plot,
1373                                    ValueAxis axis,
1374                                    Rectangle2D dataArea,
1375                                    double value);
1376 
1377     /**
1378      * Draws a line perpendicular to the range axis.
1379      *
1380      * @param g2  the graphics device.
1381      * @param plot  the plot.
1382      * @param axis  the value axis.
1383      * @param dataArea  the area for plotting data.
1384      * @param value  the data value.
1385      * @param paint  the paint (<code>null</code> not permitted).
1386      * @param stroke  the stroke (<code>null</code> not permitted).
1387      */
drawRangeLine(Graphics2D g2, XYPlot plot, ValueAxis axis, Rectangle2D dataArea, double value, Paint paint, Stroke stroke)1388     public void drawRangeLine(Graphics2D g2, XYPlot plot, ValueAxis axis,
1389             Rectangle2D dataArea, double value, Paint paint, Stroke stroke);
1390 
1391     /**
1392      * Draws the specified <code>marker</code> against the domain axis.
1393      *
1394      * @param g2  the graphics device.
1395      * @param plot  the plot.
1396      * @param axis  the value axis.
1397      * @param marker  the marker.
1398      * @param dataArea  the axis data area.
1399      */
drawDomainMarker(Graphics2D g2, XYPlot plot, ValueAxis axis, Marker marker, Rectangle2D dataArea)1400     public void drawDomainMarker(Graphics2D g2, XYPlot plot, ValueAxis axis,
1401             Marker marker, Rectangle2D dataArea);
1402 
1403     /**
1404      * Draws a horizontal line across the chart to represent a 'range marker'.
1405      *
1406      * @param g2  the graphics device.
1407      * @param plot  the plot.
1408      * @param axis  the value axis.
1409      * @param marker  the marker line.
1410      * @param dataArea  the axis data area.
1411      */
drawRangeMarker(Graphics2D g2, XYPlot plot, ValueAxis axis, Marker marker, Rectangle2D dataArea)1412     public void drawRangeMarker(Graphics2D g2, XYPlot plot, ValueAxis axis,
1413             Marker marker, Rectangle2D dataArea);
1414 
1415     // DEPRECATED METHODS
1416 
1417     /**
1418      * Returns the flag that controls the visibility of ALL series.  This flag
1419      * overrides the per series and default settings - you must set it to
1420      * <code>null</code> if you want the other settings to apply.
1421      *
1422      * @return The flag (possibly <code>null</code>).
1423      *
1424      * @deprecated This method should no longer be used (as of version 1.0.6).
1425      *     It is sufficient to rely on {@link #getSeriesVisible(int)} and
1426      *     {@link #getBaseSeriesVisible()}.
1427      */
getSeriesVisible()1428     public Boolean getSeriesVisible();
1429 
1430     /**
1431      * Sets the flag that controls the visibility of ALL series and sends a
1432      * {@link RendererChangeEvent} to all registered listeners.  This flag
1433      * overrides the per series and default settings - you must set it to
1434      * <code>null</code> if you want the other settings to apply.
1435      *
1436      * @param visible  the flag (<code>null</code> permitted).
1437      *
1438      * @deprecated This method should no longer be used (as of version 1.0.6).
1439      *     It is sufficient to rely on {@link #setSeriesVisible(int, Boolean)}
1440      *     and {@link #setBaseSeriesVisible(boolean)}.
1441      */
setSeriesVisible(Boolean visible)1442     public void setSeriesVisible(Boolean visible);
1443 
1444     /**
1445      * Sets the flag that controls the visibility of ALL series and sends a
1446      * {@link RendererChangeEvent} to all registered listeners.  This flag
1447      * overrides the per series and default settings - you must set it to
1448      * <code>null</code> if you want the other settings to apply.
1449      *
1450      * @param visible  the flag (<code>null</code> permitted).
1451      * @param notify  notify listeners?
1452      *
1453      * @deprecated This method should no longer be used (as of version 1.0.6).
1454      *     It is sufficient to rely on {@link #setSeriesVisible(int, Boolean,
1455      *     boolean)} and {@link #setBaseSeriesVisible(boolean, boolean)}.
1456      */
setSeriesVisible(Boolean visible, boolean notify)1457     public void setSeriesVisible(Boolean visible, boolean notify);
1458 
1459     /**
1460      * Returns the flag that controls the visibility of ALL series in the
1461      * legend.  This flag overrides the per series and default settings - you
1462      * must set it to <code>null</code> if you want the other settings to
1463      * apply.
1464      *
1465      * @return The flag (possibly <code>null</code>).
1466      *
1467      * @deprecated This method should no longer be used (as of version 1.0.6).
1468      *     It is sufficient to rely on {@link #getSeriesVisibleInLegend(int)}
1469      *     and {@link #getBaseSeriesVisibleInLegend()}.
1470      */
getSeriesVisibleInLegend()1471     public Boolean getSeriesVisibleInLegend();
1472 
1473     /**
1474      * Sets the flag that controls the visibility of ALL series in the legend
1475      * and sends a {@link RendererChangeEvent} to all registered listeners.
1476      * This flag overrides the per series and default settings - you must set
1477      * it to <code>null</code> if you want the other settings to apply.
1478      *
1479      * @param visible  the flag (<code>null</code> permitted).
1480      *
1481      * @deprecated This method should no longer be used (as of version 1.0.6).
1482      *     It is sufficient to rely on {@link #setSeriesVisibleInLegend(int,
1483      *     Boolean)} and {@link #setBaseSeriesVisibleInLegend(boolean)}.
1484      */
setSeriesVisibleInLegend(Boolean visible)1485     public void setSeriesVisibleInLegend(Boolean visible);
1486 
1487     /**
1488      * Sets the flag that controls the visibility of ALL series in the legend
1489      * and sends a {@link RendererChangeEvent} to all registered listeners.
1490      * This flag overrides the per series and default settings - you must set
1491      * it to <code>null</code> if you want the other settings to apply.
1492      *
1493      * @param visible  the flag (<code>null</code> permitted).
1494      * @param notify  notify listeners?
1495      *
1496      * @deprecated This method should no longer be used (as of version 1.0.6).
1497      *     It is sufficient to rely on {@link #setSeriesVisibleInLegend(int,
1498      *     Boolean, boolean)} and {@link #setBaseSeriesVisibleInLegend(boolean,
1499      *     boolean)}.
1500      */
setSeriesVisibleInLegend(Boolean visible, boolean notify)1501     public void setSeriesVisibleInLegend(Boolean visible, boolean notify);
1502 
1503     /**
1504      * Sets the paint to be used for ALL series, and sends a
1505      * {@link RendererChangeEvent} to all registered listeners.  If this is
1506      * <code>null</code>, the renderer will use the paint for the series.
1507      *
1508      * @param paint  the paint (<code>null</code> permitted).
1509      *
1510      * @deprecated This method should no longer be used (as of version 1.0.6).
1511      *     It is sufficient to rely on {@link #setSeriesPaint(int, Paint)} and
1512      *     {@link #setBasePaint(Paint)}.
1513      */
setPaint(Paint paint)1514     public void setPaint(Paint paint);
1515 
1516     /**
1517      * Sets the outline paint for ALL series (optional).
1518      *
1519      * @param paint  the paint (<code>null</code> permitted).
1520      *
1521      * @deprecated This method should no longer be used (as of version 1.0.6).
1522      *     It is sufficient to rely on {@link #setSeriesOutlinePaint(int,
1523      *     Paint)} and {@link #setBaseOutlinePaint(Paint)}.
1524      */
setOutlinePaint(Paint paint)1525     public void setOutlinePaint(Paint paint);
1526 
1527     /**
1528      * Sets the stroke for ALL series and sends a {@link RendererChangeEvent}
1529      * to all registered listeners.
1530      *
1531      * @param stroke  the stroke (<code>null</code> permitted).
1532      *
1533      * @deprecated This method should no longer be used (as of version 1.0.6).
1534      *     It is sufficient to rely on {@link #setSeriesStroke(int, Stroke)}
1535      *     and {@link #setBaseStroke(Stroke)}.
1536      */
setStroke(Stroke stroke)1537     public void setStroke(Stroke stroke);
1538 
1539     /**
1540      * Sets the outline stroke for ALL series and sends a
1541      * {@link RendererChangeEvent} to all registered listeners.
1542      *
1543      * @param stroke  the stroke (<code>null</code> permitted).
1544      *
1545      * @deprecated This method should no longer be used (as of version 1.0.6).
1546      *     It is sufficient to rely on {@link #setSeriesOutlineStroke(int,
1547      *     Stroke)} and {@link #setBaseOutlineStroke(Stroke)}.
1548      */
setOutlineStroke(Stroke stroke)1549     public void setOutlineStroke(Stroke stroke);
1550 
1551     /**
1552      * Sets the shape for ALL series (optional) and sends a
1553      * {@link RendererChangeEvent} to all registered listeners.
1554      *
1555      * @param shape  the shape (<code>null</code> permitted).
1556      *
1557      * @deprecated This method should no longer be used (as of version 1.0.6).
1558      *     It is sufficient to rely on {@link #setSeriesShape(int, Shape)} and
1559      *     {@link #setBaseShape(Shape)}.
1560      */
setShape(Shape shape)1561     public void setShape(Shape shape);
1562 
1563     /**
1564      * Sets a flag that controls whether or not the item labels for ALL series
1565      * are visible.
1566      *
1567      * @param visible  the flag.
1568      *
1569      * @deprecated This method should no longer be used (as of version 1.0.6).
1570      *     It is sufficient to rely on {@link #setSeriesItemLabelsVisible(int,
1571      *     Boolean)} and {@link #setBaseItemLabelsVisible(boolean)}.
1572      */
setItemLabelsVisible(boolean visible)1573     public void setItemLabelsVisible(boolean visible);
1574 
1575     /**
1576      * Sets a flag that controls whether or not the item labels for ALL series
1577      * are visible.
1578      *
1579      * @param visible  the flag (<code>null</code> permitted).
1580      *
1581      * @deprecated This method should no longer be used (as of version 1.0.6).
1582      *     It is sufficient to rely on {@link #setSeriesItemLabelsVisible(int,
1583      *     Boolean)} and {@link #setBaseItemLabelsVisible(boolean)}.
1584      */
setItemLabelsVisible(Boolean visible)1585     public void setItemLabelsVisible(Boolean visible);
1586 
1587     /**
1588      * Sets the visibility of item labels for ALL series and, if requested,
1589      * sends a {@link RendererChangeEvent} to all registered listeners.
1590      *
1591      * @param visible  a flag that controls whether or not the item labels are
1592      *                 visible (<code>null</code> permitted).
1593      * @param notify  a flag that controls whether or not listeners are
1594      *                notified.
1595      *
1596      * @deprecated This method should no longer be used (as of version 1.0.6).
1597      *     It is sufficient to rely on {@link #setSeriesItemLabelsVisible(int,
1598      *     Boolean, boolean)} and {@link #setBaseItemLabelsVisible(Boolean,
1599      *     boolean)}.
1600      */
setItemLabelsVisible(Boolean visible, boolean notify)1601     public void setItemLabelsVisible(Boolean visible, boolean notify);
1602 
1603     /**
1604      * Sets the item label generator for ALL series and sends a
1605      * {@link RendererChangeEvent} to all registered listeners.
1606      *
1607      * @param generator  the generator (<code>null</code> permitted).
1608      *
1609      * @deprecated As of version 1.0.6, this override setting should not be
1610      *     used.  You can use the base setting instead
1611      *     ({@link #setBaseItemLabelGenerator(XYItemLabelGenerator)}).
1612      */
setItemLabelGenerator(XYItemLabelGenerator generator)1613     public void setItemLabelGenerator(XYItemLabelGenerator generator);
1614 
1615     /**
1616      * Sets the tool tip generator for ALL series and sends a
1617      * {@link RendererChangeEvent} to all registered listeners.
1618      *
1619      * @param generator  the generator (<code>null</code> permitted).
1620      *
1621      * @deprecated As of version 1.0.6, this override setting should not be
1622      *     used.  You can use the base setting instead
1623      *     ({@link #setBaseToolTipGenerator(XYToolTipGenerator)}).
1624      */
setToolTipGenerator(XYToolTipGenerator generator)1625     public void setToolTipGenerator(XYToolTipGenerator generator);
1626 
1627     /**
1628      * Returns the font used for all item labels.  This may be
1629      * <code>null</code>, in which case the per series font settings will apply.
1630      *
1631      * @return The font (possibly <code>null</code>).
1632      *
1633      * @deprecated This method should no longer be used (as of version 1.0.6).
1634      *     It is sufficient to rely on {@link #getSeriesItemLabelFont(int)} and
1635      *     {@link #getBaseItemLabelFont()}.
1636      */
getItemLabelFont()1637     public Font getItemLabelFont();
1638 
1639     /**
1640      * Sets the item label font for ALL series and sends a
1641      * {@link RendererChangeEvent} to all registered listeners.  You can set
1642      * this to <code>null</code> if you prefer to set the font on a per series
1643      * basis.
1644      *
1645      * @param font  the font (<code>null</code> permitted).
1646      *
1647      * @deprecated This method should no longer be used (as of version 1.0.6).
1648      *     It is sufficient to rely on {@link #setSeriesItemLabelFont(int,
1649      *     Font)} and {@link #setBaseItemLabelFont(Font)}.
1650      */
setItemLabelFont(Font font)1651     public void setItemLabelFont(Font font);
1652 
1653     /**
1654      * Returns the paint used for all item labels.  This may be
1655      * <code>null</code>, in which case the per series paint settings will
1656      * apply.
1657      *
1658      * @return The paint (possibly <code>null</code>).
1659      *
1660      * @deprecated This method should no longer be used (as of version 1.0.6).
1661      *     It is sufficient to rely on {@link #getSeriesItemLabelPaint(int)}
1662      *     and {@link #getBaseItemLabelPaint()}.
1663      */
getItemLabelPaint()1664     public Paint getItemLabelPaint();
1665 
1666     /**
1667      * Sets the item label paint for ALL series and sends a
1668      * {@link RendererChangeEvent} to all registered listeners.
1669      *
1670      * @param paint  the paint (<code>null</code> permitted).
1671      *
1672      * @deprecated This method should no longer be used (as of version 1.0.6).
1673      *     It is sufficient to rely on {@link #setSeriesItemLabelPaint(int,
1674      *     Paint)} and {@link #setBaseItemLabelPaint(Paint)}.
1675      */
setItemLabelPaint(Paint paint)1676     public void setItemLabelPaint(Paint paint);
1677 
1678     /**
1679      * Returns the item label position for positive values in ALL series.
1680      *
1681      * @return The item label position (possibly <code>null</code>).
1682      *
1683      * @deprecated This method should no longer be used (as of version 1.0.6).
1684      *     It is sufficient to rely on
1685      *     {@link #getSeriesPositiveItemLabelPosition(int)}
1686      *     and {@link #getBasePositiveItemLabelPosition()}.
1687      */
getPositiveItemLabelPosition()1688     public ItemLabelPosition getPositiveItemLabelPosition();
1689 
1690     /**
1691      * Sets the item label position for positive values in ALL series, and
1692      * sends a {@link RendererChangeEvent} to all registered listeners.  You
1693      * need to set this to <code>null</code> to expose the settings for
1694      * individual series.
1695      *
1696      * @param position  the position (<code>null</code> permitted).
1697      *
1698      * @deprecated This method should no longer be used (as of version 1.0.6).
1699      *     It is sufficient to rely on
1700      *     {@link #setSeriesPositiveItemLabelPosition(int, ItemLabelPosition)}
1701      *     and {@link #setBasePositiveItemLabelPosition(ItemLabelPosition)}.
1702      */
setPositiveItemLabelPosition(ItemLabelPosition position)1703     public void setPositiveItemLabelPosition(ItemLabelPosition position);
1704 
1705     /**
1706      * Sets the positive item label position for ALL series and (if requested)
1707      * sends a {@link RendererChangeEvent} to all registered listeners.
1708      *
1709      * @param position  the position (<code>null</code> permitted).
1710      * @param notify  notify registered listeners?
1711      *
1712      * @deprecated This method should no longer be used (as of version 1.0.6).
1713      *     It is sufficient to rely on
1714      *     {@link #setSeriesPositiveItemLabelPosition(int, ItemLabelPosition,
1715      *     boolean)} and {@link #setBasePositiveItemLabelPosition(
1716      *     ItemLabelPosition, boolean)}.
1717      */
setPositiveItemLabelPosition(ItemLabelPosition position, boolean notify)1718     public void setPositiveItemLabelPosition(ItemLabelPosition position,
1719                                              boolean notify);
1720 
1721     /**
1722      * Returns the item label position for negative values in ALL series.
1723      *
1724      * @return The item label position (possibly <code>null</code>).
1725      *
1726      * @deprecated This method should no longer be used (as of version 1.0.6).
1727      *     It is sufficient to rely on
1728      *     {@link #getSeriesNegativeItemLabelPosition(int)}
1729      *     and {@link #getBaseNegativeItemLabelPosition()}.
1730      */
getNegativeItemLabelPosition()1731     public ItemLabelPosition getNegativeItemLabelPosition();
1732 
1733     /**
1734      * Sets the item label position for negative values in ALL series, and
1735      * sends a {@link RendererChangeEvent} to all registered listeners.  You
1736      * need to set this to <code>null</code> to expose the settings for
1737      * individual series.
1738      *
1739      * @param position  the position (<code>null</code> permitted).
1740      *
1741      * @deprecated This method should no longer be used (as of version 1.0.6).
1742      *     It is sufficient to rely on
1743      *     {@link #setSeriesNegativeItemLabelPosition(int, ItemLabelPosition)}
1744      *     and {@link #setBaseNegativeItemLabelPosition(ItemLabelPosition)}.
1745      */
setNegativeItemLabelPosition(ItemLabelPosition position)1746     public void setNegativeItemLabelPosition(ItemLabelPosition position);
1747 
1748     /**
1749      * Sets the item label position for negative values in ALL series and (if
1750      * requested) sends a {@link RendererChangeEvent} to all registered
1751      * listeners.
1752      *
1753      * @param position  the position (<code>null</code> permitted).
1754      * @param notify  notify registered listeners?
1755      *
1756      * @deprecated This method should no longer be used (as of version 1.0.6).
1757      *     It is sufficient to rely on
1758      *     {@link #setSeriesNegativeItemLabelPosition(int, ItemLabelPosition,
1759      *     boolean)} and {@link #setBaseNegativeItemLabelPosition(
1760      *     ItemLabelPosition, boolean)}.
1761      */
setNegativeItemLabelPosition(ItemLabelPosition position, boolean notify)1762     public void setNegativeItemLabelPosition(ItemLabelPosition position,
1763                                              boolean notify);
1764 
1765 }
1766