client/src/Iri.Modernisation.Controls/ViewModel/BookTimeLine/BookTimeLineVM.cs
author Matthieu Totet
Mon, 14 Dec 2009 17:02:03 +0100
changeset 23 10acb6a11a73
parent 0 249d70e7b32d
child 24 c031f1132dde
permissions -rw-r--r--
Update VideoViewer ( Allow Multi-VideoViewer)

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Iri.Modernisation.Data.Models;
using Iri.Modernisation.BaseMVVM.Commands;
using Iri.Modernisation.BaseMVVM.ViewModel;
using System.Collections.Generic;
namespace Iri.Modernisation.Controls.ViewModel
{
    /// <summary>
    /// ViewModel du module BookTimeLine
    /// </summary>
    public class BookTimeLineVM : BaseMVVM.ViewModel.ViewModel
    {
        /// <summary>
        /// Livre sélectionné
        /// </summary>
        private VideoBook _selectedBook;
        public VideoBook SelectedBook
        {
            get
            {
                return _selectedBook;
            }
        }

        /// <summary>
        /// 
        /// </summary>
        public String AuthorFullname
        {
            get
            {
                return Author.FirstName + " " + Author.Name;
            }
        }

        /// <summary>
        /// Titre du Livre
        /// </summary>
        private String _title;
        public String Title 
        {
            get
            {
                return _title;
            }
            private set
            {
                _title = value;
                _selectedBook.Title = value;
                OnPropertyChanged("Title");
            }
        }

        /// <summary>
        /// Auteur du Livre
        /// </summary>
        private User _author;
        public User Author
        {
            get
            {
                return _author;
            }
            private set
            {
                _author = value;
                _selectedBook.Author = value;
                OnPropertyChanged("Author");
            }

        }

        /// <summary>
        /// Chapitre du Livre
        /// </summary>
        private VideoChapter[] _chapters;
        public VideoChapter[] Chapters
        {
            get
            {
                return _chapters;
            }
            private set
            {
                _chapters = value;
                _selectedBook.Chapters = value;
                OnPropertyChanged("Chapters");
            }
        }

        /// <summary>
        /// Liste des Index des Chapitres
        /// </summary>
        private List<SegmentIndex>[] _segmentIndex=new List<SegmentIndex>[4];
        public List<SegmentIndex>[] SegmentIndex
        {
            get
            {
                return _segmentIndex;
            }
            set
            {
                _segmentIndex = value;
                OnPropertyChanged("SegmentIndex");
            }
        }

        /// <summary>
        /// Liste des Annotations
        /// </summary>
        private List<Annotation>[] _annotations=new List<Annotation>[4];
        public List<Annotation>[] Annotations
        {
            get
            {
                return _annotations;
            }
            set
            {
                _annotations = value;
                OnPropertyChanged("Annotations");
            }
        }

        /// <summary>
        /// Durée totale du Livre
        /// </summary>
        private TimeSpan _totalDuration;
        public double TotalDuration
        {
            get
            {
                return _totalDuration.TotalMilliseconds;
            }
            set
            {
                _totalDuration = new TimeSpan(0, 0, 0, 0, (int)value);
                _selectedBook.Duration = new TimeSpan(0, 0, 0, 0, (int)value); ;
                OnPropertyChanged("Duration");
            }
        }

        private List<int> _polemicSpectrumData = new List<int>();
        public List<int> PolemicSpectrumData
        {
            get
            {
                return _polemicSpectrumData;
            }
        }

        private List<int> _adhesionSpectrumData = new List<int>();
        public List<int> AdhesionSpectrumData
        {
            get
            {
                return _adhesionSpectrumData;
            }
        }

        private List<int> _referenceSpectrumData = new List<int>();
        public List<int> ReferenceSpectrumData
        {
            get
            {
                return _referenceSpectrumData;
            }
        }

        private List<int> _questionSpectrumData = new List<int>();
        public List<int> QuestionSpectrumData
        {
            get
            {
                return _questionSpectrumData;
            }
        }

        private List<int> _generalSpectrumData = new List<int>();
        public List<int> GeneralSpectrumData
        {
            get
            {
                return _generalSpectrumData;
            }
        }

        /// <summary>
        /// Position du curseur de lecture
        /// </summary>
        private double _position;
        public double Position
        {
            get
            {
                return _position;
            }
            set
            {
                _position = value;
                OnPropertyChanged("Position");
            }
        }

        /// <summary>
        /// Chargement des données et annalyse
        /// </summary>
        private void LoadData()
        {
            if (_selectedBook.Duration != TimeSpan.Zero)
            {
            
            for (double i = 0; i <= _selectedBook.Duration.TotalMilliseconds; i = (i + _selectedBook.Duration.TotalMilliseconds / 150))
            {
                int[] Tem = new int[4]{0,0,0,0};
                foreach (VideoChapter Ch in _selectedBook.Chapters)
                {
                    foreach (Annotation An in Ch.Annotations)
                    {
                        if (An.TimerIn.TotalMilliseconds <= i && An.TimerOut.TotalMilliseconds >= i)
                        {
                            switch (An.Type)
                            {
                                case PolemicElementType.Polemic:
                                    Tem[0]++;
                                    break;
                                case PolemicElementType.Adhesion:
                                    Tem[1]++;
                                    break;
                                case PolemicElementType.Reference:
                                    Tem[2]++;
                                    break;
                                case PolemicElementType.Question:
                                    Tem[3]++;
                                    break;
                                default:
                                    break;
                            }
                        }
                    }
                }
                _polemicSpectrumData.Add(Tem[0]);
               _adhesionSpectrumData.Add(Tem[1]);
                _referenceSpectrumData.Add(Tem[2]);
              _questionSpectrumData.Add(Tem[3]);
               _generalSpectrumData.Add((Tem[0]+Tem[1]+Tem[2]+Tem[3]));
            }
            }


        }

        /// <summary>
        /// Constructeur    
        /// </summary>
        /// <param name="bookParam">VideoLivre à étudier</param>
        public BookTimeLineVM(VideoBook bookParam)
        {
            _selectedBook = bookParam;
            _title = bookParam.Title;
            _author = bookParam.Author;
            _chapters = bookParam.Chapters;
            _totalDuration = bookParam.Duration;
            LoadData();
            LoadElements();
            Commands.TimeChange.Executed += new EventHandler<SLExtensions.Input.ExecutedEventArgs>(TimeChange_Executed);

        }
        private VideoViewerVM _videoViewerVM;
        public VideoViewerVM ViewModelVideoViewer
        {
            get
            {
                return _videoViewerVM;
            }
            set
            {
                _videoViewerVM = value;
                OnPropertyChanged("ViewModelVideoViewer");
            }
        }
        void TimeChange_Executed(object sender, SLExtensions.Input.ExecutedEventArgs e)
        {
          //  Position = ((Slider)e.Parameter).Value;
           // Commands.VideoViewer.Pause.Execute();

            ViewModelVideoViewer.GoTo(TimeSpan.FromMilliseconds(((Slider)e.Parameter).Value));
            //Commands.GoToTime.Execute(((Slider)e.Parameter).Value);
            
           // Commands.VideoViewer.Play.Execute();
        }

      
        /// <summary>
        /// Chargement des éléments du livre (Index et Annotations)
        /// </summary>
        private void LoadElements()
        {
            for(int key=0;key< _selectedBook.Chapters.Length;key++)
            {
              _segmentIndex[key] = _selectedBook.Chapters[key].Index;
               _annotations[key] = _selectedBook.Chapters[key].Annotations;
            }
        }
      
    }
}