Refactor Timeline UI to use track flags

This commit is contained in:
Wojtek Figat
2021-12-07 23:27:58 +01:00
parent 2ef0aabfbc
commit bb674b43f9
10 changed files with 81 additions and 80 deletions

View File

@@ -85,8 +85,9 @@ namespace FlaxEditor.GUI.Timeline
var options = new TrackCreateOptions
{
Archetype = TrackArchetypes[j],
Mute = mute,
};
if (mute)
options.Flags |= TrackFlags.Mute;
track = TrackArchetypes[j].Create(options);
break;
}
@@ -119,10 +120,8 @@ namespace FlaxEditor.GUI.Timeline
for (int i = 0; i < tracksCount; i++)
{
var type = stream.ReadByte();
var flag = stream.ReadByte();
var flag = (TrackFlags)stream.ReadByte();
Track track = null;
var mute = (flag & 1) == 1;
var loop = (flag & 2) == 2;
for (int j = 0; j < TrackArchetypes.Count; j++)
{
if (TrackArchetypes[j].TypeId == type)
@@ -130,8 +129,7 @@ namespace FlaxEditor.GUI.Timeline
var options = new TrackCreateOptions
{
Archetype = TrackArchetypes[j],
Mute = mute,
Loop = loop,
Flags = flag,
};
track = TrackArchetypes[j].Create(options);
break;
@@ -209,12 +207,7 @@ namespace FlaxEditor.GUI.Timeline
var track = Tracks[i];
stream.Write((byte)track.Archetype.TypeId);
byte flag = 0;
if (track.Mute)
flag |= 1;
if (track.Loop)
flag |= 2;
stream.Write(flag);
stream.Write((byte)track.Flags);
stream.Write(_tracks.IndexOf(track.ParentTrack));
stream.Write(track.SubTracks.Count);
Utilities.Utils.WriteStr(stream, track.Name, -13);

View File

@@ -1240,7 +1240,6 @@ namespace FlaxEditor.GUI.Timeline
var options = new TrackCreateOptions
{
Archetype = archetype,
Mute = false,
};
return archetype.Create(options);
}
@@ -1577,8 +1576,7 @@ namespace FlaxEditor.GUI.Timeline
var options = new TrackCreateOptions
{
Archetype = track.Archetype,
Loop = track.Loop,
Mute = track.Mute,
Flags = track.Flags,
};
var clone = options.Archetype.Create(options);
clone.Name = track.CanRename ? GetValidTrackName(track.Name) : track.Name;

View File

@@ -41,6 +41,7 @@ namespace FlaxEditor.GUI.Timeline
private Timeline _timeline;
private int _trackIndexCached = -1;
private TrackFlags _flags;
private Track _parentTrack;
internal float _xOffset;
private Margin _margin = new Margin(2.0f);
@@ -162,14 +163,38 @@ namespace FlaxEditor.GUI.Timeline
public Color Color = Color.White;
/// <summary>
/// The mute flag. Muted tracks are disabled.
/// The track flags.
/// </summary>
public bool Mute;
public TrackFlags Flags
{
get => _flags;
set
{
if (_flags == value)
return;
_flags = value;
_muteCheckbox.Checked = (Flags & TrackFlags.Mute) == 0;
Timeline?.MarkAsEdited();
}
}
/// <summary>
/// The loop flag. Looped tracks are doing a playback of its data in a loop.
/// Controls <see cref="TrackFlags.Mute"/> flag.
/// </summary>
public bool Loop;
public bool Mute
{
get => (Flags & TrackFlags.Mute) != 0;
set => Flags = value ? (Flags | TrackFlags.Mute) : (Flags & ~TrackFlags.Mute);
}
/// <summary>
/// Controls <see cref="TrackFlags.Loop"/> flag.
/// </summary>
public bool Loop
{
get => (Flags & TrackFlags.Loop) != 0;
set => Flags = value ? (Flags | TrackFlags.Loop) : (Flags & ~TrackFlags.Loop);
}
/// <summary>
/// The minimum amount of media items for this track.
@@ -245,8 +270,7 @@ namespace FlaxEditor.GUI.Timeline
Archetype = options.Archetype;
Name = options.Archetype.Name;
Icon = options.Archetype.Icon;
Mute = options.Mute;
Loop = options.Loop;
_flags = options.Flags;
// Mute checkbox
const float buttonSize = 14;
@@ -254,7 +278,7 @@ namespace FlaxEditor.GUI.Timeline
{
TooltipText = "Mute track",
AutoFocus = true,
Checked = !Mute,
Checked = (Flags & TrackFlags.Mute) == 0,
AnchorPreset = AnchorPresets.MiddleRight,
Offsets = new Margin(-buttonSize - 2, buttonSize, buttonSize * -0.5f, buttonSize),
IsScrollable = false,
@@ -263,19 +287,12 @@ namespace FlaxEditor.GUI.Timeline
_muteCheckbox.StateChanged += OnMuteButtonStateChanged;
}
internal void SetMute(bool mute)
{
Mute = mute;
_muteCheckbox.Checked = !mute;
}
private void OnMuteButtonStateChanged(CheckBox checkBox)
{
if (Mute == !checkBox.Checked)
return;
using (new TrackUndoBlock(this))
Mute = !checkBox.Checked;
Timeline.MarkAsEdited();
}
/// <summary>

View File

@@ -1,10 +1,50 @@
// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
using System;
using System.IO;
using FlaxEngine;
namespace FlaxEditor.GUI.Timeline
{
/// <summary>
/// Track flags (defined and used in the engine by timeline-based assets: SceneAnimation, ParticleSystem, Animation).
/// </summary>
[Flags]
public enum TrackFlags
{
/// <summary>
/// Nothing.
/// </summary>
None = 0,
/// <summary>
/// The mute flag. Muted tracks are disabled.
/// </summary>
Mute = 1,
/// <summary>
/// The loop flag. Looped tracks are doing a playback of its data in a loop.
/// </summary>
Loop = 2,
}
/// <summary>
/// Track creation options.
/// </summary>
[HideInEditor]
public struct TrackCreateOptions
{
/// <summary>
/// The track archetype.
/// </summary>
public TrackArchetype Archetype;
/// <summary>
/// The track flags.
/// </summary>
public TrackFlags Flags;
}
/// <summary>
/// Create a new track object.
/// </summary>

View File

@@ -1,28 +0,0 @@
// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
using FlaxEngine;
namespace FlaxEditor.GUI.Timeline
{
/// <summary>
/// Track creation options.
/// </summary>
[HideInEditor]
public struct TrackCreateOptions
{
/// <summary>
/// The track archetype.
/// </summary>
public TrackArchetype Archetype;
/// <summary>
/// Create muted track.
/// </summary>
public bool Mute;
/// <summary>
/// Create looped track.
/// </summary>
public bool Loop;
}
}

View File

@@ -30,7 +30,6 @@ namespace FlaxEditor.GUI.Timeline.Tracks
return;
Track.Loop = value;
Preview.DrawMode = value ? AudioClipPreview.DrawModes.Looped : AudioClipPreview.DrawModes.Single;
Timeline?.MarkAsEdited();
}
}

