90 lines
No EOL
2.4 KiB
C#
90 lines
No EOL
2.4 KiB
C#
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<WaveTrackBase> 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<string, Track> trackDictionary = new Dictionary<string, Track>();
|
|
|
|
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<BrickModel> e)
|
|
{
|
|
if (!_bricks.IsUpdating)
|
|
{
|
|
RefreshBricks();
|
|
}
|
|
}
|
|
|
|
protected override void UpdateRange()
|
|
{
|
|
Timeline.TimeRange = new Range<float>(0, maxBrickRange);
|
|
}
|
|
}
|
|
} |