DragDrop.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using System;
  2. using System.Runtime.CompilerServices;
  3. using BansheeEngine;
  4. namespace BansheeEditor
  5. {
  6. public static class DragDrop
  7. {
  8. public static bool DragInProgress { get { return Internal_IsDragInProgress(); } }
  9. public static bool DropInProgress { get { return Internal_IsDropInProgress(); } }
  10. public static DragDropData Data { get { return Internal_GetData(); } }
  11. public static DragDropType Type
  12. {
  13. get
  14. {
  15. if (Data != null)
  16. return Data.Type;
  17. return DragDropType.None;
  18. }
  19. }
  20. public static void StartDrag(DragDropData data)
  21. {
  22. if (data is SceneObjectDragDropData)
  23. Internal_StartSceneObjectDrag(data.GetCachedPtr());
  24. else if (data is ResourceDragDropData)
  25. Internal_StartResourceDrag(data.GetCachedPtr());
  26. }
  27. [MethodImpl(MethodImplOptions.InternalCall)]
  28. private static extern bool Internal_IsDragInProgress();
  29. [MethodImpl(MethodImplOptions.InternalCall)]
  30. private static extern bool Internal_IsDropInProgress();
  31. [MethodImpl(MethodImplOptions.InternalCall)]
  32. private static extern DragDropData Internal_GetData();
  33. [MethodImpl(MethodImplOptions.InternalCall)]
  34. private static extern void Internal_StartSceneObjectDrag(IntPtr instance);
  35. [MethodImpl(MethodImplOptions.InternalCall)]
  36. private static extern void Internal_StartResourceDrag(IntPtr instance);
  37. }
  38. public class DragDropData : ScriptObject
  39. {
  40. internal DragDropType type;
  41. public DragDropType Type { get { return type; } }
  42. [MethodImpl(MethodImplOptions.InternalCall)]
  43. private static extern void Internal_CreateInstance(DragDropData instance);
  44. }
  45. public class SceneObjectDragDropData : DragDropData
  46. {
  47. public SceneObject[] Objects { get { return Internal_GetObjects(mCachedPtr); } }
  48. public SceneObjectDragDropData(SceneObject[] objects)
  49. {
  50. this.type = DragDropType.SceneObject;
  51. Internal_CreateInstance(this, objects);
  52. }
  53. [MethodImpl(MethodImplOptions.InternalCall)]
  54. private static extern void Internal_CreateInstance(SceneObjectDragDropData instance, SceneObject[] objects);
  55. [MethodImpl(MethodImplOptions.InternalCall)]
  56. private static extern SceneObject[] Internal_GetObjects(IntPtr thisPtr);
  57. }
  58. public class ResourceDragDropData : DragDropData
  59. {
  60. public string[] Paths { get { return Internal_GetPaths(mCachedPtr); } }
  61. public ResourceDragDropData(string[] paths)
  62. {
  63. this.type = DragDropType.Resource;
  64. Internal_CreateInstance(this, paths);
  65. }
  66. [MethodImpl(MethodImplOptions.InternalCall)]
  67. private static extern void Internal_CreateInstance(ResourceDragDropData instance, string[] paths);
  68. [MethodImpl(MethodImplOptions.InternalCall)]
  69. private static extern string[] Internal_GetPaths(IntPtr thisPtr);
  70. }
  71. public enum DragDropType
  72. {
  73. Resource,
  74. SceneObject,
  75. None
  76. }
  77. }