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     * Zoomable.java
029     * -------------
030     *
031     * (C) Copyright 2004-2007, 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    }