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

#ifndef __java_awt_dnd_DropTargetDragEvent__
#define __java_awt_dnd_DropTargetDragEvent__

#pragma interface

#include <java/awt/dnd/DropTargetEvent.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Point;
      namespace datatransfer
      {
          class DataFlavor;
          class Transferable;
      }
      namespace dnd
      {
          class DropTargetContext;
          class DropTargetDragEvent;
      }
    }
  }
}

class java::awt::dnd::DropTargetDragEvent : public ::java::awt::dnd::DropTargetEvent
{

public:
  DropTargetDragEvent(::java::awt::dnd::DropTargetContext *, ::java::awt::Point *, jint, jint);
  virtual void acceptDrag(jint);
  virtual JArray< ::java::awt::datatransfer::DataFlavor * > * getCurrentDataFlavors();
  virtual ::java::util::List * getCurrentDataFlavorsAsList();
  virtual jint getDropAction();
  virtual ::java::awt::Point * getLocation();
  virtual jint getSourceActions();
  virtual jboolean isDataFlavorSupported(::java::awt::datatransfer::DataFlavor *);
  virtual void rejectDrag();
  virtual ::java::awt::datatransfer::Transferable * getTransferable();
private:
  static const jlong serialVersionUID = -8422265619058953682LL;
  jint __attribute__((aligned(__alignof__( ::java::awt::dnd::DropTargetEvent)))) dropAction;
  jint srcActions;
  ::java::awt::Point * location;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_dnd_DropTargetDragEvent__
