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

#ifndef __gnu_xml_dom_html2_DomHTMLElement__
#define __gnu_xml_dom_html2_DomHTMLElement__

#pragma interface

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

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

public: // actually protected
  DomHTMLElement(::gnu::xml::dom::html2::DomHTMLDocument *, ::java::lang::String *, ::java::lang::String *);
  virtual ::java::lang::String * getHTMLAttribute(::java::lang::String *);
  virtual jint getIntHTMLAttribute(::java::lang::String *);
  virtual jboolean getBooleanHTMLAttribute(::java::lang::String *);
  virtual void setHTMLAttribute(::java::lang::String *, ::java::lang::String *);
  virtual void setIntHTMLAttribute(::java::lang::String *, jint);
  virtual void setBooleanHTMLAttribute(::java::lang::String *, jboolean);
  virtual ::org::w3c::dom::Node * getParentElement(::java::lang::String *);
  virtual ::org::w3c::dom::Node * getChildElement(::java::lang::String *);
  virtual jint getIndex();
  virtual void dispatchUIEvent(::java::lang::String *);
public:
  virtual ::java::lang::String * getId();
  virtual void setId(::java::lang::String *);
  virtual ::java::lang::String * getTitle();
  virtual void setTitle(::java::lang::String *);
  virtual ::java::lang::String * getLang();
  virtual void setLang(::java::lang::String *);
  virtual ::java::lang::String * getDir();
  virtual void setDir(::java::lang::String *);
  virtual ::java::lang::String * getClassName();
  virtual void setClassName(::java::lang::String *);
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_dom_html2_DomHTMLElement__
