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

#ifndef __javax_swing_text_html_ParagraphView__
#define __javax_swing_text_html_ParagraphView__

#pragma interface

#include <javax/swing/text/ParagraphView.h>
extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace swing
      {
        namespace text
        {
          namespace html
          {
            namespace css
            {
                class Length;
            }
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Graphics;
        class Shape;
    }
  }
  namespace javax
  {
    namespace swing
    {
        class SizeRequirements;
      namespace text
      {
          class AttributeSet;
          class Element;
          class View;
        namespace html
        {
            class ParagraphView;
            class StyleSheet;
            class StyleSheet$BoxPainter;
        }
      }
    }
  }
}

class javax::swing::text::html::ParagraphView : public ::javax::swing::text::ParagraphView
{

public:
  ParagraphView(::javax::swing::text::Element *);
  virtual void setParent(::javax::swing::text::View *);
  virtual ::javax::swing::text::AttributeSet * getAttributes();
public: // actually protected
  virtual void setPropertiesFromAttributes();
  virtual ::javax::swing::text::html::StyleSheet * getStyleSheet();
  virtual ::javax::swing::SizeRequirements * calculateMinorAxisRequirements(jint, ::javax::swing::SizeRequirements *);
private:
  jboolean setCSSSpan(::javax::swing::SizeRequirements *, jint);
public:
  virtual jboolean isVisible();
  virtual void paint(::java::awt::Graphics *, ::java::awt::Shape *);
  virtual jfloat getPreferredSpan(jint);
  virtual jfloat getMinimumSpan(jint);
  virtual jfloat getMaximumSpan(jint);
private:
  ::javax::swing::text::AttributeSet * __attribute__((aligned(__alignof__( ::javax::swing::text::ParagraphView)))) attributes;
  ::javax::swing::text::html::StyleSheet$BoxPainter * painter;
  ::gnu::javax::swing::text::html::css::Length * cssWidth;
  ::gnu::javax::swing::text::html::css::Length * cssHeight;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_text_html_ParagraphView__
