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

#ifndef __java_awt_event_InputMethodEvent__
#define __java_awt_event_InputMethodEvent__

#pragma interface

#include <java/awt/AWTEvent.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
      namespace event
      {
          class InputMethodEvent;
      }
      namespace font
      {
          class TextHitInfo;
      }
    }
    namespace text
    {
        class AttributedCharacterIterator;
    }
  }
}

class java::awt::event::InputMethodEvent : public ::java::awt::AWTEvent
{

public:
  InputMethodEvent(::java::awt::Component *, jint, jlong, ::java::text::AttributedCharacterIterator *, jint, ::java::awt::font::TextHitInfo *, ::java::awt::font::TextHitInfo *);
  InputMethodEvent(::java::awt::Component *, jint, ::java::text::AttributedCharacterIterator *, jint, ::java::awt::font::TextHitInfo *, ::java::awt::font::TextHitInfo *);
  InputMethodEvent(::java::awt::Component *, jint, ::java::awt::font::TextHitInfo *, ::java::awt::font::TextHitInfo *);
  virtual ::java::text::AttributedCharacterIterator * getText();
  virtual jint getCommittedCharacterCount();
  virtual ::java::awt::font::TextHitInfo * getCaret();
  virtual ::java::awt::font::TextHitInfo * getVisiblePosition();
  virtual void consume();
  virtual jboolean isConsumed();
  virtual jlong getWhen();
  virtual ::java::lang::String * paramString();
private:
  void readObject(::java::io::ObjectInputStream *);
  static const jlong serialVersionUID = 4727190874778922661LL;
public:
  static const jint INPUT_METHOD_FIRST = 1100;
  static const jint INPUT_METHOD_TEXT_CHANGED = 1100;
  static const jint CARET_POSITION_CHANGED = 1101;
  static const jint INPUT_METHOD_LAST = 1101;
private:
  jlong __attribute__((aligned(__alignof__( ::java::awt::AWTEvent)))) when;
  ::java::text::AttributedCharacterIterator * text;
  jint committedCharacterCount;
  ::java::awt::font::TextHitInfo * caret;
  ::java::awt::font::TextHitInfo * visiblePosition;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_event_InputMethodEvent__
