// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System.Collections.Specialized; using System.Linq; using osu.Framework.Bindables; using osu.Game.Beatmaps; using osu.Game.Beatmaps.ControlPoints; namespace osu.Game.Screens.Edit.Components.Timelines.Summary.Parts { /// /// The part of the timeline that displays the control points. /// public class ControlPointPart : TimelinePart { private readonly IBindableList controlPointGroups = new BindableList(); protected override void LoadBeatmap(WorkingBeatmap beatmap) { base.LoadBeatmap(beatmap); controlPointGroups.BindTo(beatmap.Beatmap.ControlPointInfo.Groups); controlPointGroups.BindCollectionChanged((sender, args) => { switch (args.Action) { case NotifyCollectionChangedAction.Reset: Clear(); break; case NotifyCollectionChangedAction.Add: foreach (var group in args.NewItems.OfType()) Add(new GroupVisualisation(group)); break; case NotifyCollectionChangedAction.Remove: foreach (var group in args.OldItems.OfType()) { var matching = Children.SingleOrDefault(gv => gv.Group == group); matching?.Expire(); } break; } }, true); } } }