/*
 * Copyright (c) 1999 World Wide Web Consortium,
 * (Massachusetts Institute of Technology, Institut National de Recherche
 *  en Informatique et en Automatique, Keio University).
 * All Rights Reserved. http://www.w3.org/Consortium/Legal/
 */

package org.apache.batik.dom.events;

import org.w3c.dom.views.AbstractView;

/**
 * The <code>KeyEvent</code> interface provides specific contextual  
 * information associated with Key events. 
 *
 * @since DOM Level 2 (Working Draft)
 */
public class DOMKeyEvent extends DOMUIEvent {

    // VirtualKeyCode
    public static final int             CHAR_UNDEFINED       = 0x0FFFF;
    public static final int             DOM_VK_0             = 0x30;
    public static final int             DOM_VK_1             = 0x31;
    public static final int             DOM_VK_2             = 0x32;
    public static final int             DOM_VK_3             = 0x33;
    public static final int             DOM_VK_4             = 0x34;
    public static final int             DOM_VK_5             = 0x35;
    public static final int             DOM_VK_6             = 0x36;
    public static final int             DOM_VK_7             = 0x37;
    public static final int             DOM_VK_8             = 0x38;
    public static final int             DOM_VK_9             = 0x39;
    public static final int             DOM_VK_A             = 0x41;
    public static final int             DOM_VK_ACCEPT        = 0x1E;
    public static final int             DOM_VK_ADD           = 0x6B;
    public static final int             DOM_VK_AGAIN         = 0xFFC9;
    public static final int             DOM_VK_ALL_CANDIDATES = 0x0100;
    public static final int             DOM_VK_ALPHANUMERIC  = 0x00F0;
    public static final int             DOM_VK_ALT           = 0x12;
    public static final int             DOM_VK_ALT_GRAPH     = 0xFF7E;
    public static final int             DOM_VK_AMPERSAND     = 0x96;
    public static final int             DOM_VK_ASTERISK      = 0x97;
    public static final int             DOM_VK_AT            = 0x0200;
    public static final int             DOM_VK_B             = 0x42;
    public static final int             DOM_VK_BACK_QUOTE    = 0xC0;
    public static final int             DOM_VK_BACK_SLASH    = 0x5C;
    public static final int             DOM_VK_BACK_SPACE    = 0x08;
    public static final int             DOM_VK_BRACELEFT     = 0xA1;
    public static final int             DOM_VK_BRACERIGHT    = 0xA2;
    public static final int             DOM_VK_C             = 0x43;
    public static final int             DOM_VK_CANCEL        = 0x03;
    public static final int             DOM_VK_CAPS_LOCK     = 0x14;
    public static final int             DOM_VK_CIRCUMFLEX    = 0x0202;
    public static final int             DOM_VK_CLEAR         = 0x0C;
    public static final int             DOM_VK_CLOSE_BRACKET = 0x5D;
    public static final int             DOM_VK_CODE_INPUT    = 0x0102;
    public static final int             DOM_VK_COLON         = 0x0201;
    public static final int             DOM_VK_COMMA         = 0x2C;
    public static final int             DOM_VK_COMPOSE       = 0xFF20;
    public static final int             DOM_VK_CONTROL       = 0x11;
    public static final int             DOM_VK_CONVERT       = 0x1C;
    public static final int             DOM_VK_COPY          = 0xFFCD;
    public static final int             DOM_VK_CUT           = 0xFFD1;
    public static final int             DOM_VK_D             = 0x44;
    public static final int             DOM_VK_DEAD_ABOVEDOT = 0x86;
    public static final int             DOM_VK_DEAD_ABOVERING = 0x88;
    public static final int             DOM_VK_DEAD_ACUTE    = 0x81;
    public static final int             DOM_VK_DEAD_BREVE    = 0x85;
    public static final int             DOM_VK_DEAD_CARON    = 0x8A;
    public static final int             DOM_VK_DEAD_CEDILLA  = 0x8B;
    public static final int             DOM_VK_DEAD_CIRCUMFLEX = 0x82;
    public static final int             DOM_VK_DEAD_DIAERESIS = 0x87;
    public static final int             DOM_VK_DEAD_DOUBLEACUTE = 0x89;
    public static final int             DOM_VK_DEAD_GRAVE    = 0x80;
    public static final int             DOM_VK_DEAD_IOTA     = 0x8D;
    public static final int             DOM_VK_DEAD_MACRON   = 0x84;
    public static final int             DOM_VK_DEAD_OGONEK   = 0x8C;
    public static final int             DOM_VK_DEAD_SEMIVOICED_SOUND = 0x8F;
    public static final int             DOM_VK_DEAD_TILDE    = 0x83;
    public static final int             DOM_VK_DEAD_VOICED_SOUND = 0x8E;
    public static final int             DOM_VK_DECIMAL       = 0x6E;
    public static final int             DOM_VK_DELETE        = 0x7F;
    public static final int             DOM_VK_DIVIDE        = 0x6F;
    public static final int             DOM_VK_DOLLAR        = 0x0203;
    public static final int             DOM_VK_DOWN          = 0x28;
    public static final int             DOM_VK_E             = 0x45;
    public static final int             DOM_VK_END           = 0x23;
    public static final int             DOM_VK_ENTER         = 0x0D;
    public static final int             DOM_VK_EQUALS        = 0x3D;
    public static final int             DOM_VK_ESCAPE        = 0x1B;
    public static final int             DOM_VK_EURO_SIGN     = 0x0204;
    public static final int             DOM_VK_EXCLAMATION_MARK = 0x0205;
    public static final int             DOM_VK_F             = 0x46;
    public static final int             DOM_VK_F1            = 0x70;
    public static final int             DOM_VK_F10           = 0x79;
    public static final int             DOM_VK_F11           = 0x7A;
    public static final int             DOM_VK_F12           = 0x7B;
    public static final int             DOM_VK_F13           = 0xF000;
    public static final int             DOM_VK_F14           = 0xF001;
    public static final int             DOM_VK_F15           = 0xF002;
    public static final int             DOM_VK_F16           = 0xF003;
    public static final int             DOM_VK_F17           = 0xF004;
    public static final int             DOM_VK_F18           = 0xF005;
    public static final int             DOM_VK_F19           = 0xF006;
    public static final int             DOM_VK_F2            = 0x71;
    public static final int             DOM_VK_F20           = 0xF007;
    public static final int             DOM_VK_F21           = 0xF008;
    public static final int             DOM_VK_F22           = 0xF009;
    public static final int             DOM_VK_F23           = 0xF00A;
    public static final int             DOM_VK_F24           = 0xF00B;
    public static final int             DOM_VK_F3            = 0x72;
    public static final int             DOM_VK_F4            = 0x73;
    public static final int             DOM_VK_F5            = 0x74;
    public static final int             DOM_VK_F6            = 0x75;
    public static final int             DOM_VK_F7            = 0x76;
    public static final int             DOM_VK_F8            = 0x77;
    public static final int             DOM_VK_F9            = 0x78;
    public static final int             DOM_VK_FINAL         = 0x18;
    public static final int             DOM_VK_FIND          = 0xFFD0;
    public static final int             DOM_VK_FULL_WIDTH    = 0x00F3;
    public static final int             DOM_VK_G             = 0x47;
    public static final int             DOM_VK_GREATER       = 0xA0;
    public static final int             DOM_VK_H             = 0x48;
    public static final int             DOM_VK_HALF_WIDTH    = 0x00F4;
    public static final int             DOM_VK_HELP          = 0x9C;
    public static final int             DOM_VK_HIRAGANA      = 0x00F2;
    public static final int             DOM_VK_HOME          = 0x24;
    public static final int             DOM_VK_I             = 0x49;
    public static final int             DOM_VK_INSERT        = 0x9B;
    public static final int             DOM_VK_INVERTED_EXCLAMATION_MARK = 0x0206;
    public static final int             DOM_VK_J             = 0x4A;
    public static final int             DOM_VK_JAPANESE_HIRAGANA = 0x0104;
    public static final int             DOM_VK_JAPANESE_KATAKANA = 0x0103;
    public static final int             DOM_VK_JAPANESE_ROMAN = 0x0105;
    public static final int             DOM_VK_K             = 0x4B;
    public static final int             DOM_VK_KANA          = 0x15;
    public static final int             DOM_VK_KANJI         = 0x19;
    public static final int             DOM_VK_KATAKANA      = 0x00F1;
    public static final int             DOM_VK_KP_DOWN       = 0xE1;
    public static final int             DOM_VK_KP_LEFT       = 0xE2;
    public static final int             DOM_VK_KP_RIGHT      = 0xE3;
    public static final int             DOM_VK_KP_UP         = 0xE0;
    public static final int             DOM_VK_L             = 0x4C;
    public static final int             DOM_VK_LEFT          = 0x25;
    public static final int             DOM_VK_LEFT_PARENTHESIS = 0x0207;
    public static final int             DOM_VK_LESS          = 0x99;
    public static final int             DOM_VK_M             = 0x4D;
    public static final int             DOM_VK_META          = 0x9D;
    public static final int             DOM_VK_MINUS         = 0x2D;
    public static final int             DOM_VK_MODECHANGE    = 0x1F;
    public static final int             DOM_VK_MULTIPLY      = 0x6A;
    public static final int             DOM_VK_N             = 0x4E;
    public static final int             DOM_VK_NONCONVERT    = 0x1D;
    public static final int             DOM_VK_NUM_LOCK      = 0x90;
    public static final int             DOM_VK_NUMBER_SIGN   = 0x0208;
    public static final int             DOM_VK_NUMPAD0       = 0x60;
    public static final int             DOM_VK_NUMPAD1       = 0x61;
    public static final int             DOM_VK_NUMPAD2       = 0x62;
    public static final int             DOM_VK_NUMPAD3       = 0x63;
    public static final int             DOM_VK_NUMPAD4       = 0x64;
    public static final int             DOM_VK_NUMPAD5       = 0x65;
    public static final int             DOM_VK_NUMPAD6       = 0x66;
    public static final int             DOM_VK_NUMPAD7       = 0x67;
    public static final int             DOM_VK_NUMPAD8       = 0x68;
    public static final int             DOM_VK_NUMPAD9       = 0x69;
    public static final int             DOM_VK_O             = 0x4F;
    public static final int             DOM_VK_OPEN_BRACKET  = 0x5B;
    public static final int             DOM_VK_P             = 0x50;
    public static final int             DOM_VK_PAGE_DOWN     = 0x22;
    public static final int             DOM_VK_PAGE_UP       = 0x21;
    public static final int             DOM_VK_PASTE         = 0xFFCF;
    public static final int             DOM_VK_PAUSE         = 0x13;
    public static final int             DOM_VK_PERIOD        = 0x2E;
    public static final int             DOM_VK_PLUS          = 0x0209;
    public static final int             DOM_VK_PREVIOUS_CANDIDATE = 0x0101;
    public static final int             DOM_VK_PRINTSCREEN   = 0x9A;
    public static final int             DOM_VK_PROPS         = 0xFFCA;
    public static final int             DOM_VK_Q             = 0x51;
    public static final int             DOM_VK_QUOTE         = 0xDE;
    public static final int             DOM_VK_QUOTEDBL      = 0x98;
    public static final int             DOM_VK_R             = 0x52;
    public static final int             DOM_VK_RIGHT         = 0x27;
    public static final int             DOM_VK_RIGHT_PARENTHESIS = 0x020A;
    public static final int             DOM_VK_ROMAN_CHARACTERS = 0x00F5;
    public static final int             DOM_VK_S             = 0x53;
    public static final int             DOM_VK_SCROLL_LOCK   = 0x91;
    public static final int             DOM_VK_SEMICOLON     = 0x3B;
    public static final int             DOM_VK_SEPARATER     = 0x6C;
    public static final int             DOM_VK_SHIFT         = 0x10;
    public static final int             DOM_VK_SLASH         = 0x2F;
    public static final int             DOM_VK_SPACE         = 0x20;
    public static final int             DOM_VK_STOP          = 0xFFC8;
    public static final int             DOM_VK_SUBTRACT      = 0x6D;
    public static final int             DOM_VK_T             = 0x54;
    public static final int             DOM_VK_TAB           = 0x09;
    public static final int             DOM_VK_U             = 0x55;
    public static final int             DOM_VK_UNDEFINED     = 0x0;
    public static final int             DOM_VK_UNDERSCORE    = 0x020B;
    public static final int             DOM_VK_UNDO          = 0xFFCB;
    public static final int             DOM_VK_UP            = 0x26;
    public static final int             DOM_VK_V             = 0x56;
    public static final int             DOM_VK_W             = 0x57;
    public static final int             DOM_VK_X             = 0x58;
    public static final int             DOM_VK_Y             = 0x59;
    public static final int             DOM_VK_Z             = 0x5A;

