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

#ifndef __javax_swing_plaf_basic_BasicPopupMenuUI$NavigateAction__
#define __javax_swing_plaf_basic_BasicPopupMenuUI$NavigateAction__

#pragma interface

#include <javax/swing/AbstractAction.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace event
      {
          class ActionEvent;
      }
    }
  }
  namespace javax
  {
    namespace swing
    {
        class JPopupMenu;
        class MenuElement;
      namespace plaf
      {
        namespace basic
        {
            class BasicPopupMenuUI$NavigateAction;
        }
      }
    }
  }
}

class javax::swing::plaf::basic::BasicPopupMenuUI$NavigateAction : public ::javax::swing::AbstractAction
{

public: // actually package-private
  BasicPopupMenuUI$NavigateAction(::java::lang::String *);
public:
  virtual void actionPerformed(::java::awt::event::ActionEvent *);
private:
  void navigateNextPrevious(jboolean);
  ::javax::swing::MenuElement * findEnabledChild(JArray< ::javax::swing::MenuElement * > *, ::javax::swing::MenuElement *, jboolean);
  ::javax::swing::MenuElement * findEnabledChild(JArray< ::javax::swing::MenuElement * > *, jint, jboolean);
  ::javax::swing::MenuElement * findNextEnabledChild(JArray< ::javax::swing::MenuElement * > *, jint, jint);
  ::javax::swing::MenuElement * findPreviousEnabledChild(JArray< ::javax::swing::MenuElement * > *, jint, jint);
  void navigateParentChild(jboolean);
  void cancel();
  ::javax::swing::JPopupMenu * getLastPopup();
  void doReturn();
public: // actually package-private
  static jboolean $assertionsDisabled;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicPopupMenuUI$NavigateAction__
