void ShowSequenceSelector()
        {
            var allDirectors = TimelineUtility.GetDirectorsInSceneUsingAsset(null);

            var formatter         = new SequenceMenuNameFormater();
            var namesAndDirectors = new List <ValueTuple <string, PlayableDirector> >();

            foreach (var d in allDirectors)
            {
                if (d.playableAsset is TimelineAsset)
                {
                    var text = formatter.Format(DisplayNameHelper.GetDisplayName(d));
                    namesAndDirectors.Add(new ValueTuple <string, PlayableDirector>(text, d));
                }
            }

            var sequenceMenu = new GenericMenu();

            foreach (var(timelineName, playableDirector) in namesAndDirectors.OrderBy(i => i.Item1))
            {
                var isCurrent = state.masterSequence.director == playableDirector;
                sequenceMenu.AddItem(new GUIContent(timelineName), isCurrent, OnSequenceSelected, playableDirector);
            }

            if (allDirectors.Length == 0)
            {
                sequenceMenu.AddDisabledItem(DirectorStyles.noTimelinesInScene);
            }

            sequenceMenu.DropDown(EditorGUILayout.s_LastRect);
        }
        void DoBreadcrumbGUI()
        {
            if (state == null)
                return;
            int count = 0;
            foreach (var sequence in state.GetAllSequences())
            {
                BreadCrumbTitle title = new BreadCrumbTitle()
                {
                    name = DisplayNameHelper.GetDisplayName(sequence),
                    mode = GetTitleMode(sequence)
                };
                if (count >= m_BreadCrumbLabels.Count)
                    m_BreadCrumbLabels.Add(title);
                else
                    m_BreadCrumbLabels[count] = title;
                count++;
            }

            if (m_BreadCrumbLabels.Count > count)
                m_BreadCrumbLabels.RemoveRange(count, m_BreadCrumbLabels.Count - count);

            using (new EditorGUI.DisabledScope(currentMode.headerState.breadCrumb == TimelineModeGUIState.Disabled))
            {
                BreadcrumbDrawer.Draw(breadCrumbAreaWidth, m_BreadCrumbLabels, NavigateToBreadcrumbIndex);
            }
        }
Пример #3
0
        internal void AddMenuItem(List <MenuActionItem> menuItems)
        {
            var clips = TimelineEditor.selectedClips;

            if (clips == null || clips.Length != 1)
            {
                return;
            }

            var mode = TimelineWindow.instance.currentMode.mode;
            MenuEntryAttribute menuAttribute = GetType().GetCustomAttributes(typeof(MenuEntryAttribute), false).OfType <MenuEntryAttribute>().FirstOrDefault();
            var menuItem = new MenuActionItem()
            {
                category       = menuAttribute.subMenuPath ?? string.Empty,
                entryName      = menuAttribute.name,
                isActiveInMode = this.IsActionActiveInMode(mode),
                priority       = menuAttribute.priority,
                state          = Validate(clips),
                callback       = null
            };

            var subDirectors = TimelineUtility.GetSubTimelines(clips[0], TimelineEditor.inspectedDirector);

            if (subDirectors.Count == 1)
            {
                menuItem.entryName = SingleItemPrefix + DisplayNameHelper.GetDisplayName(subDirectors[0]);
                menuItem.callback  = () =>
                {
                    Execute(clips);
                };
                menuItems.Add(menuItem);
            }
            else
            {
                for (int i = 0; i < subDirectors.Count; i++)
                {
                    var index = i;
                    menuItem.category  = MultiItemPrefix;
                    menuItem.entryName = DisplayNameHelper.GetDisplayName(subDirectors[i]);
                    menuItem.callback  = () =>
                    {
                        ExecuteInternal(subDirectors, index, clips[0]);
                    };
                    menuItems.Add(menuItem);
                }
            }
        }
