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

#ifndef __gnu_java_awt_peer_qt_QtScrollPanePeer__
#define __gnu_java_awt_peer_qt_QtScrollPanePeer__

#pragma interface

#include <gnu/java/awt/peer/qt/QtContainerPeer.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace qt
          {
              class QtScrollPanePeer;
              class QtToolkit;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Adjustable;
        class Insets;
        class ScrollPane;
    }
  }
}

class gnu::java::awt::peer::qt::QtScrollPanePeer : public ::gnu::java::awt::peer::qt::QtContainerPeer
{

public:
  QtScrollPanePeer(::gnu::java::awt::peer::qt::QtToolkit *, ::java::awt::ScrollPane *);
public: // actually protected
  virtual void init();
  virtual void setup();
private:
  void setPolicy(jint);
public:
  virtual void childResized(jint, jint);
  virtual jint getHScrollbarHeight();
  virtual jint getVScrollbarWidth();
  virtual void setScrollPosition(jint, jint);
  virtual ::java::awt::Insets * getInsets();
  virtual void setUnitIncrement(::java::awt::Adjustable *, jint);
  virtual void setValue(::java::awt::Adjustable *, jint);
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_qt_QtScrollPanePeer__
