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

#ifndef __javax_swing_plaf_basic_BasicInternalFrameUI$InternalFrameLayout__
#define __javax_swing_plaf_basic_BasicInternalFrameUI$InternalFrameLayout__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
        class Container;
        class Dimension;
    }
  }
  namespace javax
  {
    namespace swing
    {
      namespace plaf
      {
        namespace basic
        {
            class BasicInternalFrameUI;
            class BasicInternalFrameUI$InternalFrameLayout;
        }
      }
    }
  }
}

class javax::swing::plaf::basic::BasicInternalFrameUI$InternalFrameLayout : public ::java::lang::Object
{

public:
  BasicInternalFrameUI$InternalFrameLayout(::javax::swing::plaf::basic::BasicInternalFrameUI *);
  virtual void addLayoutComponent(::java::lang::String *, ::java::awt::Component *);
  virtual void layoutContainer(::java::awt::Container *);
  virtual ::java::awt::Dimension * minimumLayoutSize(::java::awt::Container *);
  virtual ::java::awt::Dimension * preferredLayoutSize(::java::awt::Container *);
private:
  ::java::awt::Dimension * getSize(::java::awt::Container *, jboolean);
public:
  virtual void removeLayoutComponent(::java::awt::Component *);
public: // actually package-private
  ::javax::swing::plaf::basic::BasicInternalFrameUI * __attribute__((aligned(__alignof__( ::java::lang::Object)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicInternalFrameUI$InternalFrameLayout__
