From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/Wasabi/api/wnd/dragitemi.h | 58 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Src/Wasabi/api/wnd/dragitemi.h (limited to 'Src/Wasabi/api/wnd/dragitemi.h') diff --git a/Src/Wasabi/api/wnd/dragitemi.h b/Src/Wasabi/api/wnd/dragitemi.h new file mode 100644 index 00000000..41198533 --- /dev/null +++ b/Src/Wasabi/api/wnd/dragitemi.h @@ -0,0 +1,58 @@ +#ifndef _DRAGITEMI_H +#define _DRAGITEMI_H + +#include "dragitem.h" +#include +#include +#include + +class DragItemI : public DragItem +{ +public: + DragItemI(const wchar_t *datatype, void *datum = NULL); + virtual ~DragItemI() {} + + void addVoidDatum(void *newdatum); // up to you to cast it right + + const wchar_t *getDatatype(); + int getNumData(); + void *getDatum(int pos = 0); + +private: + RECVS_DISPATCH; + + StringW datatype; + PtrList datalist; +}; + +template +class DragItemT : public DragItemI +{ +public: + DragItemT(T *item = NULL) : DragItemI(T::dragitem_getDatatype(), item) {} + static inline DragItemI *create(T *item) { return new DragItemT(item); } + + void addDatum(T *newdatum) + { + addVoidDatum(static_cast(newdatum)); + } +}; + +template +class DragItemCast +{ +public: + DragItemCast(DragItem *_item, int _pos = 0) : item(_item), pos(_pos) {} + operator T *() + { + if (item == NULL || !STREQL(T::dragitem_getDatatype(), item->getDatatype())) + return NULL; + else + return static_cast(item->getDatum(pos)); + } +private: + DragItem *item; + int pos; +}; + +#endif -- cgit