diff options
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalReceiverInspector.cs')
| -rw-r--r-- | Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalReceiverInspector.cs | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalReceiverInspector.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalReceiverInspector.cs new file mode 100644 index 0000000..52211e1 --- /dev/null +++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalReceiverInspector.cs @@ -0,0 +1,116 @@ +using UnityEngine; +using UnityObject = UnityEngine.Object; +using UnityEditor.IMGUI.Controls; +using UnityEngine.Events; +using UnityEngine.Timeline; + +namespace UnityEditor.Timeline.Signals +{ + [CustomEditor(typeof(SignalReceiver))] + class SignalReceiverInspector : Editor + { + SignalReceiver m_Target; + + [SerializeField] TreeViewState m_TreeState; + [SerializeField] MultiColumnHeaderState m_MultiColumnHeaderState; + internal SignalReceiverTreeView m_TreeView; + + SignalEmitter signalEmitterContext + { + get { return m_Context as SignalEmitter;} + } + + void OnEnable() + { + m_Target = target as SignalReceiver; + InitTreeView(serializedObject); + + Undo.undoRedoPerformed += OnUndoRedo; + } + + void OnDisable() + { + Undo.undoRedoPerformed -= OnUndoRedo; + } + + void OnUndoRedo() + { + m_TreeView.dirty = true; + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + using (var changeCheck = new EditorGUI.ChangeCheckScope()) + { + m_TreeView.RefreshIfDirty(); + DrawEmitterControls(); // Draws buttons coming from the Context (SignalEmitter) + + EditorGUILayout.Space(); + m_TreeView.Draw(); + + if (signalEmitterContext == null) + DrawAddRemoveButtons(); + + if (changeCheck.changed) + { + serializedObject.ApplyModifiedProperties(); + m_TreeView.dirty = true; + } + } + } + + void DrawEmitterControls() + { + var context = signalEmitterContext; + if (context != null) + { + var currentSignal = context.asset; + if (currentSignal != null && !m_Target.IsSignalAssetHandled(currentSignal)) + { + EditorGUILayout.Separator(); + var message = string.Format(Styles.NoReaction, currentSignal.name); + SignalUtility.DrawCenteredMessage(message); + if (SignalUtility.DrawCenteredButton(Styles.AddReactionButton)) + m_Target.AddNewReaction(currentSignal); // Add reaction on the first + EditorGUILayout.Separator(); + } + } + } + + internal void SetAssetContext(SignalAsset asset) + { + m_TreeView.SetSignalContext(asset); + } + + void DrawAddRemoveButtons() + { + using (new GUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + if (GUILayout.Button(Styles.AddReactionButton)) + { + Undo.RecordObject(m_Target, Styles.UndoAddReaction); + m_Target.AddEmptyReaction(new UnityEvent()); + PrefabUtility.RecordPrefabInstancePropertyModifications(m_Target); + } + GUILayout.Space(18.0f); + } + } + + void InitTreeView(SerializedObject so) + { + m_TreeState = SignalListFactory.CreateViewState(); + m_MultiColumnHeaderState = SignalListFactory.CreateHeaderState(); + var header = SignalListFactory.CreateHeader(m_MultiColumnHeaderState, SignalReceiverUtility.headerHeight); + + var context = signalEmitterContext; + m_TreeView = SignalListFactory.CreateSignalInspectorList(m_TreeState, header, m_Target, so); + m_TreeView.readonlySignals = context != null; + + if (context != null) + m_TreeView.SetSignalContext(context.asset); + } + } +} |
