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

#ifndef __gnu_java_awt_peer_swing_SwingMenuPeer$SwingMenu__
#define __gnu_java_awt_peer_swing_SwingMenuPeer$SwingMenu__

#pragma interface

#include <javax/swing/JMenu.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace swing
          {
              class SwingMenuPeer;
              class SwingMenuPeer$SwingMenu;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Point;
      namespace event
      {
          class MouseEvent;
      }
    }
  }
}

class gnu::java::awt::peer::swing::SwingMenuPeer$SwingMenu : public ::javax::swing::JMenu
{

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

#endif // __gnu_java_awt_peer_swing_SwingMenuPeer$SwingMenu__
