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

#ifndef __gnu_xml_dom_html2_DomHTMLObjectElement__
#define __gnu_xml_dom_html2_DomHTMLObjectElement__

#pragma interface

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

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

public: // actually protected
  DomHTMLObjectElement(::gnu::xml::dom::html2::DomHTMLDocument *, ::java::lang::String *, ::java::lang::String *);
public:
  virtual ::org::w3c::dom::html2::HTMLFormElement * getForm();
  virtual ::java::lang::String * getCode();
  virtual void setCode(::java::lang::String *);
  virtual ::java::lang::String * getJavaCode();
  virtual void setJavaCode(::java::lang::String *);
  virtual ::java::lang::String * getObject();
  virtual void setObject(::java::lang::String *);
  virtual ::java::lang::String * getJavaObject();
  virtual void setJavaObject(::java::lang::String *);
  virtual ::java::lang::String * getAlign();
  virtual void setAlign(::java::lang::String *);
  virtual ::java::lang::String * getArchive();
  virtual void setArchive(::java::lang::String *);
  virtual ::java::lang::String * getJavaArchive();
  virtual void setJavaArchive(::java::lang::String *);
  virtual ::java::lang::String * getBorder();
  virtual void setBorder(::java::lang::String *);
  virtual ::java::lang::String * getCodeBase();
  virtual void setCodeBase(::java::lang::String *);
  virtual ::java::lang::String * getJavaCodeBase();
  virtual void setJavaCodeBase(::java::lang::String *);
  virtual ::java::lang::String * getCodeType();
  virtual void setCodeType(::java::lang::String *);
  virtual ::java::lang::String * getData();
  virtual void setData(::java::lang::String *);
  virtual jboolean getDeclare();
  virtual void setDeclare(jboolean);
  virtual ::java::lang::String * getHeight();
  virtual void setHeight(::java::lang::String *);
  virtual jint getHspace();
  virtual void setHspace(jint);
  virtual ::java::lang::String * getName();
  virtual void setName(::java::lang::String *);
  virtual ::java::lang::String * getStandby();
  virtual void setStandby(::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 * getJavaType();
  virtual void setJavaType(::java::lang::String *);
  virtual ::java::lang::String * getUseMap();
  virtual void setUseMap(::java::lang::String *);
  virtual jint getVspace();
  virtual void setVspace(jint);
  virtual ::java::lang::String * getWidth();
  virtual void setWidth(::java::lang::String *);
  virtual ::org::w3c::dom::Document * getContentDocument();
  virtual void setMayscript(::java::lang::String *);
  virtual ::java::lang::String * getMayscript();
  virtual void setScriptable(::java::lang::String *);
  virtual ::java::lang::String * getScriptable();
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_dom_html2_DomHTMLObjectElement__
