client/src/Iri.Modernisation.Controls/ViewModel/ProductionView/ProductionViewVM.cs
author totetm <>
Mon, 25 Jan 2010 09:30:22 +0100
changeset 35 43bb1b8ed555
parent 34 4d9ebc6fbbe8
child 36 b6df6fce6e5d
permissions -rw-r--r--
IRIFiles Class Web Loader and Sender

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.BaseMVVM.Commands;
using Iri.Modernisation.BaseMVVM.ViewModel;
using Iri.Modernisation.Controls.View;
using Iri.Modernisation.Data.Models;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using Iri.Modernisation.Data.LDTClass;
namespace Iri.Modernisation.Controls.ViewModel
{
    /// <summary>
    /// ViewModel de ProductionView
    /// </summary>
    public class ProductionViewVM : BaseMVVM.ViewModel.ViewModel
    {

        private VideoSequence _selectedVideoSequence;
        /// <summary>
        /// VideoSequence Sélectionnée dans la liste
        /// </summary>
        public VideoSequence SelectedVideoSequence
        {
            get
            {
                return _selectedVideoSequence;
            }
            set
            {
                _selectedVideoSequence = value;
                ViewModelProductionEditor = new ProductionEditorVM(value);
                OnPropertyChanged("SelectedVideoSequence");
               
            }
        }

        private ObservableCollection<VideoSequence> _recordedVideoSequences;
        /// <summary>
        /// Liste des VideoSéquences Enregistrées
        /// </summary>
        public ObservableCollection<VideoSequence> RecordedVideoSequences
        {
            get
            {
                return _recordedVideoSequences;
            }
            set
            {
                _recordedVideoSequences = value;
                OnPropertyChanged("RecordedVideoSequences");
            }
        }


        private HeaderProductionVM _headerProductionVM;
        /// <summary>
        /// ViewModel de HeaderProduction
        /// </summary>
        public HeaderProductionVM ViewModelHeaderProduction
        {
            get
            {
                return _headerProductionVM;
            }
            set
            {
                _headerProductionVM = value;
                OnPropertyChanged("ViewModelHeaderProduction");
            }
        }

        private ProductionTimeLineVM _productionTimeLineVM;
        /// <summary>
        /// ViewModel de ProductionTimeLine
        /// </summary>
        public ProductionTimeLineVM ViewModelProductionTimeLine
        {
            get
            {
                return _productionTimeLineVM;
            }
            set
            {
                _productionTimeLineVM = value;
                OnPropertyChanged("ViewModelProductionTimeLine");
            }
        }

        private ProductionEditorVM _productionEditorVM;
        /// <summary>
        /// ViewModel du ProductionEditor
        /// </summary>
        public ProductionEditorVM ViewModelProductionEditor
        {
            get
            {
                return _productionEditorVM;
            }
            set
            {
                _productionEditorVM = value;
                OnPropertyChanged("ViewModelProductionEditor");
            }
        }

        private VideoViewerVM _masterVideoViewerVM;
        /// <summary>
        /// ViewModel du Master
        /// </summary>
        public VideoViewerVM ViewModelMasterVideoViewer
        {
            get
            {
                return _masterVideoViewerVM;
            }
            set
            {
                _masterVideoViewerVM = value;
                OnPropertyChanged("ViewModelMasterVideoViewer");
            }
        }