View File

@@ -101,21 +101,6 @@ namespace FlaxEditor.GUI.Timeline.Tracks
}
}
/// <summary>
/// Gets or sets the nested animation looping mode.
/// </summary>
public bool TrackLoop
{
get => Loop;
set
{
if (Loop == value)
return;
Loop = value;
Timeline?.MarkAsEdited();
}
}
/// <inheritdoc />
public NestedSceneAnimationTrack(ref TrackCreateOptions options)
: base(ref options)

View File

@@ -24,8 +24,7 @@ namespace FlaxEditor.GUI.Timeline.Undo
_options = new TrackCreateOptions
{
Archetype = track.Archetype,
Loop = track.Loop,
Mute = track.Mute,
Flags = track.Flags,
};
_color = track.Color;
_name = track.Name;

View File

@@ -26,8 +26,7 @@ namespace FlaxEditor.GUI.Timeline.Undo
using (var stream = new BinaryWriter(memory))
{
stream.Write(track.Color);
stream.Write(track.Mute);
stream.Write(track.Loop);
stream.Write((byte)track.Flags);
track.Archetype.Save(track, stream);
return memory.ToArray();
}
@@ -40,8 +39,7 @@ namespace FlaxEditor.GUI.Timeline.Undo
using (var stream = new BinaryReader(memory))
{
track.Color = stream.ReadColor();
track.SetMute(stream.ReadBoolean());
track.Loop = stream.ReadBoolean();
track.Flags = (TrackFlags)stream.ReadByte();
track.Archetype.Load(Timeline.FormatVersion, track, stream);
}
_timeline.ArrangeTracks();