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

#ifndef __java_awt_print_PageFormat__
#define __java_awt_print_PageFormat__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace print
      {
          class PageFormat;
          class Paper;
      }
    }
  }
}

class java::awt::print::PageFormat : public ::java::lang::Object
{

public:
  PageFormat();
  virtual jdouble getWidth();
  virtual jdouble getHeight();
  virtual jdouble getImageableX();
  virtual jdouble getImageableY();
  virtual jdouble getImageableWidth();
  virtual jdouble getImageableHeight();
  virtual ::java::awt::print::Paper * getPaper();
  virtual void setPaper(::java::awt::print::Paper *);
  virtual jint getOrientation();
  virtual void setOrientation(jint);
  virtual JArray< jdouble > * getMatrix();
  virtual ::java::lang::Object * clone();
  static const jint LANDSCAPE = 0;
  static const jint PORTRAIT = 1;
  static const jint REVERSE_LANDSCAPE = 2;
private:
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) orientation;
  ::java::awt::print::Paper * paper;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_print_PageFormat__
