summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView
diff options
context:
space:
mode:
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalListFactory.cs31
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalListFactory.cs.meta11
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverItem.cs180
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverItem.cs.meta11
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverTreeView.cs155
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverTreeView.cs.meta11
6 files changed, 399 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalListFactory.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalListFactory.cs
new file mode 100644
index 0000000..1b59ec6
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalListFactory.cs
@@ -0,0 +1,31 @@
+using System;
+using UnityEditor.IMGUI.Controls;
+using UnityEngine.Timeline;
+
+namespace UnityEditor.Timeline.Signals
+{
+ static class SignalListFactory
+ {
+ public static SignalReceiverTreeView CreateSignalInspectorList(TreeViewState state, SignalReceiverHeader header, SignalReceiver target, SerializedObject so)
+ {
+ return new SignalReceiverTreeView(state, header, target, so);
+ }
+
+ public static SignalReceiverHeader CreateHeader(MultiColumnHeaderState state, int columnHeight)
+ {
+ var header = new SignalReceiverHeader(state) { height = columnHeight };
+ header.ResizeToFit();
+ return header;
+ }
+
+ public static MultiColumnHeaderState CreateHeaderState()
+ {
+ return new MultiColumnHeaderState(SignalReceiverTreeView.GetColumns());
+ }
+
+ public static TreeViewState CreateViewState()
+ {
+ return new TreeViewState();
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalListFactory.cs.meta b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalListFactory.cs.meta
new file mode 100644
index 0000000..fcc2a87
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalListFactory.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 01cd96d8687272f4898cfd1562079dd7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverItem.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverItem.cs
new file mode 100644
index 0000000..a58b2fe
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverItem.cs
@@ -0,0 +1,180 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEditor.IMGUI.Controls;
+using UnityEngine;
+using UnityEngine.Events;
+using UnityEngine.Timeline;
+using Object = UnityEngine.Object;
+
+namespace UnityEditor.Timeline.Signals
+{
+ class SignalReceiverItem : TreeViewItem, ISignalAssetProvider
+ {
+ static readonly SignalEventDrawer k_EvtDrawer = new SignalEventDrawer();
+
+ readonly SerializedProperty m_Asset;
+ readonly SerializedProperty m_Evt;
+ readonly SignalReceiverTreeView m_TreeView;
+
+ int m_CurrentRowIdx;
+ SignalReceiver m_CurrentReceiver;
+
+ internal readonly bool enabled;
+ internal readonly bool readonlySignal;
+
+ internal const string SignalName = "SignalName";
+ internal const string SignalNameReadOnly = "SignalNameReadOnly";
+ internal const string SignalOptions = "SignalOptions";
+
+ public SignalReceiverItem(SerializedProperty signalAsset, SerializedProperty eventListEntry, int id, bool readonlySignal, bool enabled, SignalReceiverTreeView treeView)
+ : base(id, 0)
+ {
+ m_Asset = signalAsset;
+ m_Evt = eventListEntry;
+ this.enabled = enabled;
+ this.readonlySignal = readonlySignal;
+ m_TreeView = treeView;
+ }
+
+ public SignalAsset signalAsset
+ {
+ get { return m_CurrentReceiver.GetSignalAssetAtIndex(m_CurrentRowIdx); }
+ set
+ {
+ Undo.RecordObject(m_CurrentReceiver, Styles.UndoCreateSignalAsset);
+ m_CurrentReceiver.ChangeSignalAtIndex(m_CurrentRowIdx, value);
+ PrefabUtility.RecordPrefabInstancePropertyModifications(m_CurrentReceiver);
+ }
+ }
+
+ public float GetHeight()
+ {
+ return k_EvtDrawer.GetPropertyHeight(m_Evt, GUIContent.none);
+ }
+
+ public void Draw(Rect rect, int colIdx, int rowIdx, float padding, SignalReceiver target)
+ {
+ switch (colIdx)
+ {
+ case 0:
+ DrawSignalNameColumn(rect, padding, target, rowIdx);
+ break;
+ case 1:
+ DrawReactionColumn(rect, rowIdx);
+ break;
+ default:
+ throw new ArgumentOutOfRangeException();
+ }
+ }
+
+ void DrawSignalNameColumn(Rect rect, float padding, SignalReceiver target, int rowIdx)
+ {
+ using (new EditorGUI.DisabledScope(!enabled))
+ {
+ if (!readonlySignal)
+ {
+ m_CurrentRowIdx = rowIdx;
+ m_CurrentReceiver = target;
+
+ rect.x += padding;
+ rect.width -= padding;
+ rect.height = EditorGUIUtility.singleLineHeight;
+ GUI.SetNextControlName(SignalName);
+ SignalUtility.DrawSignalNames(this, rect, GUIContent.none, false);
+ }
+ else
+ {
+ GUI.SetNextControlName(SignalNameReadOnly);
+ var signalAsset = m_Asset.objectReferenceValue;
+ GUI.Label(rect,
+ signalAsset != null
+ ? EditorGUIUtility.TempContent(signalAsset.name)
+ : Styles.EmptySignalList);
+ }
+ }
+ }
+
+ void DrawReactionColumn(Rect rect, int rowIdx)
+ {
+ if (!readonlySignal)
+ {
+ var optionButtonSize = GetOptionButtonSize();
+ rect.width -= optionButtonSize.x;
+
+ var optionButtonRect = new Rect
+ {
+ x = rect.xMax,
+ y = rect.y,
+ width = optionButtonSize.x,
+ height = optionButtonSize.y
+ };
+ DrawOptionsButton(optionButtonRect, rowIdx, m_CurrentReceiver);
+ }
+
+ using (new EditorGUI.DisabledScope(!enabled))
+ {
+ var nameAsString = m_Asset.objectReferenceValue == null ? "Null" : m_Asset.objectReferenceValue.name;
+ using (var change = new EditorGUI.ChangeCheckScope())
+ {
+ EditorGUI.PropertyField(rect, m_Evt, EditorGUIUtility.TempContent(nameAsString));
+ if (change.changed)
+ m_TreeView.dirty = true;
+ }
+ }
+ }
+
+ static Vector2 GetOptionButtonSize()
+ {
+ EditorGUIUtility.SetIconSize(Vector2.zero);
+ return EditorStyles.iconButton.CalcSize(EditorGUI.GUIContents.titleSettingsIcon);
+ }
+
+ void DrawOptionsButton(Rect rect, int rowIdx, SignalReceiver target)
+ {
+ GUI.SetNextControlName(SignalOptions);
+ if (EditorGUI.DropdownButton(rect, EditorGUI.GUIContents.titleSettingsIcon, FocusType.Passive, EditorStyles.iconButton))
+ {
+ var menu = new GenericMenu();
+ menu.AddItem(new GUIContent(Styles.SignalListDuplicateOption), false, () =>
+ {
+ Undo.RecordObject(target, Styles.UndoDuplicateRow);
+ var evtCloner = ScriptableObject.CreateInstance<UnityEventCloner>();
+ evtCloner.evt = target.GetReactionAtIndex(rowIdx);
+ var clone = Object.Instantiate(evtCloner);
+ target.AddEmptyReaction(clone.evt);
+ m_TreeView.dirty = true;
+ PrefabUtility.RecordPrefabInstancePropertyModifications(target);
+
+ });
+ menu.AddItem(new GUIContent(Styles.SignalListDeleteOption), false, () =>
+ {
+ Undo.RecordObject(target, Styles.UndoDeleteRow);
+ target.RemoveAtIndex(rowIdx);
+ m_TreeView.dirty = true;
+ PrefabUtility.RecordPrefabInstancePropertyModifications(target);
+ });
+ menu.ShowAsContext();
+ }
+ }
+
+ IEnumerable<SignalAsset> ISignalAssetProvider.AvailableSignalAssets()
+ {
+ var ret = SignalManager.assets.Except(m_CurrentReceiver.GetRegisteredSignals());
+ return signalAsset == null ? ret : ret.Union(new List<SignalAsset> {signalAsset}).ToList();
+ }
+
+ void ISignalAssetProvider.CreateNewSignalAsset(string path)
+ {
+ var newSignalAsset = SignalManager.CreateSignalAssetInstance(path);
+ Undo.RecordObject(m_CurrentReceiver, Styles.UndoCreateSignalAsset);
+ m_CurrentReceiver.ChangeSignalAtIndex(m_CurrentRowIdx, newSignalAsset);
+ PrefabUtility.RecordPrefabInstancePropertyModifications(m_CurrentReceiver);
+ }
+
+ class UnityEventCloner : ScriptableObject
+ {
+ public UnityEvent evt;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverItem.cs.meta b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverItem.cs.meta
new file mode 100644
index 0000000..826e615
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9bc2b69915879416f8df18971dc98e2e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverTreeView.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverTreeView.cs
new file mode 100644
index 0000000..abacd72
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverTreeView.cs
@@ -0,0 +1,155 @@
+using System;
+using System.Collections.Generic;
+using UnityEditor.IMGUI.Controls;
+using UnityEngine;
+using UnityEngine.Timeline;
+
+namespace UnityEditor.Timeline.Signals
+{
+ class SignalReceiverTreeView : TreeView
+ {
+ public bool dirty { private get; set; }
+
+ SerializedProperty signals { get; set; }
+ SerializedProperty events { get; set; }
+
+ readonly SignalReceiver m_Target;
+
+ const float k_VerticalPadding = 5;
+ const float k_HorizontalPadding = 5;
+
+ public SignalReceiverTreeView(TreeViewState state, MultiColumnHeader multiColumnHeader, SignalReceiver receiver, SerializedObject serializedObject)
+ : base(state, multiColumnHeader)
+ {
+ m_Target = receiver;
+ useScrollView = true;
+ SetSerializedProperties(serializedObject);
+ getNewSelectionOverride = (item, selection, shift) => new List<int>(); // Disable Selection
+ }
+
+ SignalAsset signalAssetContext { get; set; }
+ public bool readonlySignals { get; set; }
+
+ public void SetSignalContext(SignalAsset assetContext = null)
+ {
+ signalAssetContext = assetContext;
+ dirty = true;
+ }
+
+ void SetSerializedProperties(SerializedObject serializedObject)
+ {
+ signals = SignalReceiverUtility.FindSignalsProperty(serializedObject);
+ events = SignalReceiverUtility.FindEventsProperty(serializedObject);
+ Reload();
+ }
+
+ public void Draw()
+ {
+ var rect = EditorGUILayout.GetControlRect(true, GetTotalHeight());
+ OnGUI(rect);
+ }
+
+ public void RefreshIfDirty()
+ {
+ var signalsListSizeHasChanged = signals.arraySize != GetRows().Count;
+ if (dirty || signalsListSizeHasChanged)
+ Reload();
+ dirty = false;
+ }
+
+ public static MultiColumnHeaderState.Column[] GetColumns()
+ {
+ return new[]
+ {
+ new MultiColumnHeaderState.Column
+ {
+ headerContent = EditorGUIUtility.TrTextContent("Signal"),
+ contextMenuText = "",
+ headerTextAlignment = TextAlignment.Center,
+ width = 50, minWidth = 50,
+ autoResize = true,
+ allowToggleVisibility = false,
+ canSort = false
+ },
+ new MultiColumnHeaderState.Column
+ {
+ headerContent = EditorGUIUtility.TrTextContent("Reaction"),
+ contextMenuText = "",
+ headerTextAlignment = TextAlignment.Center,
+ width = 120, minWidth = 120,
+ autoResize = true,
+ allowToggleVisibility = false,
+ canSort = false
+ }
+ };
+ }
+
+ protected override TreeViewItem BuildRoot()
+ {
+ var root = new TreeViewItem(-1, -1) { children = new List<TreeViewItem>() };
+
+ var matchingId = signalAssetContext != null && readonlySignals ? FindIdForSignal(signals, signalAssetContext) : -1;
+ if (matchingId >= 0)
+ AddItem(root, matchingId);
+
+ for (var i = 0; i < signals.arraySize; ++i)
+ {
+ if (i == matchingId) continue;
+ AddItem(root, i, !readonlySignals);
+ }
+
+ return root;
+ }
+
+ protected override void RowGUI(RowGUIArgs args)
+ {
+ var item = (SignalReceiverItem)args.item;
+ for (var i = 0; i < args.GetNumVisibleColumns(); ++i)
+ {
+ var rect = args.GetCellRect(i);
+ rect.y += k_VerticalPadding;
+ item.Draw(rect, args.GetColumn(i), args.row, k_HorizontalPadding, m_Target);
+ }
+ }
+
+ protected override float GetCustomRowHeight(int row, TreeViewItem treeItem)
+ {
+ var item = treeItem as SignalReceiverItem;
+ return item.GetHeight() + k_VerticalPadding;
+ }
+
+ void AddItem(TreeViewItem root, int id, bool enabled = true)
+ {
+ var signal = signals.GetArrayElementAtIndex(id);
+ var evt = events.GetArrayElementAtIndex(id);
+ root.children.Add(new SignalReceiverItem(signal, evt, id, readonlySignals, enabled, this));
+ }
+
+ float GetTotalHeight()
+ {
+ var height = 0.0f;
+ foreach (var item in GetRows())
+ {
+ var signalListItem = item as SignalReceiverItem;
+ height += signalListItem.GetHeight() + k_VerticalPadding;
+ }
+
+ var scrollbarPadding = showingHorizontalScrollBar ? GUI.skin.horizontalScrollbar.fixedHeight : k_VerticalPadding;
+ return height + multiColumnHeader.height + scrollbarPadding;
+ }
+
+ static int FindIdForSignal(SerializedProperty signals, SignalAsset signalToFind)
+ {
+ for (var i = 0; i < signals.arraySize; ++i)
+ {
+ //signal in the receiver that matches the current signal asset will be displayed first
+ var serializedProperty = signals.GetArrayElementAtIndex(i);
+ var signalReferenceValue = serializedProperty.objectReferenceValue;
+ var signalToFindRefValue = signalToFind;
+ if (signalReferenceValue != null && signalReferenceValue == signalToFindRefValue)
+ return i;
+ }
+ return -1;
+ }
+ }
+}
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverTreeView.cs.meta b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverTreeView.cs.meta
new file mode 100644
index 0000000..7c121bf
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverTreeView.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 698b660e9477f4f16abad03ec00ce38c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: