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

#ifndef __gnu_java_awt_peer_qt_QtChoicePeer__
#define __gnu_java_awt_peer_qt_QtChoicePeer__

#pragma interface

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

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

public:
  QtChoicePeer(::gnu::java::awt::peer::qt::QtToolkit *, ::java::awt::Choice *);
public: // actually protected
  virtual void init();
  virtual void setup();
private:
  void fireChoice(jint);
public:
  virtual void add(::java::lang::String *, jint);
  virtual void addItem(::java::lang::String *, jint);
  virtual void remove(jint);
  virtual void removeAll();
  virtual void select(jint);
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_qt_QtChoicePeer__
