
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_awt_event_KeyEvent__
#define __java_awt_event_KeyEvent__

#pragma interface

#include <java/awt/event/InputEvent.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
      namespace event
      {
          class KeyEvent;
      }
    }
  }
}

class java::awt::event::KeyEvent : public ::java::awt::event::InputEvent
{

public:
  KeyEvent(::java::awt::Component *, jint, jlong, jint, jint, jchar, jint);
  KeyEvent(::java::awt::Component *, jint, jlong, jint, jint, jchar);
  KeyEvent(::java::awt::Component *, jint, jlong, jint, jint);
  virtual jint getKeyCode();
  virtual void setKeyCode(jint);
  virtual jchar getKeyChar();
  virtual void setKeyChar(jchar);
  virtual void setModifiers(jint);
  virtual jint getKeyLocation();
  static ::java::lang::String * getKeyText(jint);
  static ::java::lang::String * getKeyModifiersText(jint);
  virtual jboolean isActionKey();
  virtual ::java::lang::String * paramString();
private:
  void readObject(::java::io::ObjectInputStream *);
  static const jlong serialVersionUID = -2352130953028126954LL;
public:
  static const jint KEY_FIRST = 400;
  static const jint KEY_LAST = 402;
  static const jint KEY_TYPED = 400;
  static const jint KEY_PRESSED = 401;
  static const jint KEY_RELEASED = 402;
  static const jint VK_ENTER = 10;
  static const jint VK_BACK_SPACE = 8;
  static const jint VK_TAB = 9;
  static const jint VK_CANCEL = 3;
  static const jint VK_CLEAR = 12;
  static const jint VK_SHIFT = 16;
  static const jint VK_CONTROL = 17;
  static const jint VK_ALT = 18;
  static const jint VK_PAUSE = 19;
  static const jint VK_CAPS_LOCK = 20;
  static const jint VK_ESCAPE = 27;
  static const jint VK_SPACE = 32;
  static const jint VK_PAGE_UP = 33;
  static const jint VK_PAGE_DOWN = 34;
  static const jint VK_END = 35;
  static const jint VK_HOME = 36;
  static const jint VK_LEFT = 37;
  static const jint VK_UP = 38;
  static const jint VK_RIGHT = 39;
  static const jint VK_DOWN = 40;
  static const jint VK_COMMA = 44;
  static const jint VK_MINUS = 45;
  static const jint VK_PERIOD = 46;
  static const jint VK_SLASH = 47;
  static const jint VK_0 = 48;
  static const jint VK_1 = 49;
  static const jint VK_2 = 50;
  static const jint VK_3 = 51;
  static const jint VK_4 = 52;
  static const jint VK_5 = 53;
  static const jint VK_6 = 54;
  static const jint VK_7 = 55;
  static const jint VK_8 = 56;
  static const jint VK_9 = 57;
  static const jint VK_SEMICOLON = 59;
  static const jint VK_EQUALS = 61;
  static const jint VK_A = 65;
  static const jint VK_B = 66;
  static const jint VK_C = 67;
  static const jint VK_D = 68;
  static const jint VK_E = 69;
  static const jint VK_F = 70;
  static const jint VK_G = 71;
  static const jint VK_H = 72;
  static const jint VK_I = 73;
  static const jint VK_J = 74;
  static const jint VK_K = 75;
  static const jint VK_L = 76;
  static const jint VK_M = 77;
  static const jint VK_N = 78;
  static const jint VK_O = 79;
  static const jint VK_P = 80;
  static const jint VK_Q = 81;
  static const jint VK_R = 82;
  static const jint VK_S = 83;
  static const jint VK_T = 84;
  static const jint VK_U = 85;
  static const jint VK_V = 86;
  static const jint VK_W = 87;
  static const jint VK_X = 88;
  static const jint VK_Y = 89;
  static const jint VK_Z = 90;
  static const jint VK_OPEN_BRACKET = 91;
  static const jint VK_BACK_SLASH = 92;
  static const jint VK_CLOSE_BRACKET = 93;
  static const jint VK_NUMPAD0 = 96;
  static const jint VK_NUMPAD1 = 97;
  static const jint VK_NUMPAD2 = 98;
  static const jint VK_NUMPAD3 = 99;
  static const jint VK_NUMPAD4 = 100;
  static const jint VK_NUMPAD5 = 101;
  static const jint VK_NUMPAD6 = 102;
  static const jint VK_NUMPAD7 = 103;
  static const jint VK_NUMPAD8 = 104;
  static const jint VK_NUMPAD9 = 105;
  static const jint VK_MULTIPLY = 106;
  static const jint VK_ADD = 107;
  static const jint VK_SEPARATER = 108;
  static const jint VK_SEPARATOR = 108;
  static const jint VK_SUBTRACT = 109;
  static const jint VK_DECIMAL = 110;
  static const jint VK_DIVIDE = 111;
  static const jint VK_DELETE = 127;
  static const jint VK_NUM_LOCK = 144;
  static const jint VK_SCROLL_LOCK = 145;
  static const jint VK_F1 = 112;
  static const jint VK_F2 = 113;
  static const jint VK_F3 = 114;
  static const jint VK_F4 = 115;
  static const jint VK_F5 = 116;
  static const jint VK_F6 = 117;
  static const jint VK_F7 = 118;
  static const jint VK_F8 = 119;
  static const jint VK_F9 = 120;
  static const jint VK_F10 = 121;
  static const jint VK_F11 = 122;
  static const jint VK_F12 = 123;
  static const jint VK_F13 = 61440;
  static const jint VK_F14 = 61441;
  static const jint VK_F15 = 61442;
  static const jint VK_F16 = 61443;
  static const jint VK_F17 = 61444;
  static const jint VK_F18 = 61445;
  static const jint VK_F19 = 61446;
  static const jint VK_F20 = 61447;
  static const jint VK_F21 = 61448;
  static const jint VK_F22 = 61449;
  static const jint VK_F23 = 61450;
  static const jint VK_F24 = 61451;
  static const jint VK_PRINTSCREEN = 154;
  static const jint VK_INSERT = 155;
  static const jint VK_HELP = 156;
  static const jint VK_META = 157;
  static const jint VK_BACK_QUOTE = 192;
  static const jint VK_QUOTE = 222;
  static const jint VK_KP_UP = 224;
  static const jint VK_KP_DOWN = 225;
  static const jint VK_KP_LEFT = 226;
  static const jint VK_KP_RIGHT = 227;
  static const jint VK_DEAD_GRAVE = 128;
  static const jint VK_DEAD_ACUTE = 129;
  static const jint VK_DEAD_CIRCUMFLEX = 130;
  static const jint VK_DEAD_TILDE = 131;
  static const jint VK_DEAD_MACRON = 132;
  static const jint VK_DEAD_BREVE = 133;
  static const jint VK_DEAD_ABOVEDOT = 134;
  static const jint VK_DEAD_DIAERESIS = 135;
  static const jint VK_DEAD_ABOVERING = 136;
  static const jint VK_DEAD_DOUBLEACUTE = 137;
  static const jint VK_DEAD_CARON = 138;
  static const jint VK_DEAD_CEDILLA = 139;
  static const jint VK_DEAD_OGONEK = 140;
  static const jint VK_DEAD_IOTA = 141;
  static const jint VK_DEAD_VOICED_SOUND = 142;
  static const jint VK_DEAD_SEMIVOICED_SOUND = 143;
  static const jint VK_AMPERSAND = 150;
  static const jint VK_ASTERISK = 151;
  static const jint VK_QUOTEDBL = 152;
  static const jint VK_LESS = 153;
  static const jint VK_GREATER = 160;
  static const jint VK_BRACELEFT = 161;
  static const jint VK_BRACERIGHT = 162;
  static const jint VK_AT = 512;
  static const jint VK_COLON = 513;
  static const jint VK_CIRCUMFLEX = 514;
  static const jint VK_DOLLAR = 515;
  static const jint VK_EURO_SIGN = 516;
  static const jint VK_EXCLAMATION_MARK = 517;
  static const jint VK_INVERTED_EXCLAMATION_MARK = 518;
  static const jint VK_LEFT_PARENTHESIS = 519;
  static const jint VK_NUMBER_SIGN = 520;
  static const jint VK_PLUS = 521;
  static const jint VK_RIGHT_PARENTHESIS = 522;
  static const jint VK_UNDERSCORE = 523;
  static const jint VK_FINAL = 24;
  static const jint VK_CONVERT = 28;
  static const jint VK_NONCONVERT = 29;
  static const jint VK_ACCEPT = 30;
  static const jint VK_MODECHANGE = 31;
  static const jint VK_KANA = 21;
  static const jint VK_KANJI = 25;
  static const jint VK_ALPHANUMERIC = 240;
  static const jint VK_KATAKANA = 241;
  static const jint VK_HIRAGANA = 242;
  static const jint VK_FULL_WIDTH = 243;
  static const jint VK_HALF_WIDTH = 244;
  static const jint VK_ROMAN_CHARACTERS = 245;
  static const jint VK_ALL_CANDIDATES = 256;
  static const jint VK_PREVIOUS_CANDIDATE = 257;
  static const jint VK_CODE_INPUT = 258;
  static const jint VK_JAPANESE_KATAKANA = 259;
  static const jint VK_JAPANESE_HIRAGANA = 260;
  static const jint VK_JAPANESE_ROMAN = 261;
  static const jint VK_KANA_LOCK = 262;
  static const jint VK_INPUT_METHOD_ON_OFF = 263;
  static const jint VK_CUT = 65489;
  static const jint VK_COPY = 65485;
  static const jint VK_PASTE = 65487;
  static const jint VK_UNDO = 65483;
  static const jint VK_AGAIN = 65481;
  static const jint VK_FIND = 65488;
  static const jint VK_PROPS = 65482;
  static const jint VK_STOP = 65480;
  static const jint VK_COMPOSE = 65312;
  static const jint VK_ALT_GRAPH = 65406;
  static const jint VK_BEGIN = 65368;
  static const jint VK_CONTEXT_MENU = 525;
  static const jint VK_WINDOWS = 524;
  static const jint VK_UNDEFINED = 0;
  static const jchar CHAR_UNDEFINED = 65535;
  static const jint KEY_LOCATION_UNKNOWN = 0;
  static const jint KEY_LOCATION_STANDARD = 1;
  static const jint KEY_LOCATION_LEFT = 2;
  static const jint KEY_LOCATION_RIGHT = 3;
  static const jint KEY_LOCATION_NUMPAD = 4;
private:
  jint __attribute__((aligned(__alignof__( ::java::awt::event::InputEvent)))) keyCode;
  jchar keyChar;
  jint keyLocation;
  jboolean isProxyActive;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_event_KeyEvent__
