    001    /* ===========================================================
    002     * JFreeChart : a free chart library for the Java(tm) platform
    003     * ===========================================================
    004     *
    005     * (C) Copyright 2000-2011, 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     * LegendItemBlockContainer.java
    029     * -----------------------------
    030     * (C) Copyright 2006-2008, by Object Refinery Limited.
    031     *
    032     * Original Author:  David Gilbert (for Object Refinery Limited);
    033     * Contributor(s):   -;
    034     *
    035     * Changes
    036     * -------
    037     * 20-Jul-2006 : Version 1 (DG);
    038     * 06-Oct-2006 : Added tooltip and URL text fields (DG);
    039     * 18-May-2007 : Added seriesKey and dataset fields (DG);
    040     *
    041     */
    042
    043    package org.jfree.chart.title;
    044
    045    import java.awt.Graphics2D;
    046    import java.awt.Shape;
    047    import java.awt.geom.Rectangle2D;
    048
    049    import org.jfree.chart.block.Arrangement;
    050    import org.jfree.chart.block.BlockContainer;
    051    import org.jfree.chart.block.BlockResult;
    052    import org.jfree.chart.block.EntityBlockParams;
    053    import org.jfree.chart.block.EntityBlockResult;
    054    import org.jfree.chart.entity.EntityCollection;
    055    import org.jfree.chart.entity.LegendItemEntity;
    056    import org.jfree.chart.entity.StandardEntityCollection;
    057    import org.jfree.data.general.Dataset;
    058
    059    /**
    060     * A container that holds all the pieces of a single legend item.
    061     *
    062     * @since 1.0.2
    063     */
    064    public class LegendItemBlockContainer extends BlockContainer {
    065
    066        /**
    067         * The dataset.
    068         *
    069         * @since 1.0.6
    070         */
    071        private Dataset dataset;
    072
    073        /**
    074         * The series key.
    075         *
    076         * @since 1.0.6
    077         */
    078        private Comparable seriesKey;
    079
    080        /** The dataset index. */
    081        private int datasetIndex;
    082
    083        /** The series index. */
    084        private int series;
    085
    086        /** The tool tip text (can be <code>null</code>). */
    087        private String toolTipText;
    088
    089        /** The URL text (can be <code>null</code>). */
    090        private String urlText;
    091
    092        /**
    093         * Creates a new legend item block.
    094         *
    095         * @param arrangement  the arrangement.
    096         * @param datasetIndex  the dataset index.
    097         * @param series  the series index.
    098         *
    099         * @deprecated As of 1.0.6, use the other constructor.
    100         */
    101        public LegendItemBlockContainer(Arrangement arrangement, int datasetIndex,
    102                int series) {
    103            super(arrangement);
    104            this.datasetIndex = datasetIndex;
    105            this.series = series;
    106        }
    107
    108        /**
    109         * Creates a new legend item block.
    110         *
    111         * @param arrangement  the arrangement.
    112         * @param dataset  the dataset.
    113         * @param seriesKey  the series key.
    114         *
    115         * @since 1.0.6
    116         */
    117        public LegendItemBlockContainer(Arrangement arrangement, Dataset dataset,
    118                Comparable seriesKey) {
    119            super(arrangement);
    120            this.dataset = dataset;
    121            this.seriesKey = seriesKey;
    122        }
    123
    124        /**
    125         * Returns a reference to the dataset for the associated legend item.
    126         *
    127         * @return A dataset reference.
    128         *
    129         * @since 1.0.6
    130         */
    131        public Dataset getDataset() {
    132            return this.dataset;
    133        }
    134
    135        /**
    136         * Returns the series key.
    137         *
    138         * @return The series key.
    139         *
    140         * @since 1.0.6
    141         */
    142        public Comparable getSeriesKey() {
    143            return this.seriesKey;
    144        }
    145
    146        /**
    147         * Returns the dataset index.
    148         *
    149         * @return The dataset index.
    150         *
    151         * @deprecated As of 1.0.6, use the {@link #getDataset()} method.
    152         */
    153        public int getDatasetIndex() {
    154            return this.datasetIndex;
    155        }
    156
    157        /**
    158         * Returns the series index.
    159         *
    160         * @return The series index.
    161         */
    162        public int getSeriesIndex() {
    163            return this.series;
    164        }
    165
    166        /**
    167         * Returns the tool tip text.
    168         *
    169         * @return The tool tip text (possibly <code>null</code>).
    170         *
    171         * @since 1.0.3
    172         */
    173        public String getToolTipText() {
    174            return this.toolTipText;
    175        }
    176
    177        /**
    178         * Sets the tool tip text.
    179         *
    180         * @param text  the text (<code>null</code> permitted).
    181         *
    182         * @since 1.0.3
    183         */
    184        public void setToolTipText(String text) {
    185            this.toolTipText = text;
    186        }
    187
    188        /**
    189         * Returns the URL text.
    190         *
    191         * @return The URL text (possibly <code>null</code>).
    192         *
    193         * @since 1.0.3
    194         */
    195        public String getURLText() {
    196            return this.urlText;
    197        }
    198
    199        /**
    200         * Sets the URL text.
    201         *
    202         * @param text  the text (<code>null</code> permitted).
    203         *
    204         * @since 1.0.3
    205         */
    206        public void setURLText(String text) {
    207            this.urlText = text;
    208        }
    209
    210        /**
    211         * Draws the block within the specified area.
    212         *
    213         * @param g2  the graphics device.
    214         * @param area  the area.
    215         * @param params  passed on to blocks within the container
    216         *                (<code>null</code> permitted).
    217         *
    218         * @return An instance of {@link EntityBlockResult}, or <code>null</code>.
    219         */
    220        public Object draw(Graphics2D g2, Rectangle2D area, Object params) {
    221            // draw the block without collecting entities
    222            super.draw(g2, area, null);
    223            EntityBlockParams ebp = null;
    224            BlockResult r = new BlockResult();
    225            if (params instanceof EntityBlockParams) {
    226                ebp = (EntityBlockParams) params;
    227                if (ebp.getGenerateEntities()) {
    228                    EntityCollection ec = new StandardEntityCollection();
    229                    LegendItemEntity entity = new LegendItemEntity(
    230                            (Shape) area.clone());
    231                    entity.setSeriesIndex(this.series);
    232                    entity.setSeriesKey(this.seriesKey);
    233                    entity.setDataset(this.dataset);
    234                    entity.setToolTipText(getToolTipText());
    235                    entity.setURLText(getURLText());
    236                    ec.add(entity);
    237                    r.setEntityCollection(ec);
    238                }
    239            }
    240            return r;
    241        }
    242    }