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

#ifndef __javax_swing_plaf_basic_BasicTableHeaderUI$MouseInputHandler__
#define __javax_swing_plaf_basic_BasicTableHeaderUI$MouseInputHandler__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace event
      {
          class MouseEvent;
      }
    }
  }
  namespace javax
  {
    namespace swing
    {
        class Timer;
      namespace plaf
      {
        namespace basic
        {
            class BasicTableHeaderUI;
            class BasicTableHeaderUI$MouseInputHandler;
        }
      }
    }
  }
}

class javax::swing::plaf::basic::BasicTableHeaderUI$MouseInputHandler : public ::java::lang::Object
{

public:
  BasicTableHeaderUI$MouseInputHandler(::javax::swing::plaf::basic::BasicTableHeaderUI *);
  virtual void mouseClicked(::java::awt::event::MouseEvent *);
  virtual void mouseDragged(::java::awt::event::MouseEvent *);
  virtual void mouseEntered(::java::awt::event::MouseEvent *);
  virtual void mouseExited(::java::awt::event::MouseEvent *);
  virtual void mouseMoved(::java::awt::event::MouseEvent *);
  virtual void mousePressed(::java::awt::event::MouseEvent *);
  virtual void mouseReleased(::java::awt::event::MouseEvent *);
public: // actually package-private
  virtual void endResizing();
  virtual void endDragging(::java::awt::event::MouseEvent *);
  static ::javax::swing::plaf::basic::BasicTableHeaderUI * access$0(::javax::swing::plaf::basic::BasicTableHeaderUI$MouseInputHandler *);
  jboolean __attribute__((aligned(__alignof__( ::java::lang::Object)))) showingResizeCursor;
  jint draggingFrom;
  jint draggingColumnNumber;
  jint prevPrefWidth;
  ::javax::swing::Timer * timer;
  ::javax::swing::plaf::basic::BasicTableHeaderUI * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicTableHeaderUI$MouseInputHandler__
