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

#ifndef __javax_accessibility_AccessibleText__
#define __javax_accessibility_AccessibleText__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Point;
        class Rectangle;
    }
  }
  namespace javax
  {
    namespace accessibility
    {
        class AccessibleText;
    }
    namespace swing
    {
      namespace text
      {
          class AttributeSet;
      }
    }
  }
}

class javax::accessibility::AccessibleText : public ::java::lang::Object
{

public:
  virtual jint getIndexAtPoint(::java::awt::Point *) = 0;
  virtual ::java::awt::Rectangle * getCharacterBounds(jint) = 0;
  virtual jint getCharCount() = 0;
  virtual jint getCaretPosition() = 0;
  virtual ::java::lang::String * getAtIndex(jint, jint) = 0;
  virtual ::java::lang::String * getAfterIndex(jint, jint) = 0;
  virtual ::java::lang::String * getBeforeIndex(jint, jint) = 0;
  virtual ::javax::swing::text::AttributeSet * getCharacterAttribute(jint) = 0;
  virtual jint getSelectionStart() = 0;
  virtual jint getSelectionEnd() = 0;
  virtual ::java::lang::String * getSelectedText() = 0;
  static const jint CHARACTER = 1;
  static const jint WORD = 2;
  static const jint SENTENCE = 3;
  static ::java::lang::Class class$;
} __attribute__ ((java_interface));

#endif // __javax_accessibility_AccessibleText__
