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

#ifndef __java_awt_Cursor__
#define __java_awt_Cursor__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Cursor;
    }
  }
}

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

public:
  Cursor(jint);
public: // actually protected
  Cursor(::java::lang::String *);
public:
  static ::java::awt::Cursor * getPredefinedCursor(jint);
  static ::java::awt::Cursor * getSystemCustomCursor(::java::lang::String *);
  static ::java::awt::Cursor * getDefaultCursor();
  virtual jint getType();
  virtual ::java::lang::String * getName();
  virtual ::java::lang::String * toString();
public: // actually package-private
  static const jlong serialVersionUID = 8028237497568985504LL;
public:
  static const jint DEFAULT_CURSOR = 0;
  static const jint CROSSHAIR_CURSOR = 1;
  static const jint TEXT_CURSOR = 2;
  static const jint WAIT_CURSOR = 3;
  static const jint SW_RESIZE_CURSOR = 4;
  static const jint SE_RESIZE_CURSOR = 5;
  static const jint NW_RESIZE_CURSOR = 6;
  static const jint NE_RESIZE_CURSOR = 7;
  static const jint N_RESIZE_CURSOR = 8;
  static const jint S_RESIZE_CURSOR = 9;
  static const jint W_RESIZE_CURSOR = 10;
  static const jint E_RESIZE_CURSOR = 11;
  static const jint HAND_CURSOR = 12;
  static const jint MOVE_CURSOR = 13;
private:
  static JArray< ::java::lang::String * > * NAMES;
public:
  static const jint CUSTOM_CURSOR = -1;
private:
  static const jint PREDEFINED_COUNT = 14;
public: // actually protected
  static JArray< ::java::awt::Cursor * > * predefined;
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) name;
public: // actually package-private
  jint type;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_Cursor__
