// -- Other methods
        public virtual void UpdateProgress(PlayerUpdate update)
        {
            if (update.Measure > NumberOfMeasures)
            {
                Player.Stop();
            }
            else
            {
                //if (update.Beat != CurrentBeat) CurrentBeat = update.Beat;
                //if (update.Measure != CurrentMeasure) CurrentMeasure = update.Measure;

                //// Update marker position.
                //int leftOffset = 30 + (((update.Measure % 4) - 1) * 160) + (update.Beat * 40) + (int)Math.Round((update.BeatCompleteness * 40));
                //int topOffset = 20 + (update.Measure / 4 ) * 70;
                //MarkerMargin = leftOffset + "," + topOffset + ",0,0";
            }
        }
        protected virtual void WorkerCycle(DateTime now, DateTime prev)
        {
            PlayerUpdate update = new PlayerUpdate();

            // Update time sync.
            _beatSpan = _beatSpan - (now - prev);

            // Update speed.
            _beatDouble = GetBeatDurationAsSeconds(_document.TempoInt);
            _beatPeriod = TimeSpan.FromSeconds(_beatDouble);

            // If beat time has ellapsed
            if (_beatSpan <= TimeSpan.Zero)
            {
                // Add another period.
                _beatSpan += _beatPeriod;

                if (_beat == 4)
                {
                    _beat = 1;
                    _measure += 1;
                }
                else _beat++;
            }

            // Prepare update message.
            update.BeatCompleteness = (double)(((double)_beatPeriod.Ticks - (double)_beatSpan.Ticks) / (double)_beatPeriod.Ticks);
            update.Beat = _beat;
            update.Measure = _measure;

            _bgw.ReportProgress(0, update);
            Thread.Sleep(5);
        }
 public void DocumentVM_UpdateProgress_SendsStopIfFinished()
 {
     PlayerUpdate update = new PlayerUpdate
     {
         Beat = 4,
         Measure = 5,
         BeatCompleteness = 0
     };
     FakeDocumentViewModel document = new FakeDocumentViewModel();
     document.ChordLines.Add(new ChordLine());
     document.UpdateProgress(update);
     var stopDidRun = (document.GetPlayer() as StubbDocumentPlayer).StopWasRun;
     Assert.IsTrue(stopDidRun, "Stop should have been run, since the player was done playing.");
 }
 public override void UpdateProgress(PlayerUpdate update)
 {
     HasBeenUpdated = true;
     Player.Pause();
 }