aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wnd/drag.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/wnd/drag.h')
-rw-r--r--Src/Wasabi/api/wnd/drag.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/drag.h b/Src/Wasabi/api/wnd/drag.h
new file mode 100644
index 00000000..7680b55d
--- /dev/null
+++ b/Src/Wasabi/api/wnd/drag.h
@@ -0,0 +1,75 @@
+#ifndef __WASABI_DRAG_H
+#define __WASABI_DRAG_H
+
+class ifc_window;
+
+#include <bfc/wasabi_std.h>
+
+class NOVTABLE DragInterface
+{
+public:
+ // (called on dest) when dragged item enters the winder
+ virtual int dragEnter(ifc_window *sourceWnd) = 0;
+ // (called on dest) during the winder
+ virtual int dragOver(int x, int y, ifc_window *sourceWnd) = 0;
+ // (called on src)
+ virtual int dragSetSticky(ifc_window *wnd, int left, int right, int up, int down) = 0;
+ // (called on dest) when dragged item leaves the winder
+ virtual int dragLeave(ifc_window *sourceWnd) = 0;
+ // (called on dest) here is where we actually drop it
+ virtual int dragDrop(ifc_window *sourceWnd, int x, int y) = 0;
+
+ // must be called from within dragDrop(); (receiver)
+ virtual const wchar_t *dragGetSuggestedDropTitle(void) = 0;
+ // must be called from within your dragEnter, Over, Leave, or Drop
+ // return the slot # if you support this form of the data, -1 otherwise
+ // nitems can be NULL if you're just checking validity
+ virtual int dragCheckData(const wchar_t *type, int *nitems = NULL) = 0;
+ // fetches a specific pointer that was stored
+ virtual void *dragGetData(int slot, int itemnum) = 0;
+ virtual int dragCheckOption(int option) = 0;
+};
+
+class DragInterfaceI : public DragInterface
+{
+public:
+ // (called on dest) when dragged item enters the winder
+ virtual int dragEnter(ifc_window *sourceWnd) { return 0; }
+ // (called on dest) during the winder
+ virtual int dragOver(int x, int y, ifc_window *sourceWnd) { return 0; }
+ // (called on src)
+ virtual int dragSetSticky(ifc_window *wnd, int left, int right, int up, int down) { return 0; }
+ // (called on dest) when dragged item leaves the winder
+ virtual int dragLeave(ifc_window *sourceWnd) { return 0; }
+ // (called on dest) here is where we actually drop it
+ virtual int dragDrop(ifc_window *sourceWnd, int x, int y) { return 0; }
+
+ // must be called from within dragDrop(); (receiver)
+ virtual const wchar_t *dragGetSuggestedDropTitle(void) { return NULL; }
+ // must be called from within your dragEnter, Over, Leave, or Drop
+ // return the slot # if you support this form of the data, -1 otherwise
+ // nitems can be NULL if you're just checking validity
+ virtual int dragCheckData(const wchar_t *type, int *nitems = NULL) { return 0; }
+ // fetches a specific pointer that was stored
+ virtual void *dragGetData(int slot, int itemnum) { return 0; }
+ virtual int dragCheckOption(int option) { return 0; }
+};
+
+class DI
+{
+public:
+ DI(ifc_window *rw);
+ int dragEnter(ifc_window *sourceWnd);
+ int dragOver(int x, int y, ifc_window *sourceWnd);
+ int dragSetSticky(ifc_window *wnd, int left, int right, int up, int down);
+ int dragLeave(ifc_window *sourceWnd);
+ int dragDrop(ifc_window *sourceWnd, int x, int y);
+ const wchar_t *dragGetSuggestedDropTitle(void);
+ int dragCheckData(const wchar_t *type, int *nitems = NULL);
+ void *dragGetData(int slot, int itemnum);
+ int dragCheckOption(int option);
+private:
+ DragInterface *di;
+};
+
+#endif