       private void InitializeCommands()
       {
            Commands.ProductionView.ClickAddSelectedRecord.Executed += new EventHandler<SLExtensions.Input.ExecutedEventArgs>(ClickAddSelectedRecord_Executed);
            ViewModelProductionTimeLine.SwitchVideo += new EventHandler<ProductionTimeLineVMEventArgs>(ViewModelProductionTimeLine_SwitchVideo);
            ViewModelMasterVideoViewer.Tick += new EventHandler<VideoViewerVMEventArgs>(ViewModelMasterVideoViewer_Tick);
            ViewModelHeaderProduction.Change += new EventHandler<HeaderProductionVMArgs>(ViewModelHeaderProduction_Change);
            Commands.HeaderProduction.PublishClick.Executed += new EventHandler<SLExtensions.Input.ExecutedEventArgs>(PublishClick_Executed);    
           
       }
        public ProductionViewVM()
        {
            RecordedVideoSequences = new ObservableCollection<VideoSequence>();
            ViewModelHeaderProduction = new HeaderProductionVM();
            ViewModelProductionTimeLine = new ProductionTimeLineVM();
            ViewModelProductionEditor = new ProductionEditorVM();
            ViewModelMasterVideoViewer = new VideoViewerVM(true, false);
      
            ViewModelProductionTimeLine.ViewModelVideoViewer = ViewModelMasterVideoViewer;
            Random rndNumbers = new Random();
            _recordedVideoSequences.Add(new VideoSequence()
            {
                Path = Application.Current.Host.Source.Host.ToString() + "/test.wmv",
                RunTime = new TimeSpan(0, rndNumbers.Next(10, 60), 0),
                BeginTrim = new TimeSpan(0, 0, 0),
                EndTrim = new TimeSpan(0, 0, 0),
            });
           
         
                _recordedVideoSequences.Add(new VideoSequence()
                {
                    Path = "/video.mp4",
                    RunTime = new TimeSpan(0, rndNumbers.Next(10, 60), 0),
                    BeginTrim = new TimeSpan(0, 0, 0),
                    EndTrim = new TimeSpan(0, 0, 0),
                });
            
           
            InitializeCommands();
            OnPropertyChanged(String.Empty);
           
        }
        void PublishClick_Executed(object sender, SLExtensions.Input.ExecutedEventArgs e)
        {
            IRIFile newFile = new IRIFile();
            IRIDecoupage decoupage = new IRIDecoupage()
            {
                Author = "this author",
                Id = "Index"

            };
            foreach (ObservableCollection<SegmentIndex> Ocsi in this.ViewModelProductionTimeLine.ListIndex)
            {
                foreach (SegmentIndex si in Ocsi)
                {
                    IRIElement temp = new IRIElement()
                    {
                        
                        Chapter = si.Chapter.IdChap,
                        Begin = si.TimerIn,
                        Dur = si.Duration,
                        Title = si.Description,
                        Abstract = si.Description,
                        Tags = si.Tags
                    };
                    decoupage.Elements.Add(temp);
                }

            }
            IRIMedia videoMedia = new IRIMedia() { Id = "video" };


            foreach (VideoSequence vs in this.ViewModelProductionTimeLine.TimeLine)
            {
                videoMedia.Videos.Add(new IRIVideo()
                {
                    Begin = vs.TimerIn,
                    Dur = vs.Duration,
                    Src = vs.Path,

                }
                );
            }
            IRIEnsemble ensemble = new IRIEnsemble()
            {
                Id = "VideoBookIndex"
            };
            ensemble.Decoupages.Add(decoupage);
            newFile.Body.Ensembles.Add(ensemble);
            newFile.Body.Medias.Add(videoMedia);

            MessageBox.Show(newFile.ToString());
        }
        void ViewModelHeaderProduction_Change(object sender, HeaderProductionVMArgs e)
        {
            if (e.ChapterHeader.Indexing == false && e.ChapterHeader.Editing == true)
            {
                ViewModelProductionTimeLine.IsIndexing = true;
            }
            else
            {
                ViewModelProductionTimeLine.IsIndexing = false;
            }       
            ViewModelProductionTimeLine.SelectedChapter = e.ChapterHeader.ChapterDescription.Id ;
        }

        private void ViewModelProductionTimeLine_SwitchVideo(object sender, ProductionTimeLineVMEventArgs e)
        {
            ViewModelMasterVideoViewer.Source = (e.VideoSequence.Path);
            ViewModelMasterVideoViewer.GoTo(e.BeginAt);
        }

        private void ViewModelMasterVideoViewer_Tick(object sender, VideoViewerVMEventArgs e)
        {
            double newPos = ViewModelProductionTimeLine.ActualVideoSequence.TimerIn.TotalMilliseconds+e.Position.TotalMilliseconds;
            if (ViewModelProductionTimeLine.ActualVideoSequence.TimerOut.TotalMilliseconds <= newPos)
            {
                ViewModelProductionTimeLine.ActualVideoSequence = ViewModelProductionTimeLine.TimeLine[ViewModelProductionTimeLine.TimeLine.IndexOf(ViewModelProductionTimeLine.ActualVideoSequence) + 1];
                ViewModelMasterVideoViewer.Source = ViewModelProductionTimeLine.ActualVideoSequence.Path;
                ViewModelMasterVideoViewer.GoTo(ViewModelProductionTimeLine.ActualVideoSequence.BeginTrim);
            }
            ViewModelProductionTimeLine.Position = newPos;
        }

        private void ClickAddSelectedRecord_Executed(object sender, SLExtensions.Input.ExecutedEventArgs e)
        {
            if (ViewModelHeaderProduction.SelectedChapter != null && ViewModelHeaderProduction.SelectedChapter.IsActive)
            {
                if (!ViewModelProductionTimeLine.IsIndexing)
                {
                    if (SelectedVideoSequence != null)
                    {
                        ViewModelMasterVideoViewer.Source = SelectedVideoSequence.Path;

                        VideoSequence newVideo = new VideoSequence(SelectedVideoSequence);
                        ViewModelProductionTimeLine.ActualVideoSequence = newVideo;
                            ViewModelProductionTimeLine.SelectedVideoSequences.Add(newVideo);
                            ViewModelProductionTimeLine.Position = ViewModelProductionTimeLine.TimeLine[ViewModelProductionTimeLine.TimeLine.Count - 1].TimerIn.TotalMilliseconds;
                    }
                }
               
            }
         
           
        }
       
       
    }
}