Exemple #1
0
        public virtual void ShiftTracks(int delta, GuiLabs.Undo.ActionManager am = null)
        {
            var oldIndices = Tracks.Select(t => t.GetIndex()).ToList();
            var newIndices = oldIndices.Select(i => i + delta).ToList();

            if (newIndices.Any(i => i < 0 || i >= timeline.Tracks.Count))
            {
                throw new ArgumentException("shifting tracks would move them out of range", "delta");
            }

            // runtime complexity is horrendeous, but we don't have that many tracks ...
            foreach (int i in newIndices)
            {
                if (!oldIndices.Contains(i))
                {
                    am.RecordAdd(Tracks, timeline.Tracks[i]);
                }
            }
            foreach (int i in oldIndices)
            {
                if (!newIndices.Contains(i))
                {
                    am.RecordRemove(Tracks, timeline.Tracks[i]);
                }
            }
        }
        public override bool RemoveFromTrack(Track track, GuiLabs.Undo.ActionManager am = null)
        {
            if (base.RemoveFromTrack(track, am))
            {
                foreach (var child in _children.Where(b => b.Tracks.Contains(track)).Reverse().ToArray())
                {
                    if (child.Tracks.Count > 1)
                    {
                        am.RecordRemove(child.Tracks, track);
                    }
                    else
                    {
                        am.RecordRemove(_children, child);
                    }
                }

                // since the base method already removed the track from the group block,
                // this call should in theory be redundant
                RecalcTracks();
                return(true);
            }
            return(false);
        }
Exemple #3
0
        public virtual bool RemoveFromTrack(Track track, GuiLabs.Undo.ActionManager am = null)
        {
            if (Tracks.Count <= 1)
            {
                return(false);
            }
            if (!Tracks.Contains(track))
            {
                throw new InvalidOperationException("block is not part of track");
            }

            am.RecordRemove(Tracks, track);
            return(true);
        }