summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/BindingSelector.cs
diff options
context:
space:
mode:
authorAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
committerAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
commitc55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch)
treeee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/BindingSelector.cs
downloadProject-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.gz
Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.bz2
Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.zip
Inital commit
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/BindingSelector.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/BindingSelector.cs224
1 files changed, 224 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/BindingSelector.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/BindingSelector.cs
new file mode 100644
index 0000000..7f3cdde
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/BindingSelector.cs
@@ -0,0 +1,224 @@
+using System.Collections.Generic;
+using System.Linq;
+using UnityEditor.IMGUI.Controls;
+using UnityEditor.Timeline;
+using UnityEditorInternal;
+using UnityEngine;
+using UnityEngine.Timeline;
+
+namespace UnityEditor
+{
+ class BindingSelector
+ {
+ TreeViewController m_TreeView;
+ public TreeViewController treeViewController
+ {
+ get { return m_TreeView; }
+ }
+
+ TreeViewState m_TrackGlobalTreeViewState;
+ TreeViewState m_TreeViewState;
+ BindingTreeViewDataSource m_TreeViewDataSource;
+ CurveDataSource m_CurveDataSource;
+ TimelineWindow m_Window;
+ CurveEditor m_CurveEditor;
+ ReorderableList m_DopeLines;
+ string[] m_StringList = {};
+ int[] m_Selection;
+ bool m_PartOfSelection;
+ public BindingSelector(EditorWindow window, CurveEditor curveEditor, TreeViewState trackGlobalTreeViewState)
+ {
+ m_Window = window as TimelineWindow;
+ m_CurveEditor = curveEditor;
+ m_TrackGlobalTreeViewState = trackGlobalTreeViewState;
+
+ m_DopeLines = new ReorderableList(m_StringList, typeof(string), false, false, false, false);
+ m_DopeLines.drawElementBackgroundCallback = null;
+ m_DopeLines.showDefaultBackground = false;
+ m_DopeLines.index = 0;
+ m_DopeLines.headerHeight = 0;
+ m_DopeLines.elementHeight = 20;
+ m_DopeLines.draggable = false;
+ }
+
+ public bool selectable { get { return true; } }
+
+ public object selectableObject
+ {
+ get { return this; }
+ }
+
+ public bool selected
+ {
+ get { return m_PartOfSelection; }
+ set
+ {
+ m_PartOfSelection = value;
+
+ if (!m_PartOfSelection)
+ {
+ m_DopeLines.index = -1;
+ }
+ }
+ }
+
+ public virtual void Delete(WindowState state)
+ {
+ // we dont support deleting the summary
+ if (m_DopeLines.index < 1)
+ return;
+
+ if (m_CurveDataSource == null)
+ return;
+
+ var clip = m_CurveDataSource.animationClip;
+ if (clip == null)
+ return;
+
+ int curveIndexToDelete = m_DopeLines.index - 1;
+ var bindings = AnimationUtility.GetCurveBindings(clip);
+
+ if (curveIndexToDelete >= bindings.Length)
+ return;
+
+ TimelineUndo.PushUndo(clip, "Delete Curve");
+ AnimationUtility.SetEditorCurve(clip, bindings[m_DopeLines.index - 1], null);
+ state.rebuildGraph = true;
+ }
+
+ public void OnGUI(Rect targetRect)
+ {
+ if (m_TreeView == null)
+ return;
+
+ m_TreeView.OnEvent();
+ m_TreeView.OnGUI(targetRect, GUIUtility.GetControlID(FocusType.Passive));
+ }
+
+ public void InitIfNeeded(Rect rect, CurveDataSource dataSource, bool isNewSelection)
+ {
+ if (Event.current.type != EventType.Layout)
+ return;
+
+ m_CurveDataSource = dataSource;
+ var clip = dataSource.animationClip;
+
+ List<EditorCurveBinding> allBindings = new List<EditorCurveBinding>();
+ allBindings.Add(new EditorCurveBinding { propertyName = "Summary" });
+ if (clip != null)
+ allBindings.AddRange(AnimationUtility.GetCurveBindings(clip));
+
+ m_DopeLines.list = allBindings.ToArray();
+
+ if (m_TreeViewState != null)
+ {
+ if (isNewSelection)
+ RefreshAll();
+
+ return;
+ }
+
+ m_TreeViewState = m_TrackGlobalTreeViewState != null ? m_TrackGlobalTreeViewState : new TreeViewState();
+
+ m_TreeView = new TreeViewController(m_Window, m_TreeViewState)
+ {
+ useExpansionAnimation = false,
+ deselectOnUnhandledMouseDown = true
+ };
+
+ m_TreeView.selectionChangedCallback += OnItemSelectionChanged;
+
+ m_TreeViewDataSource = new BindingTreeViewDataSource(m_TreeView, clip, m_CurveDataSource);
+
+ m_TreeView.Init(rect, m_TreeViewDataSource, new BindingTreeViewGUI(m_TreeView), null);
+
+ m_TreeViewDataSource.UpdateData();
+
+ RefreshSelection();
+ }
+
+ void OnItemSelectionChanged(int[] selection)
+ {
+ RefreshSelection(selection);
+ }
+
+ void RefreshAll()
+ {
+ RefreshTree();
+ RefreshSelection();
+ }
+
+ void RefreshSelection()
+ {
+ RefreshSelection(m_TreeViewState.selectedIDs != null ? m_TreeViewState.selectedIDs.ToArray() : null);
+ }
+
+ void RefreshSelection(int[] selection)
+ {
+ if (selection == null || selection.Length == 0)
+ {
+ // select all.
+ if (m_TreeViewDataSource.GetRows().Count > 0)
+ {
+ m_Selection = m_TreeViewDataSource.GetRows().Select(r => r.id).ToArray();
+ }
+ }
+ else
+ {
+ m_Selection = selection;
+ }
+
+ RefreshCurves();
+ }
+
+ public void RefreshCurves()
+ {
+ if (m_CurveDataSource == null || m_Selection == null)
+ return;
+
+ var bindings = new List<EditorCurveBinding>();
+ foreach (int s in m_Selection)
+ {
+ var item = (CurveTreeViewNode)m_TreeView.FindItem(s);
+ if (item != null && item.bindings != null)
+ bindings.AddRange(item.bindings);
+ }
+
+ var wrappers = m_CurveDataSource.GenerateWrappers(bindings);
+ m_CurveEditor.animationCurves = wrappers.ToArray();
+ }
+
+ public void RefreshTree()
+ {
+ if (m_TreeViewDataSource == null)
+ return;
+
+ if (m_Selection == null)
+ m_Selection = new int[0];
+
+ // get the names of the previous items
+ var selected = m_Selection.Select(x => m_TreeViewDataSource.FindItem(x)).Where(t => t != null).Select(c => c.displayName).ToArray();
+
+ // update the source
+ m_TreeViewDataSource.UpdateData();
+
+ // find the same items
+ var reselected = m_TreeViewDataSource.GetRows().Where(x => selected.Contains(x.displayName)).Select(x => x.id).ToArray();
+ if (!reselected.Any())
+ {
+ if (m_TreeViewDataSource.GetRows().Count > 0)
+ {
+ reselected = new[] { m_TreeViewDataSource.GetItem(0).id };
+ }
+ }
+
+ // update the selection
+ OnItemSelectionChanged(reselected);
+ }
+
+ internal virtual bool IsRenamingNodeAllowed(TreeViewItem node)
+ {
+ return false;
+ }
+ }
+}