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

#ifndef __javax_swing_plaf_basic_BasicSplitPaneDivider$DragController__
#define __javax_swing_plaf_basic_BasicSplitPaneDivider$DragController__

#pragma interface

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

class javax::swing::plaf::basic::BasicSplitPaneDivider$DragController : public ::java::lang::Object
{

public: // actually protected
  BasicSplitPaneDivider$DragController(::javax::swing::plaf::basic::BasicSplitPaneDivider *, ::java::awt::event::MouseEvent *);
  virtual jboolean isValid();
  virtual jint positionForMouseEvent(::java::awt::event::MouseEvent *);
  virtual jint getNeededLocation(jint, jint);
  virtual void continueDrag(jint, jint);
  virtual void continueDrag(::java::awt::event::MouseEvent *);
  virtual void completeDrag(jint, jint);
  virtual void completeDrag(::java::awt::event::MouseEvent *);
public: // actually package-private
  virtual jint adjust(jint, jint);
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) offset;
  ::javax::swing::plaf::basic::BasicSplitPaneDivider * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicSplitPaneDivider$DragController__
