ContextMenu.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Runtime.CompilerServices;
  4. namespace BansheeEngine
  5. {
  6. public class ContextMenu : ScriptObject
  7. {
  8. private List<Action> callbacks = new List<Action>();
  9. public ContextMenu()
  10. {
  11. Internal_CreateInstance(this);
  12. }
  13. public void AddItem(string path, Action callback)
  14. {
  15. Internal_AddItem(mCachedPtr, path, callbacks.Count, ShortcutKey.None);
  16. callbacks.Add(callback);
  17. }
  18. public void AddItem(string path, Action callback, ShortcutKey shortcut)
  19. {
  20. Internal_AddItem(mCachedPtr, path, callbacks.Count, shortcut);
  21. callbacks.Add(callback);
  22. }
  23. public void AddItem(string path, Action callback, LocString name)
  24. {
  25. Internal_AddItem(mCachedPtr, path, callbacks.Count, ShortcutKey.None);
  26. callbacks.Add(callback);
  27. }
  28. public void AddItem(string path, Action callback, ShortcutKey shortcut, LocString name)
  29. {
  30. Internal_AddItem(mCachedPtr, path, callbacks.Count, shortcut);
  31. callbacks.Add(callback);
  32. }
  33. public void AddSeparator(string path)
  34. {
  35. Internal_AddSeparator(mCachedPtr, path);
  36. }
  37. public void SetLocalizedName(string label, LocString name)
  38. {
  39. IntPtr namePtr = IntPtr.Zero;
  40. if (name != null)
  41. namePtr = name.GetCachedPtr();
  42. Internal_SetLocalizedName(mCachedPtr, label, namePtr);
  43. }
  44. private void InternalDoOnEntryTriggered(int callbackIdx)
  45. {
  46. if (callbackIdx < 0 || callbackIdx >= callbacks.Count)
  47. return;
  48. Action callback = callbacks[callbackIdx];
  49. if (callback != null)
  50. callback();
  51. }
  52. [MethodImpl(MethodImplOptions.InternalCall)]
  53. private static extern void Internal_CreateInstance(ContextMenu instance);
  54. [MethodImpl(MethodImplOptions.InternalCall)]
  55. private static extern void Internal_AddItem(IntPtr instance, string path, int callbackIdx, ShortcutKey shortcut);
  56. [MethodImpl(MethodImplOptions.InternalCall)]
  57. private static extern void Internal_AddSeparator(IntPtr instance, string path);
  58. [MethodImpl(MethodImplOptions.InternalCall)]
  59. private static extern void Internal_SetLocalizedName(IntPtr instance, string label, IntPtr name);
  60. }
  61. }