diff --git a/Source/Editor/GUI/Timeline/Media.cs b/Source/Editor/GUI/Timeline/Media.cs index b826e5b6e..5b70312af 100644 --- a/Source/Editor/GUI/Timeline/Media.cs +++ b/Source/Editor/GUI/Timeline/Media.cs @@ -185,6 +185,11 @@ namespace FlaxEditor.GUI.Timeline /// public bool CanSplit; + /// + /// Gets a value indicating whether this media can be removed. + /// + public bool CanDelete; + /// /// Initializes a new instance of the class. /// @@ -200,6 +205,8 @@ namespace FlaxEditor.GUI.Timeline /// The found control under the mouse cursor. public virtual void OnTimelineShowContextMenu(ContextMenu.ContextMenu menu, Control controlUnderMouse) { + if (CanDelete && Track.Media.Count > Track.MinMediaCount) + menu.AddButton("Delete media", Delete); } /// @@ -284,6 +291,14 @@ namespace FlaxEditor.GUI.Timeline return clone; } + /// + /// Deletes this media. + /// + public void Delete() + { + _timeline.Delete(this); + } + /// public override void GetDesireClientArea(out Rectangle rect) { diff --git a/Source/Editor/GUI/Timeline/Timeline.cs b/Source/Editor/GUI/Timeline/Timeline.cs index 570caed62..83af3c77e 100644 --- a/Source/Editor/GUI/Timeline/Timeline.cs +++ b/Source/Editor/GUI/Timeline/Timeline.cs @@ -1451,7 +1451,7 @@ namespace FlaxEditor.GUI.Timeline } /// - /// Deletes the tracks. + /// Deletes the track. /// /// The track to delete (and its sub tracks). /// True if use undo/redo action for track removing. @@ -1459,8 +1459,6 @@ namespace FlaxEditor.GUI.Timeline { if (track == null) throw new ArgumentNullException(); - - // Delete tracks var tracks = new List(4); GetTracks(track, tracks); if (withUndo && Undo != null && Undo.Enabled) @@ -1497,6 +1495,43 @@ namespace FlaxEditor.GUI.Timeline track.OnDeleted(); } + /// + /// Deletes the media. + /// + /// The media to delete. + /// True if use undo/redo action for media removing. + public void Delete(Media media, bool withUndo = true) + { + if (media == null) + throw new ArgumentNullException(); + var track = media.Track; + if (track == null) + throw new InvalidOperationException(); + if (withUndo && Undo != null && Undo.Enabled) + { + var before = EditTrackAction.CaptureData(track); + OnDeleteMedia(media); + var after = EditTrackAction.CaptureData(track); + Undo.AddAction(new EditTrackAction(this, track, before, after)); + } + else + { + OnDeleteMedia(media); + } + MarkAsEdited(); + } + + /// + /// Called to delete media. + /// + /// The media. + protected virtual void OnDeleteMedia(Media media) + { + SelectedMedia.Remove(media); + media.Track.RemoveMedia(media); + media.OnDeleted(); + } + /// /// Duplicates the selected tracks/media events. /// diff --git a/Source/Editor/GUI/Timeline/Track.cs b/Source/Editor/GUI/Timeline/Track.cs index ea1fa6501..07c543b35 100644 --- a/Source/Editor/GUI/Timeline/Track.cs +++ b/Source/Editor/GUI/Timeline/Track.cs @@ -1032,10 +1032,10 @@ namespace FlaxEditor.GUI.Timeline // Show context menu var menu = new ContextMenu.ContextMenu(); if (CanRename) - menu.AddButton("Rename", StartRenaming); + menu.AddButton("Rename", "F2", StartRenaming); if (CanCopyPaste) - menu.AddButton("Duplicate", () => Timeline.DuplicateSelection()); - menu.AddButton("Delete", Delete); + menu.AddButton("Duplicate", "Ctrl+D", () => Timeline.DuplicateSelection()); + menu.AddButton("Delete", "Del", Delete); if (CanExpand) { menu.AddSeparator(); diff --git a/Source/Editor/GUI/Timeline/Tracks/AudioTrack.cs b/Source/Editor/GUI/Timeline/Tracks/AudioTrack.cs index 8a1931a14..be7fcfa40 100644 --- a/Source/Editor/GUI/Timeline/Tracks/AudioTrack.cs +++ b/Source/Editor/GUI/Timeline/Tracks/AudioTrack.cs @@ -88,6 +88,7 @@ namespace FlaxEditor.GUI.Timeline.Tracks public AudioMedia() { CanSplit = true; + CanDelete = true; Preview = new AudioClipPreview { AnchorPreset = AnchorPresets.StretchAll, diff --git a/Source/Editor/GUI/Timeline/Tracks/CameraCutTrack.cs b/Source/Editor/GUI/Timeline/Tracks/CameraCutTrack.cs index ea5bf6554..3d731a321 100644 --- a/Source/Editor/GUI/Timeline/Tracks/CameraCutTrack.cs +++ b/Source/Editor/GUI/Timeline/Tracks/CameraCutTrack.cs @@ -35,6 +35,7 @@ namespace FlaxEditor.GUI.Timeline.Tracks { ClipChildren = true; CanSplit = true; + CanDelete = true; } /// @@ -325,10 +326,10 @@ namespace FlaxEditor.GUI.Timeline.Tracks /// public override void OnTimelineShowContextMenu(ContextMenu.ContextMenu menu, Control controlUnderMouse) { - base.OnTimelineShowContextMenu(menu, controlUnderMouse); - if (((CameraCutTrack)Track).Camera) menu.AddButton("Refresh thumbnails", () => UpdateThumbnails()); + + base.OnTimelineShowContextMenu(menu, controlUnderMouse); } /// diff --git a/Source/Editor/GUI/Timeline/Tracks/PostProcessMaterialTrack.cs b/Source/Editor/GUI/Timeline/Tracks/PostProcessMaterialTrack.cs index 4310ac577..c0028849b 100644 --- a/Source/Editor/GUI/Timeline/Tracks/PostProcessMaterialTrack.cs +++ b/Source/Editor/GUI/Timeline/Tracks/PostProcessMaterialTrack.cs @@ -36,6 +36,7 @@ namespace FlaxEditor.GUI.Timeline.Tracks public PostProcessMaterialMedia() { CanSplit = true; + CanDelete = true; } ///