Пример #4
0
        protected override void AddSelfToMenu(GenericMenu menu, WindowState state, TimelineClip[] items)
        {
            if (GetDisplayState(state, items) == MenuActionDisplayState.Hidden)
            {
                return;
            }

            // GetDisplayState() guarantees that all that follows is valid
            var clip         = items[0];
            var subDirectors = TimelineUtility.GetSubTimelines(clip, state.editSequence.director);
            var separator    = GetSeparator(this);

            if (separator != null && separator.before)
            {
                menu.AddSeparator("");
            }

            if (subDirectors.Count == 1)
            {
                menu.AddItem(new GUIContent("Edit " + DisplayNameHelper.GetDisplayName(subDirectors[0])), false,
                             f =>
                {
                    ExecuteInternal(state, subDirectors, 0, clip);
                }, this);
            }
            else
            {
                const string prefix = "Edit Sub-Timelines/";
                for (int i = 0, n = subDirectors.Count; i < n; i++)
                {
                    var directorIndex = i;
                    menu.AddItem(
                        new GUIContent(prefix + DisplayNameHelper.GetDisplayName(subDirectors[directorIndex])), false,
                        f =>
                    {
                        ExecuteInternal(state, subDirectors, directorIndex, clip);
                    },
                        this);
                }
            }

            if (separator != null && separator.after)
            {
                menu.AddSeparator("");
            }
        }
        void ShowSequenceSelector()
        {
            var allDirectors = TimelineUtility.GetDirectorsInSceneUsingAsset(null);

            var formatter = new SequenceMenuNameFormater();
            var namesAndDirectors = new List<ValueTuple<string, PlayableDirector>>();
            foreach (var d in allDirectors)
            {
                if (d.playableAsset is TimelineAsset)
                {
                    var text = formatter.Format(DisplayNameHelper.GetDisplayName(d));
                    namesAndDirectors.Add(new ValueTuple<string, PlayableDirector>(text, d));
                }
            }

            var sequenceMenu = new GenericMenu();
            foreach (var (timelineName, playableDirector) in namesAndDirectors.OrderBy(i => i.Item1))
            {
                var isCurrent = state.masterSequence.director == playableDirector;
                sequenceMenu.AddItem(new GUIContent(time
Пример #6
0
        protected override void AddMenuItem(WindowState state, TimelineClip[] items, List <MenuActionItem> menuItems)
        {
            if (items == null || items.Length != 1)
            {
                return;
            }

            var mode     = TimelineWindow.instance.currentMode.mode;
            var menuItem = new MenuActionItem()
            {
                category       = category,
                entryName      = GetDisplayName(items),
                shortCut       = string.Empty,
                isChecked      = false,
                isActiveInMode = IsActionActiveInMode(this, mode),
                priority       = priority,
                state          = GetDisplayState(state, items),
                callback       = null
            };

            var subDirectors = TimelineUtility.GetSubTimelines(items[0], state.editSequence.director);

            if (subDirectors.Count == 1)
            {
                menuItem.entryName = SingleItemPrefix + DisplayNameHelper.GetDisplayName(subDirectors[0]);
                menuItem.callback  = () => Execute(state, items);
                menuItems.Add(menuItem);
            }
            else
            {
                for (int i = 0; i < subDirectors.Count; i++)
                {
                    var index = i;
                    menuItem.category  = MultiItemPrefix;
                    menuItem.entryName = DisplayNameHelper.GetDisplayName(subDirectors[i]);
                    menuItem.callback  = () => ExecuteInternal(state, subDirectors, index, items[0]);
                    menuItems.Add(menuItem);
                }
            }
        }
Пример #7
0
        void DoSequenceSelectorGUI()
        {
            using (new EditorGUI.DisabledScope(currentMode.headerState.sequenceSelector == TimelineModeGUIState.Disabled))
            {
                if (GUILayout.Button(DirectorStyles.sequenceSelectorIcon, EditorStyles.toolbarPopup, GUILayout.Width(WindowConstants.selectorWidth)))
                {
                    var allDirectors = TimelineUtility.GetDirectorsInSceneUsingAsset(null);

                    GenericMenu sequenceMenu          = new GenericMenu();
                    SequenceMenuNameFormater formater = new SequenceMenuNameFormater();

                    foreach (var d in allDirectors)
                    {
                        if (d.playableAsset is TimelineAsset)
                        {
                            string text      = formater.Format(DisplayNameHelper.GetDisplayName(d));
                            bool   isCurrent = state.masterSequence.director == d;
                            sequenceMenu.AddItem(new GUIContent(text), isCurrent, arg =>
                            {
                                var directorToBindTo = (PlayableDirector)arg;
                                if (directorToBindTo)
                                {
                                    // don't just select the object, it may already be selected.
                                    SetCurrentTimeline(directorToBindTo);
                                }
                            }, d);
                        }
                    }

                    if (allDirectors.Length == 0)
                    {
                        sequenceMenu.AddDisabledItem(DirectorStyles.noTimelinesInScene);
                    }

                    sequenceMenu.ShowAsContext();
                }

                GUILayout.Space(10f);
            }
        }
Пример #8
0
        void DrawBreadcrumbs()
        {
            if (state == null)
            {
                return;
            }
            var count = 0;

            foreach (var sequence in state.GetAllSequences())
            {
                var title = new BreadCrumbTitle
                {
                    name = DisplayNameHelper.GetDisplayName(sequence),
                    mode = GetTitleMode(sequence)
                };
                if (count >= m_BreadCrumbLabels.Count)
                {
                    m_BreadCrumbLabels.Add(title);
                }
                else
                {
                    m_BreadCrumbLabels[count] = title;
                }
                count++;
            }

            if (m_BreadCrumbLabels.Count > count)
            {
                m_BreadCrumbLabels.RemoveRange(count, m_BreadCrumbLabels.Count - count);
            }

            using (new EditorGUI.DisabledScope(currentMode.headerState.breadCrumb == TimelineModeGUIState.Disabled))
            {
                var width = position.width - WindowConstants.playControlsWidth - WindowConstants.cogButtonWidth;
                BreadcrumbDrawer.Draw(width, m_BreadCrumbLabels, NavigateToBreadcrumbIndex);
            }
        }