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

#ifndef __java_awt_GridLayout__
#define __java_awt_GridLayout__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
        class Container;
        class Dimension;
        class GridLayout;
    }
  }
}

class java::awt::GridLayout : public ::java::lang::Object
{

public:
  virtual void addLayoutComponent(::java::lang::String *, ::java::awt::Component *);
  virtual jint getColumns();
  virtual jint getHgap();
  virtual jint getRows();
  virtual jint getVgap();
  GridLayout();
  GridLayout(jint, jint);
  GridLayout(jint, jint, jint, jint);
  virtual void layoutContainer(::java::awt::Container *);
  virtual ::java::awt::Dimension * minimumLayoutSize(::java::awt::Container *);
  virtual ::java::awt::Dimension * preferredLayoutSize(::java::awt::Container *);
  virtual void removeLayoutComponent(::java::awt::Component *);
  virtual void setColumns(jint);
  virtual void setHgap(jint);
  virtual void setRows(jint);
  virtual void setVgap(jint);
  virtual ::java::lang::String * toString();
private:
  ::java::awt::Dimension * getSize(::java::awt::Container *, jboolean);
public: // actually package-private
  static const jlong serialVersionUID = -7411804673224730901LL;
private:
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) cols;
  jint rows;
  jint hgap;
  jint vgap;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_GridLayout__
