-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathFEEditorDragAndDropManager.h
More file actions
75 lines (57 loc) · 2.24 KB
/
Copy pathFEEditorDragAndDropManager.h
File metadata and controls
75 lines (57 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#pragma once
#include "../FEngine.h"
#include <any>
using namespace FocalEngine;
#define EDITOR_RESOURCE_TAG "EDITOR_PRIVATE_RESOURCE"
class DragAndDropTarget
{
friend class DragAndDropManager;
private:
std::vector<FE_OBJECT_TYPE> AcceptedTypes;
std::vector<std::string> ToolTipTexts;
std::function<bool(FEObject*, void**)> Callback;
void** UserData = nullptr;
bool bActive = false;
public:
DragAndDropTarget();
DragAndDropTarget(FE_OBJECT_TYPE AcceptedType, std::function<bool(FEObject*, void**)> Callback, void** UserData = nullptr, std::string ToolTipText = "");
DragAndDropTarget(std::vector<FE_OBJECT_TYPE>& AcceptedTypes, std::function<bool(FEObject*, void**)> Callback, void** UserData, std::vector<std::string>& ToolTipTexts);
~DragAndDropTarget();
void SetActive(bool Active);
bool GetActive() const;
bool Accept(const FEObject* Object) const;
void** GetUserData() const;
void SetNewUserData(void** NewUserData);
void StickToItem();
void StickToCurrentWindow();
};
class DragAndDropManager
{
friend DragAndDropTarget;
public:
SINGLETON_PUBLIC_PART(DragAndDropManager)
void InitializeResources();
DragAndDropTarget* AddTarget(FE_OBJECT_TYPE AcceptedType, std::function<bool(FEObject*, void**)> Callback, void** UserData = nullptr, std::string ToolTipText = "");
DragAndDropTarget* AddTarget(std::vector<FE_OBJECT_TYPE>& AcceptedTypes, std::function<bool(FEObject*, void**)> Callback, void** UserData, std::vector<std::string>& ToolTipTexts);
DragAndDropTarget* AddTarget(DragAndDropTarget* NewTarget);
void Render() const;
void DropAction();
void MouseMove();
void SetObjectToDrag(FEObject* Object, FETexture* Texture = nullptr, ImVec2 UV0 = ImVec2(0.0f, 1.0f), ImVec2 UV1 = ImVec2(0.0f, 1.0f));
bool ObjectIsDraged() const;
FETexture* GetToolTipTexture() const;
private:
SINGLETON_PRIVATE_PART(DragAndDropManager)
std::vector<DragAndDropTarget*> Targets;
FEObject* Object = nullptr;
FETexture* PreviewTexture = nullptr;
ImVec2 UV0;
ImVec2 UV1;
FETexture* HandCursor = nullptr;
FETexture* HandCursorUnavailable = nullptr;
void DrawToolTip() const;
bool bDrawDragAndDropHasAction = false;
std::string GetToolTipText() const;
bool ObjectCanBeDroped() const;
};
#define DRAG_AND_DROP_MANAGER DragAndDropManager::GetInstance()