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

#ifndef __java_awt_Event__
#define __java_awt_Event__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Event;
    }
  }
}

class java::awt::Event : public ::java::lang::Object
{

public:
  Event(::java::lang::Object *, jint, ::java::lang::Object *);
  Event(::java::lang::Object *, jlong, jint, jint, jint, jint, jint);
  Event(::java::lang::Object *, jlong, jint, jint, jint, jint, jint, ::java::lang::Object *);
  virtual jboolean controlDown();
  virtual jboolean metaDown();
public: // actually protected
  virtual ::java::lang::String * paramString();
public:
  virtual jboolean shiftDown();
  virtual ::java::lang::String * toString();
  virtual void translate(jint, jint);
public: // actually package-private
  static const jlong serialVersionUID = 5488922509400504703LL;
public:
  static const jint SHIFT_MASK = 1;
  static const jint CTRL_MASK = 2;
  static const jint META_MASK = 4;
  static const jint ALT_MASK = 8;
  static const jint ACTION_EVENT = 1001;
  static const jint BACK_SPACE = 8;
  static const jint CAPS_LOCK = 1022;
  static const jint DELETE = 127;
  static const jint DOWN = 1005;
  static const jint END = 1001;
  static const jint ENTER = 10;
  static const jint ESCAPE = 27;
  static const jint F1 = 1008;
  static const jint F10 = 1017;
  static const jint F11 = 1018;
  static const jint F12 = 1019;
  static const jint F2 = 1009;
  static const jint F3 = 1010;
  static const jint F4 = 1011;
  static const jint F5 = 1012;
  static const jint F6 = 1013;
  static const jint F7 = 1014;
  static const jint F8 = 1015;
  static const jint F9 = 1016;
  static const jint GOT_FOCUS = 1004;
  static const jint HOME = 1000;
  static const jint INSERT = 1025;
  static const jint KEY_ACTION = 403;
  static const jint KEY_ACTION_RELEASE = 404;
  static const jint KEY_PRESS = 401;
  static const jint KEY_RELEASE = 402;
  static const jint LEFT = 1006;
  static const jint LIST_DESELECT = 702;
  static const jint LIST_SELECT = 701;
  static const jint LOAD_FILE = 1002;
  static const jint LOST_FOCUS = 1005;
  static const jint MOUSE_DOWN = 501;
  static const jint MOUSE_DRAG = 506;
  static const jint MOUSE_ENTER = 504;
  static const jint MOUSE_EXIT = 505;
  static const jint MOUSE_MOVE = 503;
  static const jint MOUSE_UP = 502;
  static const jint NUM_LOCK = 1023;
  static const jint PAUSE = 1024;
  static const jint PGDN = 1003;
  static const jint PGUP = 1002;
  static const jint PRINT_SCREEN = 1020;
  static const jint RIGHT = 1007;
  static const jint SAVE_FILE = 1003;
  static const jint SCROLL_ABSOLUTE = 605;
  static const jint SCROLL_BEGIN = 606;
  static const jint SCROLL_END = 607;
  static const jint SCROLL_LINE_DOWN = 602;
  static const jint SCROLL_LINE_UP = 601;
  static const jint SCROLL_LOCK = 1021;
  static const jint SCROLL_PAGE_DOWN = 604;
  static const jint SCROLL_PAGE_UP = 603;
  static const jint TAB = 9;
  static const jint UP = 1004;
  static const jint WINDOW_DEICONIFY = 204;
  static const jint WINDOW_DESTROY = 201;
  static const jint WINDOW_EXPOSE = 202;
  static const jint WINDOW_ICONIFY = 203;
  static const jint WINDOW_MOVED = 205;
  ::java::lang::Object * __attribute__((aligned(__alignof__( ::java::lang::Object)))) arg;
  jint clickCount;
public: // actually package-private
  jboolean consumed;
public:
  ::java::awt::Event * evt;
  jint id;
  jint key;
  jint modifiers;
  ::java::lang::Object * target;
  jlong when;
  jint x;
  jint y;
  static ::java::lang::Class class$;
};

#endif // __java_awt_Event__
