home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 February / VPR9802A.ISO / APP_DEMO / VC / MAIN.BIN / Event.java < prev    next >
Text File  |  1997-10-27  |  17KB  |  677 lines

  1. /*
  2.  * @(#)Event.java    1.55 97/01/27
  3.  * 
  4.  * Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  * CopyrightVersion 1.1_beta
  20.  * 
  21.  */
  22. package java.awt;
  23.  
  24. import java.awt.event.*;
  25. import java.io.*;
  26.  
  27. /**
  28.  * Event is a platform-independent class that encapsulates events from
  29.  * the local Graphical User Interface(GUI) platform.<p>
  30.  *
  31.  * The event contains an <a href="#id"> id</a> which indicates the type
  32.  * of event it is and which other Event variables are relavent for the event.
  33.  * For keyboard events, <a href="#key"> key</a> will contain a value indicating
  34.  * the key that was activated and <a href="#modifiers"> modifiers</a> will
  35.  * contain the modifiers.  For KEY_PRESS and KEY_RELEASE event ids, the value of key
  36.  * will be the unicode character code for the key; for KEY_ACTION and KEY_ACTION_RELEASE, 
  37.  * the value of key will be one of the defined action-key identifiers in the Event 
  38.  * class (PGUP, PGDN, F1, F2, etc).
  39.  *
  40.  * @version 1.55 01/27/97
  41.  * @author Sami Shaio
  42.  */
  43. public class Event implements java.io.Serializable {
  44.     private transient int data;
  45.  
  46.     /* Modifier constants */
  47.  
  48.     /**
  49.      * The shift modifier constant.
  50.      */
  51.     public static final int SHIFT_MASK        = 1 << 0;
  52.  
  53.     /**
  54.      * The control modifier constant.
  55.      */
  56.     public static final int CTRL_MASK        = 1 << 1;
  57.  
  58.     /** 
  59.      * The meta modifier constant.
  60.      */
  61.     public static final int META_MASK        = 1 << 2;
  62.  
  63.     /** 
  64.      * The alt modifier constant.
  65.      */
  66.     public static final int ALT_MASK        = 1 << 3;
  67.  
  68.     /* Action keys */
  69.     /** 
  70.      * The home action-key.
  71.      */
  72.     public static final int HOME        = 1000;
  73.  
  74.     /** 
  75.      * The end action-key. 
  76.      */
  77.     public static final int END            = 1001;
  78.  
  79.     /**
  80.      * The page up action-key.
  81.      */
  82.     public static final int PGUP        = 1002;
  83.  
  84.     /**
  85.      * The page down action-key.
  86.      */
  87.     public static final int PGDN        = 1003;
  88.  
  89.     /**
  90.      * The up arrow action-key.
  91.      */
  92.     public static final int UP            = 1004;
  93.  
  94.     /**
  95.      * The down arrow action-key.
  96.      */
  97.     public static final int DOWN        = 1005;
  98.  
  99.     /**
  100.      * The left arrow action-key.
  101.      */
  102.     public static final int LEFT        = 1006;
  103.  
  104.     /**
  105.      * The right arrow action-key.
  106.      */
  107.     public static final int RIGHT        = 1007;
  108.  
  109.     /**
  110.      * The F1 function action-key.
  111.      */
  112.     public static final int F1            = 1008;
  113.  
  114.     /**
  115.      * The F2 function action-key.
  116.      */
  117.     public static final int F2            = 1009;
  118.  
  119.     /**
  120.      * The F3 function action-key.
  121.      */
  122.     public static final int F3            = 1010;
  123.  
  124.     /**
  125.      * The F4 function action-key.
  126.      */
  127.     public static final int F4            = 1011;
  128.  
  129.     /**
  130.      * The F5 function action-key.
  131.      */
  132.     public static final int F5            = 1012;
  133.  
  134.     /**
  135.      * The F6 function action-key.
  136.      */
  137.     public static final int F6            = 1013;
  138.  
  139.     /**
  140.      * The F7 function action-key.
  141.      */
  142.     public static final int F7            = 1014;
  143.  
  144.     /**
  145.      * The F8 function action-key.
  146.      */
  147.     public static final int F8            = 1015;
  148.  
  149.     /**
  150.      * The F9 function action-key.
  151.      */
  152.     public static final int F9            = 1016;
  153.  
  154.     /**
  155.      * The F10 function action-key.
  156.      */
  157.     public static final int F10            = 1017;
  158.  
  159.     /**
  160.      * The F11 function action-key.
  161.      */
  162.     public static final int F11            = 1018;
  163.  
  164.     /**
  165.      * The F12 function action-key.
  166.      */
  167.     public static final int F12            = 1019;
  168.  
  169.     /**
  170.      * The PrintScreen action-key.
  171.      */
  172.     public static final int PRINT_SCREEN    = 1020;
  173.  
  174.     /**
  175.      * The ScrollLock action-key.
  176.      */
  177.     public static final int SCROLL_LOCK        = 1021;
  178.  
  179.     /**
  180.      * The CapsLock action-key.
  181.      */
  182.     public static final int CAPS_LOCK        = 1022;
  183.  
  184.     /**
  185.      * The NumLock action-key.
  186.      */
  187.     public static final int NUM_LOCK        = 1023;
  188.  
  189.     /**
  190.      * The Pause action-key.
  191.      */
  192.     public static final int PAUSE        = 1024;
  193.  
  194.     /**
  195.      * The Insert key.
  196.      */
  197.     public static final int INSERT        = 1025;
  198.  
  199.     /* Non-action keys */
  200.     /**
  201.      * The Enter key.
  202.      */
  203.     public static final int ENTER        = '\n';
  204.  
  205.     /**
  206.      * The BackSpace key.
  207.      */
  208.     public static final int BACK_SPACE        = '\b';
  209.  
  210.     /**
  211.      * The Tab key.
  212.      */
  213.     public static final int TAB            = '\t';
  214.  
  215.     /**
  216.      * The Escape key.
  217.      */
  218.     public static final int ESCAPE        = 27;
  219.  
  220.     /**
  221.      * The Delete key.
  222.      */
  223.     public static final int DELETE        = 127;
  224.  
  225.  
  226.     /* Base for all window events. */
  227.     private static final int WINDOW_EVENT     = 200;
  228.  
  229.     /**
  230.      * The destroy window event.
  231.      */
  232.     public static final int WINDOW_DESTROY     = 1 + WINDOW_EVENT;
  233.  
  234.     /**
  235.      * The expose window event. 
  236.      */
  237.     public static final int WINDOW_EXPOSE     = 2 + WINDOW_EVENT;
  238.  
  239.     /** 
  240.      * The iconify window event. 
  241.      */
  242.     public static final int WINDOW_ICONIFY    = 3 + WINDOW_EVENT;
  243.  
  244.     /** 
  245.      * The de-iconify window event.
  246.      */
  247.     public static final int WINDOW_DEICONIFY    = 4 + WINDOW_EVENT;
  248.  
  249.     /**
  250.      * The move window event.
  251.      */
  252.     public static final int WINDOW_MOVED    = 5 + WINDOW_EVENT;
  253.  
  254.     /* Base for all keyboard events. */
  255.     private static final int KEY_EVENT         = 400;
  256.  
  257.     /**
  258.      * The key press keyboard event.
  259.      */
  260.     public static final int KEY_PRESS         = 1 + KEY_EVENT;
  261.  
  262.     /**
  263.      * The key release keyboard event.
  264.      */
  265.     public static final int KEY_RELEASE     = 2 + KEY_EVENT;
  266.  
  267.     /** 
  268.      * The action-key press keyboard event. 
  269.      */
  270.     public static final int KEY_ACTION         = 3 + KEY_EVENT;
  271.  
  272.     /** 
  273.      * The action-key release keyboard event. 
  274.      */
  275.     public static final int KEY_ACTION_RELEASE    = 4 + KEY_EVENT;
  276.  
  277.     /* Base for all mouse events. */
  278.     private static final int MOUSE_EVENT     = 500;
  279.  
  280.     /**
  281.      * The mouse down event.
  282.      */
  283.     public static final int MOUSE_DOWN         = 1 + MOUSE_EVENT;
  284.  
  285.     /**
  286.      *  The mouse up event.
  287.      */
  288.     public static final int MOUSE_UP         = 2 + MOUSE_EVENT;
  289.  
  290.     /**
  291.      * The mouse move event.
  292.      */
  293.     public static final int MOUSE_MOVE         = 3 + MOUSE_EVENT;
  294.  
  295.     /**
  296.      * The mouse enter event.
  297.      */
  298.     public static final int MOUSE_ENTER     = 4 + MOUSE_EVENT;
  299.  
  300.     /**
  301.      * The mouse exit event.
  302.      */
  303.     public static final int MOUSE_EXIT         = 5 + MOUSE_EVENT;
  304.  
  305.     /** 
  306.      * The mouse drag event.
  307.      */
  308.     public static final int MOUSE_DRAG         = 6 + MOUSE_EVENT;
  309.  
  310.  
  311.     /* Scrolling events */
  312.     private static final int SCROLL_EVENT     = 600;
  313.  
  314.     /** 
  315.      * The line up scroll event. 
  316.      */
  317.     public static final int SCROLL_LINE_UP    = 1 + SCROLL_EVENT;
  318.  
  319.     /**
  320.      * The line down scroll event.
  321.      */
  322.     public static final int SCROLL_LINE_DOWN    = 2 + SCROLL_EVENT;
  323.  
  324.     /**
  325.      * The page up scroll event.
  326.      */
  327.     public static final int SCROLL_PAGE_UP    = 3 + SCROLL_EVENT;
  328.  
  329.     /**
  330.      * The page down scroll event.
  331.      */
  332.     public static final int SCROLL_PAGE_DOWN    = 4 + SCROLL_EVENT;
  333.  
  334.     /**
  335.      * The absolute scroll event.
  336.      */
  337.     public static final int SCROLL_ABSOLUTE    = 5 + SCROLL_EVENT;
  338.  
  339.     /**
  340.      * The scroll begin event.
  341.      */
  342.     public static final int SCROLL_BEGIN    = 6 + SCROLL_EVENT;
  343.  
  344.     /**
  345.      * The scroll end event.
  346.      */
  347.     public static final int SCROLL_END            = 7 + SCROLL_EVENT;
  348.     
  349.     /* List Events */
  350.     private static final int LIST_EVENT        = 700;
  351.  
  352.     /* Event sent when an item has been selected */
  353.     public static final int LIST_SELECT        = 1 + LIST_EVENT;
  354.  
  355.     /* Event sent when an item has been deselected */
  356.     public static final int LIST_DESELECT    = 2 + LIST_EVENT;
  357.  
  358.     /* Misc Event */
  359.     private static final int MISC_EVENT        = 1000;
  360.  
  361.     /**
  362.      * An action event.
  363.      */
  364.     public static final int ACTION_EVENT    = 1 + MISC_EVENT;
  365.  
  366.     /**
  367.      * A file loading event.
  368.      */
  369.     public static final int LOAD_FILE        = 2 + MISC_EVENT;
  370.  
  371.     /**
  372.      * A file saving event.
  373.      */
  374.     public static final int SAVE_FILE        = 3 + MISC_EVENT;
  375.  
  376.     /**
  377.      * A component gained the focus.
  378.      */
  379.     public static final int GOT_FOCUS        = 4 + MISC_EVENT;
  380.  
  381.     /**
  382.      * A component lost the focus.
  383.      */
  384.     public static final int LOST_FOCUS        = 5 + MISC_EVENT;
  385.     
  386.     /**
  387.      * The target component.
  388.      */
  389.     public Object target;
  390.  
  391.     /**
  392.      * The time stamp.
  393.      */
  394.     public long when;
  395.  
  396.     /**
  397.      * The type of this event. 
  398.      */
  399.     public int id;
  400.  
  401.     /** 
  402.      * The x coordinate of the event.
  403.      */
  404.     public int x;
  405.  
  406.     /** 
  407.      * The y coordinate of the event. 
  408.      */
  409.     public int y;
  410.  
  411.     /** 
  412.      * The key code that was pressed in a keyboard event. 
  413.      */
  414.     public int key;
  415.  
  416.     /** 
  417.      * The key character that was pressed in a keyboard event. 
  418.      */
  419. //    public char keyChar;
  420.  
  421.     /** 
  422.      * The state of the modifier keys.
  423.      */
  424.     public int modifiers;
  425.  
  426.     /**
  427.      * The number of consecutive clicks. This field is relevant only for
  428.      * MOUSE_DOWN events. If the field isn't set it will be 0. Otherwise,
  429.      * it will be 1 for single-clicks, 2 for double-clicks, and so on.
  430.      */
  431.     public int clickCount;
  432.  
  433.     /**
  434.      * An arbitrary argument.
  435.      */
  436.     public Object arg;
  437.  
  438.     /**
  439.      * The next event. Used when putting events into a linked list.
  440.      */
  441.     public Event evt;
  442.  
  443.     /* table for mapping old Event action keys to KeyEvent virtual keys. */
  444.     private static final int actionKeyCodes[][] = {
  445.     /*    virtual key              action key   */
  446.         { KeyEvent.VK_HOME,        Event.HOME         },
  447.         { KeyEvent.VK_END,         Event.END          },
  448.         { KeyEvent.VK_PAGE_UP,     Event.PGUP         },
  449.         { KeyEvent.VK_PAGE_DOWN,   Event.PGDN         },
  450.         { KeyEvent.VK_UP,          Event.UP           },
  451.         { KeyEvent.VK_DOWN,        Event.DOWN         },
  452.         { KeyEvent.VK_LEFT,        Event.LEFT         },
  453.         { KeyEvent.VK_RIGHT,       Event.RIGHT        },
  454.         { KeyEvent.VK_F1,          Event.F1           },
  455.         { KeyEvent.VK_F2,          Event.F2           },
  456.         { KeyEvent.VK_F3,          Event.F3           },
  457.         { KeyEvent.VK_F4,          Event.F4           },
  458.         { KeyEvent.VK_F5,          Event.F5           },
  459.         { KeyEvent.VK_F6,          Event.F6           },
  460.         { KeyEvent.VK_F7,          Event.F7           },
  461.         { KeyEvent.VK_F8,          Event.F8           },
  462.         { KeyEvent.VK_F9,          Event.F9           },
  463.         { KeyEvent.VK_F10,         Event.F10          },
  464.         { KeyEvent.VK_F11,         Event.F11          },
  465.         { KeyEvent.VK_F12,         Event.F12          },
  466.         { KeyEvent.VK_PRINTSCREEN, Event.PRINT_SCREEN },
  467.         { KeyEvent.VK_SCROLL_LOCK, Event.SCROLL_LOCK  },
  468.         { KeyEvent.VK_CAPS_LOCK,   Event.CAPS_LOCK    },
  469.         { KeyEvent.VK_NUM_LOCK,    Event.NUM_LOCK     },
  470.         { KeyEvent.VK_PAUSE,       Event.PAUSE        },
  471.         { KeyEvent.VK_INSERT,      Event.INSERT       }
  472.     };
  473.  
  474.     // This field controls whether or not the event is sent back
  475.     // down to the peer once the target has processed it -
  476.     // false means it's sent to the peer, true means it's not.
  477.     private boolean consumed = false;
  478.  
  479.     /*
  480.      * JDK 1.1 serialVersionUID 
  481.      */
  482.     private static final long serialVersionUID = 5488922509400504703L;
  483.  
  484.     /**
  485.      * Constructs an event with the specified target component, time stamp,
  486.      * event type, x and y coordinates, keyboard key, state of the modifier
  487.      * keys and argument.
  488.      * @param target the target component
  489.      * @param when the time stamp
  490.      * @param id the event type
  491.      * @param x the x coordinate
  492.      * @param y the y coordinate
  493.      * @param key the key pressed in a keyboard event
  494.      * @param modifiers the state of the modifier keys
  495.      * @param arg the specified argument
  496.      */
  497.     public Event(Object target, long when, int id, int x, int y, int key,
  498.          int modifiers, Object arg) {
  499.     this.target = target;
  500.     this.when = when;
  501.     this.id = id;
  502.     this.x = x;
  503.     this.y = y;
  504.     this.key = key;
  505.     this.modifiers = modifiers;
  506.     this.arg = arg;
  507.     this.data = 0;
  508.     this.clickCount = 0;
  509.         switch(id) {
  510.           case ACTION_EVENT:
  511.           case WINDOW_DESTROY:
  512.           case WINDOW_ICONIFY:
  513.           case WINDOW_DEICONIFY:
  514.           case WINDOW_MOVED:
  515.           case SCROLL_LINE_UP:
  516.           case SCROLL_LINE_DOWN:
  517.           case SCROLL_PAGE_UP:
  518.           case SCROLL_PAGE_DOWN:
  519.           case SCROLL_ABSOLUTE:
  520.           case SCROLL_BEGIN:
  521.           case SCROLL_END:
  522.           case LIST_SELECT:
  523.           case LIST_DESELECT:
  524.             consumed = true; // these types are not passed back to peer
  525.             break;
  526.           default:
  527.         }
  528.     }
  529.  
  530.     /**
  531.      * Constructs an event with the specified target component, time stamp,
  532.      * event type, x and y coordinates, keyboard key, state of the modifier
  533.      * keys and an argument set to null. 
  534.      * @param target the target component
  535.      * @param when the time stamp
  536.      * @param id the event type
  537.      * @param x the x coordinate
  538.      * @param y the y coordinate
  539.      * @param key the key pressed in a keyboard event
  540.      * @param modifiers the state of the modifier keys
  541.      */
  542.     public Event(Object target, long when, int id, int x, int y, int key, int modifiers) {
  543.     this(target, when, id, x, y, key, modifiers, null);
  544.     }
  545.  
  546.     /**
  547.      * Constructs an event with the specified target component, 
  548.      * event type, and argument. 
  549.      * @param target the target component
  550.      * @param id the event type
  551.      * @param arg the specified argument
  552.      */
  553.     public Event(Object target, int id, Object arg) {
  554.     this(target, 0, id, 0, 0, 0, 0, arg);
  555.     }
  556.  
  557.     /** 
  558.      * Translates an event relative to the given component. This
  559.      * involves at a minimum translating the coordinates so they make
  560.      * sense within the given component. It may also involve
  561.      * translating a region in the case of an expose event.
  562.      * @param x the x coordinate
  563.      * @param y the y coordinate
  564.      */
  565.     public void translate(int x, int y) {
  566.     this.x += x;
  567.     this.y += y;
  568.     }
  569.  
  570.     /**
  571.      * Checks if the shift key is down.
  572.      * @see #modifiers
  573.      * @see #controlDown
  574.      * @see #metaDown
  575.      */
  576.     public boolean shiftDown() {
  577.     return (modifiers & SHIFT_MASK) != 0;
  578.     }
  579.  
  580.     /**
  581.      * Checks if the control key is down.
  582.      * @see #modifiers
  583.      * @see #shiftDown
  584.      * @see #metaDown
  585.      */
  586.     public boolean controlDown() {
  587.     return (modifiers & CTRL_MASK) != 0;
  588.     }
  589.  
  590.     /**
  591.      * Checks if the meta key is down.
  592.      * @see #modifiers
  593.      * @see #shiftDown
  594.      * @see #controlDown
  595.      */
  596.     public boolean metaDown() {
  597.     return (modifiers & META_MASK) != 0;
  598.     }
  599.  
  600.     void consume() {
  601.         switch(id) {
  602.           case KEY_PRESS:
  603.           case KEY_RELEASE:
  604.           case KEY_ACTION:
  605.           case KEY_ACTION_RELEASE:
  606.               consumed = true;
  607.               break;
  608.           default:
  609.               // event type cannot be consumed
  610.         }
  611.     }
  612.  
  613.     boolean isConsumed() {
  614.         return consumed;
  615.     }
  616.  
  617.     /*
  618.      * Returns the integer key-code associated with the key in this event,
  619.      * as described in java.awt.Event.  
  620.      */
  621.     static int getOldEventKey(KeyEvent e) {
  622.         int keyCode = e.getKeyCode();
  623.         for (int i = 0; i < actionKeyCodes.length; i++) {
  624.             if (actionKeyCodes[i][0] == keyCode) {
  625.                 return actionKeyCodes[i][1];
  626.             }
  627.         }
  628.         return (int)e.getKeyChar();
  629.     }
  630.  
  631.     /*
  632.      * Returns a new KeyEvent char which corresponds to the int key
  633.      * of this old event.
  634.      */
  635.     char getKeyEventChar() {
  636.        for (int i = 0; i < actionKeyCodes.length; i++) {
  637.             if (actionKeyCodes[i][1] == key) {
  638.                 return KeyEvent.CHAR_UNDEFINED;
  639.             }
  640.        }
  641.        return (char)key;
  642.     }
  643.  
  644.     /**
  645.      * Returns the parameter String of this Event. 
  646.      */
  647.     protected String paramString() {
  648.     String str = "id=" + id + ",x=" + x + ",y=" + y;
  649.     if (key != 0) {
  650.         str += ",key=" + key;
  651.     }
  652.     if (shiftDown()) {
  653.         str += ",shift";
  654.     }
  655.     if (controlDown()) {
  656.         str += ",control";
  657.     }
  658.     if (metaDown()) {
  659.         str += ",meta";
  660.     }
  661.     if (target != null) {
  662.         str += ",target=" + target;
  663.     }
  664.     if (arg != null) {
  665.         str += ",arg=" + arg;
  666.     }
  667.     return str;
  668.     }
  669.  
  670.     /**
  671.      * Returns the String representation of this Event's values.
  672.      */
  673.     public String toString() {
  674.     return getClass().getName() + "[" + paramString() + "]";
  675.     }
  676. }
  677.