No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

HandleMenuItem.cs 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using PlasticGui;
  2. using System;
  3. using System.Reflection;
  4. using UnityEditor;
  5. using UnityEngine;
  6. namespace Unity.PlasticSCM.Editor.UI
  7. {
  8. internal static class HandleMenuItem
  9. {
  10. internal static void AddMenuItem(
  11. string name,
  12. int priority,
  13. Action execute,
  14. Func<bool> validate)
  15. {
  16. AddMenuItem(name, string.Empty, priority, execute, validate);
  17. }
  18. internal static void AddMenuItem(
  19. string name,
  20. string shortcut,
  21. int priority,
  22. Action execute,
  23. Func<bool> validate)
  24. {
  25. MethodInfo InternalAddMenuItem = MenuType.GetMethod(
  26. "AddMenuItem",
  27. BindingFlags.Static | BindingFlags.NonPublic);
  28. if (InternalAddMenuItem == null)
  29. {
  30. Debug.LogWarningFormat(
  31. PlasticLocalization.GetString(
  32. PlasticLocalization.Name.ErrorAddPlasticSCMMenuItem),
  33. name);
  34. return;
  35. }
  36. InternalAddMenuItem.Invoke(
  37. null, new object[] {
  38. name, shortcut, false,
  39. priority, execute, validate });
  40. }
  41. internal static void RemoveMenuItem(string name)
  42. {
  43. MethodInfo InternalRemoveMenuItem = MenuType.GetMethod(
  44. "RemoveMenuItem",
  45. BindingFlags.Static | BindingFlags.NonPublic);
  46. if (InternalRemoveMenuItem == null)
  47. {
  48. Debug.LogWarningFormat(
  49. PlasticLocalization.GetString(
  50. PlasticLocalization.Name.ErrorRemovePlasticSCMMenuItem),
  51. name);
  52. return;
  53. }
  54. InternalRemoveMenuItem.Invoke(
  55. null, new object[] { name });
  56. }
  57. internal static void UpdateAllMenus()
  58. {
  59. MethodInfo InternalUpdateAllMenus = EditorUtilityType.GetMethod(
  60. "Internal_UpdateAllMenus",
  61. BindingFlags.Static | BindingFlags.NonPublic);
  62. if (InternalUpdateAllMenus == null)
  63. {
  64. Debug.LogWarning(
  65. PlasticLocalization.GetString(
  66. PlasticLocalization.Name.ErrorUpdatePlasticSCMMenus));
  67. return;
  68. }
  69. InternalUpdateAllMenus.Invoke(null, null);
  70. }
  71. internal static bool GetEnabled(string menuPath)
  72. {
  73. return Menu.GetEnabled(menuPath);
  74. }
  75. static readonly Type MenuType = typeof(UnityEditor.Menu);
  76. static readonly Type EditorUtilityType = typeof(UnityEditor.EditorUtility);
  77. }
  78. }