예제 #1
0
        public override void AddToMenu(GenericMenu menu, WindowState state)
        {
            var mousePosition = Event.current.mousePosition;

            action.SetMousePosition(mousePosition);
            var displayState = action.GetDisplayState(state);

            action.ClearMousePosition();

            var content = new GUIContent(MenuItemActionBase.GetDisplayName(action));

            switch (displayState)
            {
            case MenuActionDisplayState.Visible:
                menu.AddItem(content, action.IsChecked(state), () =>
                {
                    action.SetMousePosition(mousePosition);
                    action.Execute(state);
                    action.ClearMousePosition();
                });
                break;

            case MenuActionDisplayState.Disabled:
                menu.AddDisabledItem(content);
                break;
            }
        }
        protected static string GetDisplayName(MenuItemActionBase action)
        {
            object[]      customAttributes  = action.GetType().GetCustomAttributes(typeof(ShortcutAttribute), true);
            object[]      customAttributes2 = action.GetType().GetCustomAttributes(typeof(DisplayNameAttribute), true);
            StringBuilder stringBuilder     = new StringBuilder();

            if (customAttributes2.Length > 0)
            {
                stringBuilder.Append((customAttributes2[0] as DisplayNameAttribute).DisplayName);
            }
            else
            {
                stringBuilder.Append(action.GetType().Name);
            }
            if (customAttributes.Length > 0)
            {
                stringBuilder.Append("\t\t");
            }
            for (int num = 0; num != customAttributes.Length; num++)
            {
                if (num > 0)
                {
                    stringBuilder.Append(", ");
                }
                stringBuilder.Append(customAttributes[num]);
            }
            return(stringBuilder.ToString());
        }
예제 #3
0
        public static string GetDisplayName(MenuItemActionBase action)
        {
            var shortcutAttribute     = GetShortcutAttributeForAction(action);
            var displayNameAttributes = action.GetType().GetCustomAttributes(typeof(DisplayNameAttribute), true).FirstOrDefault() as DisplayNameAttribute;

            var builder = new StringBuilder();

            if (displayNameAttributes != null)
            {
                builder.Append(L10n.Tr(displayNameAttributes.DisplayName));
            }
            else
            {
                builder.Append(L10n.Tr(action.GetType().Name));
            }

            if (shortcutAttribute != null)
            {
                var shortcut = shortcutAttribute.GetMenuShortcut();
                if (shortcut != string.Empty)
                {
                    builder.Append(" ");
                    builder.Append(shortcut);
                }
            }

            return(builder.ToString());
        }
예제 #4
0
        public static void ShowItemContextMenu(Vector2 mousePosition, TimelineClip[] clips, IMarker[] markers)
        {
            var menu  = new GenericMenu();
            var items = new List <MenuActionItem>();

            BuildItemContextMenu(items, mousePosition, clips, markers);
            MenuItemActionBase.BuildMenu(menu, items);
            menu.ShowAsContext();
        }
예제 #5
0
        public static void ShowMarkerHeaderContextMenu(Vector2?mousePosition, WindowState state)
        {
            var menu = new GenericMenu();
            List <MenuActionItem> items = new List <MenuActionItem>(100);

            BuildMarkerHeaderContextMenu(items, mousePosition, state);
            MenuItemActionBase.BuildMenu(menu, items);
            menu.ShowAsContext();
        }
예제 #6
0
        public static void ShowNewTracksContextMenu(ICollection <TrackAsset> tracks, WindowState state)
        {
            var menu = new GenericMenu();
            List <MenuActionItem> items = new List <MenuActionItem>(100);

            BuildNewTracksContextMenu(items, tracks, state);
            MenuItemActionBase.BuildMenu(menu, items);
            menu.ShowAsContext();
        }
        public static ActiveInModeAttribute GetActiveInModeAttribute(MenuItemActionBase action)
        {
            var attr = action.GetType().GetCustomAttributes(typeof(ActiveInModeAttribute), true);

            if (attr.Length > 0)
            {
                return(attr[0] as ActiveInModeAttribute);
            }

            return(null);
        }
예제 #8
0
        protected static CategoryAttribute GetCategoryAttribute(MenuItemActionBase action)
        {
            var attr = action.GetType().GetCustomAttributes(typeof(CategoryAttribute), true);

            if (attr.Length > 0)
            {
                return(attr[0] as CategoryAttribute);
            }

            return(null);
        }
예제 #9
0
        protected static SeparatorMenuItemAttribute GetSeparator(MenuItemActionBase action)
        {
            var attr = action.GetType().GetCustomAttributes(typeof(SeparatorMenuItemAttribute), true);

            if (attr.Length > 0)
            {
                return(attr[0] as SeparatorMenuItemAttribute);
            }

            return(null);
        }
