Source for org.jfree.chart.renderer.xy.XYItemRenderer

   1: /* ===========================================================
   2:  * JFreeChart : a free chart library for the Java(tm) platform
   3:  * ===========================================================
   4:  *
   5:  * (C) Copyright 2000-2005, 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:  * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
  25:  * in the United States and other countries.]
  26:  *
  27:  * -------------------
  28:  * XYItemRenderer.java
  29:  * -------------------
  30:  * (C) Copyright 2001-2005, 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:  * $Id: XYItemRenderer.java,v 1.16.2.2 2005/11/30 13:54:11 mungady Exp $
  39:  *
  40:  * Changes
  41:  * -------
  42:  * 19-Oct-2001 : Version 1, based on code by Mark Watson (DG);
  43:  * 22-Oct-2001 : Renamed DataSource.java --> Dataset.java etc. (DG);
  44:  * 13-Dec-2001 : Changed return type of drawItem from void --> Shape.  The area
  45:  *               returned can be used as the tooltip region.
  46:  * 23-Jan-2002 : Added DrawInfo parameter to drawItem() method (DG);
  47:  * 28-Mar-2002 : Added a property change listener mechanism.  Now renderers do 
  48:  *               not have to be immutable (DG);
  49:  * 04-Apr-2002 : Added the initialise() method (DG);
  50:  * 09-Apr-2002 : Removed the translated zero from the drawItem method, it can 
  51:  *               be calculated inside the initialise method if it is required.
  52:  *               Added a new getToolTipGenerator() method.  Changed the return 
  53:  *               type for drawItem() to void (DG);
  54:  * 24-May-2002 : Added ChartRenderingInfo the initialise method API (DG);
  55:  * 25-Jun-2002 : Removed redundant import (DG);
  56:  * 20-Aug-2002 : Added get/setURLGenerator methods to interface (DG);
  57:  * 02-Oct-2002 : Fixed errors reported by Checkstyle (DG);
  58:  * 18-Nov-2002 : Added methods for drawing grid lines (DG);
  59:  * 17-Jan-2003 : Moved plot classes into a separate package (DG);
  60:  * 27-Jan-2003 : Added shape lookup table (DG);
  61:  * 05-Jun-2003 : Added domain and range grid bands (sponsored by Focus Computer
  62:  *               Services Ltd) (DG);
  63:  * 27-Jul-2003 : Added getRangeType() to support stacked XY area charts (RA);
  64:  * 16-Sep-2003 : Changed ChartRenderingInfo --> PlotRenderingInfo (DG);
  65:  * 25-Feb-2004 : Replaced CrosshairInfo with CrosshairState.  Renamed 
  66:  *               XYToolTipGenerator --> XYItemLabelGenerator (DG);
  67:  * 26-Feb-2004 : Added lots of new methods (DG);
  68:  * 30-Apr-2004 : Added getRangeExtent() method (DG);
  69:  * 06-May-2004 : Added methods for controlling item label visibility (DG);
  70:  * 13-May-2004 : Removed property change listener mechanism (DG);
  71:  * 18-May-2004 : Added item label font and paint methods (DG);
  72:  * 10-Sep-2004 : Removed redundant getRangeType() method (DG);
  73:  * 06-Oct-2004 : Replaced getRangeExtent() with findRangeBounds() and added 
  74:  *               findDomainBounds (DG);
  75:  * 23-Nov-2004 : Changed drawRangeGridLine() --> drawRangeLine() (DG);
  76:  * 07-Jan-2005 : Removed deprecated method (DG);
  77:  * 24-Feb-2005 : Now extends LegendItemSource (DG);
  78:  * 20-Apr-2005 : Renamed XYLabelGenerator --> XYItemLabelGenerator (DG);
  79:  *
  80:  */
  81: 
  82: package org.jfree.chart.renderer.xy;
  83: 
  84: import java.awt.Font;
  85: import java.awt.Graphics2D;
  86: import java.awt.Paint;
  87: import java.awt.Shape;
  88: import java.awt.Stroke;
  89: import java.awt.geom.Rectangle2D;
  90: 
  91: import org.jfree.chart.LegendItem;
  92: import org.jfree.chart.LegendItemSource;
  93: import org.jfree.chart.annotations.XYAnnotation;
  94: import org.jfree.chart.axis.ValueAxis;
  95: import org.jfree.chart.event.RendererChangeEvent;
  96: import org.jfree.chart.event.RendererChangeListener;
  97: import org.jfree.chart.labels.ItemLabelPosition;
  98: import org.jfree.chart.labels.XYItemLabelGenerator;
  99: import org.jfree.chart.labels.XYSeriesLabelGenerator;
 100: import org.jfree.chart.labels.XYToolTipGenerator;
 101: import org.jfree.chart.plot.CrosshairState;
 102: import org.jfree.chart.plot.Marker;
 103: import org.jfree.chart.plot.PlotRenderingInfo;
 104: import org.jfree.chart.plot.XYPlot;
 105: import org.jfree.chart.urls.XYURLGenerator;
 106: import org.jfree.data.Range;
 107: import org.jfree.data.xy.XYDataset;
 108: import org.jfree.ui.Layer;
 109: 
 110: /**
 111:  * Interface for rendering the visual representation of a single (x, y) item on
 112:  * an {@link XYPlot}.
 113:  * <p>
 114:  * To support cloning charts, it is recommended that renderers implement both 
 115:  * the {@link Cloneable} and <code>PublicCloneable</code> interfaces.
 116:  */
 117: public interface XYItemRenderer extends LegendItemSource {
 118: 
 119:     /**
 120:      * Initialises the renderer then returns the number of 'passes' through the
 121:      * data that the renderer will require (usually just one).  This method 
 122:      * will be called before the first item is rendered, giving the renderer 
 123:      * an opportunity to initialise any state information it wants to maintain.
 124:      * The renderer can do nothing if it chooses.
 125:      *
 126:      * @param g2  the graphics device.
 127:      * @param dataArea  the area inside the axes.
 128:      * @param plot  the plot.
 129:      * @param dataset  the dataset.
 130:      * @param info  an optional info collection object to return data back to 
 131:      *              the caller.
 132:      *
 133:      * @return The number of passes the renderer requires.
 134:      */
 135:     public XYItemRendererState initialise(Graphics2D g2,
 136:                                           Rectangle2D dataArea,
 137:                                           XYPlot plot,
 138:                                           XYDataset dataset,
 139:                                           PlotRenderingInfo info);
 140: 
 141:     /**
 142:      * Returns the number of passes through the data required by the renderer.
 143:      * 
 144:      * @return The pass count.
 145:      */
 146:     public int getPassCount();
 147: 
 148:     /**
 149:      * Returns a boolean that indicates whether or not the specified item 
 150:      * should be drawn (this is typically used to hide an entire series).
 151:      * 
 152:      * @param series  the series index.
 153:      * @param item  the item index.
 154:      * 
 155:      * @return A boolean.
 156:      */
 157:     public boolean getItemVisible(int series, int item);
 158:     
 159:     /**
 160:      * Returns a boolean that indicates whether or not the specified series 
 161:      * should be drawn (this is typically used to hide an entire series).
 162:      * 
 163:      * @param series  the series index.
 164:      * 
 165:      * @return A boolean.
 166:      */
 167:     public boolean isSeriesVisible(int series);
 168:     
 169:     /**
 170:      * Returns the flag that controls the visibility of ALL series.  This flag 
 171:      * overrides the per series and default settings - you must set it to 
 172:      * <code>null</code> if you want the other settings to apply.
 173:      * 
 174:      * @return The flag (possibly <code>null</code>).
 175:      */
 176:     public Boolean getSeriesVisible();
 177:     
 178:     /**
 179:      * Sets the flag that controls the visibility of ALL series and sends a 
 180:      * {@link RendererChangeEvent} to all registered listeners.  This flag 
 181:      * overrides the per series and default settings - you must set it to 
 182:      * <code>null</code> if you want the other settings to apply.
 183:      * 
 184:      * @param visible  the flag (<code>null</code> permitted).
 185:      */
 186:     public void setSeriesVisible(Boolean visible);
 187:     
 188:     /**
 189:      * Sets the flag that controls the visibility of ALL series and sends a 
 190:      * {@link RendererChangeEvent} to all registered listeners.  This flag 
 191:      * overrides the per series and default settings - you must set it to 
 192:      * <code>null</code> if you want the other settings to apply.
 193:      * 
 194:      * @param visible  the flag (<code>null</code> permitted).
 195:      * @param notify  notify listeners?
 196:      */
 197:     public void setSeriesVisible(Boolean visible, boolean notify);
 198:     
 199:     /**
 200:      * Returns the flag that controls whether a series is visible.
 201:      *
 202:      * @param series  the series index (zero-based).
 203:      *
 204:      * @return The flag (possibly <code>null</code>).
 205:      */
 206:     public Boolean getSeriesVisible(int series);
 207:     
 208:     /**
 209:      * Sets the flag that controls whether a series is visible and sends a 
 210:      * {@link RendererChangeEvent} to all registered listeners.
 211:      *
 212:      * @param series  the series index (zero-based).
 213:      * @param visible  the flag (<code>null</code> permitted).
 214:      */
 215:     public void setSeriesVisible(int series, Boolean visible);
 216:     
 217:     /**
 218:      * Sets the flag that controls whether a series is visible and, if 
 219:      * requested, sends a {@link RendererChangeEvent} to all registered 
 220:      * listeners.
 221:      * 
 222:      * @param series  the series index.
 223:      * @param visible  the flag (<code>null</code> permitted).
 224:      * @param notify  notify listeners?
 225:      */
 226:     public void setSeriesVisible(int series, Boolean visible, boolean notify);
 227: 
 228:     /**
 229:      * Returns the base visibility for all series.
 230:      *
 231:      * @return The base visibility.
 232:      */
 233:     public boolean getBaseSeriesVisible();
 234: 
 235:     /**
 236:      * Sets the base visibility and sends a {@link RendererChangeEvent} to all
 237:      * registered listeners.
 238:      *
 239:      * @param visible  the flag.
 240:      */
 241:     public void setBaseSeriesVisible(boolean visible);
 242:     
 243:     /**
 244:      * Sets the base visibility and, if requested, sends 
 245:      * a {@link RendererChangeEvent} to all registered listeners.
 246:      * 
 247:      * @param visible  the visibility.
 248:      * @param notify  notify listeners?
 249:      */
 250:     public void setBaseSeriesVisible(boolean visible, boolean notify);
 251: 
 252:     // SERIES VISIBLE IN LEGEND (not yet respected by all renderers)
 253:     
 254:     /**
 255:      * Returns <code>true</code> if the series should be shown in the legend,
 256:      * and <code>false</code> otherwise.
 257:      * 
 258:      * @param series  the series index.
 259:      * 
 260:      * @return A boolean.
 261:      */
 262:     public boolean isSeriesVisibleInLegend(int series);
 263:     
 264:     /**
 265:      * Returns the flag that controls the visibility of ALL series in the 
 266:      * legend.  This flag overrides the per series and default settings - you 
 267:      * must set it to <code>null</code> if you want the other settings to 
 268:      * apply.
 269:      * 
 270:      * @return The flag (possibly <code>null</code>).
 271:      */
 272:     public Boolean getSeriesVisibleInLegend();
 273:     
 274:     /**
 275:      * Sets the flag that controls the visibility of ALL series in the legend 
 276:      * and sends a {@link RendererChangeEvent} to all registered listeners.  
 277:      * This flag overrides the per series and default settings - you must set 
 278:      * it to <code>null</code> if you want the other settings to apply.
 279:      * 
 280:      * @param visible  the flag (<code>null</code> permitted).
 281:      */
 282:     public void setSeriesVisibleInLegend(Boolean visible);
 283:     
 284:     /**
 285:      * Sets the flag that controls the visibility of ALL series in the legend 
 286:      * and sends a {@link RendererChangeEvent} to all registered listeners.  
 287:      * This flag overrides the per series and default settings - you must set 
 288:      * it to <code>null</code> if you want the other settings to apply.
 289:      * 
 290:      * @param visible  the flag (<code>null</code> permitted).
 291:      * @param notify  notify listeners?
 292:      */
 293:     public void setSeriesVisibleInLegend(Boolean visible, boolean notify);
 294:     
 295:     /**
 296:      * Returns the flag that controls whether a series is visible in the 
 297:      * legend.  This method returns only the "per series" settings - to 
 298:      * incorporate the override and base settings as well, you need to use the 
 299:      * {@link #isSeriesVisibleInLegend(int)} method.
 300:      *
 301:      * @param series  the series index (zero-based).
 302:      *
 303:      * @return The flag (possibly <code>null</code>).
 304:      */
 305:     public Boolean getSeriesVisibleInLegend(int series);
 306:     
 307:     /**
 308:      * Sets the flag that controls whether a series is visible in the legend 
 309:      * and sends a {@link RendererChangeEvent} to all registered listeners.
 310:      *
 311:      * @param series  the series index (zero-based).
 312:      * @param visible  the flag (<code>null</code> permitted).
 313:      */
 314:     public void setSeriesVisibleInLegend(int series, Boolean visible);
 315:     
 316:     /**
 317:      * Sets the flag that controls whether a series is visible in the legend
 318:      * and, if requested, sends a {@link RendererChangeEvent} to all registered 
 319:      * listeners.
 320:      * 
 321:      * @param series  the series index.
 322:      * @param visible  the flag (<code>null</code> permitted).
 323:      * @param notify  notify listeners?
 324:      */
 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:     public boolean getBaseSeriesVisibleInLegend();
 334: 
 335:     /**
 336:      * Sets the base visibility in the legend and sends a 
 337:      * {@link RendererChangeEvent} to all registered listeners.
 338:      *
 339:      * @param visible  the flag.
 340:      */
 341:     public void setBaseSeriesVisibleInLegend(boolean visible);
 342:     
 343:     /**
 344:      * Sets the base visibility in the legend and, if requested, sends 
 345:      * a {@link RendererChangeEvent} to all registered listeners.
 346:      * 
 347:      * @param visible  the visibility.
 348:      * @param notify  notify listeners?
 349:      */
 350:     public void setBaseSeriesVisibleInLegend(boolean visible, boolean notify);
 351: 
 352:     // PAINT
 353:     
 354:     /**
 355:      * Returns the paint used to fill data items as they are drawn.
 356:      *
 357:      * @param row  the row (or series) index (zero-based).
 358:      * @param column  the column (or category) index (zero-based).
 359:      *
 360:      * @return The paint (never <code>null</code>).
 361:      */
 362:     public Paint getItemPaint(int row, int column);
 363: 
 364:     /**
 365:      * Returns the paint used to fill an item drawn by the renderer.
 366:      *
 367:      * @param series  the series index (zero-based).
 368:      *
 369:      * @return The paint (never <code>null</code>).
 370:      */
 371:     public Paint getSeriesPaint(int series);
 372: 
 373:     /**
 374:      * Sets the paint to be used for ALL series, and sends a 
 375:      * {@link RendererChangeEvent} to all registered listeners.  If this is 
 376:      * <code>null</code>, the renderer will use the paint for the series.
 377:      * 
 378:      * @param paint  the paint (<code>null</code> permitted).
 379:      */
 380:     public void setPaint(Paint paint);
 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:     public void setSeriesPaint(int series, Paint paint);
 390:     
 391:     /**
 392:      * Returns the base paint.
 393:      *
 394:      * @return The base paint (never <code>null</code>).
 395:      */
 396:     public Paint getBasePaint();
 397: 
 398:     /**
 399:      * Sets the base paint and sends a {@link RendererChangeEvent} to all 
 400:      * registered listeners.
 401:      *
 402:      * @param paint  the paint (<code>null</code> not permitted).
 403:      */
 404:     public void setBasePaint(Paint paint);
 405:     
 406:     // OUTLINE PAINT
 407:     
 408:     /**
 409:      * Returns the paint used to outline data items as they are drawn.
 410:      *
 411:      * @param row  the row (or series) index (zero-based).
 412:      * @param column  the column (or category) index (zero-based).
 413:      *
 414:      * @return The paint (never <code>null</code>).
 415:      */
 416:     public Paint getItemOutlinePaint(int row, int column);
 417: 
 418:     /**
 419:      * Returns the paint used to outline an item drawn by the renderer.
 420:      *
 421:      * @param series  the series (zero-based index).
 422:      *
 423:      * @return The paint (never <code>null</code>).
 424:      */
 425:     public Paint getSeriesOutlinePaint(int series);
 426: 
 427:     /**
 428:      * Sets the paint used for a series outline and sends a 
 429:      * {@link RendererChangeEvent} to all registered listeners.
 430:      *
 431:      * @param series  the series index (zero-based).
 432:      * @param paint  the paint (<code>null</code> permitted).
 433:      */
 434:     public void setSeriesOutlinePaint(int series, Paint paint);
 435: 
 436:     /**
 437:      * Sets the outline paint for ALL series (optional).
 438:      * 
 439:      * @param paint  the paint (<code>null</code> permitted).
 440:      */
 441:     public void setOutlinePaint(Paint paint);
 442:     
 443:     /**
 444:      * Returns the base outline paint.
 445:      *
 446:      * @return The paint (never <code>null</code>).
 447:      */
 448:     public Paint getBaseOutlinePaint();
 449: 
 450:     /**
 451:      * Sets the base outline paint and sends a {@link RendererChangeEvent} to
 452:      * all registered listeners.
 453:      *
 454:      * @param paint  the paint (<code>null</code> not permitted).
 455:      */
 456:     public void setBaseOutlinePaint(Paint paint);
 457: 
 458:     // STROKE
 459:     
 460:     /**
 461:      * Returns the stroke used to draw data items.
 462:      *
 463:      * @param row  the row (or series) index (zero-based).
 464:      * @param column  the column (or category) index (zero-based).
 465:      *
 466:      * @return The stroke (never <code>null</code>).
 467:      */
 468:     public Stroke getItemStroke(int row, int column);
 469: 
 470:     /**
 471:      * Returns the stroke used to draw the items in a series.
 472:      *
 473:      * @param series  the series (zero-based index).
 474:      *
 475:      * @return The stroke (never <code>null</code>).
 476:      */
 477:     public Stroke getSeriesStroke(int series);
 478:     
 479:     /**
 480:      * Sets the stroke for ALL series and sends a {@link RendererChangeEvent} 
 481:      * to all registered listeners.
 482:      * 
 483:      * @param stroke  the stroke (<code>null</code> permitted).
 484:      */
 485:     public void setStroke(Stroke stroke);
 486: 
 487:     /**
 488:      * Sets the stroke used for a series and sends a 
 489:      * {@link RendererChangeEvent} to all registered listeners.
 490:      *
 491:      * @param series  the series index (zero-based).
 492:      * @param stroke  the stroke (<code>null</code> permitted).
 493:      */
 494:     public void setSeriesStroke(int series, Stroke stroke);
 495: 
 496:     /**
 497:      * Returns the base stroke.
 498:      *
 499:      * @return The base stroke (never <code>null</code>).
 500:      */
 501:     public Stroke getBaseStroke();
 502: 
 503:     /**
 504:      * Sets the base stroke.
 505:      *
 506:      * @param stroke  the stroke (<code>null</code> not permitted).
 507:      */
 508:     public void setBaseStroke(Stroke stroke);
 509:     
 510:     // OUTLINE STROKE 
 511:     
 512:     /**
 513:      * Returns the stroke used to outline data items.  The default 
 514:      * implementation passes control to the getSeriesOutlineStroke method.
 515:      * You can override this method if you require different behaviour.
 516:      *
 517:      * @param row  the row (or series) index (zero-based).
 518:      * @param column  the column (or category) index (zero-based).
 519:      *
 520:      * @return The stroke (never <code>null</code>).
 521:      */
 522:     public Stroke getItemOutlineStroke(int row, int column);
 523: 
 524:     /**
 525:      * Returns the stroke used to outline the items in a series.
 526:      *
 527:      * @param series  the series (zero-based index).
 528:      *
 529:      * @return The stroke (never <code>null</code>).
 530:      */
 531:     public Stroke getSeriesOutlineStroke(int series);
 532: 
 533:     /**
 534:      * Sets the outline stroke for ALL series and sends a 
 535:      * {@link RendererChangeEvent} to all registered listeners.
 536:      *
 537:      * @param stroke  the stroke (<code>null</code> permitted).
 538:      */
 539:     public void setOutlineStroke(Stroke stroke);
 540:     
 541:     /**
 542:      * Sets the outline stroke used for a series and sends a 
 543:      * {@link RendererChangeEvent} to all registered listeners.
 544:      *
 545:      * @param series  the series index (zero-based).
 546:      * @param stroke  the stroke (<code>null</code> permitted).
 547:      */
 548:     public void setSeriesOutlineStroke(int series, Stroke stroke);
 549:     
 550:     /**
 551:      * Returns the base outline stroke.
 552:      *
 553:      * @return The stroke (never <code>null</code>).
 554:      */
 555:     public Stroke getBaseOutlineStroke();
 556: 
 557:     /**
 558:      * Sets the base outline stroke and sends a {@link RendererChangeEvent} to
 559:      * all registered listeners.
 560:      *
 561:      * @param stroke  the stroke (<code>null</code> not permitted).
 562:      */
 563:     public void setBaseOutlineStroke(Stroke stroke);
 564:     
 565:     // SHAPE
 566:     
 567:     /**
 568:      * Returns a shape used to represent a data item.
 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 shape (never <code>null</code>).
 574:      */
 575:     public Shape getItemShape(int row, int column);
 576: 
 577:     /**
 578:      * Returns a shape used to represent the items in a series.
 579:      *
 580:      * @param series  the series (zero-based index).
 581:      *
 582:      * @return The shape (never <code>null</code>).
 583:      */
 584:     public Shape getSeriesShape(int series);
 585:     /**
 586:      * Sets the shape for ALL series (optional) and sends a 
 587:      * {@link RendererChangeEvent} to all registered listeners.
 588:      * 
 589:      * @param shape  the shape (<code>null</code> permitted).
 590:      */
 591:     public void setShape(Shape shape);
 592:     
 593:     /**
 594:      * Sets the shape used for a series and sends a {@link RendererChangeEvent}
 595:      * to all registered listeners.
 596:      *
 597:      * @param series  the series index (zero-based).
 598:      * @param shape  the shape (<code>null</code> permitted).
 599:      */
 600:     public void setSeriesShape(int series, Shape shape);
 601:     
 602:     /**
 603:      * Returns the base shape.
 604:      *
 605:      * @return The shape (never <code>null</code>).
 606:      */
 607:     public Shape getBaseShape();
 608: 
 609:     /**
 610:      * Sets the base shape and sends a {@link RendererChangeEvent} to all 
 611:      * registered listeners.
 612:      *
 613:      * @param shape  the shape (<code>null</code> not permitted).
 614:      */
 615:     public void setBaseShape(Shape shape);
 616:     
 617:     // ITEM LABELS VISIBLE 
 618:     
 619:     /**
 620:      * Returns <code>true</code> if an item label is visible, and 
 621:      * <code>false</code> otherwise.
 622:      * 
 623:      * @param row  the row index (zero-based).
 624:      * @param column  the column index (zero-based).
 625:      * 
 626:      * @return A boolean.
 627:      */
 628:     public boolean isItemLabelVisible(int row, int column);
 629:     
 630:     /**
 631:      * Returns <code>true</code> if the item labels for a series are visible,
 632:      * and <code>false</code> otherwise.
 633:      * 
 634:      * @param series  the series index (zero-based).
 635:      * 
 636:      * @return A boolean.
 637:      */    
 638:     public boolean isSeriesItemLabelsVisible(int series);
 639:     
 640:     /**
 641:      * Sets a flag that controls whether or not the item labels for ALL series
 642:      * are visible.
 643:      * 
 644:      * @param visible  the flag.
 645:      */
 646:     public void setItemLabelsVisible(boolean visible);
 647: 
 648:     /**
 649:      * Sets a flag that controls whether or not the item labels for ALL series
 650:      * are visible.
 651:      * 
 652:      * @param visible  the flag (<code>null</code> permitted).
 653:      */
 654:     public void setItemLabelsVisible(Boolean visible);
 655: 
 656:     /**
 657:      * Sets the visibility of item labels for ALL series and, if requested, 
 658:      * sends a {@link RendererChangeEvent} to all registered listeners.
 659:      * 
 660:      * @param visible  a flag that controls whether or not the item labels are
 661:      *                 visible (<code>null</code> permitted).
 662:      * @param notify  a flag that controls whether or not listeners are 
 663:      *                notified.
 664:      */
 665:     public void setItemLabelsVisible(Boolean visible, boolean notify);
 666: 
 667:     /**
 668:      * Sets a flag that controls the visibility of the item labels for a series.
 669:      * 
 670:      * @param series  the series index (zero-based).
 671:      * @param visible  the flag.
 672:      */
 673:     public void setSeriesItemLabelsVisible(int series, boolean visible);
 674:     
 675:     /**
 676:      * Sets a flag that controls the visibility of the item labels for a series.
 677:      * 
 678:      * @param series  the series index (zero-based).
 679:      * @param visible  the flag (<code>null</code> permitted).
 680:      */
 681:     public void setSeriesItemLabelsVisible(int series, Boolean visible);
 682:     
 683:     /**
 684:      * Sets the visibility of item labels for a series and, if requested, 
 685:      * sends a {@link RendererChangeEvent} to all registered listeners.
 686:      * 
 687:      * @param series  the series index (zero-based).
 688:      * @param visible  the visible flag.
 689:      * @param notify  a flag that controls whether or not listeners are 
 690:      *                notified.
 691:      */
 692:     public void setSeriesItemLabelsVisible(int series, Boolean visible, 
 693:                                            boolean notify);
 694:     
 695:     /**
 696:      * Returns the base setting for item label visibility.
 697:      * 
 698:      * @return A flag (possibly <code>null</code>).
 699:      */
 700:     public Boolean getBaseItemLabelsVisible();
 701:     
 702:     /**
 703:      * Sets the base flag that controls whether or not item labels are visible.
 704:      * 
 705:      * @param visible  the flag.
 706:      */
 707:     public void setBaseItemLabelsVisible(boolean visible);
 708:     
 709:     /**
 710:      * Sets the base setting for item label visibility.
 711:      * 
 712:      * @param visible  the flag (<code>null</code> permitted).
 713:      */
 714:     public void setBaseItemLabelsVisible(Boolean visible);
 715:     
 716:     /**
 717:      * Sets the base visibility for item labels and, if requested, sends a 
 718:      * {@link RendererChangeEvent} to all registered listeners.
 719:      * 
 720:      * @param visible  the visibility flag.
 721:      * @param notify  a flag that controls whether or not listeners are
 722:      *                notified.
 723:      */
 724:     public void setBaseItemLabelsVisible(Boolean visible, boolean notify);
 725: 
 726:     // ITEM LABEL GENERATOR
 727: 
 728:     /**
 729:      * Returns the item label generator for a data item.
 730:      *
 731:      * @param row  the row index (zero based).
 732:      * @param column  the column index (zero based).
 733:      *
 734:      * @return The generator (possibly <code>null</code>).
 735:      */
 736:     public XYItemLabelGenerator getItemLabelGenerator(int row, int column);
 737:     
 738:     /**
 739:      * Returns the item label generator for a series.
 740:      *
 741:      * @param series  the series index (zero based).
 742:      *
 743:      * @return The generator (possibly <code>null</code>).
 744:      */
 745:     public XYItemLabelGenerator getSeriesItemLabelGenerator(int series);
 746: 
 747:     /**
 748:      * Sets the item label generator for ALL series and sends a 
 749:      * {@link RendererChangeEvent} to all registered listeners.
 750:      *
 751:      * @param generator  the generator (<code>null</code> permitted).
 752:      */
 753:     public void setItemLabelGenerator(XYItemLabelGenerator generator);
 754: 
 755:     /**
 756:      * Sets the item label generator for a series and sends a 
 757:      * {@link RendererChangeEvent} to all registered listeners.
 758:      *
 759:      * @param series  the series index (zero based).
 760:      * @param generator  the generator (<code>null</code> permitted).
 761:      */
 762:     public void setSeriesItemLabelGenerator(int series, 
 763:                                             XYItemLabelGenerator generator);
 764: 
 765:     /**
 766:      * Returns the base item label generator.
 767:      *
 768:      * @return The generator (possibly <code>null</code>).
 769:      */
 770:     public XYItemLabelGenerator getBaseItemLabelGenerator();
 771: 
 772:     /**
 773:      * Sets the base item label generator and sends a 
 774:      * {@link RendererChangeEvent} to all registered listeners.
 775:      *
 776:      * @param generator  the generator (<code>null</code> permitted).
 777:      */
 778:     public void setBaseItemLabelGenerator(XYItemLabelGenerator generator);
 779: 
 780:     // TOOL TIP GENERATOR
 781: 
 782:     /**
 783:      * Returns the tool tip generator for a data item.
 784:      *
 785:      * @param row  the row index (zero based).
 786:      * @param column  the column index (zero based).
 787:      *
 788:      * @return The generator (possibly <code>null</code>).
 789:      */
 790:     public XYToolTipGenerator getToolTipGenerator(int row, int column);
 791:     
 792:     /**
 793:      * Returns the tool tip generator for a series.
 794:      *
 795:      * @param series  the series index (zero based).
 796:      *
 797:      * @return The generator (possibly <code>null</code>).
 798:      */
 799:     public XYToolTipGenerator getSeriesToolTipGenerator(int series);
 800: 
 801:     /**
 802:      * Sets the tool tip generator for ALL series and sends a 
 803:      * {@link RendererChangeEvent} to all registered listeners.
 804:      *
 805:      * @param generator  the generator (<code>null</code> permitted).
 806:      */
 807:     public void setToolTipGenerator(XYToolTipGenerator generator);
 808: 
 809:     /**
 810:      * Sets the tool tip generator for a series and sends a 
 811:      * {@link RendererChangeEvent} to all registered listeners.
 812:      *
 813:      * @param series  the series index (zero based).
 814:      * @param generator  the generator (<code>null</code> permitted).
 815:      */
 816:     public void setSeriesToolTipGenerator(int series,               
 817:                                           XYToolTipGenerator generator);
 818: 
 819:     /**
 820:      * Returns the base tool tip generator.
 821:      *
 822:      * @return The generator (possibly <code>null</code>).
 823:      */
 824:     public XYToolTipGenerator getBaseToolTipGenerator();
 825: 
 826:     /**
 827:      * Sets the base tool tip generator and sends a {@link RendererChangeEvent}
 828:      * to all registered listeners.
 829:      *
 830:      * @param generator  the generator (<code>null</code> permitted).
 831:      */
 832:     public void setBaseToolTipGenerator(XYToolTipGenerator generator);
 833: 
 834:     // URL GENERATOR
 835:     
 836:     /**
 837:      * Returns the URL generator for HTML image maps.
 838:      *
 839:      * @return The URL generator (possibly null).
 840:      */
 841:     public XYURLGenerator getURLGenerator();
 842: 
 843:     /**
 844:      * Sets the URL generator for HTML image maps.
 845:      *
 846:      * @param urlGenerator the URL generator (null permitted).
 847:      */
 848:     public void setURLGenerator(XYURLGenerator urlGenerator);
 849: 
 850:     //// ITEM LABEL FONT ///////////////////////////////////////////////////////
 851: 
 852:     /**
 853:      * Returns the font for an item label.
 854:      * 
 855:      * @param row  the row index (zero-based).
 856:      * @param column  the column index (zero-based).
 857:      * 
 858:      * @return The font (never <code>null</code>).
 859:      */
 860:     public Font getItemLabelFont(int row, int column);
 861: 
 862:     /**
 863:      * Returns the font used for all item labels.  This may be 
 864:      * <code>null</code>, in which case the per series font settings will apply.
 865:      * 
 866:      * @return The font (possibly <code>null</code>).
 867:      */
 868:     public Font getItemLabelFont();
 869:     
 870:     /**
 871:      * Sets the item label font for ALL series and sends a 
 872:      * {@link RendererChangeEvent} to all registered listeners.  You can set 
 873:      * this to <code>null</code> if you prefer to set the font on a per series 
 874:      * basis.
 875:      * 
 876:      * @param font  the font (<code>null</code> permitted).
 877:      */
 878:     public void setItemLabelFont(Font font);
 879:     
 880:     /**
 881:      * Returns the font for all the item labels in a series.
 882:      * 
 883:      * @param series  the series index (zero-based).
 884:      * 
 885:      * @return The font (possibly <code>null</code>).
 886:      */
 887:     public Font getSeriesItemLabelFont(int series);
 888: 
 889:     /**
 890:      * Sets the item label font for a series and sends a 
 891:      * {@link RendererChangeEvent} to all registered listeners.  
 892:      * 
 893:      * @param series  the series index (zero-based).
 894:      * @param font  the font (<code>null</code> permitted).
 895:      */
 896:     public void setSeriesItemLabelFont(int series, Font font);
 897: 
 898:     /**
 899:      * Returns the base item label font (this is used when no other font 
 900:      * setting is available).
 901:      * 
 902:      * @return The font (<code>never</code> null).
 903:      */
 904:     public Font getBaseItemLabelFont();
 905: 
 906:     /**
 907:      * Sets the base item label font and sends a {@link RendererChangeEvent} 
 908:      * to all registered listeners.  
 909:      * 
 910:      * @param font  the font (<code>null</code> not permitted).
 911:      */
 912:     public void setBaseItemLabelFont(Font font);
 913: 
 914:     //// ITEM LABEL PAINT  /////////////////////////////////////////////////////
 915: 
 916:     /**
 917:      * Returns the paint used to draw an item label.
 918:      * 
 919:      * @param row  the row index (zero based).
 920:      * @param column  the column index (zero based).
 921:      * 
 922:      * @return The paint (never <code>null</code>).
 923:      */
 924:     public Paint getItemLabelPaint(int row, int column);
 925:     
 926:     /**
 927:      * Returns the paint used for all item labels.  This may be 
 928:      * <code>null</code>, in which case the per series paint settings will 
 929:      * apply.
 930:      * 
 931:      * @return The paint (possibly <code>null</code>).
 932:      */
 933:     public Paint getItemLabelPaint();
 934: 
 935:     /**
 936:      * Sets the item label paint for ALL series and sends a 
 937:      * {@link RendererChangeEvent} to all registered listeners.
 938:      * 
 939:      * @param paint  the paint (<code>null</code> permitted).
 940:      */
 941:     public void setItemLabelPaint(Paint paint);
 942:     
 943:     /**
 944:      * Returns the paint used to draw the item labels for a series.
 945:      * 
 946:      * @param series  the series index (zero based).
 947:      * 
 948:      * @return The paint (possibly <code>null<code>).
 949:      */
 950:     public Paint getSeriesItemLabelPaint(int series);
 951: 
 952:     /**
 953:      * Sets the item label paint for a series and sends a 
 954:      * {@link RendererChangeEvent} to all registered listeners.
 955:      * 
 956:      * @param series  the series (zero based index).
 957:      * @param paint  the paint (<code>null</code> permitted).
 958:      */
 959:     public void setSeriesItemLabelPaint(int series, Paint paint);
 960:         
 961:     /**
 962:      * Returns the base item label paint.
 963:      * 
 964:      * @return The paint (never <code>null<code>).
 965:      */
 966:     public Paint getBaseItemLabelPaint();
 967: 
 968:     /**
 969:      * Sets the base item label paint and sends a {@link RendererChangeEvent} 
 970:      * to all registered listeners.
 971:      * 
 972:      * @param paint  the paint (<code>null</code> not permitted).
 973:      */
 974:     public void setBaseItemLabelPaint(Paint paint);
 975:     
 976:     // POSITIVE ITEM LABEL POSITION...
 977: 
 978:     /**
 979:      * Returns the item label position for positive values.
 980:      * 
 981:      * @param row  the row index (zero-based).
 982:      * @param column  the column index (zero-based).
 983:      * 
 984:      * @return The item label position (never <code>null</code>).
 985:      */
 986:     public ItemLabelPosition getPositiveItemLabelPosition(int row, int column);
 987: 
 988:     /**
 989:      * Returns the item label position for positive values in ALL series.
 990:      * 
 991:      * @return The item label position (possibly <code>null</code>).
 992:      */
 993:     public ItemLabelPosition getPositiveItemLabelPosition();
 994: 
 995:     /**
 996:      * Sets the item label position for positive values in ALL series, and 
 997:      * sends a {@link RendererChangeEvent} to all registered listeners.  You 
 998:      * need to set this to <code>null</code> to expose the settings for 
 999:      * individual series.
1000:      * 
1001:      * @param position  the position (<code>null</code> permitted).
1002:      */
1003:     public void setPositiveItemLabelPosition(ItemLabelPosition position);
1004:     
1005:     /**
1006:      * Sets the positive item label position for ALL series and (if requested)
1007:      * sends a {@link RendererChangeEvent} to all registered listeners.
1008:      * 
1009:      * @param position  the position (<code>null</code> permitted).
1010:      * @param notify  notify registered listeners?
1011:      */
1012:     public void setPositiveItemLabelPosition(ItemLabelPosition position, 
1013:                                              boolean notify);
1014: 
1015:     /**
1016:      * Returns the item label position for all positive values in a series.
1017:      * 
1018:      * @param series  the series index (zero-based).
1019:      * 
1020:      * @return The item label position (never <code>null</code>).
1021:      */
1022:     public ItemLabelPosition getSeriesPositiveItemLabelPosition(int series);
1023:     
1024:     /**
1025:      * Sets the item label position for all positive values in a series and 
1026:      * sends a {@link RendererChangeEvent} to all registered listeners.
1027:      * 
1028:      * @param series  the series index (zero-based).
1029:      * @param position  the position (<code>null</code> permitted).
1030:      */
1031:     public void setSeriesPositiveItemLabelPosition(int series, 
1032:                                                    ItemLabelPosition position);
1033: 
1034:     /**
1035:      * Sets the item label position for all positive values in a series and (if
1036:      * requested) sends a {@link RendererChangeEvent} to all registered 
1037:      * listeners.
1038:      * 
1039:      * @param series  the series index (zero-based).
1040:      * @param position  the position (<code>null</code> permitted).
1041:      * @param notify  notify registered listeners?
1042:      */
1043:     public void setSeriesPositiveItemLabelPosition(int series, 
1044:                                                    ItemLabelPosition position, 
1045:                                                    boolean notify);
1046: 
1047:     /**
1048:      * Returns the base positive item label position.
1049:      * 
1050:      * @return The position (never <code>null</code>).
1051:      */
1052:     public ItemLabelPosition getBasePositiveItemLabelPosition();
1053: 
1054:     /**
1055:      * Sets the base positive item label position.
1056:      * 
1057:      * @param position  the position (<code>null</code> not permitted).
1058:      */
1059:     public void setBasePositiveItemLabelPosition(ItemLabelPosition position);
1060:     
1061:     /**
1062:      * Sets the base positive item label position and, if requested, sends a 
1063:      * {@link RendererChangeEvent} to all registered listeners.
1064:      * 
1065:      * @param position  the position (<code>null</code> not permitted).
1066:      * @param notify  notify registered listeners?
1067:      */
1068:     public void setBasePositiveItemLabelPosition(ItemLabelPosition position, 
1069:                                                  boolean notify);
1070: 
1071:     // NEGATIVE ITEM LABEL POSITION...
1072: 
1073:     /**
1074:      * Returns the item label position for negative values.  This method can be
1075:      * overridden to provide customisation of the item label position for 
1076:      * individual data items.
1077:      * 
1078:      * @param row  the row index (zero-based).
1079:      * @param column  the column (zero-based).
1080:      * 
1081:      * @return The item label position (never <code>null</code>).
1082:      */
1083:     public ItemLabelPosition getNegativeItemLabelPosition(int row, int column);
1084: 
1085:     /**
1086:      * Returns the item label position for negative values in ALL series.
1087:      * 
1088:      * @return The item label position (possibly <code>null</code>).
1089:      */
1090:     public ItemLabelPosition getNegativeItemLabelPosition();
1091: 
1092:     /**
1093:      * Sets the item label position for negative values in ALL series, and 
1094:      * sends a {@link RendererChangeEvent} to all registered listeners.  You 
1095:      * need to set this to <code>null</code> to expose the settings for 
1096:      * individual series.
1097:      * 
1098:      * @param position  the position (<code>null</code> permitted).
1099:      */
1100:     public void setNegativeItemLabelPosition(ItemLabelPosition position);
1101:     
1102:     /**
1103:      * Sets the item label position for negative values in ALL series and (if
1104:      * requested) sends a {@link RendererChangeEvent} to all registered 
1105:      * listeners.  
1106:      * 
1107:      * @param position  the position (<code>null</code> permitted).
1108:      * @param notify  notify registered listeners?
1109:      */
1110:     public void setNegativeItemLabelPosition(ItemLabelPosition position, 
1111:                                              boolean notify);
1112: 
1113:     /**
1114:      * Returns the item label position for all negative values in a series.
1115:      * 
1116:      * @param series  the series index (zero-based).
1117:      * 
1118:      * @return The item label position (never <code>null</code>).
1119:      */
1120:     public ItemLabelPosition getSeriesNegativeItemLabelPosition(int series);
1121: 
1122:     /**
1123:      * Sets the item label position for negative values in a series and sends a 
1124:      * {@link RendererChangeEvent} to all registered listeners.
1125:      * 
1126:      * @param series  the series index (zero-based).
1127:      * @param position  the position (<code>null</code> permitted).
1128:      */
1129:     public void setSeriesNegativeItemLabelPosition(int series, 
1130:                                                    ItemLabelPosition position);
1131:     
1132:     /**
1133:      * Sets the item label position for negative values in a series and (if 
1134:      * requested) sends a {@link RendererChangeEvent} to all registered 
1135:      * listeners.
1136:      * 
1137:      * @param series  the series index (zero-based).
1138:      * @param position  the position (<code>null</code> permitted).
1139:      * @param notify  notify registered listeners?
1140:      */
1141:     public void setSeriesNegativeItemLabelPosition(int series, 
1142:                                                    ItemLabelPosition position, 
1143:                                                    boolean notify);
1144: 
1145:     /**
1146:      * Returns the base item label position for negative values.
1147:      * 
1148:      * @return The position (never <code>null</code>).
1149:      */
1150:     public ItemLabelPosition getBaseNegativeItemLabelPosition();
1151: 
1152:     /**
1153:      * Sets the base item label position for negative values and sends a 
1154:      * {@link RendererChangeEvent} to all registered listeners.
1155:      * 
1156:      * @param position  the position (<code>null</code> not permitted).
1157:      */
1158:     public void setBaseNegativeItemLabelPosition(ItemLabelPosition position);
1159:     
1160:     /**
1161:      * Sets the base negative item label position and, if requested, sends a 
1162:      * {@link RendererChangeEvent} to all registered listeners.
1163:      * 
1164:      * @param position  the position (<code>null</code> not permitted).
1165:      * @param notify  notify registered listeners?
1166:      */
1167:     public void setBaseNegativeItemLabelPosition(ItemLabelPosition position, 
1168:                                                  boolean notify);
1169: 
1170:     /**
1171:      * Adds an annotation and sends a {@link RendererChangeEvent} to all 
1172:      * registered listeners.  The annotation is added to the foreground
1173:      * layer.
1174:      * 
1175:      * @param annotation  the annotation (<code>null</code> not permitted).
1176:      */
1177:     public void addAnnotation(XYAnnotation annotation);
1178: 
1179:     /**
1180:      * Adds an annotation to the specified layer.
1181:      * 
1182:      * @param annotation  the annotation (<code>null</code> not permitted).
1183:      * @param layer  the layer (<code>null</code> not permitted).
1184:      */
1185:     public void addAnnotation(XYAnnotation annotation, Layer layer);
1186: 
1187:     /**
1188:      * Removes the specified annotation and sends a {@link RendererChangeEvent}
1189:      * to all registered listeners.
1190:      * 
1191:      * @param annotation  the annotation to remove (<code>null</code> not 
1192:      *                    permitted).
1193:      * 
1194:      * @return A boolean to indicate whether or not the annotation was 
1195:      *         successfully removed.
1196:      */
1197:     public boolean removeAnnotation(XYAnnotation annotation);
1198:     
1199:     /**
1200:      * Removes all annotations and sends a {@link RendererChangeEvent}
1201:      * to all registered listeners.
1202:      */
1203:     public void removeAnnotations();
1204:     
1205:     /**
1206:      * Draws all the annotations for the specified layer.
1207:      * 
1208:      * @param g2  the graphics device.
1209:      * @param dataArea  the data area.
1210:      * @param domainAxis  the domain axis.
1211:      * @param rangeAxis  the range axis.
1212:      * @param layer  the layer.
1213:      * @param info  the plot rendering info.
1214:      */
1215:     public void drawAnnotations(Graphics2D g2, 
1216:                                 Rectangle2D dataArea, 
1217:                                 ValueAxis domainAxis, 
1218:                                 ValueAxis rangeAxis, 
1219:                                 Layer layer, 
1220:                                 PlotRenderingInfo info);
1221:     
1222:     /**
1223:      * Called for each item to be plotted.
1224:      * <p>
1225:      * The {@link XYPlot} can make multiple passes through the dataset, 
1226:      * depending on the value returned by the renderer's initialise() method.
1227:      *
1228:      * @param g2  the graphics device.
1229:      * @param state  the renderer state.
1230:      * @param dataArea  the area within which the data is being rendered.
1231:      * @param info  collects drawing info.
1232:      * @param plot  the plot (can be used to obtain standard color 
1233:      *              information etc).
1234:      * @param domainAxis  the domain axis.
1235:      * @param rangeAxis  the range axis.
1236:      * @param dataset  the dataset.
1237:      * @param series  the series index (zero-based).
1238:      * @param item  the item index (zero-based).
1239:      * @param crosshairState  crosshair information for the plot 
1240:      *                        (<code>null</code> permitted).
1241:      * @param pass  the pass index.
1242:      */
1243:     public void drawItem(Graphics2D g2,
1244:                          XYItemRendererState state,
1245:                          Rectangle2D dataArea,
1246:                          PlotRenderingInfo info,
1247:                          XYPlot plot,
1248:                          ValueAxis domainAxis,
1249:                          ValueAxis rangeAxis,
1250:                          XYDataset dataset,
1251:                          int series,
1252:                          int item,
1253:                          CrosshairState crosshairState,
1254:                          int pass);
1255: 
1256:     /**
1257:      * Returns a legend item for a series from a dataset.
1258:      *
1259:      * @param datasetIndex  the dataset index.
1260:      * @param series  the series (zero-based index).
1261:      *
1262:      * @return The legend item (possibly <code>null</code>).
1263:      */
1264:     public LegendItem getLegendItem(int datasetIndex, int series);
1265: 
1266:     /**
1267:      * Returns the legend item label generator.
1268:      * 
1269:      * @return The legend item label generator (never <code>null</code>).
1270:      */
1271:     public XYSeriesLabelGenerator getLegendItemLabelGenerator();
1272:     
1273:     /**
1274:      * Sets the legend item label generator.
1275:      * 
1276:      * @param generator  the generator (<code>null</code> not permitted).
1277:      */
1278:     public void setLegendItemLabelGenerator(XYSeriesLabelGenerator generator);
1279: 
1280:         /**
1281:      * Fills a band between two values on the axis.  This can be used to color 
1282:      * bands between the grid lines.
1283:      *
1284:      * @param g2  the graphics device.
1285:      * @param plot  the plot.
1286:      * @param axis  the domain axis.
1287:      * @param dataArea  the data area.
1288:      * @param start  the start value.
1289:      * @param end  the end value.
1290:      */
1291:     public void fillDomainGridBand(Graphics2D g2,
1292:                                    XYPlot plot,
1293:                                    ValueAxis axis,
1294:                                    Rectangle2D dataArea,
1295:                                    double start, double end);
1296: 
1297:     /**
1298:      * Fills a band between two values on the range axis.  This can be used to 
1299:      * color bands between the grid lines.
1300:      *
1301:      * @param g2  the graphics device.
1302:      * @param plot  the plot.
1303:      * @param axis  the range axis.
1304:      * @param dataArea  the data area.
1305:      * @param start  the start value.
1306:      * @param end  the end value.
1307:      */
1308:     public void fillRangeGridBand(Graphics2D g2,
1309:                                   XYPlot plot,
1310:                                   ValueAxis axis,
1311:                                   Rectangle2D dataArea,
1312:                                   double start, double end);
1313: 
1314:     /**
1315:      * Draws a grid line against the domain axis.
1316:      *
1317:      * @param g2  the graphics device.
1318:      * @param plot  the plot.
1319:      * @param axis  the value axis.
1320:      * @param dataArea  the area for plotting data (not yet adjusted for any 
1321:      *                  3D effect).
1322:      * @param value  the value.
1323:      */
1324:     public void drawDomainGridLine(Graphics2D g2,
1325:                                    XYPlot plot,
1326:                                    ValueAxis axis,
1327:                                    Rectangle2D dataArea,
1328:                                    double value);
1329: 
1330:     /**
1331:      * Draws a grid line against the range axis.
1332:      *
1333:      * @param g2  the graphics device.
1334:      * @param plot  the plot.
1335:      * @param axis  the value axis.
1336:      * @param dataArea  the area for plotting data (not yet adjusted for any 
1337:      *                  3D effect).
1338:      * @param value  the value.
1339:      * @param paint  the paint (<code>null</code> not permitted).
1340:      * @param stroke  the stroke (<code>null</code> not permitted).
1341:      */
1342:     public void drawRangeLine(Graphics2D g2,
1343:                               XYPlot plot,
1344:                               ValueAxis axis,
1345:                               Rectangle2D dataArea,
1346:                               double value,
1347:                               Paint paint,
1348:                               Stroke stroke);
1349: 
1350:     /**
1351:      * Draws the specified <code>marker</code> against the domain axis.
1352:      *
1353:      * @param g2  the graphics device.
1354:      * @param plot  the plot.
1355:      * @param axis  the value axis.
1356:      * @param marker  the marker.
1357:      * @param dataArea  the axis data area.
1358:      */
1359:     public void drawDomainMarker(Graphics2D g2,
1360:                                  XYPlot plot,
1361:                                  ValueAxis axis,
1362:                                  Marker marker,
1363:                                  Rectangle2D dataArea);
1364: 
1365:     /**
1366:      * Draws a horizontal line across the chart to represent a 'range marker'.
1367:      *
1368:      * @param g2  the graphics device.
1369:      * @param plot  the plot.
1370:      * @param axis  the value axis.
1371:      * @param marker  the marker line.
1372:      * @param dataArea  the axis data area.
1373:      */
1374:     public void drawRangeMarker(Graphics2D g2,
1375:                                 XYPlot plot,
1376:                                 ValueAxis axis,
1377:                                 Marker marker,
1378:                                 Rectangle2D dataArea);
1379: 
1380:     /**
1381:      * Returns the plot that this renderer has been assigned to.
1382:      *
1383:      * @return The plot.
1384:      */
1385:     public XYPlot getPlot();
1386: 
1387:     /**
1388:      * Sets the plot that this renderer is assigned to.  This method will be 
1389:      * called by the plot class...you do not need to call it yourself.
1390:      *
1391:      * @param plot  the plot.
1392:      */
1393:     public void setPlot(XYPlot plot);
1394:     
1395:     /**
1396:      * Returns the lower and upper bounds (range) of the x-values in the 
1397:      * specified dataset.
1398:      * 
1399:      * @param dataset  the dataset (<code>null</code> permitted).
1400:      * 
1401:      * @return The range.
1402:      */
1403:     public Range findDomainBounds(XYDataset dataset);
1404:     
1405:     /**
1406:      * Returns the lower and upper bounds (range) of the y-values in the
1407:      * specified dataset.  The implementation of this method will take 
1408:      * into account the presentation used by the renderers (for example,
1409:      * a renderer that "stacks" values will return a bigger range than
1410:      * a renderer that doesn't.
1411:      * 
1412:      * @param dataset  the dataset (<code>null</code> permitted).
1413:      * 
1414:      * @return The range (or <code>null</code> if the dataset is 
1415:      *         <code>null</code> or empty).
1416:      */
1417:     public Range findRangeBounds(XYDataset dataset);
1418:     
1419:     /**
1420:      * Add a renderer change listener.
1421:      * 
1422:      * @param listener  the listener.
1423:      */
1424:     public void addChangeListener(RendererChangeListener listener);
1425: 
1426:     /**
1427:      * Removes a change listener.
1428:      * 
1429:      * @param listener  the listener.
1430:      */
1431:     public void removeChangeListener(RendererChangeListener listener);
1432:     
1433: }