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

#ifndef __javax_swing_text_ParagraphView$Row__
#define __javax_swing_text_ParagraphView$Row__

#pragma interface

#include <javax/swing/text/BoxView.h>
#include <gcj/array.h>

extern "Java"
{
  namespace javax
  {
    namespace swing
    {
        class SizeRequirements;
      namespace text
      {
          class Element;
          class ParagraphView;
          class ParagraphView$Row;
          class ViewFactory;
      }
    }
  }
}

class javax::swing::text::ParagraphView$Row : public ::javax::swing::text::BoxView
{

public: // actually package-private
  ParagraphView$Row(::javax::swing::text::ParagraphView *, ::javax::swing::text::Element *);
public:
  virtual jshort getLeftInset();
  virtual jfloat getAlignment(jint);
public: // actually protected
  virtual jint getViewIndexAtPosition(jint);
  virtual void layoutMinorAxis(jint, jint, JArray< jint > *, JArray< jint > *);
  virtual ::javax::swing::SizeRequirements * calculateMinorAxisRequirements(jint, ::javax::swing::SizeRequirements *);
  virtual void loadChildren(::javax::swing::text::ViewFactory *);
public:
  virtual jint getStartOffset();
  virtual jint getEndOffset();
public: // actually package-private
  ::javax::swing::text::ParagraphView * __attribute__((aligned(__alignof__( ::javax::swing::text::BoxView)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_text_ParagraphView$Row__
