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

#ifndef __javax_swing_plaf_basic_BasicComboPopup$InvocationMouseMotionHandler__
#define __javax_swing_plaf_basic_BasicComboPopup$InvocationMouseMotionHandler__

#pragma interface

#include <java/awt/event/MouseMotionAdapter.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace event
      {
          class MouseEvent;
      }
    }
  }
  namespace javax
  {
    namespace swing
    {
      namespace plaf
      {
        namespace basic
        {
            class BasicComboPopup;
            class BasicComboPopup$InvocationMouseMotionHandler;
        }
      }
    }
  }
}

class javax::swing::plaf::basic::BasicComboPopup$InvocationMouseMotionHandler : public ::java::awt::event::MouseMotionAdapter
{

public: // actually protected
  BasicComboPopup$InvocationMouseMotionHandler(::javax::swing::plaf::basic::BasicComboPopup *);
public:
  virtual void mouseDragged(::java::awt::event::MouseEvent *);
public: // actually package-private
  ::javax::swing::plaf::basic::BasicComboPopup * __attribute__((aligned(__alignof__( ::java::awt::event::MouseMotionAdapter)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicComboPopup$InvocationMouseMotionHandler__
