A game about forced loneliness, made by TACStudios
at master 180 lines 5.8 kB view raw
1using System.Collections.Generic; 2using System.Linq; 3using UnityEditor.IMGUI.Controls; 4using UnityEngine; 5using UnityEngine.Timeline; 6 7namespace UnityEditor.Timeline 8{ 9 class TimelineTreeViewGUI 10 { 11 readonly TimelineAsset m_Timeline; 12 readonly TreeViewController m_TreeView; 13 readonly TimelineTreeView m_TimelineTreeView; 14 readonly TimelineWindow m_Window; 15 readonly TimelineDataSource m_DataSource; 16 17 TreeViewItem root 18 { 19 get { return m_DataSource.root; } 20 } 21 22 TimelineTrackBaseGUI[] visibleTrackGuis 23 { 24 get 25 { 26 int firstRow; 27 int lastRow; 28 var visibleRows = new List<TimelineTrackBaseGUI>(); 29 m_TreeView.gui.GetFirstAndLastRowVisible(out firstRow, out lastRow); 30 31 for (int r = firstRow; r <= lastRow; r++) 32 { 33 var track = m_TreeView.data.GetItem(r) as TimelineTrackBaseGUI; 34 if (track != null && track != root) 35 { 36 AddVisibleTrackRecursive(ref visibleRows, track); 37 } 38 } 39 return visibleRows.ToArray(); 40 } 41 } 42 43 public TrackAsset[] visibleTracks 44 { 45 get { return visibleTrackGuis.Select(x => x.track).ToArray(); } 46 } 47 48 public List<TimelineClipGUI> allClipGuis 49 { 50 get 51 { 52 TimelineDataSource dataSource = m_TreeView.data as TimelineDataSource; 53 if (dataSource != null && dataSource.allTrackGuis != null) 54 return dataSource.allTrackGuis.OfType<TimelineTrackGUI>().SelectMany(x => x.clips).ToList(); 55 56 return null; 57 } 58 } 59 60 public List<TimelineTrackBaseGUI> allTrackGuis 61 { 62 get 63 { 64 var dataSource = m_TreeView.data as TimelineDataSource; 65 if (dataSource != null) 66 return dataSource.allTrackGuis; 67 return null; 68 } 69 } 70 71 public Vector2 contentSize 72 { 73 get { return m_TreeView.GetContentSize(); } 74 } 75 76 public Vector2 scrollPosition 77 { 78 get { return m_TreeView.state.scrollPos; } 79 set 80 { 81 Rect r = m_TreeView.GetTotalRect(); 82 Vector2 visibleContent = m_TreeView.GetContentSize(); 83 m_TreeView.state.scrollPos = new Vector2(value.x, Mathf.Clamp(value.y, 0, Mathf.Max(0, visibleContent.y - r.height))); 84 } 85 } 86 87 public bool showingVerticalScrollBar 88 { 89 get { return m_TreeView.showingVerticalScrollBar; } 90 } 91 92 public void FrameItem(TreeViewItem item) 93 { 94 m_TreeView.Frame(item.id, true, false, true); 95 } 96 97 public TimelineDragging timelineDragging { get { return m_TreeView.dragging as TimelineDragging; } } 98 99 public TimelineTreeViewGUI(TimelineWindow sequencerWindow, TimelineAsset timeline, Rect rect) 100 { 101 m_Timeline = timeline; 102 m_Window = sequencerWindow; 103 104 var treeviewState = new TreeViewState(); 105 treeviewState.scrollPos = new Vector2(treeviewState.scrollPos.x, TimelineWindowViewPrefs.GetOrCreateViewModel(m_Timeline).verticalScroll); 106 107 m_TreeView = new TreeViewController(sequencerWindow, treeviewState); 108 m_TreeView.horizontalScrollbarStyle = GUIStyle.none; 109 m_TreeView.scrollViewStyle = GUI.skin.scrollView; 110 111 m_TimelineTreeView = new TimelineTreeView(sequencerWindow, m_TreeView); 112 var dragging = new TimelineDragging(m_TreeView, m_Window, m_Timeline); 113 m_DataSource = new TimelineDataSource(this, m_TreeView, sequencerWindow); 114 115 m_DataSource.onVisibleRowsChanged += m_TimelineTreeView.CalculateRowRects; 116 m_TreeView.Init(rect, m_DataSource, m_TimelineTreeView, dragging); 117 118 m_DataSource.ExpandItems(m_DataSource.root); 119 } 120 121 public ITreeViewGUI gui 122 { 123 get { return m_TimelineTreeView; } 124 } 125 public ITreeViewDataSource data 126 { 127 get { return m_TreeView == null ? null : m_TreeView.data; } 128 } 129 130 public TimelineWindow TimelineWindow 131 { 132 get { return m_Window; } 133 } 134 135 public void CalculateRowRects() 136 { 137 m_TimelineTreeView.CalculateRowRects(); 138 } 139 140 public void Reload() 141 { 142 AnimationClipCurveCache.Instance.ClearCachedProxyClips(); 143 144 m_TreeView.ReloadData(); 145 m_DataSource.ExpandItems(m_DataSource.root); 146 m_TimelineTreeView.CalculateRowRects(); 147 } 148 149 public void OnGUI(Rect rect) 150 { 151 int keyboardControl = GUIUtility.GetControlID(FocusType.Passive, rect); 152 m_TreeView.OnGUI(rect, keyboardControl); 153 TimelineWindowViewPrefs.GetOrCreateViewModel(m_Timeline).verticalScroll = m_TreeView.state.scrollPos.y; 154 } 155 156 public Rect GetRowRect(int row) 157 { 158 return m_TimelineTreeView.GetRowRect(row); 159 } 160 161 static void AddVisibleTrackRecursive(ref List<TimelineTrackBaseGUI> list, TimelineTrackBaseGUI track) 162 { 163 if (track == null) 164 return; 165 166 list.Add(track); 167 168 if (!track.isExpanded) 169 return; 170 171 if (track.children != null) 172 { 173 foreach (var c in track.children) 174 { 175 AddVisibleTrackRecursive(ref list, c as TimelineTrackBaseGUI); 176 } 177 } 178 } 179 } 180}