#pragma once #include #include #include "DragElement.h" #include "Globals.h" template class DragController : public Framework::ReferenceCounter { private: Source* container; Element currentElement; DragElement* drag; std::function onDragEnd; public: DragController() : ReferenceCounter() { container = 0; currentElement = 0; drag = new DragElement(); } ~DragController() { if (this->container) stopDrag(); drag->release(); } void beginDrag(Source* container, Element element, Framework::Image* zDragDisplay, std::function onDragEnd) { if (this->container) stopDrag(); ((Framework::ImageView*)drag) ->setImageZ(dynamic_cast(zDragDisplay->getThis())); window->zScreen()->addMember( dynamic_cast(drag->getThis())); this->container = container; this->currentElement = element; this->onDragEnd = onDragEnd; } Source* getCurrentDragContainer() const { return container; } Element getCurrentDaragElement() const { return currentElement; } void stopDrag() { if (container) { window->zScreen()->removeMember(drag); onDragEnd(); container = 0; currentElement = 0; } } };