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

#ifndef __java_awt_dnd_DropTargetContext__
#define __java_awt_dnd_DropTargetContext__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
      namespace datatransfer
      {
          class DataFlavor;
          class Transferable;
      }
      namespace dnd
      {
          class DropTarget;
          class DropTargetContext;
        namespace peer
        {
            class DropTargetContextPeer;
        }
      }
    }
  }
}

class java::awt::dnd::DropTargetContext : public ::java::lang::Object
{

public: // actually package-private
  DropTargetContext(::java::awt::dnd::DropTarget *);
public:
  virtual ::java::awt::dnd::DropTarget * getDropTarget();
  virtual ::java::awt::Component * getComponent();
  virtual void addNotify(::java::awt::dnd::peer::DropTargetContextPeer *);
  virtual void removeNotify();
public: // actually protected
  virtual void setTargetActions(jint);
  virtual jint getTargetActions();
public:
  virtual void dropComplete(jboolean);
public: // actually protected
  virtual void acceptDrag(jint);
  virtual void rejectDrag();
  virtual void acceptDrop(jint);
  virtual void rejectDrop();
  virtual JArray< ::java::awt::datatransfer::DataFlavor * > * getCurrentDataFlavors();
  virtual ::java::util::List * getCurrentDataFlavorsAsList();
  virtual jboolean isDataFlavorSupported(::java::awt::datatransfer::DataFlavor *);
  virtual ::java::awt::datatransfer::Transferable * getTransferable();
  virtual ::java::awt::datatransfer::Transferable * createTransferableProxy(::java::awt::datatransfer::Transferable *, jboolean);
public: // actually package-private
  static const jlong serialVersionUID = -634158968993743371LL;
private:
  ::java::awt::dnd::DropTarget * __attribute__((aligned(__alignof__( ::java::lang::Object)))) dropTarget;
  jint targetActions;
  ::java::awt::dnd::peer::DropTargetContextPeer * dtcp;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_dnd_DropTargetContext__
