BsScriptDragDropManager.h 2.7 KB

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