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

#ifndef __java_awt_AWTEvent__
#define __java_awt_AWTEvent__

#pragma interface

#include <java/util/EventObject.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class AWTEvent;
        class Event;
    }
  }
}

class java::awt::AWTEvent : public ::java::util::EventObject
{

public:
  AWTEvent(::java::awt::Event *);
  AWTEvent(::java::lang::Object *, jint);
  virtual void setSource(::java::lang::Object *);
  virtual jint getID();
  virtual ::java::lang::String * toString();
  virtual ::java::lang::String * paramString();
public: // actually protected
  virtual void consume();
  virtual jboolean isConsumed();
public: // actually package-private
  static jlong eventIdToMask(jint);
private:
  static const jlong serialVersionUID = -1825314779160409405LL;
public: // actually protected
  jint __attribute__((aligned(__alignof__( ::java::util::EventObject)))) id;
  jboolean consumed;
public: // actually package-private
  ::java::awt::AWTEvent * queueNext;
  JArray< jbyte > * bdata;
  jboolean isFocusManagerEvent;
public:
  static const jlong COMPONENT_EVENT_MASK = 1LL;
  static const jlong CONTAINER_EVENT_MASK = 2LL;
  static const jlong FOCUS_EVENT_MASK = 4LL;
  static const jlong KEY_EVENT_MASK = 8LL;
  static const jlong MOUSE_EVENT_MASK = 16LL;
  static const jlong MOUSE_MOTION_EVENT_MASK = 32LL;
  static const jlong WINDOW_EVENT_MASK = 64LL;
  static const jlong ACTION_EVENT_MASK = 128LL;
  static const jlong ADJUSTMENT_EVENT_MASK = 256LL;
  static const jlong ITEM_EVENT_MASK = 512LL;
  static const jlong TEXT_EVENT_MASK = 1024LL;
  static const jlong INPUT_METHOD_EVENT_MASK = 2048LL;
public: // actually package-private
  static const jlong INPUT_ENABLED_EVENT_MASK = 4096LL;
public:
  static const jlong PAINT_EVENT_MASK = 8192LL;
  static const jlong INVOCATION_EVENT_MASK = 16384LL;
  static const jlong HIERARCHY_EVENT_MASK = 32768LL;
  static const jlong HIERARCHY_BOUNDS_EVENT_MASK = 65536LL;
  static const jlong MOUSE_WHEEL_EVENT_MASK = 131072LL;
  static const jlong WINDOW_STATE_EVENT_MASK = 262144LL;
  static const jlong WINDOW_FOCUS_EVENT_MASK = 524288LL;
  static const jint RESERVED_ID_MAX = 1999;
  static ::java::lang::Class class$;
};

#endif // __java_awt_AWTEvent__
