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

#ifndef __gnu_xml_dom_html2_DomHTMLTableCellElement__
#define __gnu_xml_dom_html2_DomHTMLTableCellElement__

#pragma interface

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

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

public: // actually protected
  DomHTMLTableCellElement(::gnu::xml::dom::html2::DomHTMLDocument *, ::java::lang::String *, ::java::lang::String *);
public:
  virtual jint getCellIndex();
  virtual ::java::lang::String * getAbbr();
  virtual void setAbbr(::java::lang::String *);
  virtual ::java::lang::String * getAlign();
  virtual void setAlign(::java::lang::String *);
  virtual ::java::lang::String * getAxis();
  virtual void setAxis(::java::lang::String *);
  virtual ::java::lang::String * getBgColor();
  virtual void setBgColor(::java::lang::String *);
  virtual ::java::lang::String * getCh();
  virtual void setCh(::java::lang::String *);
  virtual ::java::lang::String * getChOff();
  virtual void setChOff(::java::lang::String *);
  virtual jint getColSpan();
  virtual void setColSpan(jint);
  virtual ::java::lang::String * getHeaders();
  virtual void setHeaders(::java::lang::String *);
  virtual ::java::lang::String * getHeight();
  virtual void setHeight(::java::lang::String *);
  virtual jboolean getNoWrap();
  virtual void setNoWrap(jboolean);
  virtual jint getRowSpan();
  virtual void setRowSpan(jint);
  virtual ::java::lang::String * getScope();
  virtual void setScope(::java::lang::String *);
  virtual ::java::lang::String * getVAlign();
  virtual void setVAlign(::java::lang::String *);
  virtual ::java::lang::String * getWidth();
  virtual void setWidth(::java::lang::String *);
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_dom_html2_DomHTMLTableCellElement__
