mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			816 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			816 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			Java
		
	
	
	
/* Scrollbar.java -- AWT Scrollbar widget
 | 
						|
   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
 | 
						|
   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;
 | 
						|
 | 
						|
import java.awt.event.AdjustmentEvent;
 | 
						|
import java.awt.event.AdjustmentListener;
 | 
						|
import java.awt.peer.ScrollbarPeer;
 | 
						|
import java.util.EventListener;
 | 
						|
 | 
						|
import javax.accessibility.Accessible;
 | 
						|
import javax.accessibility.AccessibleContext;
 | 
						|
import javax.accessibility.AccessibleRole;
 | 
						|
import javax.accessibility.AccessibleState;
 | 
						|
import javax.accessibility.AccessibleStateSet;
 | 
						|
import javax.accessibility.AccessibleValue;
 | 
						|
 | 
						|
/**
 | 
						|
 * This class implements a scrollbar widget.
 | 
						|
 *
 | 
						|
 * @author Aaron M. Renn (arenn@urbanophile.com)
 | 
						|
 * @author Tom Tromey (tromey@cygnus.com)
 | 
						|
 * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
 | 
						|
 */
 | 
						|
public class Scrollbar extends Component implements Accessible, Adjustable
 | 
						|
{
 | 
						|
  // FIXME: Serialization readObject/writeObject
 | 
						|
 | 
						|
  /**
 | 
						|
   * Constant indicating that a scrollbar is horizontal.
 | 
						|
   */
 | 
						|
  public static final int HORIZONTAL = 0;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Constant indicating that a scrollbar is vertical.
 | 
						|
   */
 | 
						|
  public static final int VERTICAL = 1;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Serialization Constant.
 | 
						|
   */
 | 
						|
  private static final long serialVersionUID = 8451667562882310543L;
 | 
						|
 | 
						|
  /**
 | 
						|
   * @serial The amount by which the value of the scrollbar is changed
 | 
						|
   * when incrementing in line mode.
 | 
						|
   */
 | 
						|
  private int lineIncrement;
 | 
						|
 | 
						|
  /**
 | 
						|
   * @serial The amount by which the value of the scrollbar is changed
 | 
						|
   * when incrementing in page mode.
 | 
						|
   */
 | 
						|
  private int pageIncrement;
 | 
						|
 | 
						|
  /**
 | 
						|
   * @serial The maximum value for this scrollbar
 | 
						|
   */
 | 
						|
  private int maximum;
 | 
						|
 | 
						|
  /**
 | 
						|
   * @serial The minimum value for this scrollbar
 | 
						|
   */
 | 
						|
  private int minimum;
 | 
						|
 | 
						|
  /**
 | 
						|
   * @serial The orientation of this scrollbar, which will be either
 | 
						|
   * the <code>HORIZONTAL</code> or <code>VERTICAL</code> constant
 | 
						|
   * from this class.
 | 
						|
   */
 | 
						|
  private int orientation;
 | 
						|
 | 
						|
  /**
 | 
						|
   * @serial The current value of this scrollbar.
 | 
						|
   */
 | 
						|
  private int value;
 | 
						|
 | 
						|
  /**
 | 
						|
   * @serial The width of the scrollbar's thumb, which is relative
 | 
						|
   * to the minimum and maximum value of the scrollbar.
 | 
						|
   */
 | 
						|
  private int visibleAmount;
 | 
						|
 | 
						|
  /**
 | 
						|
   * List of AdjustmentListener's.
 | 
						|
   */
 | 
						|
  private AdjustmentListener adjustment_listeners;
 | 
						|
 | 
						|
  /**
 | 
						|
   * true if the scrollbar is adjusting, false otherwise.
 | 
						|
   */
 | 
						|
  private transient boolean valueIsAdjusting = false;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The number used to generate the name returned by getName.
 | 
						|
   */
 | 
						|
  private static transient long next_scrollbar_number;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Initializes a new instance of <code>Scrollbar</code> with a
 | 
						|
   * vertical orientation and default values for all other parameters.
 | 
						|
   *
 | 
						|
   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
 | 
						|
   */
 | 
						|
  public Scrollbar()
 | 
						|
  {
 | 
						|
    this(VERTICAL);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Initializes a new instance of <code>Scrollbar</code> with the
 | 
						|
   * specified orientation and default values for all other parameters.
 | 
						|
   * The orientation must be either the constant <code>HORIZONTAL</code> or
 | 
						|
   * <code>VERTICAL</code> from this class.  An incorrect value will throw
 | 
						|
   * an exception.
 | 
						|
   *
 | 
						|
   * @param orientation The orientation of this scrollbar.
 | 
						|
   *
 | 
						|
   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
 | 
						|
   * @exception IllegalArgumentException If the orientation value is not valid.
 | 
						|
   */
 | 
						|
  public Scrollbar(int orientation) throws IllegalArgumentException
 | 
						|
  {
 | 
						|
    this(orientation, 0, 10, 0, 100);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Initializes a new instance of <code>Scrollbar</code> with the
 | 
						|
   * specified parameters.  The orientation must be either the constant
 | 
						|
   * <code>HORIZONTAL</code> or <code>VERTICAL</code>.  An incorrect value
 | 
						|
   * will throw an exception.  Inconsistent values for other parameters
 | 
						|
   * are silently corrected to valid values.
 | 
						|
   *
 | 
						|
   * @param orientation The orientation of this scrollbar.
 | 
						|
   * @param value The initial value of the scrollbar.
 | 
						|
   * @param visibleAmount The width of the scrollbar thumb.
 | 
						|
   * @param minimum The minimum value of the scrollbar.
 | 
						|
   * @param maximum The maximum value of the scrollbar.
 | 
						|
   *
 | 
						|
   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
 | 
						|
   * @exception IllegalArgumentException If the orientation value is not valid.
 | 
						|
   */
 | 
						|
  public Scrollbar(int orientation, int value, int visibleAmount, int minimum,
 | 
						|
                   int maximum) throws IllegalArgumentException
 | 
						|
  {
 | 
						|
    if (GraphicsEnvironment.isHeadless())
 | 
						|
      throw new HeadlessException();
 | 
						|
 | 
						|
    if ((orientation != HORIZONTAL) && (orientation != VERTICAL))
 | 
						|
      throw new IllegalArgumentException("Bad orientation value: "
 | 
						|
                                         + orientation);
 | 
						|
 | 
						|
    this.orientation = orientation;
 | 
						|
 | 
						|
    setValues(value, visibleAmount, minimum, maximum);
 | 
						|
 | 
						|
    // Default is 1 according to online docs.
 | 
						|
    lineIncrement = 1;
 | 
						|
 | 
						|
    // Default is 10 according to javadocs.
 | 
						|
    pageIncrement = 10;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the orientation constant for this object.
 | 
						|
   *
 | 
						|
   * @return The orientation constant for this object.
 | 
						|
   */
 | 
						|
  public int getOrientation()
 | 
						|
  {
 | 
						|
    return orientation;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the orientation of this scrollbar to the specified value.  This
 | 
						|
   * value must be either the constant <code>HORIZONTAL</code> or
 | 
						|
   * <code>VERTICAL</code> from this class or an exception will be thrown.
 | 
						|
   *
 | 
						|
   * @param orientation The new orientation value.
 | 
						|
   *
 | 
						|
   * @exception IllegalArgumentException If the orientation value is not valid.
 | 
						|
   */
 | 
						|
  public void setOrientation(int orientation)
 | 
						|
  {
 | 
						|
    if ((orientation != HORIZONTAL) && (orientation != VERTICAL))
 | 
						|
      throw new IllegalArgumentException("Bad orientation value: "
 | 
						|
                                         + orientation);
 | 
						|
 | 
						|
    // FIXME: Communicate to peer?  Or must this be called before peer creation?
 | 
						|
    this.orientation = orientation;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the current value for this scrollbar.
 | 
						|
   *
 | 
						|
   * @return The current value for this scrollbar.
 | 
						|
   */
 | 
						|
  public int getValue()
 | 
						|
  {
 | 
						|
    return value;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the current value for this scrollbar to the specified value.
 | 
						|
   * If this is inconsistent with the minimum and maximum values for this
 | 
						|
   * scrollbar, the value is silently adjusted.
 | 
						|
   *
 | 
						|
   * @param value The new value for this scrollbar.
 | 
						|
   */
 | 
						|
  public void setValue(int value)
 | 
						|
  {
 | 
						|
    setValues(value, visibleAmount, minimum, maximum);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the maximum value for this scrollbar.
 | 
						|
   *
 | 
						|
   * @return The maximum value for this scrollbar.
 | 
						|
   */
 | 
						|
  public int getMaximum()
 | 
						|
  {
 | 
						|
    return maximum;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the maximum value for this scrollbar to the specified value.
 | 
						|
   * If the value is less than the current minimum value, it is silent
 | 
						|
   * set to equal the minimum value.
 | 
						|
   *
 | 
						|
   * @param maximum The new maximum value for this scrollbar.
 | 
						|
   */
 | 
						|
  public void setMaximum(int maximum)
 | 
						|
  {
 | 
						|
    setValues(value, visibleAmount, minimum, maximum);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the minimum value for this scrollbar.
 | 
						|
   *
 | 
						|
   * @return The minimum value for this scrollbar.
 | 
						|
   */
 | 
						|
  public int getMinimum()
 | 
						|
  {
 | 
						|
    return minimum;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the minimum value for this scrollbar to the specified value.  If
 | 
						|
   * this is not consistent with the current value and maximum, it is
 | 
						|
   * silently adjusted to be consistent.
 | 
						|
   *
 | 
						|
   * @param minimum The new minimum value for this scrollbar.
 | 
						|
   */
 | 
						|
  public void setMinimum(int minimum)
 | 
						|
  {
 | 
						|
    setValues(value, visibleAmount, minimum, maximum);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the width of the scrollbar's thumb, in units relative to the
 | 
						|
   * maximum and minimum value of the scrollbar.
 | 
						|
   *
 | 
						|
   * @return The width of the scrollbar's thumb.
 | 
						|
   */
 | 
						|
  public int getVisibleAmount()
 | 
						|
  {
 | 
						|
    return getVisible();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the width of the scrollbar's thumb, in units relative to the
 | 
						|
   * maximum and minimum value of the scrollbar.
 | 
						|
   *
 | 
						|
   * @return The width of the scrollbar's thumb.
 | 
						|
   *
 | 
						|
   * @deprecated This method is deprecated in favor of
 | 
						|
   * <code>getVisibleAmount()</code>.
 | 
						|
   */
 | 
						|
  public int getVisible()
 | 
						|
  {
 | 
						|
    return visibleAmount;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the width of the scrollbar's thumb, in units relative to the
 | 
						|
   * maximum and minimum value of the scrollbar.
 | 
						|
   *
 | 
						|
   * @param visibleAmount The new visible amount value of the scrollbar.
 | 
						|
   */
 | 
						|
  public void setVisibleAmount(int visibleAmount)
 | 
						|
  {
 | 
						|
    setValues(value, visibleAmount, minimum, maximum);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the current value, visible amount, minimum, and maximum for this
 | 
						|
   * scrollbar.  These values are adjusted to be internally consistent
 | 
						|
   * if necessary.
 | 
						|
   *
 | 
						|
   * @param value The new value for this scrollbar.
 | 
						|
   * @param visibleAmount The new visible amount for this scrollbar.
 | 
						|
   * @param minimum The new minimum value for this scrollbar.
 | 
						|
   * @param maximum The new maximum value for this scrollbar.
 | 
						|
   */
 | 
						|
  public synchronized void setValues(int value, int visibleAmount,
 | 
						|
                                     int minimum, int maximum)
 | 
						|
  {
 | 
						|
    if (visibleAmount <= 0)
 | 
						|
      visibleAmount = 1;
 | 
						|
 | 
						|
    if (maximum <= minimum)
 | 
						|
      maximum = minimum + 1;
 | 
						|
 | 
						|
    if (value < minimum)
 | 
						|
      value = minimum;
 | 
						|
 | 
						|
    if (visibleAmount > maximum - minimum)
 | 
						|
      visibleAmount = maximum - minimum;
 | 
						|
 | 
						|
    // According to documentation, the actual maximum
 | 
						|
    // value is (maximum - visibleAmount)
 | 
						|
    if (value > maximum - visibleAmount)
 | 
						|
      value = maximum - visibleAmount;
 | 
						|
 | 
						|
    ScrollbarPeer peer = (ScrollbarPeer) getPeer();
 | 
						|
    if (peer != null
 | 
						|
        && (this.value != value || this.visibleAmount != visibleAmount
 | 
						|
            || this.minimum != minimum || this.maximum != maximum))
 | 
						|
      peer.setValues(value, visibleAmount, minimum, maximum);
 | 
						|
 | 
						|
    this.value = value;
 | 
						|
    this.visibleAmount = visibleAmount;
 | 
						|
    this.minimum = minimum;
 | 
						|
    this.maximum = maximum;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the value added or subtracted when the user activates the scrollbar
 | 
						|
   * scroll by a "unit" amount.
 | 
						|
   *
 | 
						|
   * @return The unit increment value.
 | 
						|
   */
 | 
						|
  public int getUnitIncrement()
 | 
						|
  {
 | 
						|
    return getLineIncrement();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the value added or subtracted when the user selects the scrollbar
 | 
						|
   * scroll by a "unit" amount control.
 | 
						|
   *
 | 
						|
   * @return The unit increment value.
 | 
						|
   *
 | 
						|
   * @deprecated This method is deprecated in favor of
 | 
						|
   * <code>getUnitIncrement()</code>.
 | 
						|
   */
 | 
						|
  public int getLineIncrement()
 | 
						|
  {
 | 
						|
    return lineIncrement;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the value added or subtracted to the scrollbar value when the
 | 
						|
   * user selects the scroll by a "unit" amount control.
 | 
						|
   *
 | 
						|
   * @param unitIncrement The new unit increment amount.
 | 
						|
   */
 | 
						|
  public synchronized void setUnitIncrement(int unitIncrement)
 | 
						|
  {
 | 
						|
    setLineIncrement(unitIncrement);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the value added or subtracted to the scrollbar value when the
 | 
						|
   * user selects the scroll by a "unit" amount control.
 | 
						|
   *
 | 
						|
   * @param lineIncrement The new unit increment amount.
 | 
						|
   *
 | 
						|
   * @deprecated This method is deprecated in favor of
 | 
						|
   * <code>setUnitIncrement()</code>.
 | 
						|
   */
 | 
						|
  public void setLineIncrement(int lineIncrement)
 | 
						|
  {
 | 
						|
    if (lineIncrement < 0)
 | 
						|
      throw new IllegalArgumentException("Unit increment less than zero.");
 | 
						|
 | 
						|
    if (lineIncrement == 0)
 | 
						|
      lineIncrement = 1;
 | 
						|
 | 
						|
   if (lineIncrement == this.lineIncrement)
 | 
						|
      return;
 | 
						|
 | 
						|
    this.lineIncrement = lineIncrement;
 | 
						|
 | 
						|
    ScrollbarPeer peer = (ScrollbarPeer) getPeer();
 | 
						|
    if (peer != null)
 | 
						|
      peer.setLineIncrement(this.lineIncrement);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the value added or subtracted when the user activates the scrollbar
 | 
						|
   * scroll by a "block" amount.
 | 
						|
   *
 | 
						|
   * @return The block increment value.
 | 
						|
   */
 | 
						|
  public int getBlockIncrement()
 | 
						|
  {
 | 
						|
    return getPageIncrement();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the value added or subtracted when the user selects the scrollbar
 | 
						|
   * scroll by a "block" amount control.
 | 
						|
   *
 | 
						|
   * @return The block increment value.
 | 
						|
   *
 | 
						|
   * @deprecated This method is deprecated in favor of
 | 
						|
   * <code>getBlockIncrement()</code>.
 | 
						|
   */
 | 
						|
  public int getPageIncrement()
 | 
						|
  {
 | 
						|
    return pageIncrement;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the value added or subtracted to the scrollbar value when the
 | 
						|
   * user selects the scroll by a "block" amount control.
 | 
						|
   *
 | 
						|
   * @param blockIncrement The new block increment amount.
 | 
						|
   */
 | 
						|
  public synchronized void setBlockIncrement(int blockIncrement)
 | 
						|
  {
 | 
						|
    setPageIncrement(blockIncrement);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the value added or subtracted to the scrollbar value when the
 | 
						|
   * user selects the scroll by a "block" amount control.
 | 
						|
   *
 | 
						|
   * @param pageIncrement The new block increment amount.
 | 
						|
   *
 | 
						|
   * @deprecated This method is deprecated in favor of
 | 
						|
   * <code>setBlockIncrement()</code>.
 | 
						|
   */
 | 
						|
  public void setPageIncrement(int pageIncrement)
 | 
						|
  {
 | 
						|
    if (pageIncrement < 0)
 | 
						|
      throw new IllegalArgumentException("Block increment less than zero.");
 | 
						|
 | 
						|
    if (pageIncrement == 0)
 | 
						|
      pageIncrement = 1;
 | 
						|
 | 
						|
    if (pageIncrement == this.pageIncrement)
 | 
						|
      return;
 | 
						|
 | 
						|
    this.pageIncrement = pageIncrement;
 | 
						|
 | 
						|
    ScrollbarPeer peer = (ScrollbarPeer) getPeer();
 | 
						|
    if (peer != null)
 | 
						|
      peer.setPageIncrement(this.pageIncrement);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Notifies this object to create its native peer.
 | 
						|
   */
 | 
						|
  public synchronized void addNotify()
 | 
						|
  {
 | 
						|
    if (peer == null)
 | 
						|
      peer = getToolkit().createScrollbar(this);
 | 
						|
    super.addNotify();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Adds a new adjustment listener to the list of registered listeners
 | 
						|
   * for this object.
 | 
						|
   *
 | 
						|
   * @param listener The listener to add.
 | 
						|
   */
 | 
						|
  public synchronized void addAdjustmentListener(AdjustmentListener listener)
 | 
						|
  {
 | 
						|
    adjustment_listeners = AWTEventMulticaster.add(adjustment_listeners,
 | 
						|
                                                   listener);
 | 
						|
    enableEvents(AWTEvent.ADJUSTMENT_EVENT_MASK);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Removes the specified listener from the list of registered listeners
 | 
						|
   * for this object.
 | 
						|
   *
 | 
						|
   * @param listener The listener to remove.
 | 
						|
   */
 | 
						|
  public synchronized void removeAdjustmentListener(AdjustmentListener listener)
 | 
						|
  {
 | 
						|
    adjustment_listeners = AWTEventMulticaster.remove(adjustment_listeners,
 | 
						|
                                                      listener);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Processes events for this scrollbar.  It does this by calling
 | 
						|
   * <code>processAdjustmentEvent()</code> if the event is an instance of
 | 
						|
   * <code>AdjustmentEvent</code>, otherwise it calls the superclass to
 | 
						|
   * process the event.
 | 
						|
   *
 | 
						|
   * @param event The event to process.
 | 
						|
   */
 | 
						|
  protected void processEvent(AWTEvent event)
 | 
						|
  {
 | 
						|
    if (event instanceof AdjustmentEvent)
 | 
						|
      processAdjustmentEvent((AdjustmentEvent) event);
 | 
						|
    else
 | 
						|
      super.processEvent(event);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Processes adjustment events for this object by dispatching them to
 | 
						|
   * any registered listeners.  Note that this method will only be called
 | 
						|
   * if adjustment events are enabled.  This will happen automatically if
 | 
						|
   * any listeners are registered.  Otherwise, it can be enabled by a
 | 
						|
   * call to <code>enableEvents()</code>.
 | 
						|
   *
 | 
						|
   * @param event The event to process.
 | 
						|
   */
 | 
						|
  protected void processAdjustmentEvent(AdjustmentEvent event)
 | 
						|
  {
 | 
						|
    value = event.getValue();
 | 
						|
    if (adjustment_listeners != null)
 | 
						|
      adjustment_listeners.adjustmentValueChanged(event);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Package private method to determine whether to call
 | 
						|
   * processEvent() or not.  Will handle events from peer and update
 | 
						|
   * the current value.
 | 
						|
   */
 | 
						|
  void dispatchEventImpl(AWTEvent e)
 | 
						|
  {
 | 
						|
    if (e.id <= AdjustmentEvent.ADJUSTMENT_LAST
 | 
						|
        && e.id >= AdjustmentEvent.ADJUSTMENT_FIRST)
 | 
						|
      {
 | 
						|
        AdjustmentEvent ae = (AdjustmentEvent) e;
 | 
						|
        boolean adjusting = ae.getValueIsAdjusting();
 | 
						|
        if (adjusting)
 | 
						|
          setValueIsAdjusting(true);
 | 
						|
        try
 | 
						|
          {
 | 
						|
            setValue(((AdjustmentEvent) e).getValue());
 | 
						|
            if (adjustment_listeners != null
 | 
						|
                || (eventMask & AWTEvent.ADJUSTMENT_EVENT_MASK) != 0)
 | 
						|
              processEvent(e);
 | 
						|
          }
 | 
						|
        finally
 | 
						|
          {
 | 
						|
            if (adjusting)
 | 
						|
              setValueIsAdjusting(false);
 | 
						|
          }
 | 
						|
      }
 | 
						|
    else
 | 
						|
      super.dispatchEventImpl(e);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns a debugging string for this object.
 | 
						|
   *
 | 
						|
   * @return A debugging string for this object.
 | 
						|
   */
 | 
						|
  protected String paramString()
 | 
						|
  {
 | 
						|
    return ("value=" + getValue() + ",visibleAmount=" + getVisibleAmount()
 | 
						|
            + ",minimum=" + getMinimum() + ",maximum=" + getMaximum()
 | 
						|
            + ",pageIncrement=" + pageIncrement + ",lineIncrement="
 | 
						|
            + lineIncrement + ",orientation="
 | 
						|
            + (orientation == HORIZONTAL ? "HORIZONTAL" : "VERTICAL")
 | 
						|
            + super.paramString());
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns an array of all the objects currently registered as FooListeners
 | 
						|
   * upon this <code>Scrollbar</code>. FooListeners are registered using the
 | 
						|
   * addFooListener method.
 | 
						|
   *
 | 
						|
   * @exception ClassCastException If listenerType doesn't specify a class or
 | 
						|
   * interface that implements java.util.EventListener.
 | 
						|
   */
 | 
						|
  public <T extends EventListener> T[] getListeners(Class<T> listenerType)
 | 
						|
  {
 | 
						|
    if (listenerType == AdjustmentListener.class)
 | 
						|
      return AWTEventMulticaster.getListeners(adjustment_listeners,
 | 
						|
                                              listenerType);
 | 
						|
 | 
						|
    return super.getListeners(listenerType);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns an array of all registered adjustment listeners.
 | 
						|
   */
 | 
						|
  public AdjustmentListener[] getAdjustmentListeners()
 | 
						|
  {
 | 
						|
    return (AdjustmentListener[]) getListeners(AdjustmentListener.class);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns true if the value is in the process of changing.
 | 
						|
   *
 | 
						|
   * @since 1.4
 | 
						|
   */
 | 
						|
  public boolean getValueIsAdjusting()
 | 
						|
  {
 | 
						|
    return valueIsAdjusting;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the value of valueIsAdjusting.
 | 
						|
   *
 | 
						|
   * @since 1.4
 | 
						|
   */
 | 
						|
  public void setValueIsAdjusting(boolean valueIsAdjusting)
 | 
						|
  {
 | 
						|
    this.valueIsAdjusting = valueIsAdjusting;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Generate a unique name for this scroll bar.
 | 
						|
   *
 | 
						|
   * @return A unique name for this scroll bar.
 | 
						|
   */
 | 
						|
  String generateName()
 | 
						|
  {
 | 
						|
    return "scrollbar" + getUniqueLong();
 | 
						|
  }
 | 
						|
 | 
						|
  private static synchronized long getUniqueLong()
 | 
						|
  {
 | 
						|
    return next_scrollbar_number++;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * This class provides accessibility support for the
 | 
						|
   * scrollbar.
 | 
						|
   *
 | 
						|
   * @author Jerry Quinn (jlquinn@optonline.net)
 | 
						|
   * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
 | 
						|
   */
 | 
						|
  protected class AccessibleAWTScrollBar extends AccessibleAWTComponent
 | 
						|
    implements AccessibleValue
 | 
						|
  {
 | 
						|
    /**
 | 
						|
     * Serialization constant to match JDK 1.5
 | 
						|
     */
 | 
						|
    private static final long serialVersionUID = -344337268523697807L;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the role of this accessible object.
 | 
						|
     *
 | 
						|
     * @return the instance of <code>AccessibleRole</code>,
 | 
						|
     * which describes this object.
 | 
						|
     *
 | 
						|
     * @see javax.accessibility.AccessibleRole
 | 
						|
     */
 | 
						|
    public AccessibleRole getAccessibleRole()
 | 
						|
    {
 | 
						|
      return AccessibleRole.SCROLL_BAR;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the state set of this accessible object.
 | 
						|
     *
 | 
						|
     * @return a set of <code>AccessibleState</code>s which
 | 
						|
     * represent the current state of the accessible object.
 | 
						|
     *
 | 
						|
     * @see javax.accessibility.AccessibleState
 | 
						|
     * @see javax.accessibility.AccessibleStateSet
 | 
						|
     */
 | 
						|
    public AccessibleStateSet getAccessibleStateSet()
 | 
						|
    {
 | 
						|
      AccessibleStateSet states = super.getAccessibleStateSet();
 | 
						|
      if (getOrientation() == HORIZONTAL)
 | 
						|
        states.add(AccessibleState.HORIZONTAL);
 | 
						|
      else
 | 
						|
        states.add(AccessibleState.VERTICAL);
 | 
						|
      if (getValueIsAdjusting())
 | 
						|
        states.add(AccessibleState.BUSY);
 | 
						|
      return states;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns an implementation of the <code>AccessibleValue</code>
 | 
						|
     * interface for this accessible object.  In this case, the
 | 
						|
     * current instance is simply returned (with a more appropriate
 | 
						|
     * type), as it also implements the accessible value as well as
 | 
						|
     * the context.
 | 
						|
     *
 | 
						|
     * @return the accessible value associated with this context.
 | 
						|
     *
 | 
						|
     * @see javax.accessibility.AccessibleValue
 | 
						|
     */
 | 
						|
    public AccessibleValue getAccessibleValue()
 | 
						|
    {
 | 
						|
      return this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the current value of this accessible object.
 | 
						|
     * In this case, this is the same as the value for
 | 
						|
     * the scrollbar, wrapped in an <code>Integer</code>
 | 
						|
     * object.
 | 
						|
     *
 | 
						|
     * @return the numeric value of this scrollbar.
 | 
						|
     *
 | 
						|
     * @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue()
 | 
						|
     */
 | 
						|
    public Number getCurrentAccessibleValue()
 | 
						|
    {
 | 
						|
      return new Integer(getValue());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the current value of this accessible object
 | 
						|
     * to that supplied.  In this case, the value of the
 | 
						|
     * scrollbar is set, and this method always returns
 | 
						|
     * true.
 | 
						|
     *
 | 
						|
     * @param number the new accessible value.
 | 
						|
     *
 | 
						|
     * @return true if the value was set.
 | 
						|
     *
 | 
						|
     * @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number)
 | 
						|
     */
 | 
						|
    public boolean setCurrentAccessibleValue(Number number)
 | 
						|
    {
 | 
						|
      setValue(number.intValue());
 | 
						|
      return true;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the minimum acceptable accessible value used
 | 
						|
     * by this object.  In this case, this is the same as
 | 
						|
     * the minimum value of the scrollbar, wrapped in an
 | 
						|
     * object.
 | 
						|
     *
 | 
						|
     * @return the minimum value of this scrollbar.
 | 
						|
     *
 | 
						|
     * @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue()
 | 
						|
     */
 | 
						|
    public Number getMinimumAccessibleValue()
 | 
						|
    {
 | 
						|
      return new Integer(getMinimum());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the maximum acceptable accessible value used
 | 
						|
     * by this object.  In this case, this is the same as
 | 
						|
     * the maximum value of the scrollbar, wrapped in an
 | 
						|
     * object.
 | 
						|
     *
 | 
						|
     * @return the maximum value of this scrollbar.
 | 
						|
     *
 | 
						|
     * @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue()
 | 
						|
     */
 | 
						|
    public Number getMaximumAccessibleValue()
 | 
						|
    {
 | 
						|
      return new Integer(getMaximum());
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Gets the AccessibleContext associated with this <code>Scrollbar</code>.
 | 
						|
   * The context is created, if necessary.
 | 
						|
   *
 | 
						|
   * @return the associated context
 | 
						|
   */
 | 
						|
  public AccessibleContext getAccessibleContext()
 | 
						|
  {
 | 
						|
    /* Create the context if this is the first request */
 | 
						|
    if (accessibleContext == null)
 | 
						|
      accessibleContext = new AccessibleAWTScrollBar();
 | 
						|
 | 
						|
    return accessibleContext;
 | 
						|
  }
 | 
						|
}
 |