Source for org.jfree.chart.renderer.category.CategoryItemRenderer

   1: /* ===========================================================
   2:  * JFreeChart : a free chart library for the Java(tm) platform
   3:  * ===========================================================
   4:  *
   5:  * (C) Copyright 2000-2007, 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:  * CategoryItemRenderer.java
  29:  * -------------------------
  30:  *
  31:  * (C) Copyright 2001-2007, by Object Refinery Limited and Contributors.
  32:  *
  33:  * Original Author:  David Gilbert (for Object Refinery Limited);
  34:  * Contributor(s):   Mark Watson (www.markwatson.com);
  35:  *
  36:  * $Id: CategoryItemRenderer.java,v 1.10.2.2 2007/02/20 15:38:56 mungady Exp $
  37:  *
  38:  * Changes
  39:  * -------
  40:  * 23-Oct-2001 : Version 1 (DG);
  41:  * 16-Jan-2002 : Renamed HorizontalCategoryItemRenderer.java 
  42:  *               --> CategoryItemRenderer.java (DG);
  43:  * 05-Feb-2002 : Changed return type of the drawCategoryItem method from void 
  44:  *               to Shape, as part of the tooltips implementation (DG)        
  45:  *
  46:  *               NOTE (30-May-2002) : this has subsequently been changed back 
  47:  *               to void, tooltips are now collected along with entities in 
  48:  *               ChartRenderingInfo (DG);
  49:  *
  50:  * 14-Mar-2002 : Added the initialise method, and changed all bar plots to use 
  51:  *               this renderer (DG);
  52:  * 23-May-2002 : Added ChartRenderingInfo to the initialise method (DG);
  53:  * 29-May-2002 : Added the getAxisArea(Rectangle2D) method (DG);
  54:  * 06-Jun-2002 : Updated Javadoc comments (DG);
  55:  * 26-Jun-2002 : Added range axis to the initialise method (DG);
  56:  * 24-Sep-2002 : Added getLegendItem() method (DG);
  57:  * 23-Oct-2002 : Added methods to get/setToolTipGenerator (DG);
  58:  * 05-Nov-2002 : Replaced references to CategoryDataset with TableDataset (DG);
  59:  * 06-Nov-2002 : Added the domain axis to the drawCategoryItem method.  Renamed
  60:  *               drawCategoryItem() --> drawItem() (DG);
  61:  * 20-Nov-2002 : Changed signature of drawItem() method to reflect use of 
  62:  *               TableDataset (DG);
  63:  * 26-Nov-2002 : Replaced the isStacked() method with the getRangeType() 
  64:  *               method (DG);
  65:  * 08-Jan-2003 : Changed getSeriesCount() --> getRowCount() and
  66:  *               getCategoryCount() --> getColumnCount() (DG);
  67:  * 09-Jan-2003 : Changed name of grid-line methods (DG);
  68:  * 21-Jan-2003 : Merged TableDataset with CategoryDataset (DG);
  69:  * 10-Apr-2003 : Changed CategoryDataset to KeyedValues2DDataset in 
  70:  *               drawItem() method (DG);
  71:  * 29-Apr-2003 : Eliminated Renderer interface (DG);
  72:  * 02-Sep-2003 : Fix for bug 790407 (DG);
  73:  * 16-Sep-2003 : Changed ChartRenderingInfo --> PlotRenderingInfo (DG);
  74:  * 20-Oct-2003 : Added setOutlinePaint() method (DG);
  75:  * 06-Feb-2004 : Added missing methods, and moved deprecated methods (DG);
  76:  * 19-Feb-2004 : Added extra setXXXLabelsVisible() methods (DG);
  77:  * 29-Apr-2004 : Changed Integer --> int in initialise() method (DG);
  78:  * 18-May-2004 : Added methods for item label paint (DG);
  79:  * 05-Nov-2004 : Added getPassCount() method and 'pass' parameter to drawItem() 
  80:  *               method (DG);
  81:  * 07-Jan-2005 : Renamed getRangeExtent() --> findRangeBounds (DG);
  82:  * 11-Jan-2005 : Removed deprecated code in preparation for 1.0.0 release (DG);
  83:  * 23-Feb-2005 : Now extends LegendItemSource (DG);
  84:  * 20-Apr-2005 : Renamed CategoryLabelGenerator 
  85:  *               --> CategoryItemLabelGenerator (DG);
  86:  * 20-May-2005 : Added drawDomainMarker() method (DG);
  87:  * ------------- JFREECHART 1.0.x ---------------------------------------------
  88:  * 20-Feb-2007 : Updated API docs (DG);
  89:  * 
  90:  */
  91: 
  92: package org.jfree.chart.renderer.category;
  93: 
  94: import java.awt.Font;
  95: import java.awt.Graphics2D;
  96: import java.awt.Paint;
  97: import java.awt.Shape;
  98: import java.awt.Stroke;
  99: import java.awt.geom.Rectangle2D;
 100: 
 101: import org.jfree.chart.LegendItem;
 102: import org.jfree.chart.LegendItemSource;
 103: import org.jfree.chart.axis.CategoryAxis;
 104: import org.jfree.chart.axis.ValueAxis;
 105: import org.jfree.chart.event.RendererChangeEvent;
 106: import org.jfree.chart.event.RendererChangeListener;
 107: import org.jfree.chart.labels.CategoryItemLabelGenerator;
 108: import org.jfree.chart.labels.CategoryToolTipGenerator;
 109: import org.jfree.chart.labels.ItemLabelPosition;
 110: import org.jfree.chart.plot.CategoryMarker;
 111: import org.jfree.chart.plot.CategoryPlot;
 112: import org.jfree.chart.plot.Marker;
 113: import org.jfree.chart.plot.PlotRenderingInfo;
 114: import org.jfree.chart.urls.CategoryURLGenerator;
 115: import org.jfree.data.Range;
 116: import org.jfree.data.category.CategoryDataset;
 117: 
 118: /**
 119:  * A plug-in object that is used by the {@link CategoryPlot} class to display 
 120:  * individual data items from a {@link CategoryDataset}.
 121:  * <p>
 122:  * This interface defines the methods that must be provided by all renderers.  
 123:  * If you are implementing a custom renderer, you should consider extending the
 124:  * {@link AbstractCategoryItemRenderer} class.
 125:  * <p>
 126:  * Most renderer attributes are defined using a "three layer" approach.  When 
 127:  * looking up an attribute (for example, the outline paint) the renderer first 
 128:  * checks to see if there is a setting (in layer 0) that applies to ALL items 
 129:  * that the renderer draws.  If there is, that setting is used, but if it is 
 130:  * <code>null</code> the renderer looks up the next layer, which contains 
 131:  * "per series" settings for the attribute (many attributes are defined on a
 132:  * per series basis, so this is the layer that is most commonly used).  If the 
 133:  * layer 1 setting is <code>null</code>, the renderer will look up the final 
 134:  * layer, which provides a default or "base" setting.  Some attributes allow 
 135:  * the base setting to be <code>null</code>, while other attributes enforce 
 136:  * non-<code>null</code> values.
 137:  */
 138: 
 139: public interface CategoryItemRenderer extends LegendItemSource {
 140: 
 141:     /**
 142:      * Returns the number of passes through the dataset required by the 
 143:      * renderer.  Usually this will be one, but some renderers may use
 144:      * a second or third pass to overlay items on top of things that were
 145:      * drawn in an earlier pass.
 146:      * 
 147:      * @return The pass count.
 148:      */
 149:     public int getPassCount();
 150: 
 151:     /**
 152:      * Returns the plot that the renderer has been assigned to (where 
 153:      * <code>null</code> indicates that the renderer is not currently assigned 
 154:      * to a plot).
 155:      *
 156:      * @return The plot (possibly <code>null</code>).
 157:      * 
 158:      * @see #setPlot(CategoryPlot)
 159:      */
 160:     public CategoryPlot getPlot();
 161: 
 162:     /**
 163:      * Sets the plot that the renderer has been assigned to.  This method is 
 164:      * usually called by the {@link CategoryPlot}, in normal usage you 
 165:      * shouldn't need to call this method directly.
 166:      *
 167:      * @param plot  the plot (<code>null</code> not permitted).
 168:      * 
 169:      * @see #getPlot()
 170:      */
 171:     public void setPlot(CategoryPlot plot);
 172: 
 173:     /**
 174:      * Adds a change listener.
 175:      * 
 176:      * @param listener  the listener.
 177:      * 
 178:      * @see #removeChangeListener(RendererChangeListener)
 179:      */
 180:     public void addChangeListener(RendererChangeListener listener);
 181:     
 182:     /**
 183:      * Removes a change listener.
 184:      * 
 185:      * @param listener  the listener.
 186:      * 
 187:      * @see #addChangeListener(RendererChangeListener)
 188:      */
 189:     public void removeChangeListener(RendererChangeListener listener);
 190: 
 191:     /**
 192:      * Returns the range of values the renderer requires to display all the 
 193:      * items from the specified dataset.
 194:      * 
 195:      * @param dataset  the dataset (<code>null</code> permitted).
 196:      * 
 197:      * @return The range (or <code>null</code> if the dataset is 
 198:      *         <code>null</code> or empty).
 199:      */
 200:     public Range findRangeBounds(CategoryDataset dataset);
 201:     
 202:     /**
 203:      * Initialises the renderer.  This method will be called before the first 
 204:      * item is rendered, giving the renderer an opportunity to initialise any 
 205:      * state information it wants to maintain. The renderer can do nothing if 
 206:      * it chooses.
 207:      *
 208:      * @param g2  the graphics device.
 209:      * @param dataArea  the area inside the axes.
 210:      * @param plot  the plot.
 211:      * @param rendererIndex  the renderer index.
 212:      * @param info  collects chart rendering information for return to caller.
 213:      * 
 214:      * @return A state object (maintains state information relevant to one 
 215:      *         chart drawing).
 216:      */
 217:     public CategoryItemRendererState initialise(Graphics2D g2,
 218:                                                 Rectangle2D dataArea,
 219:                                                 CategoryPlot plot,
 220:                                                 int rendererIndex,
 221:                                                 PlotRenderingInfo info);
 222:                            
 223:     /**
 224:      * Returns a boolean that indicates whether or not the specified item 
 225:      * should be drawn (this is typically used to hide an entire series).
 226:      * 
 227:      * @param series  the series index.
 228:      * @param item  the item index.
 229:      * 
 230:      * @return A boolean.
 231:      */
 232:     public boolean getItemVisible(int series, int item);
 233:     
 234:     /**
 235:      * Returns a boolean that indicates whether or not the specified series 
 236:      * should be drawn (this is typically used to hide an entire series).
 237:      * 
 238:      * @param series  the series index.
 239:      * 
 240:      * @return A boolean.
 241:      */
 242:     public boolean isSeriesVisible(int series);
 243:     
 244:     /**
 245:      * Returns the flag that controls the visibility of ALL series.  This flag 
 246:      * overrides the per series and default settings - you must set it to 
 247:      * <code>null</code> if you want the other settings to apply.
 248:      * 
 249:      * @return The flag (possibly <code>null</code>).
 250:      * 
 251:      * @see #setSeriesVisible(Boolean)
 252:      */
 253:     public Boolean getSeriesVisible();
 254:     
 255:     /**
 256:      * Sets the flag that controls the visibility of ALL series and sends a 
 257:      * {@link RendererChangeEvent} to all registered listeners.  This flag 
 258:      * overrides the per series and default settings - you must set it to 
 259:      * <code>null</code> if you want the other settings to apply.
 260:      * 
 261:      * @param visible  the flag (<code>null</code> permitted).
 262:      * 
 263:      * @see #getSeriesVisible()
 264:      */
 265:     public void setSeriesVisible(Boolean visible);
 266:     
 267:     /**
 268:      * Sets the flag that controls the visibility of ALL series and sends a 
 269:      * {@link RendererChangeEvent} to all registered listeners.  This flag 
 270:      * overrides the per series and default settings - you must set it to 
 271:      * <code>null</code> if you want the other settings to apply.
 272:      * 
 273:      * @param visible  the flag (<code>null</code> permitted).
 274:      * @param notify  notify listeners?
 275:      * 
 276:      * @see #getSeriesVisible()
 277:      */
 278:     public void setSeriesVisible(Boolean visible, boolean notify);
 279:     
 280:     /**
 281:      * Returns the flag that controls whether a series is visible.
 282:      *
 283:      * @param series  the series index (zero-based).
 284:      *
 285:      * @return The flag (possibly <code>null</code>).
 286:      * 
 287:      * @see #setSeriesVisible(int, Boolean)
 288:      */
 289:     public Boolean getSeriesVisible(int series);
 290:     
 291:     /**
 292:      * Sets the flag that controls whether a series is visible and sends a 
 293:      * {@link RendererChangeEvent} to all registered listeners.
 294:      *
 295:      * @param series  the series index (zero-based).
 296:      * @param visible  the flag (<code>null</code> permitted).
 297:      * 
 298:      * @see #getSeriesVisible(int)
 299:      */
 300:     public void setSeriesVisible(int series, Boolean visible);
 301:     
 302:     /**
 303:      * Sets the flag that controls whether a series is visible and, if 
 304:      * requested, sends a {@link RendererChangeEvent} to all registered 
 305:      * listeners.
 306:      * 
 307:      * @param series  the series index.
 308:      * @param visible  the flag (<code>null</code> permitted).
 309:      * @param notify  notify listeners?
 310:      * 
 311:      * @see #getSeriesVisible(int)
 312:      */
 313:     public void setSeriesVisible(int series, Boolean visible, boolean notify);
 314: 
 315:     /**
 316:      * Returns the base visibility for all series.
 317:      *
 318:      * @return The base visibility.
 319:      * 
 320:      * @see #setBaseSeriesVisible(boolean)
 321:      */
 322:     public boolean getBaseSeriesVisible();
 323: 
 324:     /**
 325:      * Sets the base visibility and sends a {@link RendererChangeEvent} to all
 326:      * registered listeners.
 327:      *
 328:      * @param visible  the flag.
 329:      * 
 330:      * @see #getBaseSeriesVisible()
 331:      */
 332:     public void setBaseSeriesVisible(boolean visible);
 333:     
 334:     /**
 335:      * Sets the base visibility and, if requested, sends 
 336:      * a {@link RendererChangeEvent} to all registered listeners.
 337:      * 
 338:      * @param visible  the visibility.
 339:      * @param notify  notify listeners?
 340:      * 
 341:      * @see #getBaseSeriesVisible()
 342:      */
 343:     public void setBaseSeriesVisible(boolean visible, boolean notify);
 344: 
 345:     // SERIES VISIBLE IN LEGEND (not yet respected by all renderers)
 346:     
 347:     /**
 348:      * Returns <code>true</code> if the series should be shown in the legend,
 349:      * and <code>false</code> otherwise.
 350:      * 
 351:      * @param series  the series index.
 352:      * 
 353:      * @return A boolean.
 354:      */
 355:     public boolean isSeriesVisibleInLegend(int series);
 356:     
 357:     /**
 358:      * Returns the flag that controls the visibility of ALL series in the 
 359:      * legend.  This flag overrides the per series and default settings - you 
 360:      * must set it to <code>null</code> if you want the other settings to 
 361:      * apply.
 362:      * 
 363:      * @return The flag (possibly <code>null</code>).
 364:      * 
 365:      * @see #setSeriesVisibleInLegend(Boolean)
 366:      */
 367:     public Boolean getSeriesVisibleInLegend();
 368:     
 369:     /**
 370:      * Sets the flag that controls the visibility of ALL series in the legend 
 371:      * and sends a {@link RendererChangeEvent} to all registered listeners.  
 372:      * This flag overrides the per series and default settings - you must set 
 373:      * it to <code>null</code> if you want the other settings to apply.
 374:      * 
 375:      * @param visible  the flag (<code>null</code> permitted).
 376:      * 
 377:      * @see #getSeriesVisibleInLegend()
 378:      */
 379:     public void setSeriesVisibleInLegend(Boolean visible);
 380:     
 381:     /**
 382:      * Sets the flag that controls the visibility of ALL series in the legend 
 383:      * and sends a {@link RendererChangeEvent} to all registered listeners.  
 384:      * This flag overrides the per series and default settings - you must set 
 385:      * it to <code>null</code> if you want the other settings to apply.
 386:      * 
 387:      * @param visible  the flag (<code>null</code> permitted).
 388:      * @param notify  notify listeners?
 389:      * 
 390:      * @see #getSeriesVisibleInLegend()
 391:      */
 392:     public void setSeriesVisibleInLegend(Boolean visible, boolean notify);
 393:     
 394:     /**
 395:      * Returns the flag that controls whether a series is visible in the 
 396:      * legend.  This method returns only the "per series" settings - to 
 397:      * incorporate the override and base settings as well, you need to use the 
 398:      * {@link #isSeriesVisibleInLegend(int)} method.
 399:      *
 400:      * @param series  the series index (zero-based).
 401:      *
 402:      * @return The flag (possibly <code>null</code>).
 403:      * 
 404:      * @see #setSeriesVisibleInLegend(int, Boolean)
 405:      */
 406:     public Boolean getSeriesVisibleInLegend(int series);
 407:     
 408:     /**
 409:      * Sets the flag that controls whether a series is visible in the legend 
 410:      * and sends a {@link RendererChangeEvent} to all registered listeners.
 411:      *
 412:      * @param series  the series index (zero-based).
 413:      * @param visible  the flag (<code>null</code> permitted).
 414:      * 
 415:      * @see #getSeriesVisibleInLegend(int)
 416:      */
 417:     public void setSeriesVisibleInLegend(int series, Boolean visible);
 418:     
 419:     /**
 420:      * Sets the flag that controls whether a series is visible in the legend
 421:      * and, if requested, sends a {@link RendererChangeEvent} to all registered 
 422:      * listeners.
 423:      * 
 424:      * @param series  the series index.
 425:      * @param visible  the flag (<code>null</code> permitted).
 426:      * @param notify  notify listeners?
 427:      * 
 428:      * @see #getSeriesVisibleInLegend(int)
 429:      */
 430:     public void setSeriesVisibleInLegend(int series, Boolean visible, 
 431:                                          boolean notify);
 432: 
 433:     /**
 434:      * Returns the base visibility in the legend for all series.
 435:      *
 436:      * @return The base visibility.
 437:      * 
 438:      * @see #setBaseSeriesVisibleInLegend(boolean)
 439:      */
 440:     public boolean getBaseSeriesVisibleInLegend();
 441: 
 442:     /**
 443:      * Sets the base visibility in the legend and sends a 
 444:      * {@link RendererChangeEvent} to all registered listeners.
 445:      *
 446:      * @param visible  the flag.
 447:      * 
 448:      * @see #getBaseSeriesVisibleInLegend()
 449:      */
 450:     public void setBaseSeriesVisibleInLegend(boolean visible);
 451:     
 452:     /**
 453:      * Sets the base visibility in the legend and, if requested, sends 
 454:      * a {@link RendererChangeEvent} to all registered listeners.
 455:      * 
 456:      * @param visible  the visibility.
 457:      * @param notify  notify listeners?
 458:      * 
 459:      * @see #getBaseSeriesVisibleInLegend()
 460:      */
 461:     public void setBaseSeriesVisibleInLegend(boolean visible, boolean notify);
 462: 
 463: 
 464:     //// PAINT /////////////////////////////////////////////////////////////////
 465:     
 466:     /**
 467:      * Returns the paint used to fill data items as they are drawn.
 468:      *
 469:      * @param row  the row (or series) index (zero-based).
 470:      * @param column  the column (or category) index (zero-based).
 471:      *
 472:      * @return The paint (never <code>null</code>).
 473:      */
 474:     public Paint getItemPaint(int row, int column);
 475: 
 476:     // FIXME: Why no getPaint() method?  Probably just an oversight.
 477:     
 478:     /**
 479:      * Sets the paint to be used for ALL series, and sends a 
 480:      * {@link RendererChangeEvent} to all registered listeners.  If this is 
 481:      * <code>null</code>, the renderer will use the paint for the series.
 482:      * 
 483:      * @param paint  the paint (<code>null</code> permitted).
 484:      */
 485:     public void setPaint(Paint paint);
 486:     
 487:     /**
 488:      * Returns the paint used to fill an item drawn by the renderer.
 489:      *
 490:      * @param series  the series index (zero-based).
 491:      *
 492:      * @return The paint (never <code>null</code>).
 493:      * 
 494:      * @see #setSeriesPaint(int, Paint)
 495:      */
 496:     public Paint getSeriesPaint(int series);
 497: 
 498:     /**
 499:      * Sets the paint used for a series and sends a {@link RendererChangeEvent}
 500:      * to all registered listeners.
 501:      *
 502:      * @param series  the series index (zero-based).
 503:      * @param paint  the paint (<code>null</code> permitted).
 504:      * 
 505:      * @see #getSeriesPaint(int)
 506:      */
 507:     public void setSeriesPaint(int series, Paint paint);
 508:     
 509:     /**
 510:      * Returns the base paint.
 511:      *
 512:      * @return The base paint (never <code>null</code>).
 513:      * 
 514:      * @see #setBasePaint(Paint)
 515:      */
 516:     public Paint getBasePaint();
 517: 
 518:     /**
 519:      * Sets the base paint and sends a {@link RendererChangeEvent} to all 
 520:      * registered listeners.
 521:      *
 522:      * @param paint  the paint (<code>null</code> not permitted).
 523:      * 
 524:      * @see #getBasePaint()
 525:      */
 526:     public void setBasePaint(Paint paint);
 527:     
 528:     //// OUTLINE PAINT /////////////////////////////////////////////////////////
 529:     
 530:     /**
 531:      * Returns the paint used to outline data items as they are drawn.
 532:      *
 533:      * @param row  the row (or series) index (zero-based).
 534:      * @param column  the column (or category) index (zero-based).
 535:      *
 536:      * @return The paint (never <code>null</code>).
 537:      */
 538:     public Paint getItemOutlinePaint(int row, int column);
 539: 
 540:     // FIXME: Why no getOutlinePaint?  Probably just an oversight.
 541:     
 542:     /**
 543:      * Sets the outline paint for ALL series (optional).
 544:      * 
 545:      * @param paint  the paint (<code>null</code> permitted).
 546:      */
 547:     public void setOutlinePaint(Paint paint);
 548:     
 549:     /**
 550:      * Returns the paint used to outline an item drawn by the renderer.
 551:      *
 552:      * @param series  the series (zero-based index).
 553:      *
 554:      * @return The paint (never <code>null</code>).
 555:      * 
 556:      * @see #setSeriesOutlinePaint(int, Paint)
 557:      */
 558:     public Paint getSeriesOutlinePaint(int series);
 559: 
 560:     /**
 561:      * Sets the paint used for a series outline and sends a 
 562:      * {@link RendererChangeEvent} to all registered listeners.
 563:      *
 564:      * @param series  the series index (zero-based).
 565:      * @param paint  the paint (<code>null</code> permitted).
 566:      * 
 567:      * @see #getSeriesOutlinePaint(int)
 568:      */
 569:     public void setSeriesOutlinePaint(int series, Paint paint);
 570: 
 571:     /**
 572:      * Returns the base outline paint.
 573:      *
 574:      * @return The paint (never <code>null</code>).
 575:      * 
 576:      * @see #setBaseOutlinePaint(Paint)
 577:      */
 578:     public Paint getBaseOutlinePaint();
 579: 
 580:     /**
 581:      * Sets the base outline paint and sends a {@link RendererChangeEvent} to 
 582:      * all registered listeners.
 583:      *
 584:      * @param paint  the paint (<code>null</code> not permitted).
 585:      * 
 586:      * @see #getBaseOutlinePaint()
 587:      */
 588:     public void setBaseOutlinePaint(Paint paint);
 589: 
 590:     //// STROKE ////////////////////////////////////////////////////////////////
 591:     
 592:     /**
 593:      * Returns the stroke used to draw data items.
 594:      *
 595:      * @param row  the row (or series) index (zero-based).
 596:      * @param column  the column (or category) index (zero-based).
 597:      *
 598:      * @return The stroke (never <code>null</code>).
 599:      */
 600:     public Stroke getItemStroke(int row, int column);
 601: 
 602:     // FIXME: Why no getStroke?  Probably just an oversight.
 603: 
 604:     /**
 605:      * Sets the stroke for ALL series and sends a {@link RendererChangeEvent} 
 606:      * to all registered listeners.
 607:      * 
 608:      * @param stroke  the stroke (<code>null</code> permitted).
 609:      */
 610:     public void setStroke(Stroke stroke);
 611: 
 612:     /**
 613:      * Returns the stroke used to draw the items in a series.
 614:      *
 615:      * @param series  the series (zero-based index).
 616:      *
 617:      * @return The stroke (never <code>null</code>).
 618:      * 
 619:      * @see #setSeriesStroke(int, Stroke)
 620:      */
 621:     public Stroke getSeriesStroke(int series);
 622:     
 623:     /**
 624:      * Sets the stroke used for a series and sends a 
 625:      * {@link RendererChangeEvent} to all registered listeners.
 626:      *
 627:      * @param series  the series index (zero-based).
 628:      * @param stroke  the stroke (<code>null</code> permitted).
 629:      * 
 630:      * @see #getSeriesStroke(int)
 631:      */
 632:     public void setSeriesStroke(int series, Stroke stroke);
 633: 
 634:     /**
 635:      * Returns the base stroke.
 636:      *
 637:      * @return The base stroke (never <code>null</code>).
 638:      * 
 639:      * @see #setBaseStroke(Stroke)
 640:      */
 641:     public Stroke getBaseStroke();
 642: 
 643:     /**
 644:      * Sets the base stroke and sends a {@link RendererChangeEvent} to all
 645:      * registered listeners.
 646:      *
 647:      * @param stroke  the stroke (<code>null</code> not permitted).
 648:      * 
 649:      * @see #getBaseStroke()
 650:      */
 651:     public void setBaseStroke(Stroke stroke);
 652:     
 653:     //// OUTLINE STROKE ////////////////////////////////////////////////////////
 654:     
 655:     /**
 656:      * Returns the stroke used to outline data items.
 657:      * <p>
 658:      * The default implementation passes control to the getSeriesOutlineStroke 
 659:      * method.  You can override this method if you require different behaviour.
 660:      *
 661:      * @param row  the row (or series) index (zero-based).
 662:      * @param column  the column (or category) index (zero-based).
 663:      *
 664:      * @return The stroke (never <code>null</code>).
 665:      */
 666:     public Stroke getItemOutlineStroke(int row, int column);
 667: 
 668:     // FIXME: Why no getOutlineStroke?  Probably just an oversight.
 669: 
 670:     /**
 671:      * Sets the outline stroke for ALL series and sends a 
 672:      * {@link RendererChangeEvent} to all registered listeners.
 673:      *
 674:      * @param stroke  the stroke (<code>null</code> permitted).
 675:      */
 676:     public void setOutlineStroke(Stroke stroke);
 677:     
 678:     /**
 679:      * Returns the stroke used to outline the items in a series.
 680:      *
 681:      * @param series  the series (zero-based index).
 682:      *
 683:      * @return The stroke (never <code>null</code>).
 684:      * 
 685:      * @see #setSeriesOutlineStroke(int, Stroke)
 686:      */
 687:     public Stroke getSeriesOutlineStroke(int series);
 688: 
 689:     /**
 690:      * Sets the outline stroke used for a series and sends a 
 691:      * {@link RendererChangeEvent} to all registered listeners.
 692:      *
 693:      * @param series  the series index (zero-based).
 694:      * @param stroke  the stroke (<code>null</code> permitted).
 695:      * 
 696:      * @see #getSeriesOutlineStroke(int)
 697:      */
 698:     public void setSeriesOutlineStroke(int series, Stroke stroke);
 699:     
 700:     /**
 701:      * Returns the base outline stroke.
 702:      *
 703:      * @return The stroke (never <code>null</code>).
 704:      * 
 705:      * @see #setBaseOutlineStroke(Stroke)
 706:      */
 707:     public Stroke getBaseOutlineStroke();
 708: 
 709:     /**
 710:      * Sets the base outline stroke and sends a {@link RendererChangeEvent} to 
 711:      * all registered listeners.
 712:      *
 713:      * @param stroke  the stroke (<code>null</code> not permitted).
 714:      * 
 715:      * @see #getBaseOutlineStroke()
 716:      */
 717:     public void setBaseOutlineStroke(Stroke stroke);
 718:     
 719:     //// SHAPE /////////////////////////////////////////////////////////////////
 720:     
 721:     /**
 722:      * Returns a shape used to represent a data item.
 723:      *
 724:      * @param row  the row (or series) index (zero-based).
 725:      * @param column  the column (or category) index (zero-based).
 726:      *
 727:      * @return The shape (never <code>null</code>).
 728:      */
 729:     public Shape getItemShape(int row, int column);
 730: 
 731:     // FIXME: Why no getShape()?  Probably just an oversight.
 732: 
 733:     /**
 734:      * Sets the shape for ALL series (optional) and sends a 
 735:      * {@link RendererChangeEvent} to all registered listeners.
 736:      * 
 737:      * @param shape  the shape (<code>null</code> permitted).
 738:      */
 739:     public void setShape(Shape shape);
 740:     
 741:     /**
 742:      * Returns a shape used to represent the items in a series.
 743:      *
 744:      * @param series  the series (zero-based index).
 745:      *
 746:      * @return The shape (never <code>null</code>).
 747:      * 
 748:      * @see #setSeriesShape(int, Shape)
 749:      */
 750:     public Shape getSeriesShape(int series);
 751: 
 752:     /**
 753:      * Sets the shape used for a series and sends a {@link RendererChangeEvent}
 754:      * to all registered listeners.
 755:      *
 756:      * @param series  the series index (zero-based).
 757:      * @param shape  the shape (<code>null</code> permitted).
 758:      * 
 759:      * @see #getSeriesShape(int)
 760:      */
 761:     public void setSeriesShape(int series, Shape shape);
 762:     
 763:     /**
 764:      * Returns the base shape.
 765:      *
 766:      * @return The shape (never <code>null</code>).
 767:      * 
 768:      * @see #setBaseShape(Shape)
 769:      */
 770:     public Shape getBaseShape();
 771: 
 772:     /**
 773:      * Sets the base shape and sends a {@link RendererChangeEvent} to all 
 774:      * registered listeners.
 775:      *
 776:      * @param shape  the shape (<code>null</code> not permitted).
 777:      * 
 778:      * @see #getBaseShape()
 779:      */
 780:     public void setBaseShape(Shape shape);
 781:     
 782:     // ITEM LABELS VISIBLE 
 783:     
 784:     /**
 785:      * Returns <code>true</code> if an item label is visible, and 
 786:      * <code>false</code> otherwise.
 787:      * 
 788:      * @param row  the row index (zero-based).
 789:      * @param column  the column index (zero-based).
 790:      * 
 791:      * @return A boolean.
 792:      */
 793:     public boolean isItemLabelVisible(int row, int column);
 794:     
 795:     // FIXME: Why no isItemLabelsVisible()?  Probably just an oversight.
 796: 
 797:     /**
 798:      * Sets a flag that controls whether or not the item labels for ALL series 
 799:      * are visible.
 800:      * 
 801:      * @param visible  the flag.
 802:      * 
 803:      * @see #setItemLabelsVisible(Boolean)
 804:      */
 805:     public void setItemLabelsVisible(boolean visible);
 806: 
 807:     /**
 808:      * Sets a flag that controls whether or not the item labels for ALL series 
 809:      * are visible.
 810:      * 
 811:      * @param visible  the flag (<code>null</code> permitted).
 812:      * 
 813:      * @see #setItemLabelsVisible(boolean)
 814:      */
 815:     public void setItemLabelsVisible(Boolean visible);
 816: 
 817:     /**
 818:      * Sets the visibility of item labels for ALL series and, if requested, 
 819:      * sends a {@link RendererChangeEvent} to all registered listeners.
 820:      * 
 821:      * @param visible  a flag that controls whether or not the item labels are
 822:      *                 visible (<code>null</code> permitted).
 823:      * @param notify  a flag that controls whether or not listeners are 
 824:      *                notified.
 825:      */
 826:     public void setItemLabelsVisible(Boolean visible, boolean notify);
 827: 
 828:     /**
 829:      * Returns <code>true</code> if the item labels for a series are visible, 
 830:      * and <code>false</code> otherwise.
 831:      * 
 832:      * @param series  the series index (zero-based).
 833:      * 
 834:      * @return A boolean.
 835:      * 
 836:      * @see #setSeriesItemLabelsVisible(int, Boolean)
 837:      */    
 838:     public boolean isSeriesItemLabelsVisible(int series);
 839:     
 840:     /**
 841:      * Sets a flag that controls the visibility of the item labels for a series.
 842:      * 
 843:      * @param series  the series index (zero-based).
 844:      * @param visible  the flag.
 845:      * 
 846:      * @see #isSeriesItemLabelsVisible(int)
 847:      */
 848:     public void setSeriesItemLabelsVisible(int series, boolean visible);
 849:     
 850:     /**
 851:      * Sets a flag that controls the visibility of the item labels for a series.
 852:      * 
 853:      * @param series  the series index (zero-based).
 854:      * @param visible  the flag (<code>null</code> permitted).
 855:      * 
 856:      * @see #isSeriesItemLabelsVisible(int)
 857:      */
 858:     public void setSeriesItemLabelsVisible(int series, Boolean visible);
 859:     
 860:     /**
 861:      * Sets the visibility of item labels for a series and, if requested, sends 
 862:      * a {@link RendererChangeEvent} to all registered listeners.
 863:      * 
 864:      * @param series  the series index (zero-based).
 865:      * @param visible  the visible flag.
 866:      * @param notify  a flag that controls whether or not listeners are 
 867:      *                notified.
 868:      *                
 869:      * @see #isSeriesItemLabelsVisible(int)
 870:      */
 871:     public void setSeriesItemLabelsVisible(int series, Boolean visible, 
 872:                                            boolean notify);
 873:     
 874:     /**
 875:      * Returns the base setting for item label visibility.
 876:      * 
 877:      * @return A flag (possibly <code>null</code>).
 878:      * 
 879:      * @see #setBaseItemLabelsVisible(Boolean)
 880:      */
 881:     public Boolean getBaseItemLabelsVisible();
 882:     
 883:     /**
 884:      * Sets the base flag that controls whether or not item labels are visible.
 885:      * 
 886:      * @param visible  the flag.
 887:      * 
 888:      * @see #getBaseItemLabelsVisible()
 889:      */
 890:     public void setBaseItemLabelsVisible(boolean visible);
 891:     
 892:     /**
 893:      * Sets the base setting for item label visibility.
 894:      * 
 895:      * @param visible  the flag (<code>null</code> permitted).
 896:      * 
 897:      * @see #getBaseItemLabelsVisible()
 898:      */
 899:     public void setBaseItemLabelsVisible(Boolean visible);
 900:     
 901:     /**
 902:      * Sets the base visibility for item labels and, if requested, sends a 
 903:      * {@link RendererChangeEvent} to all registered listeners.
 904:      * 
 905:      * @param visible  the visibility flag.
 906:      * @param notify  a flag that controls whether or not listeners are 
 907:      *                notified.
 908:      *                
 909:      * @see #getBaseItemLabelsVisible()
 910:      */
 911:     public void setBaseItemLabelsVisible(Boolean visible, boolean notify);
 912:     
 913:     // ITEM LABEL GENERATOR
 914:     
 915:     /**
 916:      * Returns the item label generator for the specified data item.
 917:      *
 918:      * @param series  the series index (zero-based).
 919:      * @param item  the item index (zero-based).
 920:      *
 921:      * @return The generator (possibly <code>null</code>).
 922:      */
 923:     public CategoryItemLabelGenerator getItemLabelGenerator(int series, 
 924:             int item);
 925: 
 926:     // FIXME: Why no getItemLabelGenerator()?  Probably just an oversight.
 927: 
 928:     /**
 929:      * Sets the item label generator for ALL series and sends a 
 930:      * {@link RendererChangeEvent} to all registered listeners.  This overrides 
 931:      * the per-series settings. 
 932:      * 
 933:      * @param generator  the generator (<code>null</code> permitted).
 934:      */
 935:     public void setItemLabelGenerator(CategoryItemLabelGenerator generator);
 936:     
 937:     /**
 938:      * Returns the item label generator for a series.
 939:      *
 940:      * @param series  the series index (zero-based).
 941:      *
 942:      * @return The label generator (possibly <code>null</code>).
 943:      * 
 944:      * @see #setSeriesItemLabelGenerator(int, CategoryItemLabelGenerator)
 945:      */
 946:     public CategoryItemLabelGenerator getSeriesItemLabelGenerator(int series);
 947: 
 948:     /**
 949:      * Sets the item label generator for a series and sends a 
 950:      * {@link RendererChangeEvent} to all registered listeners.  
 951:      *
 952:      * @param series  the series index (zero-based).
 953:      * @param generator  the generator.
 954:      * 
 955:      * @see #getSeriesItemLabelGenerator(int)
 956:      */
 957:     public void setSeriesItemLabelGenerator(
 958:             int series, CategoryItemLabelGenerator generator);
 959: 
 960:     /**
 961:      * Returns the base item label generator.
 962:      *
 963:      * @return The generator (possibly <code>null</code>).
 964:      * 
 965:      * @see #setBaseItemLabelGenerator(CategoryItemLabelGenerator)
 966:      */
 967:     public CategoryItemLabelGenerator getBaseItemLabelGenerator();
 968: 
 969:     /**
 970:      * Sets the base item label generator and sends a 
 971:      * {@link RendererChangeEvent} to all registered listeners.
 972:      *
 973:      * @param generator  the generator (<code>null</code> permitted).
 974:      * 
 975:      * @see #getBaseItemLabelGenerator()
 976:      */
 977:     public void setBaseItemLabelGenerator(CategoryItemLabelGenerator generator);
 978: 
 979:     // TOOL TIP GENERATOR
 980:     
 981:     /**
 982:      * Returns the tool tip generator that should be used for the specified 
 983:      * item.  This method looks up the generator using the "three-layer" 
 984:      * approach outlined in the general description of this interface.  
 985:      *
 986:      * @param row  the row index (zero-based).
 987:      * @param column  the column index (zero-based).
 988:      *
 989:      * @return The generator (possibly <code>null</code>).
 990:      */
 991:     public CategoryToolTipGenerator getToolTipGenerator(int row, int column);
 992: 
 993:     /**
 994:      * Returns the tool tip generator that will be used for ALL items in the 
 995:      * dataset (the "layer 0" generator).
 996:      * 
 997:      * @return A tool tip generator (possibly <code>null</code>).
 998:      * 
 999:      * @see #setToolTipGenerator(CategoryToolTipGenerator)
1000:      */
1001:     public CategoryToolTipGenerator getToolTipGenerator();
1002: 
1003:     /**
1004:      * Sets the tool tip generator for ALL series and sends a 
1005:      * {@link org.jfree.chart.event.RendererChangeEvent} to all registered 
1006:      * listeners.
1007:      * 
1008:      * @param generator  the generator (<code>null</code> permitted).
1009:      * 
1010:      * @see #getToolTipGenerator()
1011:      */
1012:     public void setToolTipGenerator(CategoryToolTipGenerator generator);
1013:     
1014:     /**
1015:      * Returns the tool tip generator for the specified series (a "layer 1" 
1016:      * generator).
1017:      *
1018:      * @param series  the series index (zero-based).
1019:      *
1020:      * @return The tool tip generator (possibly <code>null</code>).
1021:      * 
1022:      * @see #setSeriesToolTipGenerator(int, CategoryToolTipGenerator)
1023:      */
1024:     public CategoryToolTipGenerator getSeriesToolTipGenerator(int series);
1025: 
1026:     /**
1027:      * Sets the tool tip generator for a series and sends a 
1028:      * {@link org.jfree.chart.event.RendererChangeEvent} to all registered 
1029:      * listeners.
1030:      *
1031:      * @param series  the series index (zero-based).
1032:      * @param generator  the generator (<code>null</code> permitted).
1033:      * 
1034:      * @see #getSeriesToolTipGenerator(int)
1035:      */
1036:     public void setSeriesToolTipGenerator(int series, 
1037:                                           CategoryToolTipGenerator generator);
1038: 
1039:     /**
1040:      * Returns the base tool tip generator (the "layer 2" generator).
1041:      *
1042:      * @return The tool tip generator (possibly <code>null</code>).
1043:      * 
1044:      * @see #setBaseToolTipGenerator(CategoryToolTipGenerator)
1045:      */
1046:     public CategoryToolTipGenerator getBaseToolTipGenerator();
1047: 
1048:     /**
1049:      * Sets the base tool tip generator and sends a 
1050:      * {@link org.jfree.chart.event.RendererChangeEvent} to all registered 
1051:      * listeners.
1052:      *
1053:      * @param generator  the generator (<code>null</code> permitted).
1054:      * 
1055:      * @see #getBaseToolTipGenerator()
1056:      */
1057:     public void setBaseToolTipGenerator(CategoryToolTipGenerator generator);
1058: 
1059:     //// ITEM LABEL FONT  //////////////////////////////////////////////////////
1060:     
1061:     /**
1062:      * Returns the font for an item label.
1063:      * 
1064:      * @param row  the row index (zero-based).
1065:      * @param column  the column index (zero-based).
1066:      * 
1067:      * @return The font (never <code>null</code>).
1068:      */
1069:     public Font getItemLabelFont(int row, int column);
1070: 
1071:     /**
1072:      * Returns the font used for all item labels.  This may be 
1073:      * <code>null</code>, in which case the per series font settings will apply.
1074:      * 
1075:      * @return The font (possibly <code>null</code>).
1076:      * 
1077:      * @see #setItemLabelFont(Font)
1078:      */
1079:     public Font getItemLabelFont();
1080:     
1081:     /**
1082:      * Sets the item label font for ALL series and sends a 
1083:      * {@link RendererChangeEvent} to all registered listeners.  You can set 
1084:      * this to <code>null</code> if you prefer to set the font on a per series 
1085:      * basis.
1086:      * 
1087:      * @param font  the font (<code>null</code> permitted).
1088:      * 
1089:      * @see #getItemLabelFont()
1090:      */
1091:     public void setItemLabelFont(Font font);
1092:     
1093:     /**
1094:      * Returns the font for all the item labels in a series.
1095:      * 
1096:      * @param series  the series index (zero-based).
1097:      * 
1098:      * @return The font (possibly <code>null</code>).
1099:      * 
1100:      * @see #setSeriesItemLabelFont(int, Font)
1101:      */
1102:     public Font getSeriesItemLabelFont(int series);
1103: 
1104:     /**
1105:      * Sets the item label font for a series and sends a 
1106:      * {@link RendererChangeEvent} to all registered listeners.  
1107:      * 
1108:      * @param series  the series index (zero-based).
1109:      * @param font  the font (<code>null</code> permitted).
1110:      * 
1111:      * @see #getSeriesItemLabelFont(int)
1112:      */
1113:     public void setSeriesItemLabelFont(int series, Font font);
1114: 
1115:     /**
1116:      * Returns the base item label font (this is used when no other font 
1117:      * setting is available).
1118:      * 
1119:      * @return The font (<code>never</code> null).
1120:      * 
1121:      * @see #setBaseItemLabelFont(Font)
1122:      */
1123:     public Font getBaseItemLabelFont();
1124: 
1125:     /**
1126:      * Sets the base item label font and sends a {@link RendererChangeEvent} 
1127:      * to all registered listeners.  
1128:      * 
1129:      * @param font  the font (<code>null</code> not permitted).
1130:      * 
1131:      * @see #getBaseItemLabelFont()
1132:      */
1133:     public void setBaseItemLabelFont(Font font);
1134:     
1135:     //// ITEM LABEL PAINT  /////////////////////////////////////////////////////
1136: 
1137:     /**
1138:      * Returns the paint used to draw an item label.
1139:      * 
1140:      * @param row  the row index (zero based).
1141:      * @param column  the column index (zero based).
1142:      * 
1143:      * @return The paint (never <code>null</code>).
1144:      */
1145:     public Paint getItemLabelPaint(int row, int column);
1146:     
1147:     /**
1148:      * Returns the paint used for all item labels.  This may be 
1149:      * <code>null</code>, in which case the per series paint settings will 
1150:      * apply.
1151:      * 
1152:      * @return The paint (possibly <code>null</code>).
1153:      * 
1154:      * @see #setItemLabelPaint(Paint)
1155:      */
1156:     public Paint getItemLabelPaint();
1157: 
1158:     /**
1159:      * Sets the item label paint for ALL series and sends a 
1160:      * {@link RendererChangeEvent} to all registered listeners.
1161:      * 
1162:      * @param paint  the paint (<code>null</code> permitted).
1163:      * 
1164:      * @see #getItemLabelPaint()
1165:      */
1166:     public void setItemLabelPaint(Paint paint);
1167: 
1168:     /**
1169:      * Returns the paint used to draw the item labels for a series.
1170:      * 
1171:      * @param series  the series index (zero based).
1172:      * 
1173:      * @return The paint (possibly <code>null<code>).
1174:      * 
1175:      * @see #setSeriesItemLabelPaint(int, Paint)
1176:      */
1177:     public Paint getSeriesItemLabelPaint(int series);
1178: 
1179:     /**
1180:      * Sets the item label paint for a series and sends a 
1181:      * {@link RendererChangeEvent} to all registered listeners.
1182:      * 
1183:      * @param series  the series (zero based index).
1184:      * @param paint  the paint (<code>null</code> permitted).
1185:      * 
1186:      * @see #getSeriesItemLabelPaint(int)
1187:      */
1188:     public void setSeriesItemLabelPaint(int series, Paint paint);
1189:     
1190:     /**
1191:      * Returns the base item label paint.
1192:      * 
1193:      * @return The paint (never <code>null<code>).
1194:      * 
1195:      * @see #setBaseItemLabelPaint(Paint)
1196:      */
1197:     public Paint getBaseItemLabelPaint();
1198: 
1199:     /**
1200:      * Sets the base item label paint and sends a {@link RendererChangeEvent} 
1201:      * to all registered listeners.
1202:      * 
1203:      * @param paint  the paint (<code>null</code> not permitted).
1204:      * 
1205:      * @see #getBaseItemLabelPaint()
1206:      */
1207:     public void setBaseItemLabelPaint(Paint paint);
1208:     
1209:     // POSITIVE ITEM LABEL POSITION...
1210: 
1211:     /**
1212:      * Returns the item label position for positive values.
1213:      * 
1214:      * @param row  the row index (zero-based).
1215:      * @param column  the column index (zero-based).
1216:      * 
1217:      * @return The item label position (never <code>null</code>).
1218:      */
1219:     public ItemLabelPosition getPositiveItemLabelPosition(int row, int column);
1220: 
1221:     /**
1222:      * Returns the item label position for positive values in ALL series.
1223:      * 
1224:      * @return The item label position (possibly <code>null</code>).
1225:      * 
1226:      * @see #setPositiveItemLabelPosition(ItemLabelPosition)
1227:      */
1228:     public ItemLabelPosition getPositiveItemLabelPosition();
1229: 
1230:     /**
1231:      * Sets the item label position for positive values in ALL series, and 
1232:      * sends a {@link RendererChangeEvent} to all registered listeners.  You 
1233:      * need to set this to <code>null</code> to expose the settings for 
1234:      * individual series.
1235:      * 
1236:      * @param position  the position (<code>null</code> permitted).
1237:      * 
1238:      * @see #getPositiveItemLabelPosition()
1239:      */
1240:     public void setPositiveItemLabelPosition(ItemLabelPosition position);
1241:     
1242:     /**
1243:      * Sets the positive item label position for ALL series and (if requested) 
1244:      * sends a {@link RendererChangeEvent} to all registered listeners.
1245:      * 
1246:      * @param position  the position (<code>null</code> permitted).
1247:      * @param notify  notify registered listeners?
1248:      * 
1249:      * @see #getPositiveItemLabelPosition()
1250:      */
1251:     public void setPositiveItemLabelPosition(ItemLabelPosition position, 
1252:                                              boolean notify);
1253: 
1254:     /**
1255:      * Returns the item label position for all positive values in a series.
1256:      * 
1257:      * @param series  the series index (zero-based).
1258:      * 
1259:      * @return The item label position.
1260:      * 
1261:      * @see #setSeriesPositiveItemLabelPosition(int, ItemLabelPosition)
1262:      */
1263:     public ItemLabelPosition getSeriesPositiveItemLabelPosition(int series);
1264:     
1265:     /**
1266:      * Sets the item label position for all positive values in a series and 
1267:      * sends a {@link RendererChangeEvent} to all registered listeners.
1268:      * 
1269:      * @param series  the series index (zero-based).
1270:      * @param position  the position (<code>null</code> permitted).
1271:      * 
1272:      * @see #getSeriesPositiveItemLabelPosition(int)
1273:      */
1274:     public void setSeriesPositiveItemLabelPosition(int series, 
1275:                                                    ItemLabelPosition position);
1276: 
1277:     /**
1278:      * Sets the item label position for all positive values in a series and (if
1279:      * requested) sends a {@link RendererChangeEvent} to all registered 
1280:      * listeners.
1281:      * 
1282:      * @param series  the series index (zero-based).
1283:      * @param position  the position (<code>null</code> permitted).
1284:      * @param notify  notify registered listeners?
1285:      * 
1286:      * @see #getSeriesPositiveItemLabelPosition(int)
1287:      */
1288:     public void setSeriesPositiveItemLabelPosition(int series, 
1289:                                                    ItemLabelPosition position, 
1290:         boolean notify);
1291: 
1292:     /**
1293:      * Returns the base positive item label position.
1294:      * 
1295:      * @return The position.
1296:      * 
1297:      * @see #setBasePositiveItemLabelPosition(ItemLabelPosition)
1298:      */
1299:     public ItemLabelPosition getBasePositiveItemLabelPosition();
1300: 
1301:     /**
1302:      * Sets the base positive item label position.
1303:      * 
1304:      * @param position  the position.
1305:      * 
1306:      * @see #getBasePositiveItemLabelPosition()
1307:      */
1308:     public void setBasePositiveItemLabelPosition(ItemLabelPosition position);
1309:     
1310:     /**
1311:      * Sets the base positive item label position and, if requested, sends a 
1312:      * {@link RendererChangeEvent} to all registered listeners.
1313:      * 
1314:      * @param position  the position.
1315:      * @param notify  notify registered listeners?
1316:      * 
1317:      * @see #getBasePositiveItemLabelPosition()
1318:      */
1319:     public void setBasePositiveItemLabelPosition(ItemLabelPosition position, 
1320:                                                  boolean notify);
1321:     
1322:     
1323:     // NEGATIVE ITEM LABEL POSITION...
1324: 
1325:     /**
1326:      * Returns the item label position for negative values.  This method can be
1327:      * overridden to provide customisation of the item label position for 
1328:      * individual data items.
1329:      * 
1330:      * @param row  the row index (zero-based).
1331:      * @param column  the column (zero-based).
1332:      * 
1333:      * @return The item label position.
1334:      */
1335:     public ItemLabelPosition getNegativeItemLabelPosition(int row, int column);
1336: 
1337:     /**
1338:      * Returns the item label position for negative values in ALL series.
1339:      * 
1340:      * @return The item label position (possibly <code>null</code>).
1341:      * 
1342:      * @see #setNegativeItemLabelPosition(ItemLabelPosition)
1343:      */
1344:     public ItemLabelPosition getNegativeItemLabelPosition();
1345: 
1346:     /**
1347:      * Sets the item label position for negative values in ALL series, and 
1348:      * sends a {@link RendererChangeEvent} to all registered listeners.  You 
1349:      * need to set this to <code>null</code> to expose the settings for 
1350:      * individual series.
1351:      * 
1352:      * @param position  the position (<code>null</code> permitted).
1353:      * 
1354:      * @see #getNegativeItemLabelPosition()
1355:      */
1356:     public void setNegativeItemLabelPosition(ItemLabelPosition position);
1357:     
1358:     /**
1359:      * Sets the item label position for negative values in ALL series and (if 
1360:      * requested) sends a {@link RendererChangeEvent} to all registered 
1361:      * listeners.  
1362:      * 
1363:      * @param position  the position (<code>null</code> permitted).
1364:      * @param notify  notify registered listeners?
1365:      * 
1366:      * @see #getNegativeItemLabelPosition()
1367:      */
1368:     public void setNegativeItemLabelPosition(ItemLabelPosition position, 
1369:                                              boolean notify);
1370: 
1371:     /**
1372:      * Returns the item label position for all negative values in a series.
1373:      * 
1374:      * @param series  the series index (zero-based).
1375:      * 
1376:      * @return The item label position.
1377:      * 
1378:      * @see #setSeriesNegativeItemLabelPosition(int, ItemLabelPosition)
1379:      */
1380:     public ItemLabelPosition getSeriesNegativeItemLabelPosition(int series);
1381: 
1382:     /**
1383:      * Sets the item label position for negative values in a series and sends a 
1384:      * {@link RendererChangeEvent} to all registered listeners.
1385:      * 
1386:      * @param series  the series index (zero-based).
1387:      * @param position  the position (<code>null</code> permitted).
1388:      * 
1389:      * @see #getSeriesNegativeItemLabelPosition(int)
1390:      */
1391:     public void setSeriesNegativeItemLabelPosition(int series, 
1392:                                                    ItemLabelPosition position);
1393: 
1394:     /**
1395:      * Sets the item label position for negative values in a series and (if 
1396:      * requested) sends a {@link RendererChangeEvent} to all registered 
1397:      * listeners.
1398:      * 
1399:      * @param series  the series index (zero-based).
1400:      * @param position  the position (<code>null</code> permitted).
1401:      * @param notify  notify registered listeners?
1402:      * 
1403:      * @see #getSeriesNegativeItemLabelPosition(int)
1404:      */
1405:     public void setSeriesNegativeItemLabelPosition(int series, 
1406:                                                    ItemLabelPosition position, 
1407:                                                    boolean notify);
1408: 
1409:     /**
1410:      * Returns the base item label position for negative values.
1411:      * 
1412:      * @return The position.
1413:      * 
1414:      * @see #setBaseNegativeItemLabelPosition(ItemLabelPosition)
1415:      */
1416:     public ItemLabelPosition getBaseNegativeItemLabelPosition();
1417: 
1418:     /**
1419:      * Sets the base item label position for negative values and sends a 
1420:      * {@link RendererChangeEvent} to all registered listeners.
1421:      * 
1422:      * @param position  the position.
1423:      * 
1424:      * @see #getBaseNegativeItemLabelPosition()
1425:      */
1426:     public void setBaseNegativeItemLabelPosition(ItemLabelPosition position);
1427:     
1428:     /**
1429:      * Sets the base negative item label position and, if requested, sends a 
1430:      * {@link RendererChangeEvent} to all registered listeners.
1431:      * 
1432:      * @param position  the position.
1433:      * @param notify  notify registered listeners?
1434:      * 
1435:      * @see #getBaseNegativeItemLabelPosition()
1436:      */
1437:     public void setBaseNegativeItemLabelPosition(ItemLabelPosition position, 
1438:                                                  boolean notify);
1439:     
1440:     // ITEM URL GENERATOR
1441:     
1442:     /**
1443:      * Returns the URL generator for an item.
1444:      *
1445:      * @param series  the series index (zero-based).
1446:      * @param item  the item index (zero-based).
1447:      *
1448:      * @return The item URL generator.
1449:      */
1450:     public CategoryURLGenerator getItemURLGenerator(int series, int item);
1451: 
1452:     /**
1453:      * Sets the item URL generator for ALL series. 
1454:      * 
1455:      * @param generator  the generator.
1456:      * 
1457:      * @see #getSeriesItemURLGenerator(int)
1458:      */
1459:     public void setItemURLGenerator(CategoryURLGenerator generator);
1460:     
1461:     /**
1462:      * Returns the item URL generator for a series.
1463:      *
1464:      * @param series  the series index (zero-based).
1465:      *
1466:      * @return The URL generator.
1467:      * 
1468:      * @see #setSeriesItemURLGenerator(int, CategoryURLGenerator)
1469:      */
1470:     public CategoryURLGenerator getSeriesItemURLGenerator(int series);
1471: 
1472:     /**
1473:      * Sets the item URL generator for a series.
1474:      *
1475:      * @param series  the series index (zero-based).
1476:      * @param generator  the generator.
1477:      * 
1478:      * @see #getSeriesItemURLGenerator(int)
1479:      */
1480:     public void setSeriesItemURLGenerator(int series, 
1481:                                           CategoryURLGenerator generator);
1482: 
1483:     /**
1484:      * Returns the base item URL generator.
1485:      *
1486:      * @return The item URL generator (possibly <code>null</code>).
1487:      * 
1488:      * @see #setBaseItemURLGenerator(CategoryURLGenerator)
1489:      */
1490:     public CategoryURLGenerator getBaseItemURLGenerator();
1491: 
1492:     /**
1493:      * Sets the base item URL generator and sends a {@link RendererChangeEvent}
1494:      * to all registered listeners.
1495:      *
1496:      * @param generator  the item URL generator (<code>null</code> permitted).
1497:      * 
1498:      * @see #getBaseItemURLGenerator()
1499:      */
1500:     public void setBaseItemURLGenerator(CategoryURLGenerator generator);
1501: 
1502:     /**
1503:      * Returns a legend item for a series.
1504:      *
1505:      * @param datasetIndex  the dataset index (zero-based).
1506:      * @param series  the series (zero-based index).
1507:      *
1508:      * @return The legend item (possibly <code>null</code>).
1509:      */
1510:     public LegendItem getLegendItem(int datasetIndex, int series);
1511: 
1512:     /**
1513:      * Draws a background for the data area.
1514:      *
1515:      * @param g2  the graphics device.
1516:      * @param plot  the plot.
1517:      * @param dataArea  the data area.
1518:      */
1519:     public void drawBackground(Graphics2D g2,
1520:                                CategoryPlot plot,
1521:                                Rectangle2D dataArea);
1522: 
1523:     /**
1524:      * Draws an outline for the data area.
1525:      *
1526:      * @param g2  the graphics device.
1527:      * @param plot  the plot.
1528:      * @param dataArea  the data area.
1529:      */
1530:     public void drawOutline(Graphics2D g2,
1531:                             CategoryPlot plot,
1532:                             Rectangle2D dataArea);
1533: 
1534:     /**
1535:      * Draws a single data item.
1536:      *
1537:      * @param g2  the graphics device.
1538:      * @param state  state information for one chart.
1539:      * @param dataArea  the data plot area.
1540:      * @param plot  the plot.
1541:      * @param domainAxis  the domain axis.
1542:      * @param rangeAxis  the range axis.
1543:      * @param dataset  the data.
1544:      * @param row  the row index (zero-based).
1545:      * @param column  the column index (zero-based).
1546:      * @param pass  the pass index.
1547:      */
1548:     public void drawItem(Graphics2D g2,
1549:                          CategoryItemRendererState state,
1550:                          Rectangle2D dataArea,
1551:                          CategoryPlot plot,
1552:                          CategoryAxis domainAxis,
1553:                          ValueAxis rangeAxis,
1554:                          CategoryDataset dataset,
1555:                          int row,
1556:                          int column,
1557:                          int pass);
1558: 
1559:     /**
1560:      * Draws a grid line against the domain axis.
1561:      *
1562:      * @param g2  the graphics device.
1563:      * @param plot  the plot.
1564:      * @param dataArea  the area for plotting data (not yet adjusted for any 
1565:      *                  3D effect).
1566:      * @param value  the value.
1567:      * 
1568:      * @see #drawRangeGridline(Graphics2D, CategoryPlot, ValueAxis, 
1569:      *     Rectangle2D, double)
1570:      */
1571:     public void drawDomainGridline(Graphics2D g2,
1572:                                    CategoryPlot plot,
1573:                                    Rectangle2D dataArea,
1574:                                    double value);
1575: 
1576:     /**
1577:      * Draws a grid line against the range axis.
1578:      *
1579:      * @param g2  the graphics device.
1580:      * @param plot  the plot.
1581:      * @param axis  the value axis.
1582:      * @param dataArea  the area for plotting data (not yet adjusted for any 
1583:      *                  3D effect).
1584:      * @param value  the value.
1585:      * 
1586:      * @see #drawDomainGridline(Graphics2D, CategoryPlot, Rectangle2D, double)
1587:      */
1588:     public void drawRangeGridline(Graphics2D g2,
1589:                                   CategoryPlot plot,
1590:                                   ValueAxis axis,
1591:                                   Rectangle2D dataArea,
1592:                                   double value);
1593: 
1594:     /**
1595:      * Draws a line (or some other marker) to indicate a particular category on 
1596:      * the domain axis.
1597:      *
1598:      * @param g2  the graphics device.
1599:      * @param plot  the plot.
1600:      * @param axis  the category axis.
1601:      * @param marker  the marker.
1602:      * @param dataArea  the area for plotting data (not including 3D effect).
1603:      * 
1604:      * @see #drawRangeMarker(Graphics2D, CategoryPlot, ValueAxis, Marker, 
1605:      *     Rectangle2D)
1606:      */
1607:     public void drawDomainMarker(Graphics2D g2,
1608:                                  CategoryPlot plot,
1609:                                  CategoryAxis axis,
1610:                                  CategoryMarker marker,
1611:                                  Rectangle2D dataArea);
1612: 
1613:     /**
1614:      * Draws a line (or some other marker) to indicate a particular value on 
1615:      * the range axis.
1616:      *
1617:      * @param g2  the graphics device.
1618:      * @param plot  the plot.
1619:      * @param axis  the value axis.
1620:      * @param marker  the marker.
1621:      * @param dataArea  the area for plotting data (not including 3D effect).
1622:      * 
1623:      * @see #drawDomainMarker(Graphics2D, CategoryPlot, CategoryAxis, 
1624:      *     CategoryMarker, Rectangle2D)
1625:      */
1626:     public void drawRangeMarker(Graphics2D g2,
1627:                                 CategoryPlot plot,
1628:                                 ValueAxis axis,
1629:                                 Marker marker,
1630:                                 Rectangle2D dataArea);
1631: 
1632: }