74 lines
1.9 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|