BsScriptDragDropManager.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #pragma once
  2. #include "BsScriptEditorPrerequisites.h"
  3. #include "BsScriptObject.h"
  4. #include "BsDragAndDropManager.h"
  5. namespace BansheeEngine
  6. {
  7. class ScriptSceneObjectDragDropData;
  8. class ScriptResourceDragDropData;
  9. // Note: Must be equal to C# DragDropType enum
  10. enum class ScriptDragDropType
  11. {
  12. Resource,
  13. SceneObject,
  14. None
  15. };
  16. class BS_SCR_BED_EXPORT ScriptDragDrop : public ScriptObject<ScriptDragDrop>
  17. {
  18. public:
  19. SCRIPT_OBJ(EDITOR_ASSEMBLY, "BansheeEditor", "DragDrop");
  20. private:
  21. ScriptDragDrop(MonoObject* instance);
  22. static void sceneObjectDragDropFinalize(bool processed);
  23. static void resourceDragDropFinalize(bool processed);
  24. static bool internal_IsDragInProgress();
  25. static bool internal_IsDropInProgress();
  26. static MonoObject* internal_GetData();
  27. static ScriptDragDropType internal_GetDragType();
  28. static void internal_StartSceneObjectDrag(ScriptSceneObjectDragDropData* dragData);
  29. static void internal_StartResourceDrag(ScriptResourceDragDropData* dragData);
  30. };
  31. class BS_SCR_BED_EXPORT ScriptSceneObjectDragDropData : public ScriptObject<ScriptSceneObjectDragDropData>
  32. {
  33. public:
  34. SCRIPT_OBJ(EDITOR_ASSEMBLY, "BansheeEditor", "SceneObjectDragDropData");
  35. static MonoObject* create(const Vector<HSceneObject>& sceneObjects);
  36. const Vector<HSceneObject>& getSceneObjects() const { return mSceneObjects; }
  37. private:
  38. ScriptSceneObjectDragDropData(MonoObject* instance, const Vector<HSceneObject>& sceneObjects);
  39. static void internal_CreateInstance(MonoObject* instance, MonoArray* objects);
  40. static MonoArray* internal_GetObjects(ScriptSceneObjectDragDropData* instance);
  41. Vector<HSceneObject> mSceneObjects;
  42. };
  43. class BS_SCR_BED_EXPORT ScriptResourceDragDropData : public ScriptObject < ScriptResourceDragDropData >
  44. {
  45. public:
  46. SCRIPT_OBJ(EDITOR_ASSEMBLY, "BansheeEditor", "ResourceDragDropData");
  47. static MonoObject* create(const Vector<Path>& paths);
  48. const Vector<Path>& getPaths() const { return mPaths; }
  49. private:
  50. ScriptResourceDragDropData(MonoObject* instance, const Vector<Path>& paths);
  51. static void internal_CreateInstance(MonoObject* instance, MonoArray* paths);
  52. static MonoArray* internal_GetPaths(ScriptResourceDragDropData* instance);
  53. Vector<Path> mPaths;
  54. };
  55. class BS_SCR_BED_EXPORT ScriptDragDropManager : public Module<ScriptDragDropManager>
  56. {
  57. public:
  58. ScriptDragDropManager();
  59. ~ScriptDragDropManager();
  60. void update();
  61. bool isDropInProgress() const { return mIsDropInProgress; }
  62. MonoObject* getDropData() const;
  63. ScriptDragDropType getDragType() const;
  64. private:
  65. void onMouseDragEnded(const PointerEvent& evt, DragCallbackInfo& callbackInfo);
  66. HEvent mDragEndedConn;
  67. bool mIsDropInProgress;
  68. UINT64 mDroppedFrameIdx;
  69. ScriptDragDropType mDropType;
  70. Vector<Path> mDroppedPaths;
  71. Vector<HSceneObject> mDroppedSceneObjects;
  72. };
  73. }