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