예제 #10
0
 public static void AddToMenu(GenericMenu menu, TimelineWindow.TimelineState state)
 {
     T[] items = (from x in SelectionManager.SelectedItemGUI()
                  select x.selectableObject).OfType <T>().ToArray <T>();
     if (items.Length >= 1)
     {
         menu.AddSeparator("");
         ItemAction <T> .actions.ForEach(delegate(ItemAction <T> action)
         {
             string text = string.Empty;
             CategoryAttribute categoryAttribute = MenuItemActionBase.GetCategoryAttribute(action);
             if (categoryAttribute == null)
             {
                 text = string.Empty;
             }
             else
             {
                 text = categoryAttribute.Category;
                 if (!text.EndsWith("/"))
                 {
                     text += "/";
                 }
             }
             string displayName = MenuItemActionBase.GetDisplayName(action);
             string text2       = text + displayName;
             SeparatorMenuItemAttribute separator = MenuItemActionBase.GetSeparator(action);
             bool flag = !MenuItemActionBase.IsHiddenInMenu(action);
             if (flag)
             {
                 MenuActionDisplayState displayState = action.GetDisplayState(state, items);
                 if (displayState == MenuActionDisplayState.Visible)
                 {
                     if (separator != null && separator.before)
                     {
                         menu.AddSeparator(text);
                     }
                     menu.AddItem(new GUIContent(text2), false, delegate(object f)
                     {
                         action.Execute(state, items);
                     }, action);
                 }
                 if (displayState == MenuActionDisplayState.Disabled)
                 {
                     menu.AddDisabledItem(new GUIContent(text2));
                 }
                 if (displayState != MenuActionDisplayState.Hidden && separator != null && separator.after)
                 {
                     menu.AddSeparator(text);
                 }
             }
         });
     }
 }
예제 #11
0
        public static void ShowTrackContextMenu(TrackAsset[] tracks, Vector2?mousePosition)
        {
            if (tracks == null || tracks.Length == 0)
            {
                return;
            }

            var items = new List <MenuActionItem>();
            var menu  = new GenericMenu();

            BuildTrackContextMenu(items, tracks, mousePosition);
            MenuItemActionBase.BuildMenu(menu, items);
            menu.ShowAsContext();
        }
        protected static SeparatorMenuItemAttribute GetSeparator(MenuItemActionBase action)
        {
            object[] customAttributes = action.GetType().GetCustomAttributes(typeof(SeparatorMenuItemAttribute), true);
            SeparatorMenuItemAttribute result;

            if (customAttributes.Length > 0)
            {
                result = (customAttributes[0] as SeparatorMenuItemAttribute);
            }
            else
            {
                result = null;
            }
            return(result);
        }
        protected static CategoryAttribute GetCategoryAttribute(MenuItemActionBase action)
        {
            object[]          customAttributes = action.GetType().GetCustomAttributes(typeof(CategoryAttribute), true);
            CategoryAttribute result;

            if (customAttributes.Length > 0)
            {
                result = (customAttributes[0] as CategoryAttribute);
            }
            else
            {
                result = null;
            }
            return(result);
        }
예제 #14
0
 public static void AddToMenu(GenericMenu menu, TimelineWindow.TimelineState state)
 {
     TrackAsset[] tracks = SelectionManager.SelectedTracks().ToArray <TrackAsset>();
     TrackAction.actions.ForEach(delegate(TrackAction action)
     {
         string text = string.Empty;
         CategoryAttribute categoryAttribute = MenuItemActionBase.GetCategoryAttribute(action);
         if (categoryAttribute == null)
         {
             text = string.Empty;
         }
         else
         {
             text = categoryAttribute.Category;
             if (!text.EndsWith("/"))
             {
                 text += "/";
             }
         }
         string displayName = MenuItemActionBase.GetDisplayName(action);
         string text2       = text + displayName;
         SeparatorMenuItemAttribute separator = MenuItemActionBase.GetSeparator(action);
         bool flag = !MenuItemActionBase.IsHiddenInMenu(action);
         if (flag)
         {
             MenuActionDisplayState displayState = action.GetDisplayState(state, tracks);
             if (displayState == MenuActionDisplayState.Visible)
             {
                 menu.AddItem(new GUIContent(text2), false, delegate(object f)
                 {
                     action.Execute(state, tracks);
                 }, action);
             }
             if (displayState == MenuActionDisplayState.Disabled)
             {
                 menu.AddDisabledItem(new GUIContent(text2));
             }
             if (displayState != MenuActionDisplayState.Hidden && separator != null && separator.after)
             {
                 menu.AddSeparator(text);
             }
         }
     });
 }
        public static ShortcutAttribute GetShortcutAttributeForAction(MenuItemActionBase action)
        {
            var shortcutAttributes = action.GetType()
                                     .GetCustomAttributes(typeof(ShortcutAttribute), true)
                                     .Cast <ShortcutAttribute>();

            foreach (var shortcutAttribute in shortcutAttributes)
            {
                var shortcutOverride = shortcutAttribute as ShortcutPlatformOverrideAttribute;
                if (shortcutOverride != null)
                {
                    if (shortcutOverride.MatchesCurrentPlatform())
                    {
                        return(shortcutOverride);
                    }
                }
                else
                {
                    return(shortcutAttribute);
                }
            }

            return(null);
        }
        public static bool IsActionActiveInMode(MenuItemActionBase action, TimelineModes mode)
        {
            ActiveInModeAttribute attr = GetActiveInModeAttribute(action);

            return(attr != null && (attr.modes & mode) != 0);
        }
 protected static bool IsHiddenInMenu(MenuItemActionBase action)
 {
     object[] customAttributes = action.GetType().GetCustomAttributes(typeof(HideInMenuAttribute), true);
     return(customAttributes.Length > 0);
 }