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

#ifndef __javax_swing_JMenu$AccessibleJMenu__
#define __javax_swing_JMenu$AccessibleJMenu__

#pragma interface

#include <javax/swing/JMenuItem$AccessibleJMenuItem.h>
extern "Java"
{
  namespace javax
  {
    namespace accessibility
    {
        class Accessible;
        class AccessibleRole;
        class AccessibleSelection;
    }
    namespace swing
    {
        class JMenu;
        class JMenu$AccessibleJMenu;
    }
  }
}

class javax::swing::JMenu$AccessibleJMenu : public ::javax::swing::JMenuItem$AccessibleJMenuItem
{

public: // actually protected
  JMenu$AccessibleJMenu(::javax::swing::JMenu *);
public:
  virtual jint getAccessibleChildrenCount();
  virtual ::javax::accessibility::Accessible * getAccessibleChild(jint);
  virtual ::javax::accessibility::AccessibleSelection * getAccessibleSelection();
  virtual ::javax::accessibility::Accessible * getAccessibleSelection(jint);
  virtual jboolean isAccessibleChildSelected(jint);
  virtual ::javax::accessibility::AccessibleRole * getAccessibleRole();
  virtual jint getAccessibleSelectionCount();
  virtual void addAccessibleSelection(jint);
  virtual void removeAccessibleSelection(jint);
  virtual void clearAccessibleSelection();
  virtual void selectAllAccessibleSelection();
private:
  static const jlong serialVersionUID = -8131864021059524309LL;
public: // actually package-private
  ::javax::swing::JMenu * __attribute__((aligned(__alignof__( ::javax::swing::JMenuItem$AccessibleJMenuItem)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_JMenu$AccessibleJMenu__
