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

#ifndef __gnu_java_awt_peer_swing_SwingMenuBarPeer$SwingMenuBar__
#define __gnu_java_awt_peer_swing_SwingMenuBarPeer$SwingMenuBar__

#pragma interface

#include <javax/swing/JMenuBar.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace swing
          {
              class SwingMenuBarPeer;
              class SwingMenuBarPeer$SwingMenuBar;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Container;
        class Point;
      namespace event
      {
          class MouseEvent;
      }
    }
  }
}

class gnu::java::awt::peer::swing::SwingMenuBarPeer$SwingMenuBar : public ::javax::swing::JMenuBar
{

  SwingMenuBarPeer$SwingMenuBar(::gnu::java::awt::peer::swing::SwingMenuBarPeer *);
public:
  virtual ::java::awt::Container * getParent();
  virtual jboolean isShowing();
  virtual void handleMouseEvent(::java::awt::event::MouseEvent *);
  virtual ::java::awt::Point * getLocationOnScreen();
public: // actually package-private
  SwingMenuBarPeer$SwingMenuBar(::gnu::java::awt::peer::swing::SwingMenuBarPeer *, ::gnu::java::awt::peer::swing::SwingMenuBarPeer$SwingMenuBar *);
  ::gnu::java::awt::peer::swing::SwingMenuBarPeer * __attribute__((aligned(__alignof__( ::javax::swing::JMenuBar)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_swing_SwingMenuBarPeer$SwingMenuBar__
