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

#ifndef __gnu_java_awt_peer_qt_QtButtonPeer__
#define __gnu_java_awt_peer_qt_QtButtonPeer__

#pragma interface

#include <gnu/java/awt/peer/qt/QtComponentPeer.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace qt
          {
              class QtButtonPeer;
              class QtToolkit;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Button;
    }
  }
}

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

public:
  QtButtonPeer(::gnu::java::awt::peer::qt::QtToolkit *, ::java::awt::Button *);
  virtual void init();
public: // actually protected
  virtual void setup();
public: // actually package-private
  virtual void fireClick(jint);
public:
  virtual void setLabel(::java::lang::String *);
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_qt_QtButtonPeer__
