    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     * Zoomable.java
    029     * -------------
    030     *
    031     * (C) Copyright 2004-2008, by Object Refinery Limited and Contributors.
    032     *
    033     * Original Author:  David Gilbert (for Object Refinery Limited);
    034     * Contributor(s):   Rune Fauske;
    035     *
    036     * Changes
    037     * -------
    038     * 12-Nov-2004 : Version 1 (DG);
    039     * 26-Jan-2004 : Added getOrientation() method (DG);
    040     * 04-Sep-2006 : Added credit for Rune Fauske, see patch 1050659 (DG);
    041     * 21-Sep-2007 : Added new zooming methods with 'useAnchor' flag.  This breaks
    042     *               the API, but is the cleanest way I can think of to fix a
    043     *               long-standing bug (DG);
    044     *
    045     */
    046
    047    package org.jfree.chart.plot;
    048
    049    import java.awt.geom.Point2D;
    050
    051    import org.jfree.chart.ChartPanel;
    052
    053    /**
    054     * A plot that is zoomable must implement this interface to provide a
    055     * mechanism for the {@link ChartPanel} to control the zooming.
    056     */
    057    public interface Zoomable {
    058
    059        /**
    060         * Returns <code>true</code> if the plot's domain is zoomable, and
    061         * <code>false</code> otherwise.
    062         *
    063         * @return A boolean.
    064         *
    065         * @see #isRangeZoomable()
    066         */
    067        public boolean isDomainZoomable();
    068
    069        /**
    070         * Returns <code>true</code> if the plot's range is zoomable, and
    071         * <code>false</code> otherwise.
    072         *
    073         * @return A boolean.
    074         *
    075         * @see #isDomainZoomable()
    076         */
    077        public boolean isRangeZoomable();
    078
    079        /**
    080         * Returns the orientation of the plot.
    081         *
    082         * @return The orientation.
    083         */
    084        public PlotOrientation getOrientation();
    085
    086        /**
    087         * Multiplies the range on the domain axis/axes by the specified factor.
    088         * The <code>source</code> point can be used in some cases to identify a
    089         * subplot, or to determine the center of zooming (refer to the
    090         * documentation of the implementing class for details).
    091         *
    092         * @param factor  the zoom factor.
    093         * @param state  the plot state.
    094         * @param source  the source point (in Java2D coordinates).
    095         *
    096         * @see #zoomRangeAxes(double, PlotRenderingInfo, Point2D)
    097         */
    098        public void zoomDomainAxes(double factor, PlotRenderingInfo state,
    099                                   Point2D source);
    100
    101        /**
    102         * Multiplies the range on the domain axis/axes by the specified factor.
    103         * The <code>source</code> point can be used in some cases to identify a
    104         * subplot, or to determine the center of zooming (refer to the
    105         * documentation of the implementing class for details).
    106         *
    107         * @param factor  the zoom factor.
    108         * @param state  the plot state.
    109         * @param source  the source point (in Java2D coordinates).
    110         * @param useAnchor  use source point as zoom anchor?
    111         *
    112         * @see #zoomRangeAxes(double, PlotRenderingInfo, Point2D, boolean)
    113         *
    114         * @since 1.0.7
    115         */
    116        public void zoomDomainAxes(double factor, PlotRenderingInfo state,
    117                                   Point2D source, boolean useAnchor);
    118
    119        /**
    120         * Zooms in on the domain axes.  The <code>source</code> point can be used
    121         * in some cases to identify a subplot for zooming.
    122         *
    123         * @param lowerPercent  the new lower bound.
    124         * @param upperPercent  the new upper bound.
    125         * @param state  the plot state.
    126         * @param source  the source point (in Java2D coordinates).
    127         *
    128         * @see #zoomRangeAxes(double, double, PlotRenderingInfo, Point2D)
    129         */
    130        public void zoomDomainAxes(double lowerPercent, double upperPercent,
    131                                   PlotRenderingInfo state, Point2D source);
    132
    133        /**
    134         * Multiplies the range on the range axis/axes by the specified factor.
    135         * The <code>source</code> point can be used in some cases to identify a
    136         * subplot, or to determine the center of zooming (refer to the
    137         * documentation of the implementing class for details).
    138         *
    139         * @param factor  the zoom factor.
    140         * @param state  the plot state.
    141         * @param source  the source point (in Java2D coordinates).
    142         *
    143         * @see #zoomDomainAxes(double, PlotRenderingInfo, Point2D)
    144         */
    145        public void zoomRangeAxes(double factor, PlotRenderingInfo state,
    146                                  Point2D source);
    147
    148        /**
    149         * Multiplies the range on the range axis/axes by the specified factor.
    150         * The <code>source</code> point can be used in some cases to identify a
    151         * subplot, or to determine the center of zooming (refer to the
    152         * documentation of the implementing class for details).
    153         *
    154         * @param factor  the zoom factor.
    155         * @param state  the plot state.
    156         * @param source  the source point (in Java2D coordinates).
    157         * @param useAnchor  use source point as zoom anchor?
    158         *
    159         * @see #zoomDomainAxes(double, PlotRenderingInfo, Point2D)
    160         *
    161         * @since 1.0.7
    162         */
    163        public void zoomRangeAxes(double factor, PlotRenderingInfo state,
    164                                  Point2D source, boolean useAnchor);
    165
    166        /**
    167         * Zooms in on the range axes.  The <code>source</code> point can be used
    168         * in some cases to identify a subplot for zooming.
    169         *
    170         * @param lowerPercent  the new lower bound.
    171         * @param upperPercent  the new upper bound.
    172         * @param state  the plot state.
    173         * @param source  the source point (in Java2D coordinates).
    174         *
    175         * @see #zoomDomainAxes(double, double, PlotRenderingInfo, Point2D)
    176         */
    177        public void zoomRangeAxes(double lowerPercent, double upperPercent,
    178                                  PlotRenderingInfo state, Point2D source);
    179
    180    }