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

#ifndef __javax_accessibility_AccessibleExtendedText__
#define __javax_accessibility_AccessibleExtendedText__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Rectangle;
    }
  }
  namespace javax
  {
    namespace accessibility
    {
        class AccessibleExtendedText;
        class AccessibleTextSequence;
    }
  }
}

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

public:
  virtual ::java::awt::Rectangle * getTextBounds(jint, jint) = 0;
  virtual ::java::lang::String * getTextRange(jint, jint) = 0;
  virtual ::javax::accessibility::AccessibleTextSequence * getTextSequenceAfter(jint, jint) = 0;
  virtual ::javax::accessibility::AccessibleTextSequence * getTextSequenceAt(jint, jint) = 0;
  virtual ::javax::accessibility::AccessibleTextSequence * getTextSequenceBefore(jint, jint) = 0;
  static const jint LINE = 4;
  static const jint ATTRIBUTE_RUN = 5;
  static ::java::lang::Class class$;
} __attribute__ ((java_interface));

#endif // __javax_accessibility_AccessibleExtendedText__
