    001    /* ===========================================================
    002     * JFreeChart : a free chart library for the Java(tm) platform
    003     * ===========================================================
    004     *
    005     * (C) Copyright 2000-2005, 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     * PieLabelRecord.java
    029     * -------------------
    030     * (C) Copyright 2004, by Object Refinery Limited and Contributors.
    031     *
    032     * Original Author:  David Gilbert (for Object Refinery Limited);
    033     * Contributor(s):   -;
    034     *
    035     * $Id: PieLabelRecord.java,v 1.2.2.1 2005/10/25 20:52:07 mungady Exp $
    036     *
    037     * Changes
    038     * -------
    039     * 08-Mar-2004 : Version 1 (DG);
    040     *
    041     */
    042
    043    package org.jfree.chart.plot;
    044
    045    import org.jfree.text.TextBox;
    046
    047    /**
    048     * A structure that retains information about the label for a section in a pie
    049     * chart.
    050     */
    051    public class PieLabelRecord implements Comparable {
    052
    053        /** The key. */
    054        private Comparable key;
    055
    056        /** The angle. */
    057        private double angle;
    058
    059        /** The base y-coordinate. */
    060        private double baseY;
    061
    062        /** The allocated y-coordinate. */
    063        private double allocatedY;
    064
    065        /** The label. */
    066        private TextBox label;
    067
    068        /** The label height. */
    069        private double labelHeight;
    070
    071        /** The gap. */
    072        private double gap;
    073
    074        /** The link percent. */
    075        private double linkPercent;
    076
    077        /**
    078         * Creates a new record.
    079         *
    080         * @param key  the key.
    081         * @param angle  the angle.
    082         * @param baseY  the base y-coordinate.
    083         * @param label  the label.
    084         * @param labelHeight  the label height (in Java2D units).
    085         * @param gap  the gap.
    086         * @param linkPercent  the link percent.
    087         */
    088        public PieLabelRecord(Comparable key, double angle, double baseY,
    089                              TextBox label, double labelHeight, double gap,
    090                              double linkPercent) {
    091            this.key = key;
    092            this.angle = angle;
    093            this.baseY = baseY;
    094            this.allocatedY = baseY;
    095            this.label = label;
    096            this.labelHeight = labelHeight;
    097            this.gap = gap;
    098            this.linkPercent = linkPercent;
    099        }
    100
    101        /**
    102         * Returns the base y-coordinate.  This is where the label will appear if
    103         * there is no overlapping of labels.
    104         *
    105         * @return The base y-coordinate.
    106         */
    107        public double getBaseY() {
    108            return this.baseY;
    109        }
    110
    111        /**
    112         * Sets the base y-coordinate.
    113         *
    114         * @param base  the base y-coordinate.
    115         */
    116        public void setBaseY(double base) {
    117            this.baseY = base;
    118        }
    119
    120        /**
    121         * Returns the lower bound of the label.
    122         *
    123         * @return The lower bound.
    124         */
    125        public double getLowerY() {
    126            return this.allocatedY - this.labelHeight / 2.0;
    127        }
    128
    129        /**
    130         * Returns the upper bound of the label.
    131         *
    132         * @return The upper bound.
    133         */
    134        public double getUpperY() {
    135            return this.allocatedY + this.labelHeight / 2.0;
    136        }
    137
    138        /**
    139         * Returns the angle.
    140         *
    141         * @return The angle.
    142         */
    143        public double getAngle() {
    144            return this.angle;
    145        }
    146
    147        /**
    148         * Returns the key for the section that the label applies to.
    149         *
    150         * @return The key.
    151         */
    152        public Comparable getKey() {
    153            return this.key;
    154        }
    155
    156        /**
    157         * Returns the label.
    158         *
    159         * @return The label.
    160         */
    161        public TextBox getLabel() {
    162            return this.label;
    163        }
    164
    165        /**
    166         * Returns the label height.
    167         *
    168         * @return The label height (in Java2D units).
    169         */
    170        public double getLabelHeight() {
    171            return this.labelHeight;
    172        }
    173
    174        /**
    175         * Returns the allocated y-coordinate.
    176         *
    177         * @return The allocated y-coordinate.
    178         */
    179        public double getAllocatedY() {
    180            return this.allocatedY;
    181        }
    182
    183        /**
    184         * Sets the allocated y-coordinate.
    185         *
    186         * @param y  the y-coordinate.
    187         */
    188        public void setAllocatedY(double y) {
    189            this.allocatedY = y;
    190        }
    191
    192        /**
    193         * Returns the gap.
    194         *
    195         * @return The gap.
    196         */
    197        public double getGap() {
    198            return this.gap;
    199        }
    200
    201        /**
    202         * Returns the link percent.
    203         *
    204         * @return The link percent.
    205         */
    206        public double getLinkPercent() {
    207            return this.linkPercent;
    208        }
    209        /**
    210         * Compares this object to an arbitrary object.
    211         *
    212         * @param obj  the object to compare against.
    213         *
    214         * @return An integer that specifies the relative order of the two objects.
    215         */
    216        public int compareTo(Object obj) {
    217            int result = 0;
    218            if (obj instanceof PieLabelRecord) {
    219                PieLabelRecord plr = (PieLabelRecord) obj;
    220                if (this.baseY < plr.baseY) {
    221                    result = -1;
    222                }
    223                else if (this.baseY > plr.baseY) {
    224                    result = 1;
    225                }
    226            }
    227            return result;
    228        }
    229
    230        /**
    231         * Returns a string describing the object.  This is used for debugging only.
    232         *
    233         * @return A string.
    234         */
    235        public String toString() {
    236            return this.baseY + ", " + this.key.toString();
    237        }
    238    }