client/src/Iri.Modernisation.Controls/ViewModel/ProductionView/ProductionViewVM.cs
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;
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);
}
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),
});
for (int i = 0; i < 10; i++)
{
_recordedVideoSequences.Add(new VideoSequence()
{
Path= Application.Current.Host.Source.Host.ToString()+"/video.mp4",
RunTime = new TimeSpan(0, rndNumbers.Next(10, 60), 0),
BeginTrim = new TimeSpan(0, 0, 0),
EndTrim = new TimeSpan(0, 0, 0),
});
}
ViewModelHeaderProduction.Change += new EventHandler<HeaderProductionVMArgs>(ViewModelHeaderProduction_Change);
InitializeCommands();
OnPropertyChanged(String.Empty);
}
void ViewModelHeaderProduction_Change(object sender, HeaderProductionVMArgs e)
{
ViewModelProductionTimeLine.IsIndexing = e.ChapterHeader.Editing;
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 (ViewModelProductionTimeLine.SelectedChapter != -1)
{
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;
}
}
}
}
}
}