/// <summary>
 /// Records any changes done on the clip after being called.
 /// </summary>
 /// <param name="clip">The timeline clip being modified.</param>
 /// <param name="undoTitle">The title of the action to appear in the undo history (i.e. visible in the undo menu).</param>
 /// <param name="includePlayableAsset">Set this value to true to also record changes on the attached playable asset.</param>
 public static void RegisterClip(TimelineClip clip, string undoTitle, bool includePlayableAsset = true)
 {
     using (var undo = new UndoScope(undoTitle))
     {
         undo.AddClip(clip, includePlayableAsset);
     }
 }
 /// <summary>
 /// Records all items contained in an action context. Use this method to record all objects
 /// inside the context.
 /// </summary>
 /// <param name="context">The action context to record into the Undo system.</param>
 /// <param name="undoTitle">The title of the action to appear in the undo history (i.e. visible in the undo menu).</param>
 public static void RegisterContext(ActionContext context, string undoTitle)
 {
     using (var undo = new UndoScope(undoTitle))
     {
         undo.Add(context.tracks);
         undo.Add(context.clips, true);
         undo.Add(context.markers);
     }
 }
 /// <summary>
 /// Records any changes done on the Timeline Marker after being called.
 /// </summary>
 /// <param name="marker">The timeline clip being modified.</param>
 /// <param name="undoTitle">The title of the action to appear in the undo history (i.e. visible in the undo menu).</param>
 public static void RegisterMarker(IMarker marker, string undoTitle)
 {
     using (var undo = new UndoScope(undoTitle))
     {
         if (marker is Object o)
         {
             undo.AddObject(o);
         }
         else if (marker != null)
         {
             undo.AddObject(marker.parent);
         }
     }
 }
        /// <summary>
        /// Records any changes done on the timeline after being called, including any changes
        ///  to any clips, tracks and markers that occur on the timeline.
        /// </summary>
        /// <param name="asset">The timeline asset being modified.</param>
        /// <param name="undoTitle">The title of the action to appear in the undo history (i.e. visible in the undo menu).</param>
        public static void RegisterCompleteTimeline(TimelineAsset asset, string undoTitle)
        {
            if (asset == null)
            {
                return;
            }

            using (var undo = new UndoScope(undoTitle))
            {
                undo.AddObject(asset);
                undo.Add(asset.flattenedTracks);
                foreach (var t in asset.flattenedTracks)
                {
                    undo.Add(t.GetClips(), true);
                    undo.Add(t.GetMarkers());
                }
            }
        }
 /// <summary>
 /// Records any changes done on the tracks after being called, including any changes
 ///  to clips on the tracks, but not on markers or PlayableAssets attached to the clips.
 /// </summary>
 /// <param name="tracks">The timeline track being modified.</param>
 /// <param name="undoTitle">The title of the action to appear in the undo history (i.e. visible in the undo menu).</param>
 public static void RegisterTracks(IEnumerable <TrackAsset> tracks, string undoTitle)
 {
     using (var undo = new UndoScope(undoTitle))
         undo.Add(tracks);
 }
 /// <summary>
 /// Records any changes done on the track after being called, including any changes
 ///  to clips on the track, but not on markers or PlayableAssets attached to the clips.
 /// </summary>
 /// <param name="asset">The timeline track being modified.</param>
 /// <param name="undoTitle">The title of the action to appear in the undo history (i.e. visible in the undo menu).</param>
 public static void RegisterTrack(TrackAsset asset, string undoTitle)
 {
     using (var undo = new UndoScope(undoTitle))
         undo.AddObject(asset);
 }
 /// <summary>
 /// Records any changes done on the Timeline Markers after being called.
 /// </summary>
 /// <param name="markers">The timeline clip being modified.</param>
 /// <param name="undoTitle">The title of the action to appear in the undo history (i.e. visible in the undo menu).</param>
 public static void RegisterMarkers(IEnumerable <IMarker> markers, string undoTitle)
 {
     using (var undo = new UndoScope(undoTitle))
         undo.Add(markers);
 }
 /// <summary>
 /// Records any changes done on the clips after being called.
 /// </summary>
 /// <param name="clips">The timeline clips being modified.</param>
 /// <param name="name">The title of the action to appear in the undo history (i.e. visible in the undo menu).</param>
 /// <param name="includePlayableAssets">Set this value to true to also record changes on the attached playable assets.</param>
 public static void RegisterClips(IEnumerable <TimelineClip> clips, string name, bool includePlayableAssets = true)
 {
     using (var undo = new UndoScope(name))
         undo.Add(clips, includePlayableAssets);
 }
 /// <summary>
 /// Records any changes done on the PlayableAsset after being called.
 /// </summary>
 /// <param name="asset">The timeline track being modified.</param>
 /// <param name="undoTitle">The title of the action to appear in the undo history (i.e. visible in the undo menu).</param>
 public static void RegisterPlayableAsset(PlayableAsset asset, string undoTitle)
 {
     using (var undo = new UndoScope(undoTitle))
         undo.AddObject(asset);
 }