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 { /// /// DanceTapeDocumentView is responsible of viewing and editing a Dance-Tape (.dtape). The view consist of a single TRecControl /// public class DanceTapeDocumentView : TapeDocumentView, INotifyPropertyChanged { #region Fields and Properties private ScoreViewType _scoreViewTypeSelected; private ScoringPlatform _platformSelected; public ScoreViewManager ScoreViewManager { get; set; } public event PropertyChangedEventHandler PropertyChanged; /// /// Represents whether currently viewed Score Data is Sniping or Scre Tweaking /// public ScoreViewType ScoreViewTypeSelected { get { return _scoreViewTypeSelected; } set { _scoreViewTypeSelected = value; if (PropertyChanged != null) { PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs("ScoreViewTypeSelected")); } } } /// /// Shows Platform on which currently the Score view is representing its Sniping/ Score Tweaking data /// 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 } }