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

#ifndef __gnu_xml_dom_html2_DomHTMLInputElement__
#define __gnu_xml_dom_html2_DomHTMLInputElement__

#pragma interface

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

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

public: // actually protected
  DomHTMLInputElement(::gnu::xml::dom::html2::DomHTMLDocument *, ::java::lang::String *, ::java::lang::String *);
public:
  virtual ::java::lang::String * getDefaultValue();
  virtual void setDefaultValue(::java::lang::String *);
  virtual jboolean getDefaultChecked();
  virtual void setDefaultChecked(jboolean);
  virtual ::org::w3c::dom::html2::HTMLFormElement * getForm();
  virtual ::java::lang::String * getAccept();
  virtual void setAccept(::java::lang::String *);
  virtual ::java::lang::String * getAccessKey();
  virtual void setAccessKey(::java::lang::String *);
  virtual ::java::lang::String * getAlign();
  virtual void setAlign(::java::lang::String *);
  virtual ::java::lang::String * getAlt();
  virtual void setAlt(::java::lang::String *);
  virtual jboolean getChecked();
  virtual void setChecked(jboolean);
  virtual jboolean getDisabled();
  virtual void setDisabled(jboolean);
  virtual jint getMaxLength();
  virtual void setMaxLength(jint);
  virtual ::java::lang::String * getName();
  virtual void setName(::java::lang::String *);
  virtual jboolean getReadOnly();
  virtual void setReadOnly(jboolean);
  virtual jint getSize();
  virtual void setSize(jint);
  virtual ::java::lang::String * getSrc();
  virtual void setSrc(::java::lang::String *);
  virtual jint getTabIndex();
  virtual void setTabIndex(jint);
  virtual ::java::lang::String * getType();
  virtual void setType(::java::lang::String *);
  virtual ::java::lang::String * getUseMap();
  virtual void setUseMap(::java::lang::String *);
  virtual ::java::lang::String * getValue();
  virtual void setValue(::java::lang::String *);
  virtual void blur();
  virtual void focus();
  virtual void select();
  virtual void click();
public: // actually protected
  ::java::lang::String * __attribute__((aligned(__alignof__( ::gnu::xml::dom::html2::DomHTMLElement)))) value;
  ::java::lang::Boolean * checked;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_dom_html2_DomHTMLInputElement__
