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

#ifndef __gnu_java_awt_peer_qt_QtListPeer__
#define __gnu_java_awt_peer_qt_QtListPeer__

#pragma interface

#include <gnu/java/awt/peer/qt/QtComponentPeer.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace qt
          {
              class QtListPeer;
              class QtToolkit;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Dimension;
        class List;
    }
  }
}

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

public:
  QtListPeer(::gnu::java::awt::peer::qt::QtToolkit *, ::java::awt::List *);
  virtual void init();
public: // actually protected
  virtual void setup();
private:
  void fireChoice(jint);
  void itemDoubleClicked(jint, jint);
  void select(jint, jboolean);
public:
  virtual void add(::java::lang::String *, jint);
  virtual void addItem(::java::lang::String *, jint);
  virtual void clear();
  virtual void delItems(jint, jint);
  virtual void deselect(jint);
  virtual JArray< jint > * getSelectedIndexes();
  virtual void makeVisible(jint);
  virtual ::java::awt::Dimension * minimumSize(jint);
  virtual ::java::awt::Dimension * preferredSize(jint);
  virtual void removeAll();
  virtual void select(jint);
  virtual void setMultipleMode(jboolean);
  virtual void setMultipleSelections(jboolean);
  virtual ::java::awt::Dimension * getPreferredSize(jint);
  virtual ::java::awt::Dimension * getMinimumSize(jint);
private:
  jboolean __attribute__((aligned(__alignof__( ::gnu::java::awt::peer::qt::QtComponentPeer)))) ignoreNextSelect;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_qt_QtListPeer__
