123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- //#define PERF_PROFILE
- using System.Linq;
- using UnityEditorInternal;
- using UnityEngine;
- using UnityEngine.Timeline;
- namespace UnityEditor.Timeline
- {
- [CustomEditor(typeof(GroupTrack)), CanEditMultipleObjects]
- class GroupTrackInspector : TrackAssetInspector
- {
- static class Styles
- {
- public static readonly GUIContent GroupSubTrackHeaderName = EditorGUIUtility.TrTextContent("Name");
- public static readonly GUIContent GroupSubTrackHeaderType = EditorGUIUtility.TrTextContent("Type");
- public static readonly GUIContent GroupSubTrackHeaderDuration = EditorGUIUtility.TrTextContent("Duration");
- public static readonly GUIContent GroupSubTrackHeaderFrames = EditorGUIUtility.TrTextContent("Frames");
- public static readonly GUIContent GroupInvalidTrack = EditorGUIUtility.TrTextContent("Invalid Track");
- }
- ReorderableList m_SubTracks;
- public override void OnInspectorGUI()
- {
- foreach (var group in targets)
- {
- var groupTrack = group as GroupTrack;
- if (groupTrack == null) return;
- var childrenTracks = groupTrack.GetChildTracks();
- var groupTrackName = groupTrack.name;
- GUILayout.Label(childrenTracks.Count() > 0
- ? groupTrackName + " (" + childrenTracks.Count() + ")"
- : groupTrackName, EditorStyles.boldLabel);
- GUILayout.Space(3.0f);
- // the subTrackObjects is used because it's the internal list
- m_SubTracks.list = groupTrack.subTracksObjects;
- m_SubTracks.DoLayoutList();
- m_SubTracks.index = -1;
- }
- }
- public override void OnEnable()
- {
- base.OnEnable();
- m_SubTracks = new ReorderableList(new string[] {}, typeof(string), false, true, false, false)
- {
- drawElementCallback = OnDrawSubTrack,
- drawHeaderCallback = OnDrawHeader,
- showDefaultBackground = true,
- index = 0,
- elementHeight = 20
- };
- }
- static void OnDrawHeader(Rect rect)
- {
- int sections = 4;
- float sectionWidth = rect.width / sections;
- rect.width = sectionWidth;
- GUI.Label(rect, Styles.GroupSubTrackHeaderName, EditorStyles.label);
- rect.x += sectionWidth;
- GUI.Label(rect, Styles.GroupSubTrackHeaderType, EditorStyles.label);
- rect.x += sectionWidth;
- GUI.Label(rect, Styles.GroupSubTrackHeaderDuration, EditorStyles.label);
- rect.x += sectionWidth;
- GUI.Label(rect, Styles.GroupSubTrackHeaderFrames, EditorStyles.label);
- }
- void OnDrawSubTrack(Rect rect, int index, bool selected, bool focused)
- {
- int sections = 4;
- float sectionWidth = rect.width / sections;
- var childrenTrack = m_SubTracks.list[index] as TrackAsset;
- if (childrenTrack == null)
- {
- object o = m_SubTracks.list[index];
- rect.width = sectionWidth;
- if (o != null) // track is loaded, but has broken script
- {
- string name = ((UnityEngine.Object)m_SubTracks.list[index]).name;
- GUI.Label(rect, name, EditorStyles.label);
- }
- rect.x += sectionWidth;
- using (new GUIColorOverride(DirectorStyles.kClipErrorColor))
- GUI.Label(rect, Styles.GroupInvalidTrack.text, EditorStyles.label);
- return;
- }
- rect.width = sectionWidth;
- GUI.Label(rect, childrenTrack.name, EditorStyles.label);
- rect.x += sectionWidth;
- GUI.Label(rect, childrenTrack.GetType().Name, EditorStyles.label);
- rect.x += sectionWidth;
- GUI.Label(rect, childrenTrack.duration.ToString(), EditorStyles.label);
- rect.x += sectionWidth;
- double exactFrames = TimeUtility.ToExactFrames(childrenTrack.duration, TimelineWindow.instance.state.referenceSequence.frameRate);
- GUI.Label(rect, exactFrames.ToString(), EditorStyles.label);
- }
- }
- }
|