JD2022-TU1/main/tools/framework/JD.Timeline/Document/DanceTapeDocumentView.cs

119 lines
No EOL
3.8 KiB
C#

using System.ComponentModel;
using System.Runtime.CompilerServices;
using JD.Timeline.View;
using JD.Timeline.View.ScoreView;
using JD.Timeline.View.SnipeView;
using JetBrains.Annotations;
using TeaBox.ObjectModel;
using PropertyChangedEventArgs = JD.PropertyService.PropertyChangedEventArgs;
namespace JD.Timeline.Document
{
/// <summary>
/// DanceTapeDocumentView is responsible of viewing and editing a Dance-Tape (.dtape). The view consist of a single TRecControl
/// </summary>
public class DanceTapeDocumentView : TapeDocumentView, INotifyPropertyChanged
{
#region Fields and Properties
private ScoreViewType _scoreViewTypeSelected;
private ScoringPlatform _platformSelected;
public ScoreViewManager ScoreViewManager { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Represents whether currently viewed Score Data is Sniping or Scre Tweaking
/// </summary>
public ScoreViewType ScoreViewTypeSelected
{
get
{
return _scoreViewTypeSelected;
}
set
{
_scoreViewTypeSelected = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs("ScoreViewTypeSelected"));
}
}
}
/// <summary>
/// Shows Platform on which currently the Score view is representing its Sniping/ Score Tweaking data
/// </summary>
public ScoringPlatform PlatformSelected
{
get { return _platformSelected; }
set
{
_platformSelected = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs("PlatformSelected"));
}
}
}
#endregion
#region Constructor
public DanceTapeDocumentView(TapeDocument document)
: base(document)
{
ScoreViewTypeSelected = PropertyService.PropertyService.Properties.Get("ScoreViewType", ScoreViewType.ScoreTweaking);
// from the application properties get the selected platform.
PlatformSelected = PropertyService.PropertyService.Properties.Get("ScoringPlatform", ScoringPlatform.Orbis);
PropertyService.PropertyService.Properties.PropertyChanged += OnScoreViewOrPlatformPropertyChanged;
if (ScoreViewTypeSelected == ScoreViewType.ScoreTweaking)
{
ScoreViewManager = new TweakViewManager(this);
}
else
{
ScoreViewManager = new SnipeViewManager(this);
}
}
#endregion
#region EventHandlers
private void OnScoreViewOrPlatformPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "ScoreViewType")
{
ScoreViewTypeSelected = (ScoreViewType)e.NewValue;
if (ScoreViewManager != null)
{
ScoreViewManager.ClearView();
}
ScoreViewManager = new TweakViewManager(this);
}
else if (e.PropertyName == "ScoringPlatform")
{
PlatformSelected = (ScoringPlatform)e.NewValue;
}
}
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
#endregion
}
}