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

#ifndef __gnu_xml_dom_html2_DomHTMLTableElement__
#define __gnu_xml_dom_html2_DomHTMLTableElement__

#pragma interface

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

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

public: // actually protected
  DomHTMLTableElement(::gnu::xml::dom::html2::DomHTMLDocument *, ::java::lang::String *, ::java::lang::String *);
public:
  virtual ::org::w3c::dom::html2::HTMLTableCaptionElement * getCaption();
  virtual void setCaption(::org::w3c::dom::html2::HTMLTableCaptionElement *);
  virtual ::org::w3c::dom::html2::HTMLTableSectionElement * getTHead();
  virtual void setTHead(::org::w3c::dom::html2::HTMLTableSectionElement *);
  virtual ::org::w3c::dom::html2::HTMLTableSectionElement * getTFoot();
  virtual void setTFoot(::org::w3c::dom::html2::HTMLTableSectionElement *);
  virtual ::org::w3c::dom::html2::HTMLCollection * getRows();
  virtual ::org::w3c::dom::html2::HTMLCollection * getTBodies();
  virtual ::java::lang::String * getAlign();
  virtual void setAlign(::java::lang::String *);
  virtual ::java::lang::String * getBgColor();
  virtual void setBgColor(::java::lang::String *);
  virtual ::java::lang::String * getBorder();
  virtual void setBorder(::java::lang::String *);
  virtual ::java::lang::String * getCellPadding();
  virtual void setCellPadding(::java::lang::String *);
  virtual ::java::lang::String * getCellSpacing();
  virtual void setCellSpacing(::java::lang::String *);
  virtual ::java::lang::String * getFrame();
  virtual void setFrame(::java::lang::String *);
  virtual ::java::lang::String * getRules();
  virtual void setRules(::java::lang::String *);
  virtual ::java::lang::String * getSummary();
  virtual void setSummary(::java::lang::String *);
  virtual ::java::lang::String * getWidth();
  virtual void setWidth(::java::lang::String *);
  virtual ::org::w3c::dom::html2::HTMLElement * createTHead();
  virtual void deleteTHead();
  virtual ::org::w3c::dom::html2::HTMLElement * createTFoot();
  virtual void deleteTFoot();
  virtual ::org::w3c::dom::html2::HTMLElement * createCaption();
  virtual void deleteCaption();
  virtual ::org::w3c::dom::html2::HTMLElement * insertRow(jint);
  virtual void deleteRow(jint);
public: // actually package-private
  virtual ::org::w3c::dom::Node * getRow(jint);
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_dom_html2_DomHTMLTableElement__