    protected boolean ctrlKey;
    protected boolean altKey;
    protected boolean shiftKey;
    protected boolean metaKey;
    protected int keyCode;
    protected int charCode;

    /**
     *  <code>ctrlKey</code> indicates whether the 'ctrl' key was
     *  depressed * during the firing of the event.
     */
    public boolean getCtrlKey() {
        return ctrlKey;
    }

    /**
     *  <code>shiftKey</code> indicates whether the 'shift' key was
     *  depressed * during the firing of the event.
     */
    public boolean getShiftKey() {
        return shiftKey;
    }

    /**
     *  <code>altKey</code> indicates whether the 'alt' key was
     *  depressed during * the firing of the event.  On some platforms
     *  this key may map to an * alternative key name.
     */
    public boolean getAltKey() {
        return altKey;
    }

    /**
     *  <code>metaKey</code> indicates whether the 'meta' key was
     *  depressed * during the firing of the event.  On some platforms
     *  this key may map to * an alternative key name.
     */
    public boolean getMetaKey() {
        return metaKey;
    }

    /**
     *  The value of <code>keyCode</code> holds the virtual key code
     *  value of * the key which was depressed if the event is a key
     *  event.  Otherwise, the * value is zero.
     */
    public int getKeyCode() {
        return keyCode;
    }

