/*
 * @(#)AdjustmentEvent.java	1.27 03/12/19
 *
 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package java.awt.event;
import java.awt.Adjustable;
import java.awt.AWTEvent;
import java.awt.Event;
/**
 * The adjustment event emitted by Adjustable objects.
 * @see java.awt.Adjustable
 * @see AdjustmentListener
 *
 * @author Amy Fowler
 * @version 1.27 12/19/03
 * @since 1.1
 */
public class AdjustmentEvent extends AWTEvent {
    /**
     * Marks the first integer id for the range of adjustment event ids.
     */
    public static final int ADJUSTMENT_FIRST 	= 601;
    /**
     * Marks the last integer id for the range of adjustment event ids.
     */
    public static final int ADJUSTMENT_LAST 	= 601;
    /**
     * The adjustment value changed event.
     */
    public static final int ADJUSTMENT_VALUE_CHANGED = ADJUSTMENT_FIRST; //Event.SCROLL_LINE_UP
    /**
     * The unit increment adjustment type.
     */
    public static final int UNIT_INCREMENT	= 1;
    /**
     * The unit decrement adjustment type.
     */
    public static final int UNIT_DECREMENT	= 2;
    /**
     * The block decrement adjustment type.
     */
    public static final int BLOCK_DECREMENT     = 3;
    /**
     * The block increment adjustment type.
     */
    public static final int BLOCK_INCREMENT     = 4;
    /**
     * The absolute tracking adjustment type.
     */
    public static final int TRACK	        = 5;
    /**
     * The adjustable object that fired the event.
     *
     * @serial
     * @see #getAdjustable
     */
    Adjustable adjustable;
    /**
     * value will contain the new value of the
     * adjustable object.  This value will always be  in a
     * range associated adjustable object.
     *
     * @serial
     * @see #getValue
     */
    int value;
    /**
     * The adjustmentType describes how the adjustable
     * object value has changed.
     * This value can be increased/decreased by a block or unit amount
     * where the block is associated with page increments/decrements,
     * and a unit is associated with line increments/decrements.
     *
     * @serial
     * @see #getAdjustmentType
     */
    int adjustmentType;
    /**
     * The isAdjusting is true if the event is one
     * of the series of multiple adjustment events.
     *
     * @since 1.4
     * @serial
     * @see #getValueIsAdjusting
     */
    boolean isAdjusting;
    /*
     * JDK 1.1 serialVersionUID 
     */
     private static final long serialVersionUID = 5700290645205279921L;
    /**
     * Constructs an AdjustmentEvent object with the
     * specified Adjustable source, event type,
     * adjustment type, and value. 
     * 
Note that passing in an invalid id results in
     * unspecified behavior.  This method throws an
     * IllegalArgumentException if source
     * is null.
     *
     * @param source the Adjustable object where the
     *               event originated
     * @param id     the event type
     * @param type   the adjustment type 
     * @param value  the current value of the adjustment
     * @throws IllegalArgumentException if source is null
     */
    public AdjustmentEvent(Adjustable source, int id, int type, int value) {
	this(source, id, type, value, false);
    }
    /**
     * Constructs an AdjustmentEvent object with the
     * specified Adjustable source, event type, adjustment type, and value.
     * 
Note that passing in an invalid id results in
     * unspecified behavior.  This method throws an
     * IllegalArgumentException if source
     * is null.
     * 
     * @param source the Adjustable object where the
     *               event originated
     * @param id     the event type
     * @param type   the adjustment type 
     * @param value  the current value of the adjustment
     * @param isAdjusting true if the event is one
     *               of a series of multiple adjusting events,
     *               otherwise false
     * @throws IllegalArgumentException if source is null
     */
    public AdjustmentEvent(Adjustable source, int id, int type, int value, boolean isAdjusting) {
        super(source, id);
	adjustable = source;
        this.adjustmentType = type;
	this.value = value;
	this.isAdjusting = isAdjusting;
    }
    /**
     * Returns the Adjustable object where this event originated.
     *
     * @return the Adjustable object where this event originated
     */
    public Adjustable getAdjustable() {
        return adjustable;
    }
    /**
     * Returns the current value in the adjustment event.
     *
     * @return the current value in the adjustment event
     */
    public int getValue() {
        return value;
    }
    /**
     * Returns the type of adjustment which caused the value changed
     * event.  It will have one of the following values:
     * 
true if this is one of multiple
     * adjustment events.
     *
     * @return true if this is one of multiple
     *         adjustment events, otherwise returns false
     */
    public boolean getValueIsAdjusting() {
	return isAdjusting;
    }
    public String paramString() {
        String typeStr;
        switch(id) {
          case ADJUSTMENT_VALUE_CHANGED:
              typeStr = "ADJUSTMENT_VALUE_CHANGED";
              break;
          default:
              typeStr = "unknown type";
        }
        String adjTypeStr;
        switch(adjustmentType) {
          case UNIT_INCREMENT:
              adjTypeStr = "UNIT_INCREMENT";
              break;
          case UNIT_DECREMENT:
              adjTypeStr = "UNIT_DECREMENT";
              break;
          case BLOCK_INCREMENT:
              adjTypeStr = "BLOCK_INCREMENT";
              break;
          case BLOCK_DECREMENT:
              adjTypeStr = "BLOCK_DECREMENT";
              break;
          case TRACK:
              adjTypeStr = "TRACK";
              break;
          default:
              adjTypeStr = "unknown type";
        }
        return typeStr
	    + ",adjType="+adjTypeStr
	    + ",value="+value
	    + ",isAdjusting="+isAdjusting;
    }
}