12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- using System;
- using System.Linq.Expressions;
- using System.Reflection;
-
- namespace UnityEditor.Rendering
- {
- /// <summary>
- /// Contains a set of method to be able to manage Menu Items for the editor
- /// </summary>
- static class MenuManager
- {
- #region Add Menu Item
- static Action<string, string, bool, int, Action, Func<bool>> s_AddMenuItem = GetAddMenuItemMethod();
- static Action<string, string, bool, int, Action, Func<bool>> GetAddMenuItemMethod()
- {
- MethodInfo addMenuItemMethodInfo = typeof(Menu).GetMethod("AddMenuItem", BindingFlags.Static | BindingFlags.NonPublic);
- var nameParam = Expression.Parameter(typeof(string), "name");
- var shortcutParam = Expression.Parameter(typeof(string), "shortcut");
- var checkedParam = Expression.Parameter(typeof(bool), "checked");
- var priorityParam = Expression.Parameter(typeof(int), "priority");
- var executeParam = Expression.Parameter(typeof(Action), "execute");
- var validateParam = Expression.Parameter(typeof(Func<bool>), "validate");
-
- var addMenuItemExpressionCall = Expression.Call(null, addMenuItemMethodInfo,
- nameParam,
- shortcutParam,
- checkedParam,
- priorityParam,
- executeParam,
- validateParam);
-
- return Expression.Lambda<Action<string, string, bool, int, Action, Func<bool>>>(
- addMenuItemExpressionCall,
- nameParam,
- shortcutParam,
- checkedParam,
- priorityParam,
- executeParam,
- validateParam).Compile();
- }
-
- /// <summary>
- /// Adds a menu Item to the editor
- /// </summary>
- /// <param name="path">The path to the menu item</param>
- /// <param name="shortcut">The shortcut of the menu item</param>
- /// <param name="checked">If the item can have an state, pressed or not</param>
- /// <param name="priority">The priority of the menu item</param>
- /// <param name="execute">The action that will be called once the menu item is pressed</param>
- /// <param name="validate">The action that will be called to know if the menu itme is enabled</param>
- public static void AddMenuItem(string path, string shortcut, bool @checked, int priority, System.Action execute, System.Func<bool> validate)
- {
- s_AddMenuItem(path, shortcut, @checked, priority, execute, validate);
- }
-
- #endregion
-
- #region Remove Menu Item
- static Action<string> s_RemoveMenuItem = GetRemoveMenuItemMethod();
- static Action<string> GetRemoveMenuItemMethod()
- {
- MethodInfo removeMenuItemMethodInfo = typeof(Menu).GetMethod("RemoveMenuItem", BindingFlags.Static | BindingFlags.NonPublic);
- var nameParam = Expression.Parameter(typeof(string), "name");
- return Expression.Lambda<Action<string>>(
- Expression.Call(null, removeMenuItemMethodInfo, nameParam),
- nameParam).Compile();
- }
- #endregion
-
- /// <summary>
- /// Removes a Menu item from the editor, if the path is not found it does nothing
- /// </summary>
- /// <param name="path">The path of the menu item to be removed</param>
- public static void RemoveMenuItem(string path)
- {
- s_RemoveMenuItem(path);
- }
- }
- }
|