Source for java.awt.AWTEvent

   1: 
   2: /* AWTEvent.java -- the root event in AWT
   3:    Copyright (C) 1999, 2000, 2002, 2005 Free Software Foundation
   4: 
   5: This file is part of GNU Classpath.
   6: 
   7: GNU Classpath is free software; you can redistribute it and/or modify
   8: it under the terms of the GNU General Public License as published by
   9: the Free Software Foundation; either version 2, or (at your option)
  10: any later version.
  11: 
  12: GNU Classpath is distributed in the hope that it will be useful, but
  13: WITHOUT ANY WARRANTY; without even the implied warranty of
  14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15: General Public License for more details.
  16: 
  17: You should have received a copy of the GNU General Public License
  18: along with GNU Classpath; see the file COPYING.  If not, write to the
  19: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  20: 02110-1301 USA.
  21: 
  22: Linking this library statically or dynamically with other modules is
  23: making a combined work based on this library.  Thus, the terms and
  24: conditions of the GNU General Public License cover the whole
  25: combination.
  26: 
  27: As a special exception, the copyright holders of this library give you
  28: permission to link this library with independent modules to produce an
  29: executable, regardless of the license terms of these independent
  30: modules, and to copy and distribute the resulting executable under
  31: terms of your choice, provided that you also meet, for each linked
  32: independent module, the terms and conditions of the license of that
  33: module.  An independent module is a module which is not derived from
  34: or based on this library.  If you modify this library, you may extend
  35: this exception to your version of the library, but you are not
  36: obligated to do so.  If you do not wish to do so, delete this
  37: exception statement from your version. */
  38: 
  39: 
  40: package java.awt;
  41: 
  42: import java.awt.event.ActionEvent;
  43: import java.awt.event.AdjustmentEvent;
  44: import java.awt.event.ComponentEvent;
  45: import java.awt.event.ContainerEvent;
  46: import java.awt.event.FocusEvent;
  47: import java.awt.event.InputMethodEvent;
  48: import java.awt.event.InvocationEvent;
  49: import java.awt.event.ItemEvent;
  50: import java.awt.event.KeyEvent;
  51: import java.awt.event.MouseEvent;
  52: import java.awt.event.PaintEvent;
  53: import java.awt.event.TextEvent;
  54: import java.awt.event.WindowEvent;
  55: import java.util.EventObject;
  56: 
  57: /**
  58:  * AWTEvent is the root event class for all AWT events in the JDK 1.1 event 
  59:  * model. It supersedes the Event class from JDK 1.0. Subclasses outside of
  60:  * the java.awt package should have IDs greater than RESERVED_ID_MAX.
  61:  *
  62:  * <p>Event masks defined here are used by components in
  63:  * <code>enableEvents</code> to select event types not selected by registered
  64:  * listeners. Event masks are appropriately set when registering on
  65:  * components.
  66:  *
  67:  * @author Warren Levy  (warrenl@cygnus.com)
  68:  * @author Aaron M. Renn (arenn@urbanophile.com)
  69:  * @since 1.1
  70:  * @status updated to 1.4
  71:  */
  72: public abstract class AWTEvent extends EventObject
  73: {
  74:   /**
  75:    * Compatible with JDK 1.1+.
  76:    */
  77:   private static final long serialVersionUID = -1825314779160409405L;
  78: 
  79:   /**
  80:    * The ID of the event.
  81:    *
  82:    * @see #getID()
  83:    * @see #AWTEvent(Object, int)
  84:    * @serial the identifier number of this event
  85:    */
  86:   protected int id;
  87: 
  88:   /**
  89:    * Indicates if the event has been consumed. False mean it is passed to
  90:    * the peer, true means it has already been processed. Semantic events
  91:    * generated by low-level events always have the value true.
  92:    *
  93:    * @see #consume()
  94:    * @see #isConsumed()
  95:    * @serial whether the event has been consumed
  96:    */
  97:   protected boolean consumed;
  98: 
  99:   /**
 100:    * Who knows? It's in the serial version.
 101:    *
 102:    * @serial No idea what this is for.
 103:    */
 104:   byte[] bdata;
 105: 
 106:   /** Mask for selecting component events. */
 107:   public static final long COMPONENT_EVENT_MASK = 0x00001;
 108: 
 109:   /** Mask for selecting container events. */
 110:   public static final long CONTAINER_EVENT_MASK = 0x00002;
 111: 
 112:   /** Mask for selecting component focus events. */
 113:   public static final long FOCUS_EVENT_MASK = 0x00004;
 114: 
 115:   /** Mask for selecting keyboard events. */
 116:   public static final long KEY_EVENT_MASK = 0x00008;
 117: 
 118:   /** Mask for mouse button events. */
 119:   public static final long MOUSE_EVENT_MASK = 0x00010;
 120: 
 121:   /** Mask for mouse motion events. */
 122:   public static final long MOUSE_MOTION_EVENT_MASK = 0x00020;
 123: 
 124:   /** Mask for window events. */
 125:   public static final long WINDOW_EVENT_MASK = 0x00040;
 126: 
 127:   /** Mask for action events. */
 128:   public static final long ACTION_EVENT_MASK = 0x00080;
 129: 
 130:   /** Mask for adjustment events. */
 131:   public static final long ADJUSTMENT_EVENT_MASK = 0x00100;
 132: 
 133:   /** Mask for item events. */
 134:   public static final long ITEM_EVENT_MASK = 0x00200;
 135: 
 136:   /** Mask for text events. */
 137:   public static final long TEXT_EVENT_MASK = 0x00400;
 138: 
 139:   /**
 140:    * Mask for input method events.
 141:    * @since 1.3
 142:    */
 143:   public static final long INPUT_METHOD_EVENT_MASK = 0x00800;
 144: 
 145:   /**
 146:    * Mask if input methods are enabled. Package visible only.
 147:    */
 148:   static final long INPUT_ENABLED_EVENT_MASK = 0x01000;
 149: 
 150:   /**
 151:    * Mask for paint events.
 152:    * @since 1.3
 153:    */
 154:   public static final long PAINT_EVENT_MASK = 0x02000;
 155: 
 156:   /**
 157:    * Mask for invocation events.
 158:    * @since 1.3
 159:    */
 160:   public static final long INVOCATION_EVENT_MASK = 0x04000;
 161: 
 162:   /**
 163:    * Mask for hierarchy events.
 164:    * @since 1.3
 165:    */
 166:   public static final long HIERARCHY_EVENT_MASK = 0x08000;
 167: 
 168:   /**
 169:    * Mask for hierarchy bounds events.
 170:    * @since 1.3
 171:    */
 172:   public static final long HIERARCHY_BOUNDS_EVENT_MASK = 0x10000;
 173: 
 174:   /**
 175:    * Mask for mouse wheel events.
 176:    * @since 1.4
 177:    */
 178:   public static final long MOUSE_WHEEL_EVENT_MASK = 0x20000;
 179: 
 180:   /**
 181:    * Mask for window state events.
 182:    * @since 1.4
 183:    */
 184:   public static final long WINDOW_STATE_EVENT_MASK = 0x40000;
 185: 
 186:   /**
 187:    * Mask for window focus events.
 188:    * @since 1.4
 189:    */
 190:   public static final long WINDOW_FOCUS_EVENT_MASK = 0x80000;
 191: 
 192:   /**
 193:   * This is the highest number for event ids that are reserved for use by
 194:   * the AWT system itself. Subclasses outside of java.awt should use higher
 195:   * ids.
 196:   */
 197:   public static final int RESERVED_ID_MAX = 1999;
 198: 
 199: 
 200:   /**
 201:    * Initializes a new AWTEvent from the old Java 1.0 event object.
 202:    *
 203:    * @param event the old-style event
 204:    * @throws NullPointerException if event is null
 205:    */
 206:   public AWTEvent(Event event)
 207:   {
 208:     this(event.target, event.id);
 209:     consumed = event.consumed;
 210:   }
 211: 
 212:   /**
 213:    * Create an event on the specified source object and id.
 214:    *
 215:    * @param source the object that caused the event
 216:    * @param id the event id
 217:    * @throws IllegalArgumentException if source is null
 218:    */
 219:   public AWTEvent(Object source, int id)
 220:   {
 221:     super(source);
 222:     this.id = id;
 223:   }
 224: 
 225:   /**
 226:    * Retarget the event, such as converting a heavyweight component to a
 227:    * lightweight child of the original. This is not for general use, but
 228:    * is for event targeting systems like KeyboardFocusManager.
 229:    *
 230:    * @param source the new source
 231:    */
 232:   public void setSource(Object source)
 233:   {
 234:     this.source = source;
 235:   }
 236: 
 237:   /**
 238:    * Returns the event type id.
 239:    *
 240:    * @return the id number of this event
 241:    */
 242:   public int getID()
 243:   {
 244:     return id;
 245:   }
 246: 
 247:   /**
 248:    * Create a string that represents this event in the format
 249:    * <code>classname[eventstring] on sourcecomponentname</code>.
 250:    *
 251:    * @return a string representing this event
 252:    */
 253:   public String toString ()
 254:   {
 255:     String string = getClass ().getName () + "[" + paramString () + "] on "
 256:     + source;
 257: 
 258:     return string;
 259:   }
 260: 
 261:   /**
 262:    * Returns a string representation of the state of this event. It may be
 263:    * empty, but must not be null; it is implementation defined.
 264:    *
 265:    * @return a string representation of this event
 266:    */
 267:   public String paramString()
 268:   {
 269:     return "";
 270:   }
 271: 
 272:   /**
 273:    * Consumes this event so that it will not be processed in the default
 274:    * manner.
 275:    */
 276:   protected void consume()
 277:   {
 278:     consumed = true;
 279:   }
 280: 
 281:   /**
 282:    * Tests whether not not this event has been consumed. A consumed event
 283:    * is not processed in the default manner.
 284:    *
 285:    * @return true if this event has been consumed
 286:    */
 287:   protected boolean isConsumed()
 288:   {
 289:     return consumed;
 290:   }
 291: 
 292:   /**
 293:    * Converts an event id to the appropriate event mask.
 294:    *
 295:    * @param id the event id
 296:    *
 297:    * @return the event mask for the specified id
 298:    */
 299:   static long eventIdToMask(int id)
 300:   {
 301:     long mask = 0;
 302:     switch (id)
 303:     {
 304:       case ActionEvent.ACTION_PERFORMED:
 305:         mask = ACTION_EVENT_MASK;
 306:         break;
 307:       case AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED:
 308:         mask = ADJUSTMENT_EVENT_MASK;
 309:         break;
 310:       case ComponentEvent.COMPONENT_MOVED:
 311:       case ComponentEvent.COMPONENT_RESIZED:
 312:       case ComponentEvent.COMPONENT_SHOWN:
 313:       case ComponentEvent.COMPONENT_HIDDEN:
 314:         mask = COMPONENT_EVENT_MASK;
 315:         break;
 316:       case ContainerEvent.COMPONENT_ADDED:
 317:       case ContainerEvent.COMPONENT_REMOVED:
 318:         mask = CONTAINER_EVENT_MASK;
 319:         break;
 320:       case FocusEvent.FOCUS_GAINED:
 321:       case FocusEvent.FOCUS_LOST:
 322:         mask = FOCUS_EVENT_MASK;
 323:         break;
 324:       case InputMethodEvent.INPUT_METHOD_TEXT_CHANGED:
 325:       case InputMethodEvent.CARET_POSITION_CHANGED:
 326:         mask = INPUT_METHOD_EVENT_MASK;
 327:         break;
 328:       case InvocationEvent.INVOCATION_DEFAULT:
 329:         mask = INVOCATION_EVENT_MASK;
 330:         break;
 331:       case ItemEvent.ITEM_STATE_CHANGED:
 332:         mask = ITEM_EVENT_MASK;
 333:         break;
 334:       case KeyEvent.KEY_TYPED:
 335:       case KeyEvent.KEY_PRESSED:
 336:       case KeyEvent.KEY_RELEASED:
 337:         mask = KEY_EVENT_MASK;
 338:         break;
 339:       case MouseEvent.MOUSE_CLICKED:
 340:       case MouseEvent.MOUSE_PRESSED:
 341:       case MouseEvent.MOUSE_RELEASED:
 342:         mask = MOUSE_EVENT_MASK;
 343:         break;
 344:       case MouseEvent.MOUSE_MOVED:
 345:       case MouseEvent.MOUSE_ENTERED:
 346:       case MouseEvent.MOUSE_EXITED:
 347:       case MouseEvent.MOUSE_DRAGGED:
 348:         mask = MOUSE_MOTION_EVENT_MASK;
 349:         break;
 350:       case MouseEvent.MOUSE_WHEEL:
 351:         mask = MOUSE_WHEEL_EVENT_MASK;
 352:         break;
 353:       case PaintEvent.PAINT:
 354:       case PaintEvent.UPDATE:
 355:         mask = PAINT_EVENT_MASK;
 356:         break;
 357:       case TextEvent.TEXT_VALUE_CHANGED:
 358:         mask = TEXT_EVENT_MASK;
 359:         break;
 360:       case WindowEvent.WINDOW_OPENED:
 361:       case WindowEvent.WINDOW_CLOSING:
 362:       case WindowEvent.WINDOW_CLOSED:
 363:       case WindowEvent.WINDOW_ICONIFIED:
 364:       case WindowEvent.WINDOW_DEICONIFIED:
 365:       case WindowEvent.WINDOW_ACTIVATED:
 366:       case WindowEvent.WINDOW_DEACTIVATED:
 367:         mask = WINDOW_EVENT_MASK;
 368:         break;
 369:       case WindowEvent.WINDOW_GAINED_FOCUS:
 370:       case WindowEvent.WINDOW_LOST_FOCUS:
 371:         mask = WINDOW_FOCUS_EVENT_MASK;
 372:         break;
 373:       case WindowEvent.WINDOW_STATE_CHANGED:
 374:         mask = WINDOW_STATE_EVENT_MASK;
 375:         break;
 376:       default:
 377:         mask = 0;
 378:     }
 379:     return mask;
 380:   }
 381: } // class AWTEvent