| /* MouseWheelEvent.java -- a mouse wheel event |
| Copyright (C) 2002, 2005 Free Software Foundation, Inc. |
| |
| This file is part of GNU Classpath. |
| |
| GNU Classpath is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| GNU Classpath is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU Classpath; see the file COPYING. If not, write to the |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
| 02110-1301 USA. |
| |
| Linking this library statically or dynamically with other modules is |
| making a combined work based on this library. Thus, the terms and |
| conditions of the GNU General Public License cover the whole |
| combination. |
| |
| As a special exception, the copyright holders of this library give you |
| permission to link this library with independent modules to produce an |
| executable, regardless of the license terms of these independent |
| modules, and to copy and distribute the resulting executable under |
| terms of your choice, provided that you also meet, for each linked |
| independent module, the terms and conditions of the license of that |
| module. An independent module is a module which is not derived from |
| or based on this library. If you modify this library, you may extend |
| this exception to your version of the library, but you are not |
| obligated to do so. If you do not wish to do so, delete this |
| exception statement from your version. */ |
| |
| |
| package java.awt.event; |
| |
| import java.awt.Adjustable; |
| import java.awt.Component; |
| import java.awt.Rectangle; |
| import java.awt.ScrollPane; |
| |
| import javax.swing.JScrollPane; |
| import javax.swing.Scrollable; |
| |
| /** |
| * This event is generated for a mouse wheel rotation. The wheel (the middle |
| * mouse button on most modern mice) can be rotated towards or away from the |
| * user, and is often used for scrolling. |
| * |
| * <p>Because of the special use for scrolling components, MouseWheelEvents |
| * often affect a different component than the one located at the point of |
| * the event. If the component under the mouse cursor does not accept wheel |
| * events, the event is passed to the first ancestor container which does. This |
| * is often a ScrollPane, which knows how to scroll. If an AWT component is |
| * built from a native widget that knows how to use mouse wheel events, that |
| * component will consume the event. |
| * |
| * <p>The two most common scroll types are "units" (lines at a time) or |
| * "blocks" (pages at a time). The initial setting is taken from the platform, |
| * although the user can adjust the setting at any time. |
| * |
| * @author Eric Blake (ebb9@email.byu.edu) |
| * @see MouseWheelListener |
| * @see ScrollPane |
| * @see ScrollPane#setWheelScrollingEnabled(boolean) |
| * @see JScrollPane |
| * @see JScrollPane#setWheelScrollingEnabled(boolean) |
| * @since 1.4 |
| * @status updated to 1.4 |
| */ |
| public class MouseWheelEvent extends MouseEvent |
| { |
| /** |
| * Compatible with JDK 1.4+. |
| */ |
| private static final long serialVersionUID = 6459879390515399677L; |
| |
| /** |
| * Indicates scrolling by units (lines). |
| * |
| * @see #getScrollType() |
| */ |
| public static final int WHEEL_UNIT_SCROLL = 0; |
| |
| /** |
| * Indicates scrolling by blocks (pages). |
| * |
| * @see #getScrollType() |
| */ |
| public static final int WHEEL_BLOCK_SCROLL = 1; |
| |
| /** |
| * Indicates what scroll type should take place. This should be limited |
| * to {@link #WHEEL_UNIT_SCROLL} and {@link #WHEEL_BLOCK_SCROLL}. |
| * |
| * @serial the scroll type |
| */ |
| private final int scrollType; |
| |
| /** |
| * Indicates the scroll amount. This is only meaningful if scrollType is |
| * WHEEL_UNIT_SCROLL. |
| * |
| * @serial the number of lines to scroll |
| */ |
| private final int scrollAmount; |
| |
| /** |
| * Indicates how far the mouse wheel was rotated. |
| * |
| * @serial the rotation amount |
| */ |
| private final int wheelRotation; |
| |
| /** |
| * Initializes a new instance of <code>MouseWheelEvent</code> with the |
| * specified information. Note that an invalid id leads to unspecified |
| * results. |
| * |
| * @param source the source of the event |
| * @param id the event id |
| * @param when the timestamp of when the event occurred |
| * @param modifiers any modifier bits for this event |
| * @param x the X coordinate of the mouse point |
| * @param y the Y coordinate of the mouse point |
| * @param clickCount the number of mouse clicks for this event |
| * @param popupTrigger true if this event triggers a popup menu |
| * @param scrollType one of {@link #WHEEL_UNIT_SCROLL}, |
| * {@link #WHEEL_BLOCK_SCROLL} |
| * @param scrollAmount the number of units to scroll, ignored for block type |
| * @param wheelRotation the number of rotation "clicks" |
| * @throws IllegalArgumentException if source is null |
| * @see MouseEvent#MouseEvent(Component, int, long, int, int, int, int, |
| * boolean) |
| */ |
| public MouseWheelEvent(Component source, int id, long when, int modifiers, |
| int x, int y, int clickCount, boolean popupTrigger, |
| int scrollType, int scrollAmount, int wheelRotation) |
| { |
| super(source, id, when, modifiers, x, y, clickCount, popupTrigger); |
| this.scrollType = scrollType; |
| this.scrollAmount = scrollAmount; |
| this.wheelRotation = wheelRotation; |
| } |
| |
| /** |
| * This method returns the scrolling pattern this event requests. Legal |
| * values are {@link #WHEEL_UNIT_SCROLL} and {@link #WHEEL_BLOCK_SCROLL}. |
| * |
| * @return the scroll type |
| * @see Adjustable#getUnitIncrement() |
| * @see Adjustable#getBlockIncrement() |
| * @see Scrollable#getScrollableUnitIncrement(Rectangle, int, int) |
| * @see Scrollable#getScrollableBlockIncrement(Rectangle, int, int) |
| */ |
| public int getScrollType() |
| { |
| return scrollType; |
| } |
| |
| /** |
| * Returns the number of units to scroll in response to this event. This |
| * only makes sense when the scroll type is WHEEL_UNIT_SCROLL. |
| * |
| * @return the number of scroll units, if defined |
| * @see #getScrollType() |
| */ |
| public int getScrollAmount() |
| { |
| return scrollAmount; |
| } |
| |
| /** |
| * Gets the number of "clicks" the wheel was rotated. Negative values move |
| * up (away) from the user, positive values move down (towards) the user. |
| * |
| * @return the number of rotation clicks |
| */ |
| public int getWheelRotation() |
| { |
| return wheelRotation; |
| } |
| |
| /** |
| * This is a convenience method which aids in a common listener for scrolling |
| * a scrollpane (although this is already built into ScrollPane and |
| * JScrollPane). This method only makes sense when getScrollType() returns |
| * WHEEL_UNIT_SCROLL. |
| * |
| * <p>This accounts for direction of scroll and amount of wheel movement, as |
| * interpreted by the platform settings. |
| * |
| * @return the number of units to scroll |
| * @see #getScrollType() |
| * @see #getScrollAmount() |
| * @see MouseWheelListener |
| * @see Adjustable |
| * @see Adjustable#getUnitIncrement() |
| * @see Scrollable |
| * @see Scrollable#getScrollableUnitIncrement(Rectangle, int, int) |
| * @see ScrollPane |
| * @see ScrollPane#setWheelScrollingEnabled(boolean) |
| * @see JScrollPane |
| * @see JScrollPane#setWheelScrollingEnabled(boolean) |
| */ |
| public int getUnitsToScroll() |
| { |
| return wheelRotation * scrollAmount; |
| } |
| |
| /** |
| * Returns a string identifying this event. For mouse wheel events, this |
| * is <code>super.paramString() + ",scrollType=WHEEL_" + |
| * (getScrollType() == WHEEL_UNIT_SCROLL ? "UNIT" : "BLOCK") |
| * + "_SCROLL,scrollAmount=" + getScrollAmount() + ",wheelRotation=" |
| * + getWheelRotation()</code>. |
| * |
| * @return a string identifying this event |
| */ |
| public String paramString() |
| { |
| return super.paramString() + ",scrollType=" |
| + (scrollType == WHEEL_UNIT_SCROLL ? "WHEEL_UNIT_SCROLL" |
| : scrollType == WHEEL_BLOCK_SCROLL ? "WHEEL_BLOCK_SCROLL" |
| : "unknown scroll type") |
| + ",scrollAmount=" + scrollAmount + ",wheelRotation=" + wheelRotation; |
| } |
| } // class MouseWheelEvent |