1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #pragma once
- #include <Bild.h>
- #include <Zeichnung.h>
- #include "DragElement.h"
- #include "Globals.h"
- template<typename Source, typename Element> class DragController
- : public Framework::ReferenceCounter
- {
- private:
- Source* container;
- Element currentElement;
- DragElement* drag;
- std::function<void()> 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::Bild* zDragDisplay,
- std::function<void()> onDragEnd)
- {
- if (this->container) stopDrag();
- ((Framework::BildZ*)drag)
- ->setBildZ(dynamic_cast<Framework::Bild*>(zDragDisplay->getThis()));
- window->zBildschirm()->addMember(
- dynamic_cast<Zeichnung*>(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->zBildschirm()->removeMember(drag);
- onDragEnd();
- container = 0;
- currentElement = 0;
- }
- }
- };
|