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

#ifndef __javax_swing_DefaultDesktopManager__
#define __javax_swing_DefaultDesktopManager__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Container;
        class Rectangle;
    }
  }
  namespace javax
  {
    namespace swing
    {
        class DefaultDesktopManager;
        class JComponent;
        class JInternalFrame;
    }
  }
}

class javax::swing::DefaultDesktopManager : public ::java::lang::Object
{

public:
  DefaultDesktopManager();
  virtual void openFrame(::javax::swing::JInternalFrame *);
  virtual void closeFrame(::javax::swing::JInternalFrame *);
  virtual void maximizeFrame(::javax::swing::JInternalFrame *);
  virtual void minimizeFrame(::javax::swing::JInternalFrame *);
  virtual void iconifyFrame(::javax::swing::JInternalFrame *);
  virtual void deiconifyFrame(::javax::swing::JInternalFrame *);
  virtual void activateFrame(::javax::swing::JInternalFrame *);
  virtual void deactivateFrame(::javax::swing::JInternalFrame *);
  virtual void beginDraggingFrame(::javax::swing::JComponent *);
  virtual void dragFrame(::javax::swing::JComponent *, jint, jint);
  virtual void endDraggingFrame(::javax::swing::JComponent *);
  virtual void beginResizingFrame(::javax::swing::JComponent *, jint);
  virtual void resizeFrame(::javax::swing::JComponent *, jint, jint, jint, jint);
  virtual void endResizingFrame(::javax::swing::JComponent *);
  virtual void setBoundsForFrame(::javax::swing::JComponent *, jint, jint, jint, jint);
public: // actually protected
  virtual void removeIconFor(::javax::swing::JInternalFrame *);
  virtual ::java::awt::Rectangle * getBoundsForIconOf(::javax::swing::JInternalFrame *);
  virtual void setPreviousBounds(::javax::swing::JInternalFrame *, ::java::awt::Rectangle *);
  virtual ::java::awt::Rectangle * getPreviousBounds(::javax::swing::JInternalFrame *);
  virtual void setWasIcon(::javax::swing::JInternalFrame *, ::java::lang::Boolean *);
  virtual jboolean wasIcon(::javax::swing::JInternalFrame *);
private:
  static const jlong serialVersionUID = 4657624909838017887LL;
public: // actually package-private
  static ::java::lang::String * WAS_ICON_ONCE_PROPERTY;
private:
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) currentDragMode;
  ::java::awt::Rectangle * dragCache;
  ::java::awt::Container * pane;
  JArray< ::java::awt::Rectangle * > * iconRects;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_DefaultDesktopManager__