    /**
     *  <code>charCode</code> holds the value of the Unicode character
     *  * associated with the depressed key if the event is a key
     *  event.  * Otherwise, the value is zero.
     */
    public int getCharCode() {
        return charCode;
    }

    /**
     * 
     * @param typeArg Specifies the event type.
     * @param canBubbleArg Specifies whether or not the event can bubble.
     * @param cancelableArg Specifies whether or not the event's default  action 
     *   can be prevent.
     * @param ctrlKeyArg Specifies whether or not control key was depressed 
     *   during the  <code>Event</code>.
     * @param altKeyArg Specifies whether or not alt key was depressed during 
     *   the  <code>Event</code>.
     * @param shiftKeyArg Specifies whether or not shift key was depressed 
     *   during the  <code>Event</code>.
     * @param metaKeyArg Specifies whether or not meta key was depressed during 
     *   the  <code>Event</code>.
     * @param keyCodeArg Specifies the <code>Event</code>'s <code>keyCode</code>
     * @param charCodeArg Specifies the <code>Event</code>'s 
     *   <code>charCode</code>
     * @param viewArg Specifies the <code>Event</code>'s 
     *   <code>AbstractView</code>.
     */
    public void initKeyEvent(String typeArg, 
                             boolean canBubbleArg, 
                             boolean cancelableArg, 
                             boolean ctrlKeyArg, 
                             boolean altKeyArg, 
                             boolean shiftKeyArg, 
                             boolean metaKeyArg, 
                             int keyCodeArg, 
                             int charCodeArg, 
                             AbstractView viewArg) {
	initUIEvent(typeArg, canBubbleArg, cancelableArg, viewArg, 0);
        ctrlKey = ctrlKeyArg;
        altKey = altKeyArg;
        shiftKey = shiftKeyArg;
        metaKey = metaKeyArg;
        keyCode = keyCodeArg;
        charCode = charCodeArg;
    }
}

