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

#ifndef __gnu_java_awt_peer_qt_QtTextAreaPeer__
#define __gnu_java_awt_peer_qt_QtTextAreaPeer__

#pragma interface

#include <gnu/java/awt/peer/qt/QtComponentPeer.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace qt
          {
              class QtTextAreaPeer;
              class QtToolkit;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Dimension;
        class Rectangle;
        class TextArea;
      namespace im
      {
          class InputMethodRequests;
      }
    }
  }
}

class gnu::java::awt::peer::qt::QtTextAreaPeer : public ::gnu::java::awt::peer::qt::QtComponentPeer
{

public:
  QtTextAreaPeer(::gnu::java::awt::peer::qt::QtToolkit *, ::java::awt::TextArea *);
public: // actually protected
  virtual void init();
  virtual void setup();
private:
  jint getSelection(jboolean);
  void textChanged();
public:
  virtual jlong filterEvents(jlong);
  virtual jint getCaretPosition();
  virtual ::java::awt::Rectangle * getCharacterBounds(jint);
  virtual jint getIndexAtPoint(jint, jint);
  virtual ::java::awt::Dimension * getMinimumSize(jint, jint);
  virtual ::java::awt::Dimension * getPreferredSize(jint, jint);
  virtual jint getSelectionEnd();
  virtual jint getSelectionStart();
  virtual ::java::lang::String * getText();
  virtual void insert(::java::lang::String *, jint);
  virtual void insertText(::java::lang::String *, jint);
  virtual ::java::awt::Dimension * minimumSize(jint, jint);
  virtual ::java::awt::Dimension * preferredSize(jint, jint);
  virtual void replaceRange(::java::lang::String *, jint, jint);
  virtual void replaceText(::java::lang::String *, jint, jint);
  virtual void setText(::java::lang::String *);
  virtual void select(jint, jint);
  virtual void setEditable(jboolean);
  virtual void setCaretPosition(jint);
  virtual ::java::awt::im::InputMethodRequests * getInputMethodRequests();
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_qt_QtTextAreaPeer__
