001    /* ===========================================================
002     * JFreeChart : a free chart library for the Java(tm) platform
003     * ===========================================================
004     *
005     * (C) Copyright 2000-2008, 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     * 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    }