summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverTreeView.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverTreeView.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverTreeView.cs155
1 files changed, 155 insertions, 0 deletions
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;
+ }
+ }
+}