From c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sun, 19 Apr 2020 17:19:32 -0400 Subject: Inital commit --- .../Editor/TimelineSelection.cs | 331 +++++++++++++++++++++ 1 file changed, 331 insertions(+) create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/TimelineSelection.cs (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/TimelineSelection.cs') diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/TimelineSelection.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/TimelineSelection.cs new file mode 100644 index 0000000..2efe58d --- /dev/null +++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/TimelineSelection.cs @@ -0,0 +1,331 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.Timeline; + +namespace UnityEditor.Timeline +{ + static class SelectionManager + { + static IClipCurveEditorOwner currentInlineEditorCurve; + + public static void AddObject(Object obj) + { + if (obj == null) + return; + + currentInlineEditorCurve = null; + if (Selection.Contains(obj)) + return; + + Selection.Add(obj); + } + + public static void Add(TrackAsset obj) + { + // this can indicate a deleted track (Unity 'null') + if (obj == null) + return; + + currentInlineEditorCurve = null; + if (!Selection.Contains(obj)) + { + WindowState state = null; + if (TimelineWindow.instance != null) + state = TimelineWindow.instance.state; + + if (!Selection.instanceIDs.Any() && state != null && state.editSequence.director != null) + Selection.SetActiveObjectWithContext(obj, TimelineWindow.instance.state.editSequence.director); + else + Selection.Add(obj); + } + } + + public static void Add(TimelineClip item) + { + AddObject(EditorClipFactory.GetEditorClip(item)); + } + + public static void Add(IMarker marker) + { + var markerAsObject = marker as Object; + if (markerAsObject != null) + { + if (!Selection.Contains(markerAsObject)) + { + currentInlineEditorCurve = null; + WindowState state = null; + if (TimelineWindow.instance != null) + state = TimelineWindow.instance.state; + + if (!Selection.instanceIDs.Any() && state != null && state.editSequence.director != null) + Selection.SetActiveObjectWithContext(markerAsObject, TimelineWindow.instance.state.editSequence.director); + else + Selection.Add(markerAsObject); + } + } + } + + public static void Add(ITimelineItem item) + { + var clipItem = item as ClipItem; + if (clipItem != null) + { + Add(clipItem.clip); + } + else + { + var markerItem = item as MarkerItem; + if (markerItem != null) + { + Add(markerItem.marker); + } + } + } + + public static void SelectOnly(TrackAsset track) + { + RemoveTimelineSelection(); + Add(track); + } + + public static void SelectOnly(TimelineClip clip) + { + RemoveTimelineSelection(); + Add(clip); + } + + public static void SelectOnly(IMarker item) + { + RemoveTimelineSelection(); + Add(item); + } + + public static void SelectOnly(ITimelineItem item) + { + var clipItem = item as ClipItem; + if (clipItem != null) + { + SelectOnly(clipItem.clip); + } + else + { + var markerItem = item as MarkerItem; + if (markerItem != null) + { + SelectOnly(markerItem.marker); + } + } + } + + public static void SelectInlineCurveEditor(IClipCurveEditorOwner selection) + { + // case 1030681 - selecting an inline curve should remove clips and + // tracks to prevent shortcuts being forwarded incorrectly + if (selection != null && selection != currentInlineEditorCurve) + { + var track = selection.owner; + var selectedTracks = SelectedTracks().ToArray(); + var selectedClips = SelectedClips().ToArray(); + + foreach (var t in selectedTracks) + { + if (t != track) + Remove(t); + } + + foreach (var c in selectedClips) + { + if (c.parentTrack != track) + Remove(c); + } + } + + + currentInlineEditorCurve = selection; + } + + public static IClipCurveEditorOwner GetCurrentInlineEditorCurve() + { + return currentInlineEditorCurve; + } + + public static bool IsCurveEditorFocused(IClipCurveEditorOwner selection) + { + return selection == currentInlineEditorCurve; + } + + public static bool Contains(TrackAsset item) + { + if (item == null) + return false; + + return Selection.Contains(item); + } + + public static bool Contains(TimelineClip item) + { + if (item == null) + return false; + return Selection.Contains(EditorClipFactory.GetEditorClip(item)); + } + + public static bool Contains(Object obj) + { + return Selection.Contains(obj); + } + + public static bool Contains(IMarker marker) + { + var markerAsObject = marker as Object; + return Selection.Contains(markerAsObject); + } + + public static bool Contains(ITimelineItem item) + { + var clipItem = item as ClipItem; + if (clipItem != null) + { + return Contains(clipItem.clip); + } + + var markerItem = item as MarkerItem; + return markerItem != null && Contains(markerItem.marker); + } + + public static void Clear() + { + currentInlineEditorCurve = null; + Selection.activeObject = null; + } + + public static void UnSelectTracks() + { + var newSelection = Selection.objects.Where(x => !(x is TrackAsset)); + Selection.objects = newSelection.ToArray(); + } + + public static void Remove(TimelineClip item) + { + Remove(EditorClipFactory.GetEditorClip(item)); + } + + public static void Remove(IMarker marker) + { + var o = marker as Object; + if (o != null) + { + Remove(o); + } + } + + static void Remove(Object item) + { + Selection.Remove(item); + } + + public static void Remove(TrackAsset item) + { + Selection.Remove(item); + } + + public static void Remove(ITimelineItem item) + { + var clipItem = item as ClipItem; + if (clipItem != null) + { + Remove(clipItem.clip); + } + else + { + var markerItem = item as MarkerItem; + if (markerItem != null) + { + Remove(markerItem.marker); + } + } + } + + public static void RemoveTimelineSelection() + { + Selection.objects = Selection.objects.Where(s => !IsTimelineType(s)).ToArray(); + } + + public static void RemoveAllClips() + { + Selection.objects = Selection.objects.Where(s => !(s is EditorClip)).ToArray(); + } + + public static int Count() + { + return Selection.objects.Count(IsTimelineType); + } + + public static IEnumerable SelectedClipGUI() + { + foreach (var clip in SelectedClips()) + { + var gui = ItemToItemGui.GetGuiForClip(clip); + if (gui != null) + yield return gui; + } + } + + public static IEnumerable SelectedClips() + { + return Selection.objects.OfType().Select(x => x.clip); + } + + public static IEnumerable SelectedMarkers() + { + return Selection.objects.OfType(); + } + + public static IEnumerable SelectedTracks() + { + return Selection.objects.OfType(); + } + + public static IEnumerable SelectedItemOfType() + { + if (typeof(T) == typeof(TimelineClip)) + return SelectedClips().Cast(); + if (typeof(T).IsAssignableFrom(typeof(IMarker))) + return SelectedMarkers().Cast(); + return Enumerable.Empty(); + } + + public static IEnumerable SelectedTrackGUI() + { + var tracks = SelectedTracks(); + return TimelineWindow.instance.allTracks.Where(x => tracks.Contains(x.track)); + } + + static bool IsTimelineType(Object o) + { + return o is TrackAsset || o is EditorClip || o is IMarker; + } + + public static IEnumerable SelectedItems() + { + var list = new List(); + foreach (var obj in Selection.objects) + { + var editorClip = obj as EditorClip; + if (editorClip != null) + { + list.Add(new ClipItem(editorClip.clip)); + continue; + } + + var marker = obj as IMarker; + if (marker != null) + { + list.Add(new MarkerItem(marker)); + } + } + + return list; + } + } +} -- cgit v1.2.3