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