BsScriptDragDropManager.h 2.7 KB

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