#ifndef WXD_DND_H
#define WXD_DND_H
#include "../wxd_types.h"
typedef struct wxd_DataObject_t wxd_DataObject_t;
typedef struct wxd_TextDataObject_t wxd_TextDataObject_t;
typedef struct wxd_FileDataObject_t wxd_FileDataObject_t;
typedef struct wxd_DropSource_t wxd_DropSource_t;
typedef struct wxd_DropTarget_t wxd_DropTarget_t;
typedef struct wxd_TextDropTarget_t wxd_TextDropTarget_t;
typedef struct wxd_FileDropTarget_t wxd_FileDropTarget_t;
typedef wxd_DragResult WXDDragResultCEnum;
WXD_EXPORTED wxd_TextDataObject_t* wxd_TextDataObject_Create(const char* text);
WXD_EXPORTED void wxd_TextDataObject_Destroy(wxd_TextDataObject_t* obj);
WXD_EXPORTED int wxd_TextDataObject_GetText(wxd_TextDataObject_t* obj, char* buffer, int buffer_len);
WXD_EXPORTED void wxd_TextDataObject_SetText(wxd_TextDataObject_t* obj, const char* text);
WXD_EXPORTED wxd_FileDataObject_t* wxd_FileDataObject_Create();
WXD_EXPORTED void wxd_FileDataObject_Destroy(wxd_FileDataObject_t* obj);
WXD_EXPORTED int wxd_FileDataObject_GetFilenames(wxd_FileDataObject_t* obj, wxd_ArrayString_t* filenames);
WXD_EXPORTED void wxd_FileDataObject_AddFile(wxd_FileDataObject_t* obj, const char* filename);
WXD_EXPORTED wxd_DropSource_t* wxd_DropSource_Create(wxd_Window_t* window);
WXD_EXPORTED void wxd_DropSource_Destroy(wxd_DropSource_t* source);
WXD_EXPORTED void wxd_DropSource_SetData(wxd_DropSource_t* source, wxd_DataObject_t* data);
WXD_EXPORTED WXDDragResultCEnum wxd_DropSource_DoDragDrop(wxd_DropSource_t* source, bool allow_move);
WXD_EXPORTED wxd_TextDropTarget_t* wxd_TextDropTarget_Create(
wxd_Window_t* window,
void* rust_on_drop_text_fn,
void* rust_closure_ptr
);
WXD_EXPORTED void wxd_TextDropTarget_Destroy(wxd_TextDropTarget_t* target);
WXD_EXPORTED wxd_FileDropTarget_t* wxd_FileDropTarget_Create(
wxd_Window_t* window,
void* rust_on_drop_files_fn,
void* rust_closure_ptr
);
WXD_EXPORTED void wxd_FileDropTarget_Destroy(wxd_FileDropTarget_t* target);
WXD_EXPORTED void wxd_Window_SetDropTarget(wxd_Window_t* window, wxd_DropTarget_t* target);
#endif