001/* =========================================================== 002 * JFreeChart : a free chart library for the Java(tm) platform 003 * =========================================================== 004 * 005 * (C) Copyright 2000-2013, by Object Refinery Limited and Contributors. 006 * 007 * Project Info: http://www.jfree.org/jfreechart/index.html 008 * 009 * This library is free software; you can redistribute it and/or modify it 010 * under the terms of the GNU Lesser General Public License as published by 011 * the Free Software Foundation; either version 2.1 of the License, or 012 * (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but 015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 017 * License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this library; if not, write to the Free Software 021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 022 * USA. 023 * 024 * [Oracle and Java are registered trademarks of Oracle and/or its affiliates. 025 * Other names may be trademarks of their respective owners.] 026 * 027 * ------------------------- 028 * CategoryItemRenderer.java 029 * ------------------------- 030 * 031 * (C) Copyright 2001-2011, by Object Refinery Limited and Contributors. 032 * 033 * Original Author: David Gilbert (for Object Refinery Limited); 034 * Contributor(s): Mark Watson (www.markwatson.com); 035 * 036 * Changes 037 * ------- 038 * 23-Oct-2001 : Version 1 (DG); 039 * 16-Jan-2002 : Renamed HorizontalCategoryItemRenderer.java 040 * --> CategoryItemRenderer.java (DG); 041 * 05-Feb-2002 : Changed return type of the drawCategoryItem method from void 042 * to Shape, as part of the tooltips implementation (DG) 043 * 044 * NOTE (30-May-2002) : this has subsequently been changed back 045 * to void, tooltips are now collected along with entities in 046 * ChartRenderingInfo (DG); 047 * 048 * 14-Mar-2002 : Added the initialise method, and changed all bar plots to use 049 * this renderer (DG); 050 * 23-May-2002 : Added ChartRenderingInfo to the initialise method (DG); 051 * 29-May-2002 : Added the getAxisArea(Rectangle2D) method (DG); 052 * 06-Jun-2002 : Updated Javadoc comments (DG); 053 * 26-Jun-2002 : Added range axis to the initialise method (DG); 054 * 24-Sep-2002 : Added getLegendItem() method (DG); 055 * 23-Oct-2002 : Added methods to get/setToolTipGenerator (DG); 056 * 05-Nov-2002 : Replaced references to CategoryDataset with TableDataset (DG); 057 * 06-Nov-2002 : Added the domain axis to the drawCategoryItem method. Renamed 058 * drawCategoryItem() --> drawItem() (DG); 059 * 20-Nov-2002 : Changed signature of drawItem() method to reflect use of 060 * TableDataset (DG); 061 * 26-Nov-2002 : Replaced the isStacked() method with the getRangeType() 062 * method (DG); 063 * 08-Jan-2003 : Changed getSeriesCount() --> getRowCount() and 064 * getCategoryCount() --> getColumnCount() (DG); 065 * 09-Jan-2003 : Changed name of grid-line methods (DG); 066 * 21-Jan-2003 : Merged TableDataset with CategoryDataset (DG); 067 * 10-Apr-2003 : Changed CategoryDataset to KeyedValues2DDataset in 068 * drawItem() method (DG); 069 * 29-Apr-2003 : Eliminated Renderer interface (DG); 070 * 02-Sep-2003 : Fix for bug 790407 (DG); 071 * 16-Sep-2003 : Changed ChartRenderingInfo --> PlotRenderingInfo (DG); 072 * 20-Oct-2003 : Added setOutlinePaint() method (DG); 073 * 06-Feb-2004 : Added missing methods, and moved deprecated methods (DG); 074 * 19-Feb-2004 : Added extra setXXXLabelsVisible() methods (DG); 075 * 29-Apr-2004 : Changed Integer --> int in initialise() method (DG); 076 * 18-May-2004 : Added methods for item label paint (DG); 077 * 05-Nov-2004 : Added getPassCount() method and 'pass' parameter to drawItem() 078 * method (DG); 079 * 07-Jan-2005 : Renamed getRangeExtent() --> findRangeBounds (DG); 080 * 11-Jan-2005 : Removed deprecated code in preparation for 1.0.0 release (DG); 081 * 23-Feb-2005 : Now extends LegendItemSource (DG); 082 * 20-Apr-2005 : Renamed CategoryLabelGenerator 083 * --> CategoryItemLabelGenerator (DG); 084 * 20-May-2005 : Added drawDomainMarker() method (DG); 085 * ------------- JFREECHART 1.0.x --------------------------------------------- 086 * 20-Feb-2007 : Updated API docs (DG); 087 * 19-Apr-2007 : Deprecated seriesVisible and seriesVisibleInLegend flags (DG); 088 * 20-Apr-2007 : Deprecated paint, fillPaint, outlinePaint, stroke, 089 * outlineStroke, shape, itemLabelsVisible, itemLabelFont, 090 * itemLabelPaint, positiveItemLabelPosition, 091 * negativeItemLabelPosition and createEntities override 092 * fields (DG); 093 * 26-Jun-2008 : Added new method required for crosshair support - THIS CHANGES 094 * THE API as of version 1.0.11 (DG); 095 * 096 */ 097 098package org.jfree.chart.renderer.category; 099 100import java.awt.Font; 101import java.awt.Graphics2D; 102import java.awt.Paint; 103import java.awt.Shape; 104import java.awt.Stroke; 105import java.awt.geom.Rectangle2D; 106 107import org.jfree.chart.LegendItem; 108import org.jfree.chart.LegendItemSource; 109import org.jfree.chart.axis.CategoryAxis; 110import org.jfree.chart.axis.ValueAxis; 111import org.jfree.chart.event.RendererChangeEvent; 112import org.jfree.chart.event.RendererChangeListener; 113import org.jfree.chart.labels.CategoryItemLabelGenerator; 114import org.jfree.chart.labels.CategoryToolTipGenerator; 115import org.jfree.chart.labels.ItemLabelPosition; 116import org.jfree.chart.plot.CategoryMarker; 117import org.jfree.chart.plot.CategoryPlot; 118import org.jfree.chart.plot.Marker; 119import org.jfree.chart.plot.PlotRenderingInfo; 120import org.jfree.chart.urls.CategoryURLGenerator; 121import org.jfree.data.Range; 122import org.jfree.data.category.CategoryDataset; 123import org.jfree.ui.RectangleEdge; 124 125/** 126 * A plug-in object that is used by the {@link CategoryPlot} class to display 127 * individual data items from a {@link CategoryDataset}. 128 * <p> 129 * This interface defines the methods that must be provided by all renderers. 130 * If you are implementing a custom renderer, you should consider extending the 131 * {@link AbstractCategoryItemRenderer} class. 132 * <p> 133 * Most renderer attributes are defined using a "three layer" approach. When 134 * looking up an attribute (for example, the outline paint) the renderer first 135 * checks to see if there is a setting (in layer 0) that applies to ALL items 136 * that the renderer draws. If there is, that setting is used, but if it is 137 * <code>null</code> the renderer looks up the next layer, which contains 138 * "per series" settings for the attribute (many attributes are defined on a 139 * per series basis, so this is the layer that is most commonly used). If the 140 * layer 1 setting is <code>null</code>, the renderer will look up the final 141 * layer, which provides a default or "base" setting. Some attributes allow 142 * the base setting to be <code>null</code>, while other attributes enforce 143 * non-<code>null</code> values. 144 */ 145public interface CategoryItemRenderer extends LegendItemSource { 146 147 /** 148 * Returns the number of passes through the dataset required by the 149 * renderer. Usually this will be one, but some renderers may use 150 * a second or third pass to overlay items on top of things that were 151 * drawn in an earlier pass. 152 * 153 * @return The pass count. 154 */ 155 public int getPassCount(); 156 157 /** 158 * Returns the plot that the renderer has been assigned to (where 159 * <code>null</code> indicates that the renderer is not currently assigned 160 * to a plot). 161 * 162 * @return The plot (possibly <code>null</code>). 163 * 164 * @see #setPlot(CategoryPlot) 165 */ 166 public CategoryPlot getPlot(); 167 168 /** 169 * Sets the plot that the renderer has been assigned to. This method is 170 * usually called by the {@link CategoryPlot}, in normal usage you 171 * shouldn't need to call this method directly. 172 * 173 * @param plot the plot (<code>null</code> not permitted). 174 * 175 * @see #getPlot() 176 */ 177 public void setPlot(CategoryPlot plot); 178 179 /** 180 * Adds a change listener. 181 * 182 * @param listener the listener. 183 * 184 * @see #removeChangeListener(RendererChangeListener) 185 */ 186 public void addChangeListener(RendererChangeListener listener); 187 188 /** 189 * Removes a change listener. 190 * 191 * @param listener the listener. 192 * 193 * @see #addChangeListener(RendererChangeListener) 194 */ 195 public void removeChangeListener(RendererChangeListener listener); 196 197 /** 198 * Returns the range of values the renderer requires to display all the 199 * items from the specified dataset. 200 * 201 * @param dataset the dataset (<code>null</code> permitted). 202 * 203 * @return The range (or <code>null</code> if the dataset is 204 * <code>null</code> or empty). 205 */ 206 public Range findRangeBounds(CategoryDataset dataset); 207 208 /** 209 * Initialises the renderer. This method will be called before the first 210 * item is rendered, giving the renderer an opportunity to initialise any 211 * state information it wants to maintain. The renderer can do nothing if 212 * it chooses. 213 * 214 * @param g2 the graphics device. 215 * @param dataArea the area inside the axes. 216 * @param plot the plot. 217 * @param rendererIndex the renderer index. 218 * @param info collects chart rendering information for return to caller. 219 * 220 * @return A state object (maintains state information relevant to one 221 * chart drawing). 222 */ 223 public CategoryItemRendererState initialise(Graphics2D g2, 224 Rectangle2D dataArea, 225 CategoryPlot plot, 226 int rendererIndex, 227 PlotRenderingInfo info); 228 229 /** 230 * Returns a boolean that indicates whether or not the specified item 231 * should be drawn (this is typically used to hide an entire series). 232 * 233 * @param series the series index. 234 * @param item the item index. 235 * 236 * @return A boolean. 237 */ 238 public boolean getItemVisible(int series, int item); 239 240 /** 241 * Returns a boolean that indicates whether or not the specified series 242 * should be drawn (this is typically used to hide an entire series). 243 * 244 * @param series the series index. 245 * 246 * @return A boolean. 247 */ 248 public boolean isSeriesVisible(int series); 249 250 /** 251 * Returns the flag that controls the visibility of ALL series. This flag 252 * overrides the per series and default settings - you must set it to 253 * <code>null</code> if you want the other settings to apply. 254 * 255 * @return The flag (possibly <code>null</code>). 256 * 257 * @see #setSeriesVisible(Boolean) 258 * 259 * @deprecated This method should no longer be used (as of version 1.0.6). 260 * It is sufficient to rely on {@link #getSeriesVisible(int)} and 261 * {@link #getBaseSeriesVisible()}. 262 */ 263 public Boolean getSeriesVisible(); 264 265 /** 266 * Sets the flag that controls the visibility of ALL series and sends a 267 * {@link RendererChangeEvent} to all registered listeners. This flag 268 * overrides the per series and default settings - you must set it to 269 * <code>null</code> if you want the other settings to apply. 270 * 271 * @param visible the flag (<code>null</code> permitted). 272 * 273 * @see #getSeriesVisible() 274 * 275 * @deprecated This method should no longer be used (as of version 1.0.6). 276 * It is sufficient to rely on {@link #setSeriesVisible(int, Boolean)} 277 * and {@link #setBaseSeriesVisible(boolean)}. 278 */ 279 public void setSeriesVisible(Boolean visible); 280 281 /** 282 * Sets the flag that controls the visibility of ALL series and sends a 283 * {@link RendererChangeEvent} to all registered listeners. This flag 284 * overrides the per series and default settings - you must set it to 285 * <code>null</code> if you want the other settings to apply. 286 * 287 * @param visible the flag (<code>null</code> permitted). 288 * @param notify notify listeners? 289 * 290 * @see #getSeriesVisible() 291 * 292 * @deprecated This method should no longer be used (as of version 1.0.6). 293 * It is sufficient to rely on {@link #setSeriesVisible(int, Boolean, 294 * boolean)} and {@link #setBaseSeriesVisible(boolean, boolean)}. 295 */ 296 public void setSeriesVisible(Boolean visible, boolean notify); 297 298 /** 299 * Returns the flag that controls whether a series is visible. 300 * 301 * @param series the series index (zero-based). 302 * 303 * @return The flag (possibly <code>null</code>). 304 * 305 * @see #setSeriesVisible(int, Boolean) 306 */ 307 public Boolean getSeriesVisible(int series); 308 309 /** 310 * Sets the flag that controls whether a series is visible and sends a 311 * {@link RendererChangeEvent} to all registered listeners. 312 * 313 * @param series the series index (zero-based). 314 * @param visible the flag (<code>null</code> permitted). 315 * 316 * @see #getSeriesVisible(int) 317 */ 318 public void setSeriesVisible(int series, Boolean visible); 319 320 /** 321 * Sets the flag that controls whether a series is visible and, if 322 * requested, sends a {@link RendererChangeEvent} to all registered 323 * listeners. 324 * 325 * @param series the series index. 326 * @param visible the flag (<code>null</code> permitted). 327 * @param notify notify listeners? 328 * 329 * @see #getSeriesVisible(int) 330 */ 331 public void setSeriesVisible(int series, Boolean visible, boolean notify); 332 333 /** 334 * Returns the base visibility for all series. 335 * 336 * @return The base visibility. 337 * 338 * @see #setBaseSeriesVisible(boolean) 339 */ 340 public boolean getBaseSeriesVisible(); 341 342 /** 343 * Sets the base visibility and sends a {@link RendererChangeEvent} to all 344 * registered listeners. 345 * 346 * @param visible the flag. 347 * 348 * @see #getBaseSeriesVisible() 349 */ 350 public void setBaseSeriesVisible(boolean visible); 351 352 /** 353 * Sets the base visibility and, if requested, sends 354 * a {@link RendererChangeEvent} to all registered listeners. 355 * 356 * @param visible the visibility. 357 * @param notify notify listeners? 358 * 359 * @see #getBaseSeriesVisible() 360 */ 361 public void setBaseSeriesVisible(boolean visible, boolean notify); 362 363 // SERIES VISIBLE IN LEGEND (not yet respected by all renderers) 364 365 /** 366 * Returns <code>true</code> if the series should be shown in the legend, 367 * and <code>false</code> otherwise. 368 * 369 * @param series the series index. 370 * 371 * @return A boolean. 372 */ 373 public boolean isSeriesVisibleInLegend(int series); 374 375 /** 376 * Returns the flag that controls the visibility of ALL series in the 377 * legend. This flag overrides the per series and default settings - you 378 * must set it to <code>null</code> if you want the other settings to 379 * apply. 380 * 381 * @return The flag (possibly <code>null</code>). 382 * 383 * @see #setSeriesVisibleInLegend(Boolean) 384 * 385 * @deprecated This method should no longer be used (as of version 1.0.6). 386 * It is sufficient to rely on {@link #getSeriesVisibleInLegend(int)} 387 * and {@link #getBaseSeriesVisibleInLegend()}. 388 */ 389 public Boolean getSeriesVisibleInLegend(); 390 391 /** 392 * Sets the flag that controls the visibility of ALL series in the legend 393 * and sends a {@link RendererChangeEvent} to all registered listeners. 394 * This flag overrides the per series and default settings - you must set 395 * it to <code>null</code> if you want the other settings to apply. 396 * 397 * @param visible the flag (<code>null</code> permitted). 398 * 399 * @see #getSeriesVisibleInLegend() 400 * 401 * @deprecated This method should no longer be used (as of version 1.0.6). 402 * It is sufficient to rely on {@link #setSeriesVisibleInLegend(int, 403 * Boolean)} and {@link #setBaseSeriesVisibleInLegend(boolean)}. 404 */ 405 public void setSeriesVisibleInLegend(Boolean visible); 406 407 /** 408 * Sets the flag that controls the visibility of ALL series in the legend 409 * and sends a {@link RendererChangeEvent} to all registered listeners. 410 * This flag overrides the per series and default settings - you must set 411 * it to <code>null</code> if you want the other settings to apply. 412 * 413 * @param visible the flag (<code>null</code> permitted). 414 * @param notify notify listeners? 415 * 416 * @see #getSeriesVisibleInLegend() 417 * 418 * @deprecated This method should no longer be used (as of version 1.0.6). 419 * It is sufficient to rely on {@link #setSeriesVisibleInLegend(int, 420 * Boolean, boolean)} and {@link #setBaseSeriesVisibleInLegend(boolean, 421 * boolean)}. 422 */ 423 public void setSeriesVisibleInLegend(Boolean visible, boolean notify); 424 425 /** 426 * Returns the flag that controls whether a series is visible in the 427 * legend. This method returns only the "per series" settings - to 428 * incorporate the override and base settings as well, you need to use the 429 * {@link #isSeriesVisibleInLegend(int)} method. 430 * 431 * @param series the series index (zero-based). 432 * 433 * @return The flag (possibly <code>null</code>). 434 * 435 * @see #setSeriesVisibleInLegend(int, Boolean) 436 */ 437 public Boolean getSeriesVisibleInLegend(int series); 438 439 /** 440 * Sets the flag that controls whether a series is visible in the legend 441 * and sends a {@link RendererChangeEvent} to all registered listeners. 442 * 443 * @param series the series index (zero-based). 444 * @param visible the flag (<code>null</code> permitted). 445 * 446 * @see #getSeriesVisibleInLegend(int) 447 */ 448 public void setSeriesVisibleInLegend(int series, Boolean visible); 449 450 /** 451 * Sets the flag that controls whether a series is visible in the legend 452 * and, if requested, sends a {@link RendererChangeEvent} to all registered 453 * listeners. 454 * 455 * @param series the series index. 456 * @param visible the flag (<code>null</code> permitted). 457 * @param notify notify listeners? 458 * 459 * @see #getSeriesVisibleInLegend(int) 460 */ 461 public void setSeriesVisibleInLegend(int series, Boolean visible, 462 boolean notify); 463 464 /** 465 * Returns the base visibility in the legend for all series. 466 * 467 * @return The base visibility. 468 * 469 * @see #setBaseSeriesVisibleInLegend(boolean) 470 */ 471 public boolean getBaseSeriesVisibleInLegend(); 472 473 /** 474 * Sets the base visibility in the legend and sends a 475 * {@link RendererChangeEvent} to all registered listeners. 476 * 477 * @param visible the flag. 478 * 479 * @see #getBaseSeriesVisibleInLegend() 480 */ 481 public void setBaseSeriesVisibleInLegend(boolean visible); 482 483 /** 484 * Sets the base visibility in the legend and, if requested, sends 485 * a {@link RendererChangeEvent} to all registered listeners. 486 * 487 * @param visible the visibility. 488 * @param notify notify listeners? 489 * 490 * @see #getBaseSeriesVisibleInLegend() 491 */ 492 public void setBaseSeriesVisibleInLegend(boolean visible, boolean notify); 493 494 495 //// PAINT ///////////////////////////////////////////////////////////////// 496 497 /** 498 * Returns the paint used to fill data items as they are drawn. 499 * 500 * @param row the row (or series) index (zero-based). 501 * @param column the column (or category) index (zero-based). 502 * 503 * @return The paint (never <code>null</code>). 504 */ 505 public Paint getItemPaint(int row, int column); 506 507 /** 508 * Sets the paint to be used for ALL series, and sends a 509 * {@link RendererChangeEvent} to all registered listeners. If this is 510 * <code>null</code>, the renderer will use the paint for the series. 511 * 512 * @param paint the paint (<code>null</code> permitted). 513 * 514 * @deprecated This method should no longer be used (as of version 1.0.6). 515 * It is sufficient to rely on {@link #setSeriesPaint(int, Paint)} and 516 * {@link #setBasePaint(Paint)}. 517 */ 518 public void setPaint(Paint paint); 519 520 /** 521 * Returns the paint used to fill an item drawn by the renderer. 522 * 523 * @param series the series index (zero-based). 524 * 525 * @return The paint (possibly <code>null</code>). 526 * 527 * @see #setSeriesPaint(int, Paint) 528 */ 529 public Paint getSeriesPaint(int series); 530 531 /** 532 * Sets the paint used for a series and sends a {@link RendererChangeEvent} 533 * to all registered listeners. 534 * 535 * @param series the series index (zero-based). 536 * @param paint the paint (<code>null</code> permitted). 537 * 538 * @see #getSeriesPaint(int) 539 */ 540 public void setSeriesPaint(int series, Paint paint); 541 542 // FIXME: add setSeriesPaint(int, Paint, boolean)? 543 544 /** 545 * Returns the base paint. 546 * 547 * @return The base paint (never <code>null</code>). 548 * 549 * @see #setBasePaint(Paint) 550 */ 551 public Paint getBasePaint(); 552 553 /** 554 * Sets the base paint and sends a {@link RendererChangeEvent} to all 555 * registered listeners. 556 * 557 * @param paint the paint (<code>null</code> not permitted). 558 * 559 * @see #getBasePaint() 560 */ 561 public void setBasePaint(Paint paint); 562 563 // FIXME: add setBasePaint(int, Paint, boolean)? 564 565 //// FILL PAINT ///////////////////////////////////////////////////////// 566 567// /** 568// * Returns the paint used to fill data items as they are drawn. 569// * 570// * @param row the row (or series) index (zero-based). 571// * @param column the column (or category) index (zero-based). 572// * 573// * @return The paint (never <code>null</code>). 574// */ 575// public Paint getItemFillPaint(int row, int column); 576// 577// /** 578// * Returns the paint used to fill an item drawn by the renderer. 579// * 580// * @param series the series (zero-based index). 581// * 582// * @return The paint (possibly <code>null</code>). 583// * 584// * @see #setSeriesFillPaint(int, Paint) 585// */ 586// public Paint getSeriesFillPaint(int series); 587// 588// /** 589// * Sets the paint used for a series outline and sends a 590// * {@link RendererChangeEvent} to all registered listeners. 591// * 592// * @param series the series index (zero-based). 593// * @param paint the paint (<code>null</code> permitted). 594// * 595// * @see #getSeriesFillPaint(int) 596// */ 597// public void setSeriesFillPaint(int series, Paint paint); 598// 599// /** 600// * Returns the base outline paint. 601// * 602// * @return The paint (never <code>null</code>). 603// * 604// * @see #setBaseFillPaint(Paint) 605// */ 606// public Paint getBaseFillPaint(); 607// 608// /** 609// * Sets the base outline paint and sends a {@link RendererChangeEvent} to 610// * all registered listeners. 611// * 612// * @param paint the paint (<code>null</code> not permitted). 613// * 614// * @see #getBaseFillPaint() 615// */ 616// public void setBaseFillPaint(Paint paint); 617 618 //// OUTLINE PAINT ///////////////////////////////////////////////////////// 619 620 /** 621 * Returns the paint used to outline data items as they are drawn. 622 * 623 * @param row the row (or series) index (zero-based). 624 * @param column the column (or category) index (zero-based). 625 * 626 * @return The paint (never <code>null</code>). 627 */ 628 public Paint getItemOutlinePaint(int row, int column); 629 630 /** 631 * Sets the outline paint for ALL series (optional). 632 * 633 * @param paint the paint (<code>null</code> permitted). 634 * 635 * @deprecated This method should no longer be used (as of version 1.0.6). 636 * It is sufficient to rely on {@link #setSeriesOutlinePaint(int, 637 * Paint)} and {@link #setBaseOutlinePaint(Paint)}. 638 */ 639 public void setOutlinePaint(Paint paint); 640 641 /** 642 * Returns the paint used to outline an item drawn by the renderer. 643 * 644 * @param series the series (zero-based index). 645 * 646 * @return The paint (possibly <code>null</code>). 647 * 648 * @see #setSeriesOutlinePaint(int, Paint) 649 */ 650 public Paint getSeriesOutlinePaint(int series); 651 652 /** 653 * Sets the paint used for a series outline and sends a 654 * {@link RendererChangeEvent} to all registered listeners. 655 * 656 * @param series the series index (zero-based). 657 * @param paint the paint (<code>null</code> permitted). 658 * 659 * @see #getSeriesOutlinePaint(int) 660 */ 661 public void setSeriesOutlinePaint(int series, Paint paint); 662 663 // FIXME: add setSeriesOutlinePaint(int, Paint, boolean)? 664 665 /** 666 * Returns the base outline paint. 667 * 668 * @return The paint (never <code>null</code>). 669 * 670 * @see #setBaseOutlinePaint(Paint) 671 */ 672 public Paint getBaseOutlinePaint(); 673 674 /** 675 * Sets the base outline paint and sends a {@link RendererChangeEvent} to 676 * all registered listeners. 677 * 678 * @param paint the paint (<code>null</code> not permitted). 679 * 680 * @see #getBaseOutlinePaint() 681 */ 682 public void setBaseOutlinePaint(Paint paint); 683 684 // FIXME: add setBaseOutlinePaint(Paint, boolean)? 685 686 //// STROKE //////////////////////////////////////////////////////////////// 687 688 /** 689 * Returns the stroke used to draw data items. 690 * 691 * @param row the row (or series) index (zero-based). 692 * @param column the column (or category) index (zero-based). 693 * 694 * @return The stroke (never <code>null</code>). 695 */ 696 public Stroke getItemStroke(int row, int column); 697 698 /** 699 * Sets the stroke for ALL series and sends a {@link RendererChangeEvent} 700 * to all registered listeners. 701 * 702 * @param stroke the stroke (<code>null</code> permitted). 703 * 704 * @deprecated This method should no longer be used (as of version 1.0.6). 705 * It is sufficient to rely on {@link #setSeriesStroke(int, Stroke)} 706 * and {@link #setBaseStroke(Stroke)}. 707 */ 708 public void setStroke(Stroke stroke); 709 710 /** 711 * Returns the stroke used to draw the items in a series. 712 * 713 * @param series the series (zero-based index). 714 * 715 * @return The stroke (never <code>null</code>). 716 * 717 * @see #setSeriesStroke(int, Stroke) 718 */ 719 public Stroke getSeriesStroke(int series); 720 721 /** 722 * Sets the stroke used for a series and sends a 723 * {@link RendererChangeEvent} to all registered listeners. 724 * 725 * @param series the series index (zero-based). 726 * @param stroke the stroke (<code>null</code> permitted). 727 * 728 * @see #getSeriesStroke(int) 729 */ 730 public void setSeriesStroke(int series, Stroke stroke); 731 732 // FIXME: add setSeriesStroke(int, Stroke, boolean) ? 733 734 /** 735 * Returns the base stroke. 736 * 737 * @return The base stroke (never <code>null</code>). 738 * 739 * @see #setBaseStroke(Stroke) 740 */ 741 public Stroke getBaseStroke(); 742 743 /** 744 * Sets the base stroke and sends a {@link RendererChangeEvent} to all 745 * registered listeners. 746 * 747 * @param stroke the stroke (<code>null</code> not permitted). 748 * 749 * @see #getBaseStroke() 750 */ 751 public void setBaseStroke(Stroke stroke); 752 753 // FIXME: add setBaseStroke(Stroke, boolean) ? 754 755 //// OUTLINE STROKE //////////////////////////////////////////////////////// 756 757 /** 758 * Returns the stroke used to outline data items. 759 * <p> 760 * The default implementation passes control to the 761 * lookupSeriesOutlineStroke method. You can override this method if you 762 * require different behaviour. 763 * 764 * @param row the row (or series) index (zero-based). 765 * @param column the column (or category) index (zero-based). 766 * 767 * @return The stroke (never <code>null</code>). 768 */ 769 public Stroke getItemOutlineStroke(int row, int column); 770 771 /** 772 * Sets the outline stroke for ALL series and sends a 773 * {@link RendererChangeEvent} to all registered listeners. 774 * 775 * @param stroke the stroke (<code>null</code> permitted). 776 * 777 * @deprecated This method should no longer be used (as of version 1.0.6). 778 * It is sufficient to rely on {@link #setSeriesOutlineStroke(int, 779 * Stroke)} and {@link #setBaseOutlineStroke(Stroke)}. 780 */ 781 public void setOutlineStroke(Stroke stroke); 782 783 /** 784 * Returns the stroke used to outline the items in a series. 785 * 786 * @param series the series (zero-based index). 787 * 788 * @return The stroke (possibly <code>null</code>). 789 * 790 * @see #setSeriesOutlineStroke(int, Stroke) 791 */ 792 public Stroke getSeriesOutlineStroke(int series); 793 794 /** 795 * Sets the outline stroke used for a series and sends a 796 * {@link RendererChangeEvent} to all registered listeners. 797 * 798 * @param series the series index (zero-based). 799 * @param stroke the stroke (<code>null</code> permitted). 800 * 801 * @see #getSeriesOutlineStroke(int) 802 */ 803 public void setSeriesOutlineStroke(int series, Stroke stroke); 804 805 // FIXME: add setSeriesOutlineStroke(int, Stroke, boolean) ? 806 807 /** 808 * Returns the base outline stroke. 809 * 810 * @return The stroke (never <code>null</code>). 811 * 812 * @see #setBaseOutlineStroke(Stroke) 813 */ 814 public Stroke getBaseOutlineStroke(); 815 816 /** 817 * Sets the base outline stroke and sends a {@link RendererChangeEvent} to 818 * all registered listeners. 819 * 820 * @param stroke the stroke (<code>null</code> not permitted). 821 * 822 * @see #getBaseOutlineStroke() 823 */ 824 public void setBaseOutlineStroke(Stroke stroke); 825 826 // FIXME: add setBaseOutlineStroke(Stroke, boolean) ? 827 828 //// SHAPE ///////////////////////////////////////////////////////////////// 829 830 /** 831 * Returns a shape used to represent a data item. 832 * 833 * @param row the row (or series) index (zero-based). 834 * @param column the column (or category) index (zero-based). 835 * 836 * @return The shape (never <code>null</code>). 837 */ 838 public Shape getItemShape(int row, int column); 839 840 /** 841 * Sets the shape for ALL series (optional) and sends a 842 * {@link RendererChangeEvent} to all registered listeners. 843 * 844 * @param shape the shape (<code>null</code> permitted). 845 * 846 * @deprecated This method should no longer be used (as of version 1.0.6). 847 * It is sufficient to rely on {@link #setSeriesShape(int, Shape)} and 848 * {@link #setBaseShape(Shape)}. 849 */ 850 public void setShape(Shape shape); 851 852 /** 853 * Returns a shape used to represent the items in a series. 854 * 855 * @param series the series (zero-based index). 856 * 857 * @return The shape (possibly <code>null</code>). 858 * 859 * @see #setSeriesShape(int, Shape) 860 */ 861 public Shape getSeriesShape(int series); 862 863 /** 864 * Sets the shape used for a series and sends a {@link RendererChangeEvent} 865 * to all registered listeners. 866 * 867 * @param series the series index (zero-based). 868 * @param shape the shape (<code>null</code> permitted). 869 * 870 * @see #getSeriesShape(int) 871 */ 872 public void setSeriesShape(int series, Shape shape); 873 874 // FIXME: add setSeriesShape(int, Shape, boolean) ? 875 876 /** 877 * Returns the base shape. 878 * 879 * @return The shape (never <code>null</code>). 880 * 881 * @see #setBaseShape(Shape) 882 */ 883 public Shape getBaseShape(); 884 885 /** 886 * Sets the base shape and sends a {@link RendererChangeEvent} to all 887 * registered listeners. 888 * 889 * @param shape the shape (<code>null</code> not permitted). 890 * 891 * @see #getBaseShape() 892 */ 893 public void setBaseShape(Shape shape); 894 895 // FIXME: add setBaseShape(Shape, boolean) ? 896 897 // ITEM LABELS VISIBLE 898 899 /** 900 * Returns <code>true</code> if an item label is visible, and 901 * <code>false</code> otherwise. 902 * 903 * @param row the row index (zero-based). 904 * @param column the column index (zero-based). 905 * 906 * @return A boolean. 907 */ 908 public boolean isItemLabelVisible(int row, int column); 909 910 /** 911 * Sets a flag that controls whether or not the item labels for ALL series 912 * are visible. 913 * 914 * @param visible the flag. 915 * 916 * @see #setItemLabelsVisible(Boolean) 917 * 918 * @deprecated This method should no longer be used (as of version 1.0.6). 919 * It is sufficient to rely on {@link #setSeriesItemLabelsVisible(int, 920 * Boolean)} and {@link #setBaseItemLabelsVisible(boolean)}. 921 */ 922 public void setItemLabelsVisible(boolean visible); 923 924 /** 925 * Sets a flag that controls whether or not the item labels for ALL series 926 * are visible. 927 * 928 * @param visible the flag (<code>null</code> permitted). 929 * 930 * @see #setItemLabelsVisible(boolean) 931 * 932 * @deprecated This method should no longer be used (as of version 1.0.6). 933 * It is sufficient to rely on {@link #setSeriesItemLabelsVisible(int, 934 * Boolean)} and {@link #setBaseItemLabelsVisible(boolean)}. 935 */ 936 public void setItemLabelsVisible(Boolean visible); 937 938 /** 939 * Sets the visibility of item labels for ALL series and, if requested, 940 * sends a {@link RendererChangeEvent} to all registered listeners. 941 * 942 * @param visible a flag that controls whether or not the item labels are 943 * visible (<code>null</code> permitted). 944 * @param notify a flag that controls whether or not listeners are 945 * notified. 946 * 947 * @deprecated This method should no longer be used (as of version 1.0.6). 948 * It is sufficient to rely on {@link #setSeriesItemLabelsVisible(int, 949 * Boolean, boolean)} and {@link #setBaseItemLabelsVisible(Boolean, 950 * boolean)}. 951 */ 952 public void setItemLabelsVisible(Boolean visible, boolean notify); 953 954 /** 955 * Returns <code>true</code> if the item labels for a series are visible, 956 * and <code>false</code> otherwise. 957 * 958 * @param series the series index (zero-based). 959 * 960 * @return A boolean. 961 * 962 * @see #setSeriesItemLabelsVisible(int, Boolean) 963 */ 964 public boolean isSeriesItemLabelsVisible(int series); 965 966 /** 967 * Sets a flag that controls the visibility of the item labels for a series. 968 * 969 * @param series the series index (zero-based). 970 * @param visible the flag. 971 * 972 * @see #isSeriesItemLabelsVisible(int) 973 */ 974 public void setSeriesItemLabelsVisible(int series, boolean visible); 975 976 /** 977 * Sets a flag that controls the visibility of the item labels for a series. 978 * 979 * @param series the series index (zero-based). 980 * @param visible the flag (<code>null</code> permitted). 981 * 982 * @see #isSeriesItemLabelsVisible(int) 983 */ 984 public void setSeriesItemLabelsVisible(int series, Boolean visible); 985 986 /** 987 * Sets the visibility of item labels for a series and, if requested, sends 988 * a {@link RendererChangeEvent} to all registered listeners. 989 * 990 * @param series the series index (zero-based). 991 * @param visible the visible flag. 992 * @param notify a flag that controls whether or not listeners are 993 * notified. 994 * 995 * @see #isSeriesItemLabelsVisible(int) 996 */ 997 public void setSeriesItemLabelsVisible(int series, Boolean visible, 998 boolean notify); 999 1000 /** 1001 * Returns the base setting for item label visibility. A <code>null</code> 1002 * result should be interpreted as equivalent to <code>Boolean.FALSE</code> 1003 * (this is an error in the API design, the return value should have been 1004 * a boolean primitive). 1005 * 1006 * @return A flag (possibly <code>null</code>). 1007 * 1008 * @see #setBaseItemLabelsVisible(Boolean) 1009 */ 1010 public Boolean getBaseItemLabelsVisible(); 1011 1012 /** 1013 * Sets the base flag that controls whether or not item labels are visible 1014 * and sends a {@link RendererChangeEvent} to all registered listeners. 1015 * 1016 * @param visible the flag. 1017 * 1018 * @see #getBaseItemLabelsVisible() 1019 */ 1020 public void setBaseItemLabelsVisible(boolean visible); 1021 1022 /** 1023 * Sets the base setting for item label visibility and sends a 1024 * {@link RendererChangeEvent} to all registered listeners. 1025 * 1026 * @param visible the flag (<code>null</code> permitted). 1027 * 1028 * @see #getBaseItemLabelsVisible() 1029 */ 1030 public void setBaseItemLabelsVisible(Boolean visible); 1031 1032 /** 1033 * Sets the base visibility for item labels and, if requested, sends a 1034 * {@link RendererChangeEvent} to all registered listeners. 1035 * 1036 * @param visible the visibility flag. 1037 * @param notify a flag that controls whether or not listeners are 1038 * notified. 1039 * 1040 * @see #getBaseItemLabelsVisible() 1041 */ 1042 public void setBaseItemLabelsVisible(Boolean visible, boolean notify); 1043 1044 // ITEM LABEL GENERATOR 1045 1046 /** 1047 * Returns the item label generator for the specified data item. 1048 * 1049 * @param series the series index (zero-based). 1050 * @param item the item index (zero-based). 1051 * 1052 * @return The generator (possibly <code>null</code>). 1053 */ 1054 public CategoryItemLabelGenerator getItemLabelGenerator(int series, 1055 int item); 1056 1057 /** 1058 * Sets the item label generator for ALL series and sends a 1059 * {@link RendererChangeEvent} to all registered listeners. This overrides 1060 * the per-series settings. 1061 * 1062 * @param generator the generator (<code>null</code> permitted). 1063 * 1064 * @deprecated This method should no longer be used (as of version 1.0.6). 1065 * It is sufficient to rely on {@link #setSeriesItemLabelGenerator(int, 1066 * CategoryItemLabelGenerator)} and 1067 * {@link #setBaseItemLabelGenerator(CategoryItemLabelGenerator)}. 1068 */ 1069 public void setItemLabelGenerator(CategoryItemLabelGenerator generator); 1070 1071 /** 1072 * Returns the item label generator for a series. 1073 * 1074 * @param series the series index (zero-based). 1075 * 1076 * @return The label generator (possibly <code>null</code>). 1077 * 1078 * @see #setSeriesItemLabelGenerator(int, CategoryItemLabelGenerator) 1079 */ 1080 public CategoryItemLabelGenerator getSeriesItemLabelGenerator(int series); 1081 1082 /** 1083 * Sets the item label generator for a series and sends a 1084 * {@link RendererChangeEvent} to all registered listeners. 1085 * 1086 * @param series the series index (zero-based). 1087 * @param generator the generator. 1088 * 1089 * @see #getSeriesItemLabelGenerator(int) 1090 */ 1091 public void setSeriesItemLabelGenerator(int series, 1092 CategoryItemLabelGenerator generator); 1093 1094 // FIXME: add setSeriesItemLabelGenerator(int, CategoryItemLabelGenerator, 1095 // boolean) 1096 1097 /** 1098 * Returns the base item label generator. 1099 * 1100 * @return The generator (possibly <code>null</code>). 1101 * 1102 * @see #setBaseItemLabelGenerator(CategoryItemLabelGenerator) 1103 */ 1104 public CategoryItemLabelGenerator getBaseItemLabelGenerator(); 1105 1106 /** 1107 * Sets the base item label generator and sends a 1108 * {@link RendererChangeEvent} to all registered listeners. 1109 * 1110 * @param generator the generator (<code>null</code> permitted). 1111 * 1112 * @see #getBaseItemLabelGenerator() 1113 */ 1114 public void setBaseItemLabelGenerator(CategoryItemLabelGenerator generator); 1115 1116 // FIXME: add setBaseItemLabelGenerator(CategoryItemLabelGenerator, 1117 // boolean) ? 1118 1119 // TOOL TIP GENERATOR 1120 1121 /** 1122 * Returns the tool tip generator that should be used for the specified 1123 * item. This method looks up the generator using the "three-layer" 1124 * approach outlined in the general description of this interface. 1125 * 1126 * @param row the row index (zero-based). 1127 * @param column the column index (zero-based). 1128 * 1129 * @return The generator (possibly <code>null</code>). 1130 */ 1131 public CategoryToolTipGenerator getToolTipGenerator(int row, int column); 1132 1133 /** 1134 * Returns the tool tip generator that will be used for ALL items in the 1135 * dataset (the "layer 0" generator). 1136 * 1137 * @return A tool tip generator (possibly <code>null</code>). 1138 * 1139 * @see #setToolTipGenerator(CategoryToolTipGenerator) 1140 * 1141 * @deprecated This method should no longer be used (as of version 1.0.6). 1142 * It is sufficient to rely on {@link #getSeriesToolTipGenerator(int)} 1143 * and {@link #getBaseToolTipGenerator()}. 1144 */ 1145 public CategoryToolTipGenerator getToolTipGenerator(); 1146 1147 /** 1148 * Sets the tool tip generator for ALL series and sends a 1149 * {@link org.jfree.chart.event.RendererChangeEvent} to all registered 1150 * listeners. 1151 * 1152 * @param generator the generator (<code>null</code> permitted). 1153 * 1154 * @see #getToolTipGenerator() 1155 * 1156 * @deprecated This method should no longer be used (as of version 1.0.6). 1157 * It is sufficient to rely on {@link #setSeriesToolTipGenerator(int, 1158 * CategoryToolTipGenerator)} and 1159 * {@link #setBaseToolTipGenerator(CategoryToolTipGenerator)}. 1160 */ 1161 public void setToolTipGenerator(CategoryToolTipGenerator generator); 1162 1163 /** 1164 * Returns the tool tip generator for the specified series (a "layer 1" 1165 * generator). 1166 * 1167 * @param series the series index (zero-based). 1168 * 1169 * @return The tool tip generator (possibly <code>null</code>). 1170 * 1171 * @see #setSeriesToolTipGenerator(int, CategoryToolTipGenerator) 1172 */ 1173 public CategoryToolTipGenerator getSeriesToolTipGenerator(int series); 1174 1175 /** 1176 * Sets the tool tip generator for a series and sends a 1177 * {@link org.jfree.chart.event.RendererChangeEvent} to all registered 1178 * listeners. 1179 * 1180 * @param series the series index (zero-based). 1181 * @param generator the generator (<code>null</code> permitted). 1182 * 1183 * @see #getSeriesToolTipGenerator(int) 1184 */ 1185 public void setSeriesToolTipGenerator(int series, 1186 CategoryToolTipGenerator generator); 1187 1188 // FIXME: add setSeriesToolTipGenerator(int, CategoryToolTipGenerator, 1189 // boolean) ? 1190 1191 /** 1192 * Returns the base tool tip generator (the "layer 2" generator). 1193 * 1194 * @return The tool tip generator (possibly <code>null</code>). 1195 * 1196 * @see #setBaseToolTipGenerator(CategoryToolTipGenerator) 1197 */ 1198 public CategoryToolTipGenerator getBaseToolTipGenerator(); 1199 1200 /** 1201 * Sets the base tool tip generator and sends a 1202 * {@link org.jfree.chart.event.RendererChangeEvent} to all registered 1203 * listeners. 1204 * 1205 * @param generator the generator (<code>null</code> permitted). 1206 * 1207 * @see #getBaseToolTipGenerator() 1208 */ 1209 public void setBaseToolTipGenerator(CategoryToolTipGenerator generator); 1210 1211 // FIXME: add setBaseToolTipGenerator(CategoryToolTipGenerator, boolean) ? 1212 1213 //// ITEM LABEL FONT ////////////////////////////////////////////////////// 1214 1215 /** 1216 * Returns the font for an item label. 1217 * 1218 * @param row the row index (zero-based). 1219 * @param column the column index (zero-based). 1220 * 1221 * @return The font (never <code>null</code>). 1222 */ 1223 public Font getItemLabelFont(int row, int column); 1224 1225 /** 1226 * Returns the font used for all item labels. This may be 1227 * <code>null</code>, in which case the per series font settings will apply. 1228 * 1229 * @return The font (possibly <code>null</code>). 1230 * 1231 * @see #setItemLabelFont(Font) 1232 * 1233 * @deprecated This method should no longer be used (as of version 1.0.6). 1234 * It is sufficient to rely on {@link #getSeriesItemLabelFont(int)} and 1235 * {@link #getBaseItemLabelFont()}. 1236 */ 1237 public Font getItemLabelFont(); 1238 1239 /** 1240 * Sets the item label font for ALL series and sends a 1241 * {@link RendererChangeEvent} to all registered listeners. You can set 1242 * this to <code>null</code> if you prefer to set the font on a per series 1243 * basis. 1244 * 1245 * @param font the font (<code>null</code> permitted). 1246 * 1247 * @see #getItemLabelFont() 1248 * 1249 * @deprecated This method should no longer be used (as of version 1.0.6). 1250 * It is sufficient to rely on {@link #setSeriesItemLabelFont(int, 1251 * Font)} and {@link #setBaseItemLabelFont(Font)}. 1252 */ 1253 public void setItemLabelFont(Font font); 1254 1255 /** 1256 * Returns the font for all the item labels in a series. 1257 * 1258 * @param series the series index (zero-based). 1259 * 1260 * @return The font (possibly <code>null</code>). 1261 * 1262 * @see #setSeriesItemLabelFont(int, Font) 1263 */ 1264 public Font getSeriesItemLabelFont(int series); 1265 1266 /** 1267 * Sets the item label font for a series and sends a 1268 * {@link RendererChangeEvent} to all registered listeners. 1269 * 1270 * @param series the series index (zero-based). 1271 * @param font the font (<code>null</code> permitted). 1272 * 1273 * @see #getSeriesItemLabelFont(int) 1274 */ 1275 public void setSeriesItemLabelFont(int series, Font font); 1276 1277 // FIXME: add setSeriesItemLabelFont(int, Font, boolean) ? 1278 1279 /** 1280 * Returns the base item label font (this is used when no other font 1281 * setting is available). 1282 * 1283 * @return The font (<code>never</code> null). 1284 * 1285 * @see #setBaseItemLabelFont(Font) 1286 */ 1287 public Font getBaseItemLabelFont(); 1288 1289 /** 1290 * Sets the base item label font and sends a {@link RendererChangeEvent} 1291 * to all registered listeners. 1292 * 1293 * @param font the font (<code>null</code> not permitted). 1294 * 1295 * @see #getBaseItemLabelFont() 1296 */ 1297 public void setBaseItemLabelFont(Font font); 1298 1299 // FIXME: add setBaseItemLabelFont(Font, boolean) ? 1300 1301 //// ITEM LABEL PAINT ///////////////////////////////////////////////////// 1302 1303 /** 1304 * Returns the paint used to draw an item label. 1305 * 1306 * @param row the row index (zero based). 1307 * @param column the column index (zero based). 1308 * 1309 * @return The paint (never <code>null</code>). 1310 */ 1311 public Paint getItemLabelPaint(int row, int column); 1312 1313 /** 1314 * Returns the paint used for all item labels. This may be 1315 * <code>null</code>, in which case the per series paint settings will 1316 * apply. 1317 * 1318 * @return The paint (possibly <code>null</code>). 1319 * 1320 * @see #setItemLabelPaint(Paint) 1321 * 1322 * @deprecated This method should no longer be used (as of version 1.0.6). 1323 * It is sufficient to rely on {@link #getSeriesItemLabelPaint(int)} 1324 * and {@link #getBaseItemLabelPaint()}. 1325 */ 1326 public Paint getItemLabelPaint(); 1327 1328 /** 1329 * Sets the item label paint for ALL series and sends a 1330 * {@link RendererChangeEvent} to all registered listeners. 1331 * 1332 * @param paint the paint (<code>null</code> permitted). 1333 * 1334 * @see #getItemLabelPaint() 1335 * 1336 * @deprecated This method should no longer be used (as of version 1.0.6). 1337 * It is sufficient to rely on {@link #setSeriesItemLabelPaint(int, 1338 * Paint)} and {@link #setBaseItemLabelPaint(Paint)}. 1339 */ 1340 public void setItemLabelPaint(Paint paint); 1341 1342 /** 1343 * Returns the paint used to draw the item labels for a series. 1344 * 1345 * @param series the series index (zero based). 1346 * 1347 * @return The paint (possibly <code>null</code>). 1348 * 1349 * @see #setSeriesItemLabelPaint(int, Paint) 1350 */ 1351 public Paint getSeriesItemLabelPaint(int series); 1352 1353 /** 1354 * Sets the item label paint for a series and sends a 1355 * {@link RendererChangeEvent} to all registered listeners. 1356 * 1357 * @param series the series (zero based index). 1358 * @param paint the paint (<code>null</code> permitted). 1359 * 1360 * @see #getSeriesItemLabelPaint(int) 1361 */ 1362 public void setSeriesItemLabelPaint(int series, Paint paint); 1363 1364 // FIXME: add setSeriesItemLabelPaint(int, Paint, boolean) ? 1365 1366 /** 1367 * Returns the base item label paint. 1368 * 1369 * @return The paint (never <code>null</code>). 1370 * 1371 * @see #setBaseItemLabelPaint(Paint) 1372 */ 1373 public Paint getBaseItemLabelPaint(); 1374 1375 /** 1376 * Sets the base item label paint and sends a {@link RendererChangeEvent} 1377 * to all registered listeners. 1378 * 1379 * @param paint the paint (<code>null</code> not permitted). 1380 * 1381 * @see #getBaseItemLabelPaint() 1382 */ 1383 public void setBaseItemLabelPaint(Paint paint); 1384 1385 // FIXME: add setBaseItemLabelPaint(Paint, boolean) ? 1386 1387 // POSITIVE ITEM LABEL POSITION... 1388 1389 /** 1390 * Returns the item label position for positive values. 1391 * 1392 * @param row the row index (zero-based). 1393 * @param column the column index (zero-based). 1394 * 1395 * @return The item label position (never <code>null</code>). 1396 */ 1397 public ItemLabelPosition getPositiveItemLabelPosition(int row, int column); 1398 1399 /** 1400 * Returns the item label position for positive values in ALL series. 1401 * 1402 * @return The item label position (possibly <code>null</code>). 1403 * 1404 * @see #setPositiveItemLabelPosition(ItemLabelPosition) 1405 * 1406 * @deprecated This method should no longer be used (as of version 1.0.6). 1407 * It is sufficient to rely on 1408 * {@link #getSeriesPositiveItemLabelPosition(int)} 1409 * and {@link #getBasePositiveItemLabelPosition()}. 1410 */ 1411 public ItemLabelPosition getPositiveItemLabelPosition(); 1412 1413 /** 1414 * Sets the item label position for positive values in ALL series, and 1415 * sends a {@link RendererChangeEvent} to all registered listeners. You 1416 * need to set this to <code>null</code> to expose the settings for 1417 * individual series. 1418 * 1419 * @param position the position (<code>null</code> permitted). 1420 * 1421 * @see #getPositiveItemLabelPosition() 1422 * 1423 * @deprecated This method should no longer be used (as of version 1.0.6). 1424 * It is sufficient to rely on 1425 * {@link #setSeriesPositiveItemLabelPosition(int, ItemLabelPosition)} 1426 * and {@link #setBasePositiveItemLabelPosition(ItemLabelPosition)}. 1427 */ 1428 public void setPositiveItemLabelPosition(ItemLabelPosition position); 1429 1430 /** 1431 * Sets the positive item label position for ALL series and (if requested) 1432 * sends a {@link RendererChangeEvent} to all registered listeners. 1433 * 1434 * @param position the position (<code>null</code> permitted). 1435 * @param notify notify registered listeners? 1436 * 1437 * @see #getPositiveItemLabelPosition() 1438 * 1439 * @deprecated This method should no longer be used (as of version 1.0.6). 1440 * It is sufficient to rely on 1441 * {@link #setSeriesPositiveItemLabelPosition(int, ItemLabelPosition, 1442 * boolean)} and {@link #setBasePositiveItemLabelPosition( 1443 * ItemLabelPosition, boolean)}. 1444 */ 1445 public void setPositiveItemLabelPosition(ItemLabelPosition position, 1446 boolean notify); 1447 1448 /** 1449 * Returns the item label position for all positive values in a series. 1450 * 1451 * @param series the series index (zero-based). 1452 * 1453 * @return The item label position. 1454 * 1455 * @see #setSeriesPositiveItemLabelPosition(int, ItemLabelPosition) 1456 */ 1457 public ItemLabelPosition getSeriesPositiveItemLabelPosition(int series); 1458 1459 /** 1460 * Sets the item label position for all positive values in a series and 1461 * sends a {@link RendererChangeEvent} to all registered listeners. 1462 * 1463 * @param series the series index (zero-based). 1464 * @param position the position (<code>null</code> permitted). 1465 * 1466 * @see #getSeriesPositiveItemLabelPosition(int) 1467 */ 1468 public void setSeriesPositiveItemLabelPosition(int series, 1469 ItemLabelPosition position); 1470 1471 /** 1472 * Sets the item label position for all positive values in a series and (if 1473 * requested) sends a {@link RendererChangeEvent} to all registered 1474 * listeners. 1475 * 1476 * @param series the series index (zero-based). 1477 * @param position the position (<code>null</code> permitted). 1478 * @param notify notify registered listeners? 1479 * 1480 * @see #getSeriesPositiveItemLabelPosition(int) 1481 */ 1482 public void setSeriesPositiveItemLabelPosition(int series, 1483 ItemLabelPosition position, boolean notify); 1484 1485 /** 1486 * Returns the base positive item label position. 1487 * 1488 * @return The position. 1489 * 1490 * @see #setBasePositiveItemLabelPosition(ItemLabelPosition) 1491 */ 1492 public ItemLabelPosition getBasePositiveItemLabelPosition(); 1493 1494 /** 1495 * Sets the base positive item label position. 1496 * 1497 * @param position the position. 1498 * 1499 * @see #getBasePositiveItemLabelPosition() 1500 */ 1501 public void setBasePositiveItemLabelPosition(ItemLabelPosition position); 1502 1503 /** 1504 * Sets the base positive item label position and, if requested, sends a 1505 * {@link RendererChangeEvent} to all registered listeners. 1506 * 1507 * @param position the position. 1508 * @param notify notify registered listeners? 1509 * 1510 * @see #getBasePositiveItemLabelPosition() 1511 */ 1512 public void setBasePositiveItemLabelPosition(ItemLabelPosition position, 1513 boolean notify); 1514 1515 1516 // NEGATIVE ITEM LABEL POSITION... 1517 1518 /** 1519 * Returns the item label position for negative values. This method can be 1520 * overridden to provide customisation of the item label position for 1521 * individual data items. 1522 * 1523 * @param row the row index (zero-based). 1524 * @param column the column (zero-based). 1525 * 1526 * @return The item label position. 1527 */ 1528 public ItemLabelPosition getNegativeItemLabelPosition(int row, int column); 1529 1530 /** 1531 * Returns the item label position for negative values in ALL series. 1532 * 1533 * @return The item label position (possibly <code>null</code>). 1534 * 1535 * @see #setNegativeItemLabelPosition(ItemLabelPosition) 1536 * 1537 * @deprecated This method should no longer be used (as of version 1.0.6). 1538 * It is sufficient to rely on 1539 * {@link #getSeriesNegativeItemLabelPosition(int)} 1540 * and {@link #getBaseNegativeItemLabelPosition()}. 1541 */ 1542 public ItemLabelPosition getNegativeItemLabelPosition(); 1543 1544 /** 1545 * Sets the item label position for negative values in ALL series, and 1546 * sends a {@link RendererChangeEvent} to all registered listeners. You 1547 * need to set this to <code>null</code> to expose the settings for 1548 * individual series. 1549 * 1550 * @param position the position (<code>null</code> permitted). 1551 * 1552 * @see #getNegativeItemLabelPosition() 1553 * 1554 * @deprecated This method should no longer be used (as of version 1.0.6). 1555 * It is sufficient to rely on 1556 * {@link #setSeriesNegativeItemLabelPosition(int, ItemLabelPosition)} 1557 * and {@link #setBaseNegativeItemLabelPosition(ItemLabelPosition)}. 1558 */ 1559 public void setNegativeItemLabelPosition(ItemLabelPosition position); 1560 1561 /** 1562 * Sets the item label position for negative values in ALL series and (if 1563 * requested) sends a {@link RendererChangeEvent} to all registered 1564 * listeners. 1565 * 1566 * @param position the position (<code>null</code> permitted). 1567 * @param notify notify registered listeners? 1568 * 1569 * @see #getNegativeItemLabelPosition() 1570 * 1571 * @deprecated This method should no longer be used (as of version 1.0.6). 1572 * It is sufficient to rely on 1573 * {@link #setSeriesNegativeItemLabelPosition(int, ItemLabelPosition, 1574 * boolean)} and {@link #setBaseNegativeItemLabelPosition( 1575 * ItemLabelPosition, boolean)}. 1576 */ 1577 public void setNegativeItemLabelPosition(ItemLabelPosition position, 1578 boolean notify); 1579 1580 /** 1581 * Returns the item label position for all negative values in a series. 1582 * 1583 * @param series the series index (zero-based). 1584 * 1585 * @return The item label position. 1586 * 1587 * @see #setSeriesNegativeItemLabelPosition(int, ItemLabelPosition) 1588 */ 1589 public ItemLabelPosition getSeriesNegativeItemLabelPosition(int series); 1590 1591 /** 1592 * Sets the item label position for negative values in a series and sends a 1593 * {@link RendererChangeEvent} to all registered listeners. 1594 * 1595 * @param series the series index (zero-based). 1596 * @param position the position (<code>null</code> permitted). 1597 * 1598 * @see #getSeriesNegativeItemLabelPosition(int) 1599 */ 1600 public void setSeriesNegativeItemLabelPosition(int series, 1601 ItemLabelPosition position); 1602 1603 /** 1604 * Sets the item label position for negative values in a series and (if 1605 * requested) sends a {@link RendererChangeEvent} to all registered 1606 * listeners. 1607 * 1608 * @param series the series index (zero-based). 1609 * @param position the position (<code>null</code> permitted). 1610 * @param notify notify registered listeners? 1611 * 1612 * @see #getSeriesNegativeItemLabelPosition(int) 1613 */ 1614 public void setSeriesNegativeItemLabelPosition(int series, 1615 ItemLabelPosition position, 1616 boolean notify); 1617 1618 /** 1619 * Returns the base item label position for negative values. 1620 * 1621 * @return The position. 1622 * 1623 * @see #setBaseNegativeItemLabelPosition(ItemLabelPosition) 1624 */ 1625 public ItemLabelPosition getBaseNegativeItemLabelPosition(); 1626 1627 /** 1628 * Sets the base item label position for negative values and sends a 1629 * {@link RendererChangeEvent} to all registered listeners. 1630 * 1631 * @param position the position. 1632 * 1633 * @see #getBaseNegativeItemLabelPosition() 1634 */ 1635 public void setBaseNegativeItemLabelPosition(ItemLabelPosition position); 1636 1637 /** 1638 * Sets the base negative item label position and, if requested, sends a 1639 * {@link RendererChangeEvent} to all registered listeners. 1640 * 1641 * @param position the position. 1642 * @param notify notify registered listeners? 1643 * 1644 * @see #getBaseNegativeItemLabelPosition() 1645 */ 1646 public void setBaseNegativeItemLabelPosition(ItemLabelPosition position, 1647 boolean notify); 1648 1649 // CREATE ENTITIES 1650 // FIXME: these methods should be defined 1651 1652// public boolean getItemCreateEntity(int series, int item); 1653// 1654// public Boolean getSeriesCreateEntities(int series); 1655// 1656// public void setSeriesCreateEntities(int series, Boolean create); 1657// 1658// public void setSeriesCreateEntities(int series, Boolean create, 1659// boolean notify); 1660// 1661// public boolean getBaseCreateEntities(); 1662// 1663// public void setBaseCreateEntities(boolean create); 1664// 1665// public void setBaseCreateEntities(boolean create, boolean notify); 1666 1667 1668 // ITEM URL GENERATOR 1669 1670 /** 1671 * Returns the URL generator for an item. 1672 * 1673 * @param series the series index (zero-based). 1674 * @param item the item index (zero-based). 1675 * 1676 * @return The item URL generator. 1677 */ 1678 public CategoryURLGenerator getItemURLGenerator(int series, int item); 1679 1680 /** 1681 * Sets the item URL generator for ALL series. 1682 * 1683 * @param generator the generator. 1684 * 1685 * @see #getSeriesItemURLGenerator(int) 1686 * 1687 * @deprecated This method should no longer be used (as of version 1.0.6). 1688 * It is sufficient to rely on {@link #setSeriesItemURLGenerator(int, 1689 * CategoryURLGenerator)} and 1690 * {@link #setBaseItemURLGenerator(CategoryURLGenerator)}. 1691 */ 1692 public void setItemURLGenerator(CategoryURLGenerator generator); 1693 1694 /** 1695 * Returns the item URL generator for a series. 1696 * 1697 * @param series the series index (zero-based). 1698 * 1699 * @return The URL generator. 1700 * 1701 * @see #setSeriesItemURLGenerator(int, CategoryURLGenerator) 1702 */ 1703 public CategoryURLGenerator getSeriesItemURLGenerator(int series); 1704 1705 /** 1706 * Sets the item URL generator for a series. 1707 * 1708 * @param series the series index (zero-based). 1709 * @param generator the generator. 1710 * 1711 * @see #getSeriesItemURLGenerator(int) 1712 */ 1713 public void setSeriesItemURLGenerator(int series, 1714 CategoryURLGenerator generator); 1715 1716 // FIXME: add setSeriesItemURLGenerator(int, CategoryURLGenerator, boolean)? 1717 1718 /** 1719 * Returns the base item URL generator. 1720 * 1721 * @return The item URL generator (possibly <code>null</code>). 1722 * 1723 * @see #setBaseItemURLGenerator(CategoryURLGenerator) 1724 */ 1725 public CategoryURLGenerator getBaseItemURLGenerator(); 1726 1727 /** 1728 * Sets the base item URL generator and sends a {@link RendererChangeEvent} 1729 * to all registered listeners. 1730 * 1731 * @param generator the item URL generator (<code>null</code> permitted). 1732 * 1733 * @see #getBaseItemURLGenerator() 1734 */ 1735 public void setBaseItemURLGenerator(CategoryURLGenerator generator); 1736 1737 // FIXME: add setBaseItemURLGenerator(CategoryURLGenerator, boolean) ? 1738 1739 /** 1740 * Returns a legend item for a series. This method can return 1741 * <code>null</code>, in which case the series will have no entry in the 1742 * legend. 1743 * 1744 * @param datasetIndex the dataset index (zero-based). 1745 * @param series the series (zero-based index). 1746 * 1747 * @return The legend item (possibly <code>null</code>). 1748 */ 1749 public LegendItem getLegendItem(int datasetIndex, int series); 1750 1751 /** 1752 * Draws a background for the data area. 1753 * 1754 * @param g2 the graphics device. 1755 * @param plot the plot. 1756 * @param dataArea the data area. 1757 */ 1758 public void drawBackground(Graphics2D g2, CategoryPlot plot, 1759 Rectangle2D dataArea); 1760 1761 /** 1762 * Draws an outline for the data area. 1763 * 1764 * @param g2 the graphics device. 1765 * @param plot the plot. 1766 * @param dataArea the data area. 1767 */ 1768 public void drawOutline(Graphics2D g2, CategoryPlot plot, 1769 Rectangle2D dataArea); 1770 1771 /** 1772 * Draws a single data item. 1773 * 1774 * @param g2 the graphics device. 1775 * @param state state information for one chart. 1776 * @param dataArea the data plot area. 1777 * @param plot the plot. 1778 * @param domainAxis the domain axis. 1779 * @param rangeAxis the range axis. 1780 * @param dataset the data. 1781 * @param row the row index (zero-based). 1782 * @param column the column index (zero-based). 1783 * @param pass the pass index. 1784 */ 1785 public void drawItem(Graphics2D g2, CategoryItemRendererState state, 1786 Rectangle2D dataArea, CategoryPlot plot, CategoryAxis domainAxis, 1787 ValueAxis rangeAxis, CategoryDataset dataset, int row, int column, 1788 int pass); 1789 1790 /** 1791 * Draws a grid line against the domain axis. 1792 * 1793 * @param g2 the graphics device. 1794 * @param plot the plot. 1795 * @param dataArea the area for plotting data (not yet adjusted for any 1796 * 3D effect). 1797 * @param value the value. 1798 * 1799 * @see #drawRangeGridline(Graphics2D, CategoryPlot, ValueAxis, 1800 * Rectangle2D, double) 1801 */ 1802 public void drawDomainGridline(Graphics2D g2, CategoryPlot plot, 1803 Rectangle2D dataArea, double value); 1804 1805 /** 1806 * Draws a grid line against the range axis. 1807 * 1808 * @param g2 the graphics device. 1809 * @param plot the plot. 1810 * @param axis the value axis. 1811 * @param dataArea the area for plotting data (not yet adjusted for any 1812 * 3D effect). 1813 * @param value the value. 1814 * 1815 * @see #drawDomainGridline(Graphics2D, CategoryPlot, Rectangle2D, double) 1816 */ 1817 public void drawRangeGridline(Graphics2D g2, CategoryPlot plot, 1818 ValueAxis axis, Rectangle2D dataArea, double value); 1819 1820 /** 1821 * Draws a line (or some other marker) to indicate a particular category on 1822 * the domain axis. 1823 * 1824 * @param g2 the graphics device. 1825 * @param plot the plot. 1826 * @param axis the category axis. 1827 * @param marker the marker. 1828 * @param dataArea the area for plotting data (not including 3D effect). 1829 * 1830 * @see #drawRangeMarker(Graphics2D, CategoryPlot, ValueAxis, Marker, 1831 * Rectangle2D) 1832 */ 1833 public void drawDomainMarker(Graphics2D g2, CategoryPlot plot, 1834 CategoryAxis axis, CategoryMarker marker, Rectangle2D dataArea); 1835 1836 /** 1837 * Draws a line (or some other marker) to indicate a particular value on 1838 * the range axis. 1839 * 1840 * @param g2 the graphics device. 1841 * @param plot the plot. 1842 * @param axis the value axis. 1843 * @param marker the marker. 1844 * @param dataArea the area for plotting data (not including 3D effect). 1845 * 1846 * @see #drawDomainMarker(Graphics2D, CategoryPlot, CategoryAxis, 1847 * CategoryMarker, Rectangle2D) 1848 */ 1849 public void drawRangeMarker(Graphics2D g2, CategoryPlot plot, 1850 ValueAxis axis, Marker marker, Rectangle2D dataArea); 1851 1852 /** 1853 * Returns the Java2D coordinate for the middle of the specified data item. 1854 * 1855 * @param rowKey the row key. 1856 * @param columnKey the column key. 1857 * @param dataset the dataset. 1858 * @param axis the axis. 1859 * @param area the data area. 1860 * @param edge the edge along which the axis lies. 1861 * 1862 * @return The Java2D coordinate for the middle of the item. 1863 * 1864 * @since 1.0.11 1865 */ 1866 public double getItemMiddle(Comparable rowKey, Comparable columnKey, 1867 CategoryDataset dataset, CategoryAxis axis, Rectangle2D area, 1868 RectangleEdge edge); 1869 1870}