1 /*
   2  * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package java.awt.event;
  27 
  28 import java.awt.Adjustable;
  29 import java.awt.AWTEvent;
  30 import javax.tools.annotation.GenerateNativeHeader;
  31 
  32 import javax.tools.annotation.GenerateNativeHeader;
  33 
  34 /**
  35  * The adjustment event emitted by Adjustable objects like
  36  * {@link java.awt.Scrollbar} and {@link java.awt.ScrollPane}.
  37  * When the user changes the value of the scrolling component,
  38  * it receives an instance of {@code AdjustmentEvent}.
  39  * <p>
  40  * An unspecified behavior will be caused if the {@code id} parameter
  41  * of any particular {@code AdjustmentEvent} instance is not
  42  * in the range from {@code ADJUSTMENT_FIRST} to {@code ADJUSTMENT_LAST}.
  43  * <p>
  44  * The {@code type} of any {@code AdjustmentEvent} instance takes one of the following
  45  * values:
  46  *                     <ul>
  47  *                     <li> {@code UNIT_INCREMENT}
  48  *                     <li> {@code UNIT_DECREMENT}
  49  *                     <li> {@code BLOCK_INCREMENT}
  50  *                     <li> {@code BLOCK_DECREMENT}
  51  *                     <li> {@code TRACK}
  52  *                     </ul>
  53  * Assigning the value different from listed above will cause an unspecified behavior.
  54  * @see java.awt.Adjustable
  55  * @see AdjustmentListener
  56  *
  57  * @author Amy Fowler
  58  * @since 1.1
  59  */
  60 /* No native methods here, but the constants are needed in the supporting JNI code */
  61 @GenerateNativeHeader
  62 public class AdjustmentEvent extends AWTEvent {
  63 
  64     /**
  65      * Marks the first integer id for the range of adjustment event ids.
  66      */
  67     public static final int ADJUSTMENT_FIRST    = 601;
  68 
  69     /**
  70      * Marks the last integer id for the range of adjustment event ids.
  71      */
  72     public static final int ADJUSTMENT_LAST     = 601;
  73 
  74     /**
  75      * The adjustment value changed event.
  76      */
  77     public static final int ADJUSTMENT_VALUE_CHANGED = ADJUSTMENT_FIRST; //Event.SCROLL_LINE_UP
  78 
  79     /**
  80      * The unit increment adjustment type.
  81      */
  82     public static final int UNIT_INCREMENT      = 1;
  83 
  84     /**
  85      * The unit decrement adjustment type.
  86      */
  87     public static final int UNIT_DECREMENT      = 2;
  88 
  89     /**
  90      * The block decrement adjustment type.
  91      */
  92     public static final int BLOCK_DECREMENT     = 3;
  93 
  94     /**
  95      * The block increment adjustment type.
  96      */
  97     public static final int BLOCK_INCREMENT     = 4;
  98 
  99     /**
 100      * The absolute tracking adjustment type.
 101      */
 102     public static final int TRACK               = 5;
 103 
 104     /**
 105      * The adjustable object that fired the event.
 106      *
 107      * @serial
 108      * @see #getAdjustable
 109      */
 110     Adjustable adjustable;
 111 
 112     /**
 113      * <code>value</code> will contain the new value of the
 114      * adjustable object.  This value will always be  in a
 115      * range associated adjustable object.
 116      *
 117      * @serial
 118      * @see #getValue
 119      */
 120     int value;
 121 
 122     /**
 123      * The <code>adjustmentType</code> describes how the adjustable
 124      * object value has changed.
 125      * This value can be increased/decreased by a block or unit amount
 126      * where the block is associated with page increments/decrements,
 127      * and a unit is associated with line increments/decrements.
 128      *
 129      * @serial
 130      * @see #getAdjustmentType
 131      */
 132     int adjustmentType;
 133 
 134 
 135     /**
 136      * The <code>isAdjusting</code> is true if the event is one
 137      * of the series of multiple adjustment events.
 138      *
 139      * @since 1.4
 140      * @serial
 141      * @see #getValueIsAdjusting
 142      */
 143     boolean isAdjusting;
 144 
 145 
 146     /*
 147      * JDK 1.1 serialVersionUID
 148      */
 149      private static final long serialVersionUID = 5700290645205279921L;
 150 
 151 
 152     /**
 153      * Constructs an <code>AdjustmentEvent</code> object with the
 154      * specified <code>Adjustable</code> source, event type,
 155      * adjustment type, and value.
 156      * <p> This method throws an
 157      * <code>IllegalArgumentException</code> if <code>source</code>
 158      * is <code>null</code>.
 159      *
 160      * @param source The <code>Adjustable</code> object where the
 161      *               event originated
 162      * @param id     An integer indicating the type of event.
 163      *                     For information on allowable values, see
 164      *                     the class description for {@link AdjustmentEvent}
 165      * @param type   An integer indicating the adjustment type.
 166      *                     For information on allowable values, see
 167      *                     the class description for {@link AdjustmentEvent}
 168      * @param value  The current value of the adjustment
 169      * @throws IllegalArgumentException if <code>source</code> is null
 170      * @see #getSource()
 171      * @see #getID()
 172      * @see #getAdjustmentType()
 173      * @see #getValue()
 174      */
 175     public AdjustmentEvent(Adjustable source, int id, int type, int value) {
 176         this(source, id, type, value, false);
 177     }
 178 
 179     /**
 180      * Constructs an <code>AdjustmentEvent</code> object with the
 181      * specified Adjustable source, event type, adjustment type, and value.
 182      * <p> This method throws an
 183      * <code>IllegalArgumentException</code> if <code>source</code>
 184      * is <code>null</code>.
 185      *
 186      * @param source The <code>Adjustable</code> object where the
 187      *               event originated
 188      * @param id     An integer indicating the type of event.
 189      *                     For information on allowable values, see
 190      *                     the class description for {@link AdjustmentEvent}
 191      * @param type   An integer indicating the adjustment type.
 192      *                     For information on allowable values, see
 193      *                     the class description for {@link AdjustmentEvent}
 194      * @param value  The current value of the adjustment
 195      * @param isAdjusting A boolean that equals <code>true</code> if the event is one
 196      *               of a series of multiple adjusting events,
 197      *               otherwise <code>false</code>
 198      * @throws IllegalArgumentException if <code>source</code> is null
 199      * @since 1.4
 200      * @see #getSource()
 201      * @see #getID()
 202      * @see #getAdjustmentType()
 203      * @see #getValue()
 204      * @see #getValueIsAdjusting()
 205      */
 206     public AdjustmentEvent(Adjustable source, int id, int type, int value, boolean isAdjusting) {
 207         super(source, id);
 208         adjustable = source;
 209         this.adjustmentType = type;
 210         this.value = value;
 211         this.isAdjusting = isAdjusting;
 212     }
 213 
 214     /**
 215      * Returns the <code>Adjustable</code> object where this event originated.
 216      *
 217      * @return the <code>Adjustable</code> object where this event originated
 218      */
 219     public Adjustable getAdjustable() {
 220         return adjustable;
 221     }
 222 
 223     /**
 224      * Returns the current value in the adjustment event.
 225      *
 226      * @return the current value in the adjustment event
 227      */
 228     public int getValue() {
 229         return value;
 230     }
 231 
 232     /**
 233      * Returns the type of adjustment which caused the value changed
 234      * event.  It will have one of the following values:
 235      * <ul>
 236      * <li>{@link #UNIT_INCREMENT}
 237      * <li>{@link #UNIT_DECREMENT}
 238      * <li>{@link #BLOCK_INCREMENT}
 239      * <li>{@link #BLOCK_DECREMENT}
 240      * <li>{@link #TRACK}
 241      * </ul>
 242      * @return one of the adjustment values listed above
 243      */
 244     public int getAdjustmentType() {
 245         return adjustmentType;
 246     }
 247 
 248     /**
 249      * Returns <code>true</code> if this is one of multiple
 250      * adjustment events.
 251      *
 252      * @return <code>true</code> if this is one of multiple
 253      *         adjustment events, otherwise returns <code>false</code>
 254      * @since 1.4
 255      */
 256     public boolean getValueIsAdjusting() {
 257         return isAdjusting;
 258     }
 259 
 260     public String paramString() {
 261         String typeStr;
 262         switch(id) {
 263           case ADJUSTMENT_VALUE_CHANGED:
 264               typeStr = "ADJUSTMENT_VALUE_CHANGED";
 265               break;
 266           default:
 267               typeStr = "unknown type";
 268         }
 269         String adjTypeStr;
 270         switch(adjustmentType) {
 271           case UNIT_INCREMENT:
 272               adjTypeStr = "UNIT_INCREMENT";
 273               break;
 274           case UNIT_DECREMENT:
 275               adjTypeStr = "UNIT_DECREMENT";
 276               break;
 277           case BLOCK_INCREMENT:
 278               adjTypeStr = "BLOCK_INCREMENT";
 279               break;
 280           case BLOCK_DECREMENT:
 281               adjTypeStr = "BLOCK_DECREMENT";
 282               break;
 283           case TRACK:
 284               adjTypeStr = "TRACK";
 285               break;
 286           default:
 287               adjTypeStr = "unknown type";
 288         }
 289         return typeStr
 290             + ",adjType="+adjTypeStr
 291             + ",value="+value
 292             + ",isAdjusting="+isAdjusting;
 293     }
 294 }