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

#ifndef __javax_swing_JRootPane$RootLayout__
#define __javax_swing_JRootPane$RootLayout__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
        class Container;
        class Dimension;
        class Rectangle;
    }
  }
  namespace javax
  {
    namespace swing
    {
        class JRootPane;
        class JRootPane$RootLayout;
    }
  }
}

class javax::swing::JRootPane$RootLayout : public ::java::lang::Object
{

public: // actually protected
  JRootPane$RootLayout(::javax::swing::JRootPane *);
public:
  virtual void addLayoutComponent(::java::awt::Component *, ::java::lang::Object *);
  virtual void addLayoutComponent(::java::lang::String *, ::java::awt::Component *);
  virtual jfloat getLayoutAlignmentX(::java::awt::Container *);
  virtual jfloat getLayoutAlignmentY(::java::awt::Container *);
  virtual void invalidateLayout(::java::awt::Container *);
  virtual void layoutContainer(::java::awt::Container *);
  virtual ::java::awt::Dimension * maximumLayoutSize(::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 *);
private:
  static const jlong serialVersionUID = -4100116998559815027LL;
  ::java::awt::Rectangle * __attribute__((aligned(__alignof__( ::java::lang::Object)))) glassPaneBounds;
  ::java::awt::Rectangle * layeredPaneBounds;
  ::java::awt::Rectangle * contentPaneBounds;
  ::java::awt::Rectangle * menuBarBounds;
public: // actually package-private
  ::javax::swing::JRootPane * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_JRootPane$RootLayout__
