Beispiel #1
0
        public void Execute(object parameter)
        {
            if (!CanExecute(parameter))
            {
                return;
            }

            var nextPresenter = TransitToNextClip(UpcomingClip);

            if (Presenters.Count == 1)
            {
                return;                        //no previous presenter
            }
            var currentPresenter = Presenters[0];

            if (nextPresenter.HidesPreviousClip && !currentPresenter.IsInExitSequence)
            {
                for (int i = 0; i < Presenters.Count - 1; i++)
                {
                    if (Presenters[i].IsInExitSequence)
                    {
                        continue;
                    }

                    Presenters[i].ReadyForCrossfade -= Clip_ReadyForCrossfade;
                    if (i == 0)
                    {
                        Presenters[0].ExitSequenceCompleted += Clip_ExitSequenceCompleted;
                    }
                    else
                    {
                        Presenters[i].ExitSequenceCompleted += SubClip_ExitSequenceCompleted;
                    }

                    Presenters[i].StartExitSequence();
                }

                NextClipCommand.RaiseCanExecuteChanged();
            }
        }
Beispiel #2
0
        /// <summary>
        /// Accures when a clip that is in exit sequence completes the sequence. Should be removed.
        /// </summary>
        /// <param name="sender"></param>
        void Clip_ExitSequenceCompleted(IClipPresenter sender)
        {
            sender.ExitSequenceCompleted -= Clip_ExitSequenceCompleted;
            Presenters.Remove(sender);

            if (!sender.HidesPreviousClip && sender == _presenterInFocus && Presenters.Count > 0)
            {
                _presenterInFocus = Presenters[0];
                CurrentClip       = Presenters[0].OriginalClip;
            }

            if (sender.HidesPreviousClip)
            {
                AdvanceCurrentClip();
            }
            else
            {
                AdvanceUpcomingClip();
            }

            NextClipCommand.RaiseCanExecuteChanged();
        }
Beispiel #3
0
 /// <summary>
 /// Happens when a presenter which his exit sequence was started when he was not Presenters[0], only need
 /// to remove from presenters.
 /// </summary>
 /// <param name="obj"></param>
 void SubClip_ExitSequenceCompleted(IClipPresenter sender)
 {
     sender.ExitSequenceCompleted -= SubClip_ExitSequenceCompleted;
     Presenters.Remove(sender);
     NextClipCommand.RaiseCanExecuteChanged();
 }