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); } }
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); } } }
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
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); } } }
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); } }
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); } }