Add timeline tracks sorting option

This commit is contained in:
Wojtek Figat
2021-09-01 15:16:43 +02:00
parent 86c7ad2b2c
commit 8af5c88a53
2 changed files with 58 additions and 0 deletions

View File

@@ -1820,6 +1820,10 @@ namespace FlaxEditor.GUI.Timeline
{ {
menu.AddButton("Edit timeline", () => ShowEditPopup(PropertiesEditObject, ref location, this)); menu.AddButton("Edit timeline", () => ShowEditPopup(PropertiesEditObject, ref location, this));
} }
if (_tracks.Count > 1)
{
menu.AddButton("Sort tracks", SortTracks).TooltipText = "Sorts sub tracks alphabetically";
}
menu.AddSeparator(); menu.AddSeparator();
menu.AddButton("Reset zoom", () => Zoom = 1.0f); menu.AddButton("Reset zoom", () => Zoom = 1.0f);
menu.AddButton("Show whole timeline", ShowWholeTimeline); menu.AddButton("Show whole timeline", ShowWholeTimeline);
@@ -1827,6 +1831,44 @@ namespace FlaxEditor.GUI.Timeline
menu.Show(this, location); menu.Show(this, location);
} }
private void SortTracks()
{
var rootTracks = new List<Track>();
foreach (var track in _tracks)
{
if (track.ParentTrack == null)
rootTracks.Add(track);
}
// TODO: undo for tracks sorting
_tracks.Clear();
rootTracks.Sort();
foreach (var track in rootTracks)
CollectTracks(track);
OnTracksOrderChanged();
MarkAsEdited();
}
internal void SortTrack(Track e, Action sort)
{
var rootTracks = new List<Track>();
foreach (var track in _tracks)
{
if (track.ParentTrack == null)
rootTracks.Add(track);
}
// TODO: undo for tracks sorting
_tracks.Clear();
sort();
foreach (var track in rootTracks)
CollectTracks(track);
OnTracksOrderChanged();
MarkAsEdited();
}
/// <inheritdoc /> /// <inheritdoc />
protected override void PerformLayoutBeforeChildren() protected override void PerformLayoutBeforeChildren()
{ {

View File

@@ -1032,6 +1032,10 @@ namespace FlaxEditor.GUI.Timeline
menu.AddButton("Expand All", ExpandAll); menu.AddButton("Expand All", ExpandAll);
menu.AddButton("Collapse All", CollapseAll); menu.AddButton("Collapse All", CollapseAll);
} }
if (SubTracks.Count > 1)
{
menu.AddButton("Sort All", () => _timeline.SortTrack(this, _subTracks.Sort));
}
OnContextMenu(menu); OnContextMenu(menu);
menu.Show(this, location); menu.Show(this, location);
} }
@@ -1343,6 +1347,18 @@ namespace FlaxEditor.GUI.Timeline
base.OnKeyUp(key); base.OnKeyUp(key);
} }
/// <inheritdoc />
public override int Compare(Control other)
{
if (other is Track otherTrack)
{
var name = Title ?? Name;
var otherName = otherTrack.Title ?? otherTrack.Name;
return string.Compare(name, otherName, StringComparison.InvariantCulture);
}
return base.Compare(other);
}
/// <inheritdoc /> /// <inheritdoc />
public override void OnDestroy() public override void OnDestroy()
{ {