001 /* ===========================================================
002 * JFreeChart : a free chart library for the Java(tm) platform
003 * ===========================================================
004 *
005 * (C) Copyright 2000-2007, 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 * CategoryItemRenderer.java
029 * -------------------------
030 *
031 * (C) Copyright 2001-2007, by Object Refinery Limited and Contributors.
032 *
033 * Original Author: David Gilbert (for Object Refinery Limited);
034 * Contributor(s): Mark Watson (www.markwatson.com);
035 *
036 * $Id: CategoryItemRenderer.java,v 1.10.2.9 2007/06/14 13:13:43 mungady Exp $
037 *
038 * Changes
039 * -------
040 * 23-Oct-2001 : Version 1 (DG);
041 * 16-Jan-2002 : Renamed HorizontalCategoryItemRenderer.java
042 * --> CategoryItemRenderer.java (DG);
043 * 05-Feb-2002 : Changed return type of the drawCategoryItem method from void
044 * to Shape, as part of the tooltips implementation (DG)
045 *
046 * NOTE (30-May-2002) : this has subsequently been changed back
047 * to void, tooltips are now collected along with entities in
048 * ChartRenderingInfo (DG);
049 *
050 * 14-Mar-2002 : Added the initialise method, and changed all bar plots to use
051 * this renderer (DG);
052 * 23-May-2002 : Added ChartRenderingInfo to the initialise method (DG);
053 * 29-May-2002 : Added the getAxisArea(Rectangle2D) method (DG);
054 * 06-Jun-2002 : Updated Javadoc comments (DG);
055 * 26-Jun-2002 : Added range axis to the initialise method (DG);
056 * 24-Sep-2002 : Added getLegendItem() method (DG);
057 * 23-Oct-2002 : Added methods to get/setToolTipGenerator (DG);
058 * 05-Nov-2002 : Replaced references to CategoryDataset with TableDataset (DG);
059 * 06-Nov-2002 : Added the domain axis to the drawCategoryItem method. Renamed
060 * drawCategoryItem() --> drawItem() (DG);
061 * 20-Nov-2002 : Changed signature of drawItem() method to reflect use of
062 * TableDataset (DG);
063 * 26-Nov-2002 : Replaced the isStacked() method with the getRangeType()
064 * method (DG);
065 * 08-Jan-2003 : Changed getSeriesCount() --> getRowCount() and
066 * getCategoryCount() --> getColumnCount() (DG);
067 * 09-Jan-2003 : Changed name of grid-line methods (DG);
068 * 21-Jan-2003 : Merged TableDataset with CategoryDataset (DG);
069 * 10-Apr-2003 : Changed CategoryDataset to KeyedValues2DDataset in
070 * drawItem() method (DG);
071 * 29-Apr-2003 : Eliminated Renderer interface (DG);
072 * 02-Sep-2003 : Fix for bug 790407 (DG);
073 * 16-Sep-2003 : Changed ChartRenderingInfo --> PlotRenderingInfo (DG);
074 * 20-Oct-2003 : Added setOutlinePaint() method (DG);
075 * 06-Feb-2004 : Added missing methods, and moved deprecated methods (DG);
076 * 19-Feb-2004 : Added extra setXXXLabelsVisible() methods (DG);
077 * 29-Apr-2004 : Changed Integer --> int in initialise() method (DG);
078 * 18-May-2004 : Added methods for item label paint (DG);
079 * 05-Nov-2004 : Added getPassCount() method and 'pass' parameter to drawItem()
080 * method (DG);
081 * 07-Jan-2005 : Renamed getRangeExtent() --> findRangeBounds (DG);
082 * 11-Jan-2005 : Removed deprecated code in preparation for 1.0.0 release (DG);
083 * 23-Feb-2005 : Now extends LegendItemSource (DG);
084 * 20-Apr-2005 : Renamed CategoryLabelGenerator
085 * --> CategoryItemLabelGenerator (DG);
086 * 20-May-2005 : Added drawDomainMarker() method (DG);
087 * ------------- JFREECHART 1.0.x ---------------------------------------------
088 * 20-Feb-2007 : Updated API docs (DG);
089 * 19-Apr-2007 : Deprecated seriesVisible and seriesVisibleInLegend flags (DG);
090 * 20-Apr-2007 : Deprecated paint, fillPaint, outlinePaint, stroke,
091 * outlineStroke, shape, itemLabelsVisible, itemLabelFont,
092 * itemLabelPaint, positiveItemLabelPosition,
093 * negativeItemLabelPosition and createEntities override
094 * fields (DG);
095 *
096 */
097
098 package org.jfree.chart.renderer.category;
099
100 import java.awt.Font;
101 import java.awt.Graphics2D;
102 import java.awt.Paint;
103 import java.awt.Shape;
104 import java.awt.Stroke;
105 import java.awt.geom.Rectangle2D;
106
107 import org.jfree.chart.LegendItem;
108 import org.jfree.chart.LegendItemSource;
109 import org.jfree.chart.axis.CategoryAxis;
110 import org.jfree.chart.axis.ValueAxis;
111 import org.jfree.chart.event.RendererChangeEvent;
112 import org.jfree.chart.event.RendererChangeListener;
113 import org.jfree.chart.labels.CategoryItemLabelGenerator;
114 import org.jfree.chart.labels.CategoryToolTipGenerator;
115 import org.jfree.chart.labels.ItemLabelPosition;
116 import org.jfree.chart.plot.CategoryMarker;
117 import org.jfree.chart.plot.CategoryPlot;
118 import org.jfree.chart.plot.Marker;
119 import org.jfree.chart.plot.PlotRenderingInfo;
120 import org.jfree.chart.urls.CategoryURLGenerator;
121 import org.jfree.data.Range;
122 import org.jfree.data.category.CategoryDataset;
123
124 /**
125 * A plug-in object that is used by the {@link CategoryPlot} class to display
126 * individual data items from a {@link CategoryDataset}.
127 * <p>
128 * This interface defines the methods that must be provided by all renderers.
129 * If you are implementing a custom renderer, you should consider extending the
130 * {@link AbstractCategoryItemRenderer} class.
131 * <p>
132 * Most renderer attributes are defined using a "three layer" approach. When
133 * looking up an attribute (for example, the outline paint) the renderer first
134 * checks to see if there is a setting (in layer 0) that applies to ALL items
135 * that the renderer draws. If there is, that setting is used, but if it is
136 * <code>null</code> the renderer looks up the next layer, which contains
137 * "per series" settings for the attribute (many attributes are defined on a
138 * per series basis, so this is the layer that is most commonly used). If the
139 * layer 1 setting is <code>null</code>, the renderer will look up the final
140 * layer, which provides a default or "base" setting. Some attributes allow
141 * the base setting to be <code>null</code>, while other attributes enforce
142 * non-<code>null</code> values.
143 */
144
145 public interface CategoryItemRenderer extends LegendItemSource {
146
147 /**
148 * Returns the number of passes through the dataset required by the
149 * renderer. Usually this will be one, but some renderers may use
150 * a second or third pass to overlay items on top of things that were
151 * drawn in an earlier pass.
152 *
153 * @return The pass count.
154 */
155 public int getPassCount();
156
157 /**
158 * Returns the plot that the renderer has been assigned to (where
159 * <code>null</code> indicates that the renderer is not currently assigned
160 * to a plot).
161 *
162 * @return The plot (possibly <code>null</code>).
163 *
164 * @see #setPlot(CategoryPlot)
165 */
166 public CategoryPlot getPlot();
167
168 /**
169 * Sets the plot that the renderer has been assigned to. This method is
170 * usually called by the {@link CategoryPlot}, in normal usage you
171 * shouldn't need to call this method directly.
172 *
173 * @param plot the plot (<code>null</code> not permitted).
174 *
175 * @see #getPlot()
176 */
177 public void setPlot(CategoryPlot plot);
178
179 /**
180 * Adds a change listener.
181 *
182 * @param listener the listener.
183 *
184 * @see #removeChangeListener(RendererChangeListener)
185 */
186 public void addChangeListener(RendererChangeListener listener);
187
188 /**
189 * Removes a change listener.
190 *
191 * @param listener the listener.
192 *
193 * @see #addChangeListener(RendererChangeListener)
194 */
195 public void removeChangeListener(RendererChangeListener listener);
196
197 /**
198 * Returns the range of values the renderer requires to display all the
199 * items from the specified dataset.
200 *
201 * @param dataset the dataset (<code>null</code> permitted).
202 *
203 * @return The range (or <code>null</code> if the dataset is
204 * <code>null</code> or empty).
205 */
206 public Range findRangeBounds(CategoryDataset dataset);
207
208 /**
209 * Initialises the renderer. This method will be called before the first
210 * item is rendered, giving the renderer an opportunity to initialise any
211 * state information it wants to maintain. The renderer can do nothing if
212 * it chooses.
213 *
214 * @param g2 the graphics device.
215 * @param dataArea the area inside the axes.
216 * @param plot the plot.
217 * @param rendererIndex the renderer index.
218 * @param info collects chart rendering information for return to caller.
219 *
220 * @return A state object (maintains state information relevant to one
221 * chart drawing).
222 */
223 public CategoryItemRendererState initialise(Graphics2D g2,
224 Rectangle2D dataArea,
225 CategoryPlot plot,
226 int rendererIndex,
227 PlotRenderingInfo info);
228
229 /**
230 * Returns a boolean that indicates whether or not the specified item
231 * should be drawn (this is typically used to hide an entire series).
232 *
233 * @param series the series index.
234 * @param item the item index.
235 *
236 * @return A boolean.
237 */
238 public boolean getItemVisible(int series, int item);
239
240 /**
241 * Returns a boolean that indicates whether or not the specified series
242 * should be drawn (this is typically used to hide an entire series).
243 *
244 * @param series the series index.
245 *
246 * @return A boolean.
247 */
248 public boolean isSeriesVisible(int series);
249
250 /**
251 * Returns the flag that controls the visibility of ALL series. This flag
252 * overrides the per series and default settings - you must set it to
253 * <code>null</code> if you want the other settings to apply.
254 *
255 * @return The flag (possibly <code>null</code>).
256 *
257 * @see #setSeriesVisible(Boolean)
258 *
259 * @deprecated This method should no longer be used (as of version 1.0.6).
260 * It is sufficient to rely on {@link #getSeriesVisible(int)} and
261 * {@link #getBaseSeriesVisible()}.
262 */
263 public Boolean getSeriesVisible();
264
265 /**
266 * Sets the flag that controls the visibility of ALL series and sends a
267 * {@link RendererChangeEvent} to all registered listeners. This flag
268 * overrides the per series and default settings - you must set it to
269 * <code>null</code> if you want the other settings to apply.
270 *
271 * @param visible the flag (<code>null</code> permitted).
272 *
273 * @see #getSeriesVisible()
274 *
275 * @deprecated This method should no longer be used (as of version 1.0.6).
276 * It is sufficient to rely on {@link #setSeriesVisible(int, Boolean)}
277 * and {@link #setBaseSeriesVisible(boolean)}.
278 */
279 public void setSeriesVisible(Boolean visible);
280
281 /**
282 * Sets the flag that controls the visibility of ALL series and sends a
283 * {@link RendererChangeEvent} to all registered listeners. This flag
284 * overrides the per series and default settings - you must set it to
285 * <code>null</code> if you want the other settings to apply.
286 *
287 * @param visible the flag (<code>null</code> permitted).
288 * @param notify notify listeners?
289 *
290 * @see #getSeriesVisible()
291 *
292 * @deprecated This method should no longer be used (as of version 1.0.6).
293 * It is sufficient to rely on {@link #setSeriesVisible(int, Boolean,
294 * boolean)} and {@link #setBaseSeriesVisible(boolean, boolean)}.
295 */
296 public void setSeriesVisible(Boolean visible, boolean notify);
297
298 /**
299 * Returns the flag that controls whether a series is visible.
300 *
301 * @param series the series index (zero-based).
302 *
303 * @return The flag (possibly <code>null</code>).
304 *
305 * @see #setSeriesVisible(int, Boolean)
306 */
307 public Boolean getSeriesVisible(int series);
308
309 /**
310 * Sets the flag that controls whether a series is visible and sends a
311 * {@link RendererChangeEvent} to all registered listeners.
312 *
313 * @param series the series index (zero-based).
314 * @param visible the flag (<code>null</code> permitted).
315 *
316 * @see #getSeriesVisible(int)
317 */
318 public void setSeriesVisible(int series, Boolean visible);
319
320 /**
321 * Sets the flag that controls whether a series is visible and, if
322 * requested, sends a {@link RendererChangeEvent} to all registered
323 * listeners.
324 *
325 * @param series the series index.
326 * @param visible the flag (<code>null</code> permitted).
327 * @param notify notify listeners?
328 *
329 * @see #getSeriesVisible(int)
330 */
331 public void setSeriesVisible(int series, Boolean visible, boolean notify);
332
333 /**
334 * Returns the base visibility for all series.
335 *
336 * @return The base visibility.
337 *
338 * @see #setBaseSeriesVisible(boolean)
339 */
340 public boolean getBaseSeriesVisible();
341
342 /**
343 * Sets the base visibility and sends a {@link RendererChangeEvent} to all
344 * registered listeners.
345 *
346 * @param visible the flag.
347 *
348 * @see #getBaseSeriesVisible()
349 */
350 public void setBaseSeriesVisible(boolean visible);
351
352 /**
353 * Sets the base visibility and, if requested, sends
354 * a {@link RendererChangeEvent} to all registered listeners.
355 *
356 * @param visible the visibility.
357 * @param notify notify listeners?
358 *
359 * @see #getBaseSeriesVisible()
360 */
361 public void setBaseSeriesVisible(boolean visible, boolean notify);
362
363 // SERIES VISIBLE IN LEGEND (not yet respected by all renderers)
364
365 /**
366 * Returns <code>true</code> if the series should be shown in the legend,
367 * and <code>false</code> otherwise.
368 *
369 * @param series the series index.
370 *
371 * @return A boolean.
372 */
373 public boolean isSeriesVisibleInLegend(int series);
374
375 /**
376 * Returns the flag that controls the visibility of ALL series in the
377 * legend. This flag overrides the per series and default settings - you
378 * must set it to <code>null</code> if you want the other settings to
379 * apply.
380 *
381 * @return The flag (possibly <code>null</code>).
382 *
383 * @see #setSeriesVisibleInLegend(Boolean)
384 *
385 * @deprecated This method should no longer be used (as of version 1.0.6).
386 * It is sufficient to rely on {@link #getSeriesVisibleInLegend(int)}
387 * and {@link #getBaseSeriesVisibleInLegend()}.
388 */
389 public Boolean getSeriesVisibleInLegend();
390
391 /**
392 * Sets the flag that controls the visibility of ALL series in the legend
393 * and sends a {@link RendererChangeEvent} to all registered listeners.
394 * This flag overrides the per series and default settings - you must set
395 * it to <code>null</code> if you want the other settings to apply.
396 *
397 * @param visible the flag (<code>null</code> permitted).
398 *
399 * @see #getSeriesVisibleInLegend()
400 *
401 * @deprecated This method should no longer be used (as of version 1.0.6).
402 * It is sufficient to rely on {@link #setSeriesVisibleInLegend(int,
403 * Boolean)} and {@link #setBaseSeriesVisibleInLegend(boolean)}.
404 */
405 public void setSeriesVisibleInLegend(Boolean visible);
406
407 /**
408 * Sets the flag that controls the visibility of ALL series in the legend
409 * and sends a {@link RendererChangeEvent} to all registered listeners.
410 * This flag overrides the per series and default settings - you must set
411 * it to <code>null</code> if you want the other settings to apply.
412 *
413 * @param visible the flag (<code>null</code> permitted).
414 * @param notify notify listeners?
415 *
416 * @see #getSeriesVisibleInLegend()
417 *
418 * @deprecated This method should no longer be used (as of version 1.0.6).
419 * It is sufficient to rely on {@link #setSeriesVisibleInLegend(int,
420 * Boolean, boolean)} and {@link #setBaseSeriesVisibleInLegend(boolean,
421 * boolean)}.
422 */
423 public void setSeriesVisibleInLegend(Boolean visible, boolean notify);
424
425 /**
426 * Returns the flag that controls whether a series is visible in the
427 * legend. This method returns only the "per series" settings - to
428 * incorporate the override and base settings as well, you need to use the
429 * {@link #isSeriesVisibleInLegend(int)} method.
430 *
431 * @param series the series index (zero-based).
432 *
433 * @return The flag (possibly <code>null</code>).
434 *
435 * @see #setSeriesVisibleInLegend(int, Boolean)
436 */
437 public Boolean getSeriesVisibleInLegend(int series);
438
439 /**
440 * Sets the flag that controls whether a series is visible in the legend
441 * and sends a {@link RendererChangeEvent} to all registered listeners.
442 *
443 * @param series the series index (zero-based).
444 * @param visible the flag (<code>null</code> permitted).
445 *
446 * @see #getSeriesVisibleInLegend(int)
447 */
448 public void setSeriesVisibleInLegend(int series, Boolean visible);
449
450 /**
451 * Sets the flag that controls whether a series is visible in the legend
452 * and, if requested, sends a {@link RendererChangeEvent} to all registered
453 * listeners.
454 *
455 * @param series the series index.
456 * @param visible the flag (<code>null</code> permitted).
457 * @param notify notify listeners?
458 *
459 * @see #getSeriesVisibleInLegend(int)
460 */
461 public void setSeriesVisibleInLegend(int series, Boolean visible,
462 boolean notify);
463
464 /**
465 * Returns the base visibility in the legend for all series.
466 *
467 * @return The base visibility.
468 *
469 * @see #setBaseSeriesVisibleInLegend(boolean)
470 */
471 public boolean getBaseSeriesVisibleInLegend();
472
473 /**
474 * Sets the base visibility in the legend and sends a
475 * {@link RendererChangeEvent} to all registered listeners.
476 *
477 * @param visible the flag.
478 *
479 * @see #getBaseSeriesVisibleInLegend()
480 */
481 public void setBaseSeriesVisibleInLegend(boolean visible);
482
483 /**
484 * Sets the base visibility in the legend and, if requested, sends
485 * a {@link RendererChangeEvent} to all registered listeners.
486 *
487 * @param visible the visibility.
488 * @param notify notify listeners?
489 *
490 * @see #getBaseSeriesVisibleInLegend()
491 */
492 public void setBaseSeriesVisibleInLegend(boolean visible, boolean notify);
493
494
495 //// PAINT /////////////////////////////////////////////////////////////////
496
497 /**
498 * Returns the paint used to fill data items as they are drawn.
499 *
500 * @param row the row (or series) index (zero-based).
501 * @param column the column (or category) index (zero-based).
502 *
503 * @return The paint (never <code>null</code>).
504 */
505 public Paint getItemPaint(int row, int column);
506
507 /**
508 * Sets the paint to be used for ALL series, and sends a
509 * {@link RendererChangeEvent} to all registered listeners. If this is
510 * <code>null</code>, the renderer will use the paint for the series.
511 *
512 * @param paint the paint (<code>null</code> permitted).
513 *
514 * @deprecated This method should no longer be used (as of version 1.0.6).
515 * It is sufficient to rely on {@link #setSeriesPaint(int, Paint)} and
516 * {@link #setBasePaint(Paint)}.
517 */
518 public void setPaint(Paint paint);
519
520 /**
521 * Returns the paint used to fill an item drawn by the renderer.
522 *
523 * @param series the series index (zero-based).
524 *
525 * @return The paint (possibly <code>null</code>).
526 *
527 * @see #setSeriesPaint(int, Paint)
528 */
529 public Paint getSeriesPaint(int series);
530
531 /**
532 * Sets the paint used for a series and sends a {@link RendererChangeEvent}
533 * to all registered listeners.
534 *
535 * @param series the series index (zero-based).
536 * @param paint the paint (<code>null</code> permitted).
537 *
538 * @see #getSeriesPaint(int)
539 */
540 public void setSeriesPaint(int series, Paint paint);
541
542 // FIXME: add setSeriesPaint(int, Paint, boolean)?
543
544 /**
545 * Returns the base paint.
546 *
547 * @return The base paint (never <code>null</code>).
548 *
549 * @see #setBasePaint(Paint)
550 */
551 public Paint getBasePaint();
552
553 /**
554 * Sets the base paint and sends a {@link RendererChangeEvent} to all
555 * registered listeners.
556 *
557 * @param paint the paint (<code>null</code> not permitted).
558 *
559 * @see #getBasePaint()
560 */
561 public void setBasePaint(Paint paint);
562
563 // FIXME: add setBasePaint(int, Paint, boolean)?
564
565 //// FILL PAINT /////////////////////////////////////////////////////////
566
567 // /**
568 // * Returns the paint used to fill data items as they are drawn.
569 // *
570 // * @param row the row (or series) index (zero-based).
571 // * @param column the column (or category) index (zero-based).
572 // *
573 // * @return The paint (never <code>null</code>).
574 // */
575 // public Paint getItemFillPaint(int row, int column);
576 //
577 // /**
578 // * Returns the paint used to fill an item drawn by the renderer.
579 // *
580 // * @param series the series (zero-based index).
581 // *
582 // * @return The paint (possibly <code>null</code>).
583 // *
584 // * @see #setSeriesFillPaint(int, Paint)
585 // */
586 // public Paint getSeriesFillPaint(int series);
587 //
588 // /**
589 // * Sets the paint used for a series outline and sends a
590 // * {@link RendererChangeEvent} to all registered listeners.
591 // *
592 // * @param series the series index (zero-based).
593 // * @param paint the paint (<code>null</code> permitted).
594 // *
595 // * @see #getSeriesFillPaint(int)
596 // */
597 // public void setSeriesFillPaint(int series, Paint paint);
598 //
599 // /**
600 // * Returns the base outline paint.
601 // *
602 // * @return The paint (never <code>null</code>).
603 // *
604 // * @see #setBaseFillPaint(Paint)
605 // */
606 // public Paint getBaseFillPaint();
607 //
608 // /**
609 // * Sets the base outline paint and sends a {@link RendererChangeEvent} to
610 // * all registered listeners.
611 // *
612 // * @param paint the paint (<code>null</code> not permitted).
613 // *
614 // * @see #getBaseFillPaint()
615 // */
616 // public void setBaseFillPaint(Paint paint);
617
618 //// OUTLINE PAINT /////////////////////////////////////////////////////////
619
620 /**
621 * Returns the paint used to outline data items as they are drawn.
622 *
623 * @param row the row (or series) index (zero-based).
624 * @param column the column (or category) index (zero-based).
625 *
626 * @return The paint (never <code>null</code>).
627 */
628 public Paint getItemOutlinePaint(int row, int column);
629
630 /**
631 * Sets the outline paint for ALL series (optional).
632 *
633 * @param paint the paint (<code>null</code> permitted).
634 *
635 * @deprecated This method should no longer be used (as of version 1.0.6).
636 * It is sufficient to rely on {@link #setSeriesOutlinePaint(int,
637 * Paint)} and {@link #setBaseOutlinePaint(Paint)}.
638 */
639 public void setOutlinePaint(Paint paint);
640
641 /**
642 * Returns the paint used to outline an item drawn by the renderer.
643 *
644 * @param series the series (zero-based index).
645 *
646 * @return The paint (possibly <code>null</code>).
647 *
648 * @see #setSeriesOutlinePaint(int, Paint)
649 */
650 public Paint getSeriesOutlinePaint(int series);
651
652 /**
653 * Sets the paint used for a series outline and sends a
654 * {@link RendererChangeEvent} to all registered listeners.
655 *
656 * @param series the series index (zero-based).
657 * @param paint the paint (<code>null</code> permitted).
658 *
659 * @see #getSeriesOutlinePaint(int)
660 */
661 public void setSeriesOutlinePaint(int series, Paint paint);
662
663 // FIXME: add setSeriesOutlinePaint(int, Paint, boolean)?
664
665 /**
666 * Returns the base outline paint.
667 *
668 * @return The paint (never <code>null</code>).
669 *
670 * @see #setBaseOutlinePaint(Paint)
671 */
672 public Paint getBaseOutlinePaint();
673
674 /**
675 * Sets the base outline paint and sends a {@link RendererChangeEvent} to
676 * all registered listeners.
677 *
678 * @param paint the paint (<code>null</code> not permitted).
679 *
680 * @see #getBaseOutlinePaint()
681 */
682 public void setBaseOutlinePaint(Paint paint);
683
684 // FIXME: add setBaseOutlinePaint(Paint, boolean)?
685
686 //// STROKE ////////////////////////////////////////////////////////////////
687
688 /**
689 * Returns the stroke used to draw data items.
690 *
691 * @param row the row (or series) index (zero-based).
692 * @param column the column (or category) index (zero-based).
693 *
694 * @return The stroke (never <code>null</code>).
695 */
696 public Stroke getItemStroke(int row, int column);
697
698 /**
699 * Sets the stroke for ALL series and sends a {@link RendererChangeEvent}
700 * to all registered listeners.
701 *
702 * @param stroke the stroke (<code>null</code> permitted).
703 *
704 * @deprecated This method should no longer be used (as of version 1.0.6).
705 * It is sufficient to rely on {@link #setSeriesStroke(int, Stroke)}
706 * and {@link #setBaseStroke(Stroke)}.
707 */
708 public void setStroke(Stroke stroke);
709
710 /**
711 * Returns the stroke used to draw the items in a series.
712 *
713 * @param series the series (zero-based index).
714 *
715 * @return The stroke (never <code>null</code>).
716 *
717 * @see #setSeriesStroke(int, Stroke)
718 */
719 public Stroke getSeriesStroke(int series);
720
721 /**
722 * Sets the stroke used for a series and sends a
723 * {@link RendererChangeEvent} to all registered listeners.
724 *
725 * @param series the series index (zero-based).
726 * @param stroke the stroke (<code>null</code> permitted).
727 *
728 * @see #getSeriesStroke(int)
729 */
730 public void setSeriesStroke(int series, Stroke stroke);
731
732 // FIXME: add setSeriesStroke(int, Stroke, boolean) ?
733
734 /**
735 * Returns the base stroke.
736 *
737 * @return The base stroke (never <code>null</code>).
738 *
739 * @see #setBaseStroke(Stroke)
740 */
741 public Stroke getBaseStroke();
742
743 /**
744 * Sets the base stroke and sends a {@link RendererChangeEvent} to all
745 * registered listeners.
746 *
747 * @param stroke the stroke (<code>null</code> not permitted).
748 *
749 * @see #getBaseStroke()
750 */
751 public void setBaseStroke(Stroke stroke);
752
753 // FIXME: add setBaseStroke(Stroke, boolean) ?
754
755 //// OUTLINE STROKE ////////////////////////////////////////////////////////
756
757 /**
758 * Returns the stroke used to outline data items.
759 * <p>
760 * The default implementation passes control to the
761 * lookupSeriesOutlineStroke method. You can override this method if you
762 * require different behaviour.
763 *
764 * @param row the row (or series) index (zero-based).
765 * @param column the column (or category) index (zero-based).
766 *
767 * @return The stroke (never <code>null</code>).
768 */
769 public Stroke getItemOutlineStroke(int row, int column);
770
771 /**
772 * Sets the outline stroke for ALL series and sends a
773 * {@link RendererChangeEvent} to all registered listeners.
774 *
775 * @param stroke the stroke (<code>null</code> permitted).
776 *
777 * @deprecated This method should no longer be used (as of version 1.0.6).
778 * It is sufficient to rely on {@link #setSeriesOutlineStroke(int,
779 * Stroke)} and {@link #setBaseOutlineStroke(Stroke)}.
780 */
781 public void setOutlineStroke(Stroke stroke);
782
783 /**
784 * Returns the stroke used to outline the items in a series.
785 *
786 * @param series the series (zero-based index).
787 *
788 * @return The stroke (possibly <code>null</code>).
789 *
790 * @see #setSeriesOutlineStroke(int, Stroke)
791 */
792 public Stroke getSeriesOutlineStroke(int series);
793
794 /**
795 * Sets the outline stroke used for a series and sends a
796 * {@link RendererChangeEvent} to all registered listeners.
797 *
798 * @param series the series index (zero-based).
799 * @param stroke the stroke (<code>null</code> permitted).
800 *
801 * @see #getSeriesOutlineStroke(int)
802 */
803 public void setSeriesOutlineStroke(int series, Stroke stroke);
804
805 // FIXME: add setSeriesOutlineStroke(int, Stroke, boolean) ?
806
807 /**
808 * Returns the base outline stroke.
809 *
810 * @return The stroke (never <code>null</code>).
811 *
812 * @see #setBaseOutlineStroke(Stroke)
813 */
814 public Stroke getBaseOutlineStroke();
815
816 /**
817 * Sets the base outline stroke and sends a {@link RendererChangeEvent} to
818 * all registered listeners.
819 *
820 * @param stroke the stroke (<code>null</code> not permitted).
821 *
822 * @see #getBaseOutlineStroke()
823 */
824 public void setBaseOutlineStroke(Stroke stroke);
825
826 // FIXME: add setBaseOutlineStroke(Stroke, boolean) ?
827
828 //// SHAPE /////////////////////////////////////////////////////////////////
829
830 /**
831 * Returns a shape used to represent a data item.
832 *
833 * @param row the row (or series) index (zero-based).
834 * @param column the column (or category) index (zero-based).
835 *
836 * @return The shape (never <code>null</code>).
837 */
838 public Shape getItemShape(int row, int column);
839
840 /**
841 * Sets the shape for ALL series (optional) and sends a
842 * {@link RendererChangeEvent} to all registered listeners.
843 *
844 * @param shape the shape (<code>null</code> permitted).
845 *
846 * @deprecated This method should no longer be used (as of version 1.0.6).
847 * It is sufficient to rely on {@link #setSeriesShape(int, Shape)} and
848 * {@link #setBaseShape(Shape)}.
849 */
850 public void setShape(Shape shape);
851
852 /**
853 * Returns a shape used to represent the items in a series.
854 *
855 * @param series the series (zero-based index).
856 *
857 * @return The shape (possibly <code>null</code>).
858 *
859 * @see #setSeriesShape(int, Shape)
860 */
861 public Shape getSeriesShape(int series);
862
863 /**
864 * Sets the shape used for a series and sends a {@link RendererChangeEvent}
865 * to all registered listeners.
866 *
867 * @param series the series index (zero-based).
868 * @param shape the shape (<code>null</code> permitted).
869 *
870 * @see #getSeriesShape(int)
871 */
872 public void setSeriesShape(int series, Shape shape);
873
874 // FIXME: add setSeriesShape(int, Shape, boolean) ?
875
876 /**
877 * Returns the base shape.
878 *
879 * @return The shape (never <code>null</code>).
880 *
881 * @see #setBaseShape(Shape)
882 */
883 public Shape getBaseShape();
884
885 /**
886 * Sets the base shape and sends a {@link RendererChangeEvent} to all
887 * registered listeners.
888 *
889 * @param shape the shape (<code>null</code> not permitted).
890 *
891 * @see #getBaseShape()
892 */
893 public void setBaseShape(Shape shape);
894
895 // FIXME: add setBaseShape(Shape, boolean) ?
896
897 // ITEM LABELS VISIBLE
898
899 /**
900 * Returns <code>true</code> if an item label is visible, and
901 * <code>false</code> otherwise.
902 *
903 * @param row the row index (zero-based).
904 * @param column the column index (zero-based).
905 *
906 * @return A boolean.
907 */
908 public boolean isItemLabelVisible(int row, int column);
909
910 /**
911 * Sets a flag that controls whether or not the item labels for ALL series
912 * are visible.
913 *
914 * @param visible the flag.
915 *
916 * @see #setItemLabelsVisible(Boolean)
917 *
918 * @deprecated This method should no longer be used (as of version 1.0.6).
919 * It is sufficient to rely on {@link #setSeriesItemLabelsVisible(int,
920 * Boolean)} and {@link #setBaseItemLabelsVisible(boolean)}.
921 */
922 public void setItemLabelsVisible(boolean visible);
923
924 /**
925 * Sets a flag that controls whether or not the item labels for ALL series
926 * are visible.
927 *
928 * @param visible the flag (<code>null</code> permitted).
929 *
930 * @see #setItemLabelsVisible(boolean)
931 *
932 * @deprecated This method should no longer be used (as of version 1.0.6).
933 * It is sufficient to rely on {@link #setSeriesItemLabelsVisible(int,
934 * Boolean)} and {@link #setBaseItemLabelsVisible(boolean)}.
935 */
936 public void setItemLabelsVisible(Boolean visible);
937
938 /**
939 * Sets the visibility of item labels for ALL series and, if requested,
940 * sends a {@link RendererChangeEvent} to all registered listeners.
941 *
942 * @param visible a flag that controls whether or not the item labels are
943 * visible (<code>null</code> permitted).
944 * @param notify a flag that controls whether or not listeners are
945 * notified.
946 *
947 * @deprecated This method should no longer be used (as of version 1.0.6).
948 * It is sufficient to rely on {@link #setSeriesItemLabelsVisible(int,
949 * Boolean, boolean)} and {@link #setBaseItemLabelsVisible(Boolean,
950 * boolean)}.
951 */
952 public void setItemLabelsVisible(Boolean visible, boolean notify);
953
954 /**
955 * Returns <code>true</code> if the item labels for a series are visible,
956 * and <code>false</code> otherwise.
957 *
958 * @param series the series index (zero-based).
959 *
960 * @return A boolean.
961 *
962 * @see #setSeriesItemLabelsVisible(int, Boolean)
963 */
964 public boolean isSeriesItemLabelsVisible(int series);
965
966 /**
967 * Sets a flag that controls the visibility of the item labels for a series.
968 *
969 * @param series the series index (zero-based).
970 * @param visible the flag.
971 *
972 * @see #isSeriesItemLabelsVisible(int)
973 */
974 public void setSeriesItemLabelsVisible(int series, boolean visible);
975
976 /**
977 * Sets a flag that controls the visibility of the item labels for a series.
978 *
979 * @param series the series index (zero-based).
980 * @param visible the flag (<code>null</code> permitted).
981 *
982 * @see #isSeriesItemLabelsVisible(int)
983 */
984 public void setSeriesItemLabelsVisible(int series, Boolean visible);
985
986 /**
987 * Sets the visibility of item labels for a series and, if requested, sends
988 * a {@link RendererChangeEvent} to all registered listeners.
989 *
990 * @param series the series index (zero-based).
991 * @param visible the visible flag.
992 * @param notify a flag that controls whether or not listeners are
993 * notified.
994 *
995 * @see #isSeriesItemLabelsVisible(int)
996 */
997 public void setSeriesItemLabelsVisible(int series, Boolean visible,
998 boolean notify);
999
1000 /**
1001 * Returns the base setting for item label visibility.
1002 *
1003 * @return A flag (possibly <code>null</code>).
1004 *
1005 * @see #setBaseItemLabelsVisible(Boolean)
1006 */
1007 public Boolean getBaseItemLabelsVisible();
1008
1009 /**
1010 * Sets the base flag that controls whether or not item labels are visible.
1011 *
1012 * @param visible the flag.
1013 *
1014 * @see #getBaseItemLabelsVisible()
1015 */
1016 public void setBaseItemLabelsVisible(boolean visible);
1017
1018 /**
1019 * Sets the base setting for item label visibility.
1020 *
1021 * @param visible the flag (<code>null</code> permitted).
1022 *
1023 * @see #getBaseItemLabelsVisible()
1024 */
1025 public void setBaseItemLabelsVisible(Boolean visible);
1026
1027 /**
1028 * Sets the base visibility for item labels and, if requested, sends a
1029 * {@link RendererChangeEvent} to all registered listeners.
1030 *
1031 * @param visible the visibility flag.
1032 * @param notify a flag that controls whether or not listeners are
1033 * notified.
1034 *
1035 * @see #getBaseItemLabelsVisible()
1036 */
1037 public void setBaseItemLabelsVisible(Boolean visible, boolean notify);
1038
1039 // ITEM LABEL GENERATOR
1040
1041 /**
1042 * Returns the item label generator for the specified data item.
1043 *
1044 * @param series the series index (zero-based).
1045 * @param item the item index (zero-based).
1046 *
1047 * @return The generator (possibly <code>null</code>).
1048 */
1049 public CategoryItemLabelGenerator getItemLabelGenerator(int series,
1050 int item);
1051
1052 /**
1053 * Sets the item label generator for ALL series and sends a
1054 * {@link RendererChangeEvent} to all registered listeners. This overrides
1055 * the per-series settings.
1056 *
1057 * @param generator the generator (<code>null</code> permitted).
1058 *
1059 * @deprecated This method should no longer be used (as of version 1.0.6).
1060 * It is sufficient to rely on {@link #setSeriesItemLabelGenerator(int,
1061 * CategoryItemLabelGenerator)} and
1062 * {@link #setBaseItemLabelGenerator(CategoryItemLabelGenerator)}.
1063 */
1064 public void setItemLabelGenerator(CategoryItemLabelGenerator generator);
1065
1066 /**
1067 * Returns the item label generator for a series.
1068 *
1069 * @param series the series index (zero-based).
1070 *
1071 * @return The label generator (possibly <code>null</code>).
1072 *
1073 * @see #setSeriesItemLabelGenerator(int, CategoryItemLabelGenerator)
1074 */
1075 public CategoryItemLabelGenerator getSeriesItemLabelGenerator(int series);
1076
1077 /**
1078 * Sets the item label generator for a series and sends a
1079 * {@link RendererChangeEvent} to all registered listeners.
1080 *
1081 * @param series the series index (zero-based).
1082 * @param generator the generator.
1083 *
1084 * @see #getSeriesItemLabelGenerator(int)
1085 */
1086 public void setSeriesItemLabelGenerator(int series,
1087 CategoryItemLabelGenerator generator);
1088
1089 // FIXME: add setSeriesItemLabelGenerator(int, CategoryItemLabelGenerator,
1090 // boolean)
1091
1092 /**
1093 * Returns the base item label generator.
1094 *
1095 * @return The generator (possibly <code>null</code>).
1096 *
1097 * @see #setBaseItemLabelGenerator(CategoryItemLabelGenerator)
1098 */
1099 public CategoryItemLabelGenerator getBaseItemLabelGenerator();
1100
1101 /**
1102 * Sets the base item label generator and sends a
1103 * {@link RendererChangeEvent} to all registered listeners.
1104 *
1105 * @param generator the generator (<code>null</code> permitted).
1106 *
1107 * @see #getBaseItemLabelGenerator()
1108 */
1109 public void setBaseItemLabelGenerator(CategoryItemLabelGenerator generator);
1110
1111 // FIXME: add setBaseItemLabelGenerator(CategoryItemLabelGenerator,
1112 // boolean) ?
1113
1114 // TOOL TIP GENERATOR
1115
1116 /**
1117 * Returns the tool tip generator that should be used for the specified
1118 * item. This method looks up the generator using the "three-layer"
1119 * approach outlined in the general description of this interface.
1120 *
1121 * @param row the row index (zero-based).
1122 * @param column the column index (zero-based).
1123 *
1124 * @return The generator (possibly <code>null</code>).
1125 */
1126 public CategoryToolTipGenerator getToolTipGenerator(int row, int column);
1127
1128 /**
1129 * Returns the tool tip generator that will be used for ALL items in the
1130 * dataset (the "layer 0" generator).
1131 *
1132 * @return A tool tip generator (possibly <code>null</code>).
1133 *
1134 * @see #setToolTipGenerator(CategoryToolTipGenerator)
1135 *
1136 * @deprecated This method should no longer be used (as of version 1.0.6).
1137 * It is sufficient to rely on {@link #getSeriesToolTipGenerator(int)}
1138 * and {@link #getBaseToolTipGenerator()}.
1139 */
1140 public CategoryToolTipGenerator getToolTipGenerator();
1141
1142 /**
1143 * Sets the tool tip generator for ALL series and sends a
1144 * {@link org.jfree.chart.event.RendererChangeEvent} to all registered
1145 * listeners.
1146 *
1147 * @param generator the generator (<code>null</code> permitted).
1148 *
1149 * @see #getToolTipGenerator()
1150 *
1151 * @deprecated This method should no longer be used (as of version 1.0.6).
1152 * It is sufficient to rely on {@link #setSeriesToolTipGenerator(int,
1153 * CategoryToolTipGenerator)} and
1154 * {@link #setBaseToolTipGenerator(CategoryToolTipGenerator)}.
1155 */
1156 public void setToolTipGenerator(CategoryToolTipGenerator generator);
1157
1158 /**
1159 * Returns the tool tip generator for the specified series (a "layer 1"
1160 * generator).
1161 *
1162 * @param series the series index (zero-based).
1163 *
1164 * @return The tool tip generator (possibly <code>null</code>).
1165 *
1166 * @see #setSeriesToolTipGenerator(int, CategoryToolTipGenerator)
1167 */
1168 public CategoryToolTipGenerator getSeriesToolTipGenerator(int series);
1169
1170 /**
1171 * Sets the tool tip generator for a series and sends a
1172 * {@link org.jfree.chart.event.RendererChangeEvent} to all registered
1173 * listeners.
1174 *
1175 * @param series the series index (zero-based).
1176 * @param generator the generator (<code>null</code> permitted).
1177 *
1178 * @see #getSeriesToolTipGenerator(int)
1179 */
1180 public void setSeriesToolTipGenerator(int series,
1181 CategoryToolTipGenerator generator);
1182
1183 // FIXME: add setSeriesToolTipGenerator(int, CategoryToolTipGenerator,
1184 // boolean) ?
1185
1186 /**
1187 * Returns the base tool tip generator (the "layer 2" generator).
1188 *
1189 * @return The tool tip generator (possibly <code>null</code>).
1190 *
1191 * @see #setBaseToolTipGenerator(CategoryToolTipGenerator)
1192 */
1193 public CategoryToolTipGenerator getBaseToolTipGenerator();
1194
1195 /**
1196 * Sets the base tool tip generator and sends a
1197 * {@link org.jfree.chart.event.RendererChangeEvent} to all registered
1198 * listeners.
1199 *
1200 * @param generator the generator (<code>null</code> permitted).
1201 *
1202 * @see #getBaseToolTipGenerator()
1203 */
1204 public void setBaseToolTipGenerator(CategoryToolTipGenerator generator);
1205
1206 // FIXME: add setBaseToolTipGenerator(CategoryToolTipGenerator, boolean) ?
1207
1208 //// ITEM LABEL FONT //////////////////////////////////////////////////////
1209
1210 /**
1211 * Returns the font for an item label.
1212 *
1213 * @param row the row index (zero-based).
1214 * @param column the column index (zero-based).
1215 *
1216 * @return The font (never <code>null</code>).
1217 */
1218 public Font getItemLabelFont(int row, int column);
1219
1220 /**
1221 * Returns the font used for all item labels. This may be
1222 * <code>null</code>, in which case the per series font settings will apply.
1223 *
1224 * @return The font (possibly <code>null</code>).
1225 *
1226 * @see #setItemLabelFont(Font)
1227 *
1228 * @deprecated This method should no longer be used (as of version 1.0.6).
1229 * It is sufficient to rely on {@link #getSeriesItemLabelFont(int)} and
1230 * {@link #getBaseItemLabelFont()}.
1231 */
1232 public Font getItemLabelFont();
1233
1234 /**
1235 * Sets the item label font for ALL series and sends a
1236 * {@link RendererChangeEvent} to all registered listeners. You can set
1237 * this to <code>null</code> if you prefer to set the font on a per series
1238 * basis.
1239 *
1240 * @param font the font (<code>null</code> permitted).
1241 *
1242 * @see #getItemLabelFont()
1243 *
1244 * @deprecated This method should no longer be used (as of version 1.0.6).
1245 * It is sufficient to rely on {@link #setSeriesItemLabelFont(int,
1246 * Font)} and {@link #setBaseItemLabelFont(Font)}.
1247 */
1248 public void setItemLabelFont(Font font);
1249
1250 /**
1251 * Returns the font for all the item labels in a series.
1252 *
1253 * @param series the series index (zero-based).
1254 *
1255 * @return The font (possibly <code>null</code>).
1256 *
1257 * @see #setSeriesItemLabelFont(int, Font)
1258 */
1259 public Font getSeriesItemLabelFont(int series);
1260
1261 /**
1262 * Sets the item label font for a series and sends a
1263 * {@link RendererChangeEvent} to all registered listeners.
1264 *
1265 * @param series the series index (zero-based).
1266 * @param font the font (<code>null</code> permitted).
1267 *
1268 * @see #getSeriesItemLabelFont(int)
1269 */
1270 public void setSeriesItemLabelFont(int series, Font font);
1271
1272 // FIXME: add setSeriesItemLabelFont(int, Font, boolean) ?
1273
1274 /**
1275 * Returns the base item label font (this is used when no other font
1276 * setting is available).
1277 *
1278 * @return The font (<code>never</code> null).
1279 *
1280 * @see #setBaseItemLabelFont(Font)
1281 */
1282 public Font getBaseItemLabelFont();
1283
1284 /**
1285 * Sets the base item label font and sends a {@link RendererChangeEvent}
1286 * to all registered listeners.
1287 *
1288 * @param font the font (<code>null</code> not permitted).
1289 *
1290 * @see #getBaseItemLabelFont()
1291 */
1292 public void setBaseItemLabelFont(Font font);
1293
1294 // FIXME: add setBaseItemLabelFont(Font, boolean) ?
1295
1296 //// ITEM LABEL PAINT /////////////////////////////////////////////////////
1297
1298 /**
1299 * Returns the paint used to draw an item label.
1300 *
1301 * @param row the row index (zero based).
1302 * @param column the column index (zero based).
1303 *
1304 * @return The paint (never <code>null</code>).
1305 */
1306 public Paint getItemLabelPaint(int row, int column);
1307
1308 /**
1309 * Returns the paint used for all item labels. This may be
1310 * <code>null</code>, in which case the per series paint settings will
1311 * apply.
1312 *
1313 * @return The paint (possibly <code>null</code>).
1314 *
1315 * @see #setItemLabelPaint(Paint)
1316 *
1317 * @deprecated This method should no longer be used (as of version 1.0.6).
1318 * It is sufficient to rely on {@link #getSeriesItemLabelPaint(int)}
1319 * and {@link #getBaseItemLabelPaint()}.
1320 */
1321 public Paint getItemLabelPaint();
1322
1323 /**
1324 * Sets the item label paint for ALL series and sends a
1325 * {@link RendererChangeEvent} to all registered listeners.
1326 *
1327 * @param paint the paint (<code>null</code> permitted).
1328 *
1329 * @see #getItemLabelPaint()
1330 *
1331 * @deprecated This method should no longer be used (as of version 1.0.6).
1332 * It is sufficient to rely on {@link #setSeriesItemLabelPaint(int,
1333 * Paint)} and {@link #setBaseItemLabelPaint(Paint)}.
1334 */
1335 public void setItemLabelPaint(Paint paint);
1336
1337 /**
1338 * Returns the paint used to draw the item labels for a series.
1339 *
1340 * @param series the series index (zero based).
1341 *
1342 * @return The paint (possibly <code>null<code>).
1343 *
1344 * @see #setSeriesItemLabelPaint(int, Paint)
1345 */
1346 public Paint getSeriesItemLabelPaint(int series);
1347
1348 /**
1349 * Sets the item label paint for a series and sends a
1350 * {@link RendererChangeEvent} to all registered listeners.
1351 *
1352 * @param series the series (zero based index).
1353 * @param paint the paint (<code>null</code> permitted).
1354 *
1355 * @see #getSeriesItemLabelPaint(int)
1356 */
1357 public void setSeriesItemLabelPaint(int series, Paint paint);
1358
1359 // FIXME: add setSeriesItemLabelPaint(int, Paint, boolean) ?
1360
1361 /**
1362 * Returns the base item label paint.
1363 *
1364 * @return The paint (never <code>null<code>).
1365 *
1366 * @see #setBaseItemLabelPaint(Paint)
1367 */
1368 public Paint getBaseItemLabelPaint();
1369
1370 /**
1371 * Sets the base item label paint and sends a {@link RendererChangeEvent}
1372 * to all registered listeners.
1373 *
1374 * @param paint the paint (<code>null</code> not permitted).
1375 *
1376 * @see #getBaseItemLabelPaint()
1377 */
1378 public void setBaseItemLabelPaint(Paint paint);
1379
1380 // FIXME: add setBaseItemLabelPaint(Paint, boolean) ?
1381
1382 // POSITIVE ITEM LABEL POSITION...
1383
1384 /**
1385 * Returns the item label position for positive values.
1386 *
1387 * @param row the row index (zero-based).
1388 * @param column the column index (zero-based).
1389 *
1390 * @return The item label position (never <code>null</code>).
1391 */
1392 public ItemLabelPosition getPositiveItemLabelPosition(int row, int column);
1393
1394 /**
1395 * Returns the item label position for positive values in ALL series.
1396 *