Files
FlaxEngine/Source/Editor/GUI/Timeline/Undo/EditTrackAction.cs
2023-01-10 15:29:37 +01:00

74 lines
1.9 KiB
C#

// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
using System.IO;
using FlaxEngine;
namespace FlaxEditor.GUI.Timeline.Undo
{
class EditTrackAction : IUndoAction
{
private Timeline _timeline;
private string _name;
private byte[] _beforeData;
private byte[] _afterData;
public EditTrackAction(Timeline timeline, Track track, byte[] beforeData, byte[] afterData)
{
_timeline = timeline;
_name = track.Name;
_beforeData = beforeData;
_afterData = afterData;
}
public static byte[] CaptureData(Track track)
{
using (var memory = new MemoryStream(512))
using (var stream = new BinaryWriter(memory))
{
stream.Write(track.Color);
stream.Write((byte)track.Flags);
track.Archetype.Save(track, stream);
return memory.ToArray();
}
}
private void Set(byte[] data)
{
var track = _timeline.FindTrack(_name);
using (var memory = new MemoryStream(data))
using (var stream = new BinaryReader(memory))
{
track.Color = stream.ReadColor();
track.Flags = (TrackFlags)stream.ReadByte();
track.Archetype.Load(Timeline.FormatVersion, track, stream);
}
if (_timeline != null)
{
_timeline.ArrangeTracks();
_timeline.MarkAsEdited();
}
track.OnUndo();
}
public string ActionString => "Edit track";
public void Do()
{
Set(_afterData);
}
public void Undo()
{
Set(_beforeData);
}
public void Dispose()
{
_timeline = null;
_name = null;
_beforeData = null;
_afterData = null;
}
}
}