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

#ifndef __java_awt_List$AccessibleAWTList__
#define __java_awt_List$AccessibleAWTList__

#pragma interface

#include <java/awt/Component$AccessibleAWTComponent.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class List;
        class List$AccessibleAWTList;
      namespace event
      {
          class ActionEvent;
          class ItemEvent;
      }
    }
  }
  namespace javax
  {
    namespace accessibility
    {
        class Accessible;
        class AccessibleRole;
        class AccessibleSelection;
        class AccessibleStateSet;
    }
  }
}

class java::awt::List$AccessibleAWTList : public ::java::awt::Component$AccessibleAWTComponent
{

public:
  List$AccessibleAWTList(::java::awt::List *);
  virtual ::javax::accessibility::AccessibleRole * getAccessibleRole();
  virtual ::javax::accessibility::AccessibleStateSet * getAccessibleStateSet();
  virtual jint getAccessibleChildrenCount();
  virtual ::javax::accessibility::Accessible * getAccessibleChild(jint);
  virtual jint getAccessibleSelectionCount();
  virtual ::javax::accessibility::AccessibleSelection * getAccessibleSelection();
  virtual ::javax::accessibility::Accessible * getAccessibleSelection(jint);
  virtual jboolean isAccessibleChildSelected(jint);
  virtual void addAccessibleSelection(jint);
  virtual void removeAccessibleSelection(jint);
  virtual void clearAccessibleSelection();
  virtual void selectAllAccessibleSelection();
  virtual void itemStateChanged(::java::awt::event::ItemEvent *);
  virtual void actionPerformed(::java::awt::event::ActionEvent *);
public: // actually package-private
  static ::java::awt::List * access$0(::java::awt::List$AccessibleAWTList *);
private:
  static const jlong serialVersionUID = 7924617370136012829LL;
public: // actually package-private
  ::java::awt::List * __attribute__((aligned(__alignof__( ::java::awt::Component$AccessibleAWTComponent)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_List$AccessibleAWTList__
