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

#ifndef __gnu_xml_dom_html2_DomHTMLSelectElement__
#define __gnu_xml_dom_html2_DomHTMLSelectElement__

#pragma interface

#include <gnu/xml/dom/html2/DomHTMLElement.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace dom
      {
        namespace html2
        {
            class DomHTMLDocument;
            class DomHTMLSelectElement;
        }
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
        namespace html2
        {
            class HTMLElement;
            class HTMLFormElement;
            class HTMLOptionsCollection;
        }
      }
    }
  }
}

class gnu::xml::dom::html2::DomHTMLSelectElement : public ::gnu::xml::dom::html2::DomHTMLElement
{

public: // actually protected
  DomHTMLSelectElement(::gnu::xml::dom::html2::DomHTMLDocument *, ::java::lang::String *, ::java::lang::String *);
public:
  virtual ::java::lang::String * getType();
  virtual jint getSelectedIndex();
  virtual void setSelectedIndex(jint);
  virtual ::java::lang::String * getValue();
  virtual void setValue(::java::lang::String *);
  virtual jint getLength();
  virtual void setLength(jint);
  virtual ::org::w3c::dom::html2::HTMLFormElement * getForm();
  virtual ::org::w3c::dom::html2::HTMLOptionsCollection * getOptions();
  virtual jboolean getDisabled();
  virtual void setDisabled(jboolean);
  virtual jboolean getMultiple();
  virtual void setMultiple(jboolean);
  virtual ::java::lang::String * getName();
  virtual void setName(::java::lang::String *);
  virtual jint getSize();
  virtual void setSize(jint);
  virtual jint getTabIndex();
  virtual void setTabIndex(jint);
  virtual void add(::org::w3c::dom::html2::HTMLElement *, ::org::w3c::dom::html2::HTMLElement *);
  virtual void remove(jint);
  virtual void blur();
  virtual void focus();
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_dom_html2_DomHTMLSelectElement__
