home *** CD-ROM | disk | FTP | other *** search
/ Java 1.2 How-To / JavaHowTo.iso / 3rdParty / jbuilder / unsupported / JDK1.2beta3 / SOURCE / SRC.ZIP / java / awt / AWTEvent.java < prev    next >
Encoding:
Java Source  |  1998-03-20  |  11.0 KB  |  336 lines

  1. /*
  2.  * @(#)AWTEvent.java    1.24 98/03/18
  3.  *
  4.  * Copyright 1996, 1997 by Sun Microsystems, Inc.,
  5.  * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
  6.  * All rights reserved.
  7.  *
  8.  * This software is the confidential and proprietary information
  9.  * of Sun Microsystems, Inc. ("Confidential Information").  You
  10.  * shall not disclose such Confidential Information and shall use
  11.  * it only in accordance with the terms of the license agreement
  12.  * you entered into with Sun.
  13.  */
  14.  
  15. package java.awt;
  16.  
  17. import java.util.EventObject;
  18. import java.awt.event.*;
  19.  
  20. /**
  21.  * The root event class for all AWT events.
  22.  * This class and its subclasses supercede the original
  23.  * java.awt.Event class.
  24.  * Subclasses of this root AWTEvent class defined outside of the
  25.  * java.awt.event package should define event ID values greater than
  26.  * the value defined by RESERVED_ID_MAX.
  27.  *
  28.  * The event masks defined in this class are needed ONLY by
  29.  * component subclasses which are using Component.enableEvents()
  30.  * to select for event types not selected by registered listeners.
  31.  * If a listener is registered on a component, the appropriate event
  32.  * mask is already set internally by the component.
  33.  * @see Component#enableEvents
  34.  *
  35.  * @see java.awt.event.ComponentEvent
  36.  * @see java.awt.event.FocusEvent
  37.  * @see java.awt.event.KeyEvent
  38.  * @see java.awt.event.MouseEvent
  39.  * @see java.awt.event.WindowEvent
  40.  * @see java.awt.event.ActionEvent
  41.  * @see java.awt.event.AdjustmentEvent
  42.  * @see java.awt.event.ItemEvent
  43.  * @see java.awt.event.TextEvent
  44.  *
  45.  * @version 1.24 03/18/98
  46.  * @author Carl Quinn
  47.  * @author Amy Fowler
  48.  */
  49. public abstract class AWTEvent extends EventObject {
  50.     private transient long data;
  51.  
  52.     protected int id;
  53.  
  54.     // This field controls whether or not the event is sent back
  55.     // down to the peer once the source has processed it -
  56.     // false means it's sent to the peer, true means it's not.
  57.     // Semantic events always have a 'true' value since they were
  58.     // generated by the peer in response to a low-level event.
  59.     protected boolean consumed = false;
  60.  
  61.     /**
  62.      * The event mask for selecting component events.
  63.      */
  64.     public final static long COMPONENT_EVENT_MASK = 0x01;
  65.  
  66.     /**
  67.      * The event mask for selecting container events.
  68.      */
  69.     public final static long CONTAINER_EVENT_MASK = 0x02;
  70.  
  71.     /**
  72.      * The event mask for selecting focus events.
  73.      */
  74.     public final static long FOCUS_EVENT_MASK = 0x04;
  75.  
  76.     /**
  77.      * The event mask for selecting key events.
  78.      */
  79.     public final static long KEY_EVENT_MASK = 0x08;
  80.  
  81.     /**
  82.      * The event mask for selecting mouse events.
  83.      */
  84.     public final static long MOUSE_EVENT_MASK = 0x10;
  85.  
  86.     /**
  87.      * The event mask for selecting mouse motion events.
  88.      */
  89.     public final static long MOUSE_MOTION_EVENT_MASK = 0x20;
  90.  
  91.     /**
  92.      * The event mask for selecting window events.
  93.      */
  94.     public final static long WINDOW_EVENT_MASK = 0x40;
  95.  
  96.     /**
  97.      * The event mask for selecting action events.
  98.      */
  99.     public final static long ACTION_EVENT_MASK = 0x80;
  100.  
  101.     /**
  102.      * The event mask for selecting adjustment events.
  103.      */
  104.     public final static long ADJUSTMENT_EVENT_MASK = 0x100;
  105.  
  106.     /**
  107.      * The event mask for selecting item events.
  108.      */
  109.     public final static long ITEM_EVENT_MASK = 0x200;
  110.  
  111.     /**
  112.      * The event mask for selecting text events.
  113.      */
  114.     public final static long TEXT_EVENT_MASK = 0x400;
  115.  
  116.     /**
  117.      * The event mask for selecting input method events.
  118.      */
  119.     public final static long INPUT_METHOD_EVENT_MASK = 0x800;
  120.  
  121.     /**
  122.      * The maximum value for reserved AWT event IDs. Programs defining
  123.      * their own event IDs should use IDs greater than this value.
  124.      */
  125.     public final static int RESERVED_ID_MAX = 1999;
  126.  
  127.     /*
  128.      * JDK 1.1 serialVersionUID 
  129.      */
  130.     private static final long serialVersionUID = -1825314779160409405L;
  131.  
  132.     /**
  133.      * Constructs an AWTEvent object from the parameters of a 1.0-style event.
  134.      * @param event the old-style event
  135.      */
  136.     public AWTEvent(Event event) {
  137.         this(event.target, event.id);
  138.     }
  139.  
  140.     /**
  141.      * Constructs an AWTEvent object with the specified source object and type.
  142.      * @param source the object where the event originated
  143.      * @id the event type
  144.      */
  145.     public AWTEvent(Object source, int id) {
  146.         super(source);
  147.     this.id = id;
  148.         switch(id) {
  149.           case ActionEvent.ACTION_PERFORMED:
  150.           case ItemEvent.ITEM_STATE_CHANGED:
  151.           case AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED:
  152.           case TextEvent.TEXT_VALUE_CHANGED:
  153.             consumed = true;
  154.             break;
  155.           default:
  156.         }
  157.     }
  158.  
  159.     /**
  160.      * Returns the event type.
  161.      */
  162.     public int getID() {
  163.         return id;
  164.     }
  165.  
  166.     public String toString() {
  167.         String srcName = null;
  168.         if (source instanceof Component) {
  169.             srcName = ((Component)source).getName();
  170.         } else if (source instanceof MenuComponent) {
  171.             srcName = ((MenuComponent)source).getName();
  172.         }
  173.     return getClass().getName() + "[" + paramString() + "] on " +
  174.             (srcName != null? srcName : source);
  175.     }
  176.  
  177.     public String paramString() {
  178.         return "";
  179.     }
  180.  
  181.     protected void consume() {
  182.         switch(id) {
  183.           case KeyEvent.KEY_PRESSED:
  184.           case KeyEvent.KEY_RELEASED:
  185.           case MouseEvent.MOUSE_PRESSED:
  186.           case MouseEvent.MOUSE_RELEASED:
  187.           case MouseEvent.MOUSE_MOVED:
  188.           case MouseEvent.MOUSE_DRAGGED:
  189.           case MouseEvent.MOUSE_ENTERED:
  190.           case MouseEvent.MOUSE_EXITED:
  191.           case InputMethodEvent.INPUT_METHOD_TEXT_CHANGED:
  192.           case InputMethodEvent.CARET_POSITION_CHANGED:
  193.               consumed = true;
  194.               break;
  195.           default:
  196.               // event type cannot be consumed
  197.         }
  198.     }
  199.  
  200.     protected boolean isConsumed() {
  201.         return consumed;
  202.     }
  203.  
  204.     /* Converts a new event to an old one (used for compatibility).
  205.      * If the new event cannot be converted (because no old equivelent
  206.      * exists) then this returns null.
  207.      *
  208.      * Note: this method is here instead of in each individual new
  209.      * event class in java.awt.event because we don't want to make
  210.      * it public and it needs to be called from java.awt.
  211.      */
  212.     Event convertToOld() {
  213.         Object src = getSource();
  214.         int newid = id;
  215.  
  216.         switch(id) {
  217.           case KeyEvent.KEY_PRESSED:
  218.           case KeyEvent.KEY_RELEASED:
  219.               KeyEvent ke = (KeyEvent)this;
  220.               if (ke.isActionKey()) {
  221.                   newid = (id == KeyEvent.KEY_PRESSED? 
  222.                            Event.KEY_ACTION : Event.KEY_ACTION_RELEASE);
  223.               }
  224.               int keyCode = ke.getKeyCode();
  225.               if (keyCode == KeyEvent.VK_SHIFT || 
  226.                   keyCode == KeyEvent.VK_CONTROL || 
  227.                   keyCode == KeyEvent.VK_ALT) {
  228.                   return null;  // suppress modifier keys in old event model.
  229.               }
  230.               // no mask for button1 existed in old Event - strip it out
  231.               return new Event(src, ke.getWhen(), newid, 0, 0,
  232.                                Event.getOldEventKey(ke), 
  233.                                (ke.getModifiers() & ~InputEvent.BUTTON1_MASK));
  234.  
  235.           case MouseEvent.MOUSE_PRESSED:
  236.           case MouseEvent.MOUSE_RELEASED:
  237.           case MouseEvent.MOUSE_MOVED:
  238.           case MouseEvent.MOUSE_DRAGGED:
  239.           case MouseEvent.MOUSE_ENTERED:
  240.           case MouseEvent.MOUSE_EXITED:
  241.               MouseEvent me = (MouseEvent)this;
  242.               // no mask for button1 existed in old Event - strip it out
  243.               Event olde = new Event(src, me.getWhen(), newid, 
  244.                                me.getX(), me.getY(), 0, 
  245.                                (me.getModifiers() & ~InputEvent.BUTTON1_MASK));
  246.               olde.clickCount = me.getClickCount();
  247.               return olde;
  248.  
  249.           case FocusEvent.FOCUS_GAINED:
  250.               return new Event(src, Event.GOT_FOCUS, null);
  251.  
  252.           case FocusEvent.FOCUS_LOST:
  253.               return new Event(src, Event.LOST_FOCUS, null);
  254.  
  255.           case WindowEvent.WINDOW_CLOSING:
  256.           case WindowEvent.WINDOW_ICONIFIED:
  257.           case WindowEvent.WINDOW_DEICONIFIED:
  258.               return new Event(src, newid, null);
  259.  
  260.           case ComponentEvent.COMPONENT_MOVED:
  261.               if (src instanceof Frame || src instanceof Dialog) {
  262.                   Point p = ((Component)src).getLocation();
  263.                   return new Event(src, 0, Event.WINDOW_MOVED, p.x, p.y, 0, 0);
  264.               }
  265.               break;
  266.  
  267.           case ActionEvent.ACTION_PERFORMED:
  268.               ActionEvent ae = (ActionEvent)this;
  269.               String cmd;
  270.               if (src instanceof Button) { 
  271.                   cmd = ((Button)src).getLabel();
  272.               } else if (src instanceof MenuItem) {
  273.                   cmd = ((MenuItem)src).getLabel();
  274.               } else {
  275.                   cmd = ae.getActionCommand();
  276.               } 
  277.               return new Event(src, 0, newid, 0, 0, 0, ae.getModifiers(), cmd);
  278.  
  279.           case ItemEvent.ITEM_STATE_CHANGED:
  280.               ItemEvent ie = (ItemEvent)this;
  281.               Object arg;
  282.               if (src instanceof List) {
  283.                   newid = (ie.getStateChange() == ItemEvent.SELECTED?
  284.                            Event.LIST_SELECT : Event.LIST_DESELECT);
  285.                   arg = ie.getItem();
  286.               } else {
  287.                   newid = Event.ACTION_EVENT;
  288.                   if (src instanceof Choice) {
  289.                       arg = ie.getItem();
  290.  
  291.                   } else { // Checkbox
  292.                       arg = new Boolean(ie.getStateChange() == ItemEvent.SELECTED);
  293.                   }
  294.               }             
  295.               return new Event(src, newid, arg);
  296.  
  297.           case AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED:
  298.               AdjustmentEvent aje = (AdjustmentEvent)this;
  299.               switch(aje.getAdjustmentType()) {
  300.                 case AdjustmentEvent.UNIT_INCREMENT:
  301.                   newid = Event.SCROLL_LINE_DOWN;
  302.                   break;
  303.                 case AdjustmentEvent.UNIT_DECREMENT:
  304.                   newid = Event.SCROLL_LINE_UP;
  305.                   break;
  306.                 case AdjustmentEvent.BLOCK_INCREMENT:
  307.                   newid = Event.SCROLL_PAGE_DOWN;
  308.                   break;
  309.                 case AdjustmentEvent.BLOCK_DECREMENT:
  310.                   newid = Event.SCROLL_PAGE_UP;
  311.                   break;
  312.                 case AdjustmentEvent.TRACK:
  313.                   newid = Event.SCROLL_ABSOLUTE;
  314.                   break;
  315.                 default:
  316.                   return null;
  317.               }
  318.               return new Event(src, newid, new Integer(aje.getValue()));
  319.  
  320.           default:
  321.         }
  322.         return null;
  323.     }                          
  324.  
  325.     /* Package-private method to change a KeyEvent's source to the new
  326.      * focus owner.  This method needs to be here instead of in KeyEvent
  327.      * because it should only be called from by the EventQueue.
  328.      */
  329.     void setSource(Object newSource) {
  330.         if (!(this instanceof KeyEvent)) {
  331.             throw new ClassCastException();
  332.         }
  333.         source = newSource;
  334.     }
  335. }
  336.