12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- using System.Collections.Generic;
- using System.Linq;
- using UnityEditor;
- using UnityEditor.Timeline;
- using UnityEditor.Timeline.Actions;
- using UnityEngine.Timeline;
-
- namespace Timeline.Samples
- {
- // Adds an additional item in context menus that will create a new annotation
- // and sets its description field with the clipboard's contents.
- [MenuEntry("Create Annotation from clipboard contents")]
- public class CreateAnnotationAction : TimelineAction
- {
- // Specifies the action's prerequisites:
- // - Invalid (grayed out in the menu) if no text content is in the clipboard;
- // - NotApplicable (not shown in the menu) if no track is selected;
- // - Valid (shown in the menu) otherwise.
- public override ActionValidity Validate(ActionContext context)
- {
- // get the current text content of the clipboard
- string clipboardTextContent = EditorGUIUtility.systemCopyBuffer;
- if (clipboardTextContent.Length == 0)
- {
- return ActionValidity.Invalid;
- }
-
- // Timeline's current selected items can be fetched with `context`
- IEnumerable<TrackAsset> selectedTracks = context.tracks;
- if (!selectedTracks.Any() || selectedTracks.All(track => track is GroupTrack))
- {
- return ActionValidity.NotApplicable;
- }
-
- return ActionValidity.Valid;
- }
-
- // Creates a new annotation and add it to the selected track.
- public override bool Execute(ActionContext context)
- {
- // to find at which time to create a new marker, we need to consider how this action was invoked.
- // If the action was invoked by a context menu item, then we can use the context's invocation time.
- // If the action was invoked through a keyboard shortcut, we can use Timeline's playhead time instead.
- double time;
- if (context.invocationTime.HasValue)
- {
- time = context.invocationTime.Value;
- }
- else
- {
- time = TimelineEditor.inspectedDirector.time;
- }
-
- string clipboardTextContent = EditorGUIUtility.systemCopyBuffer;
-
- IEnumerable<TrackAsset> selectedTracks = context.tracks;
- foreach (TrackAsset track in selectedTracks)
- {
- if (track is GroupTrack)
- continue;
-
- AnnotationMarker annotation = track.CreateMarker<AnnotationMarker>(time);
- annotation.description = clipboardTextContent;
- annotation.title = "Annotation";
- }
-
- return true;
- }
- }
- }
|