    001    /* ===========================================================
    002     * JFreeChart : a free chart library for the Java(tm) platform
    003     * ===========================================================
    004     *
    005     * (C) Copyright 2000-2006, by Object Refinery Limited and Contributors.
    006     *
    007     * Project Info:  http://www.jfree.org/jfreechart/index.html
    008     *
    009     * This library is free software; you can redistribute it and/or modify it
    010     * under the terms of the GNU Lesser General Public License as published by
    011     * the Free Software Foundation; either version 2.1 of the License, or
    012     * (at your option) any later version.
    013     *
    014     * This library is distributed in the hope that it will be useful, but
    015     * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    016     * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
    017     * License for more details.
    018     *
    019     * You should have received a copy of the GNU Lesser General Public
    020     * License along with this library; if not, write to the Free Software
    021     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
    022     * USA.
    023     *
    024     * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
    025     * in the United States and other countries.]
    026     *
    027     * -----------------------------
    028     * LegendItemBlockContainer.java
    029     * -----------------------------
    030     * (C) Copyright 2006, by Object Refinery Limited.
    031     *
    032     * Original Author:  David Gilbert (for Object Refinery Limited);
    033     * Contributor(s):   -;
    034     *
    035     * $Id: LegendItemBlockContainer.java,v 1.1.2.2 2006/10/06 15:46:34 mungady Exp $
    036     *
    037     * Changes
    038     * -------
    039     * 20-Jul-2006 : Version 1 (DG);
    040     * 06-Oct-2006 : Added tooltip and URL text fields (DG);
    041     *
    042     */
    043
    044    package org.jfree.chart.title;
    045
    046    import java.awt.Graphics2D;
    047    import java.awt.Shape;
    048    import java.awt.geom.Rectangle2D;
    049
    050    import org.jfree.chart.block.Arrangement;
    051    import org.jfree.chart.block.BlockContainer;
    052    import org.jfree.chart.block.BlockResult;
    053    import org.jfree.chart.block.EntityBlockParams;
    054    import org.jfree.chart.block.EntityBlockResult;
    055    import org.jfree.chart.entity.EntityCollection;
    056    import org.jfree.chart.entity.LegendItemEntity;
    057    import org.jfree.chart.entity.StandardEntityCollection;
    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        /** The dataset index. */
    067        private int dataset;
    068
    069        /** The series index. */
    070        private int series;
    071
    072        /** The tool tip text (can be <code>null</code>). */
    073        private String toolTipText;
    074
    075        /** The URL text (can be <code>null</code>). */
    076        private String urlText;
    077
    078        /**
    079         * Creates a new legend item block.
    080         *
    081         * @param arrangement
    082         * @param dataset
    083         * @param series
    084         */
    085        public LegendItemBlockContainer(Arrangement arrangement, int dataset,
    086                int series) {
    087            super(arrangement);
    088            this.dataset = dataset;
    089            this.series = series;
    090        }
    091
    092        /**
    093         * Returns the dataset index.
    094         *
    095         * @return The dataset index.
    096         */
    097        public int getDatasetIndex() {
    098            return this.dataset;
    099        }
    100
    101        /**
    102         * Returns the series index.
    103         *
    104         * @return The series index.
    105         */
    106        public int getSeriesIndex() {
    107            return this.series;
    108        }
    109
    110        /**
    111         * Returns the tool tip text.
    112         *
    113         * @return The tool tip text (possibly <code>null</code>).
    114         *
    115         * @since 1.0.3
    116         */
    117        public String getToolTipText() {
    118            return this.toolTipText;
    119        }
    120
    121        /**
    122         * Sets the tool tip text.
    123         *
    124         * @param text  the text (<code>null</code> permitted).
    125         *
    126         * @since 1.0.3
    127         */
    128        public void setToolTipText(String text) {
    129            this.toolTipText = text;
    130        }
    131
    132        /**
    133         * Returns the URL text.
    134         *
    135         * @return The URL text (possibly <code>null</code>).
    136         *
    137         * @since 1.0.3
    138         */
    139        public String getURLText() {
    140            return this.urlText;
    141        }
    142
    143        /**
    144         * Sets the URL text.
    145         *
    146         * @param text  the text (<code>null</code> permitted).
    147         *
    148         * @since 1.0.3
    149         */
    150        public void setURLText(String text) {
    151            this.urlText = text;
    152        }
    153
    154        /**
    155         * Draws the block within the specified area.
    156         *
    157         * @param g2  the graphics device.
    158         * @param area  the area.
    159         * @param params  passed on to blocks within the container
    160         *                (<code>null</code> permitted).
    161         *
    162         * @return An instance of {@link EntityBlockResult}, or <code>null</code>.
    163         */
    164        public Object draw(Graphics2D g2, Rectangle2D area, Object params) {
    165            // draw the block without collecting entities
    166            super.draw(g2, area, null);
    167            EntityBlockParams ebp = null;
    168            BlockResult r = new BlockResult();
    169            if (params instanceof EntityBlockParams) {
    170                ebp = (EntityBlockParams) params;
    171                if (ebp.getGenerateEntities()) {
    172                    EntityCollection ec = new StandardEntityCollection();
    173                    LegendItemEntity entity = new LegendItemEntity(
    174                            (Shape) area.clone());
    175                    entity.setSeriesIndex(this.series);
    176                    entity.setToolTipText(getToolTipText());
    177                    entity.setURLText(getURLText());
    178                    ec.add(entity);
    179                    r.setEntityCollection(ec);
    180                }
    181            }
    182            return r;
    183        }
    184    }