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

#ifndef __javax_swing_JMenuBar$AccessibleJMenuBar__
#define __javax_swing_JMenuBar$AccessibleJMenuBar__

#pragma interface

#include <javax/swing/JComponent$AccessibleJComponent.h>
extern "Java"
{
  namespace javax
  {
    namespace accessibility
    {
        class Accessible;
        class AccessibleRole;
        class AccessibleSelection;
        class AccessibleStateSet;
    }
    namespace swing
    {
        class JMenuBar;
        class JMenuBar$AccessibleJMenuBar;
    }
  }
}

class javax::swing::JMenuBar$AccessibleJMenuBar : public ::javax::swing::JComponent$AccessibleJComponent
{

public: // actually protected
  JMenuBar$AccessibleJMenuBar(::javax::swing::JMenuBar *);
public:
  virtual jint getAccessibleSelectionCount();
  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 ::javax::accessibility::AccessibleRole * getAccessibleRole();
  virtual ::javax::accessibility::AccessibleSelection * getAccessibleSelection();
  virtual ::javax::accessibility::AccessibleStateSet * getAccessibleStateSet();
public: // actually package-private
  ::javax::swing::JMenuBar * __attribute__((aligned(__alignof__( ::javax::swing::JComponent$AccessibleJComponent)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_JMenuBar$AccessibleJMenuBar__
