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

#ifndef __java_awt_Desktop__
#define __java_awt_Desktop__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Desktop;
        class Desktop$Action;
      namespace peer
      {
          class DesktopPeer;
      }
    }
    namespace net
    {
        class URI;
    }
  }
}

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

  Desktop();
public:
  static ::java::awt::Desktop * getDesktop();
  static jboolean isDesktopSupported();
  virtual jboolean isSupported(::java::awt::Desktop$Action *);
  virtual void browse(::java::net::URI *);
  virtual void edit(::java::io::File *);
  virtual void mail();
  virtual void mail(::java::net::URI *);
  virtual void open(::java::io::File *);
  virtual void print(::java::io::File *);
private:
  ::java::awt::peer::DesktopPeer * __attribute__((aligned(__alignof__( ::java::lang::Object)))) peer;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_Desktop__
