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
047package org.jfree.chart.plot;
048
049import java.awt.geom.Point2D;
050
051import 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 */
057public 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}