using System.Collections.Generic; using System.Linq; using ConductorDebugger.Source.Brick; using ConductorDebugger.View; using JD.Application.View; using JD.Application.View.Tracks; using TeaBox; using TeaBox.Gui.Windowless; namespace ConductorDebugger.Source.View { public class ConductorViewControl : WaveControl { #region Variables private readonly BrickCollection _bricks; private float maxBrickRange = 500; #endregion #region public ConductorViewControl(BrickCollection bricks) { _bricks = bricks; _bricks.CollectionChanged += BricksCollectionChanged; RefreshBricks(); } #endregion protected override IEnumerable CreateWaveTracks() { yield break; } private void ClearTracks() { foreach (var track in TrackView.GetTracks()) { if (!Equals(track.Tag, "ConductorDebuggerTracks")) { continue; } DisposableHelper.SafeDisposeList(track.Children); track.Dispose(); TrackView.RemoveTrack(track); } } private void RefreshBricks() { ClearTracks(); Dictionary trackDictionary = new Dictionary(); foreach (var type in _bricks.BrickTypes.OrderBy(x => x)) { var track = new ConductorTrack(); track.Tag = "ConductorDebuggerTracks"; track.Text = type; trackDictionary.Add(type, track); TrackView.AddTrack(track); } foreach (var brick in _bricks.OrderBy(x => x.Type)) { float brickLength = brick.AbsoluteStartBeat.Value + brick.Duration.Value; maxBrickRange = System.Math.Max(brickLength, maxBrickRange); trackDictionary[brick.Type].Children.Add(new BrickViewModel(brick)); } UpdateRange(); } void BricksCollectionChanged(object sender, TeaBox.Collections.CollectionChangedEventArgs e) { if (!_bricks.IsUpdating) { RefreshBricks(); } } protected override void UpdateRange() { Timeline.TimeRange = new Range(0, maxBrickRange); } } }