diff options
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/ViewModels/MainViewVM.cs')
| -rw-r--r-- | Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/ViewModels/MainViewVM.cs | 53 |
1 files changed, 49 insertions, 4 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/ViewModels/MainViewVM.cs index b3d717263..af65c1430 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/ViewModels/MainViewVM.cs @@ -8,16 +8,21 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Controls; using System.Windows.Media.Imaging; +using Tango.BL.Entities; +using Tango.BL.Enumerations; using Tango.Core.Commands; +using Tango.Core.Helpers; using Tango.Integration.Diagnostics; using Tango.Integration.Operation; using Tango.Integration.Services; using Tango.MachineStudio.Common.Diagnostics; +using Tango.MachineStudio.Common.EventLogging; using Tango.MachineStudio.Common.Notifications; using Tango.MachineStudio.Common.StudioApplication; using Tango.MachineStudio.Common.Video; using Tango.MachineStudio.DataCapture.Recording; using Tango.MachineStudio.DataCapture.Views; +using Tango.MachineStudio.Logging.ViewModels; using Tango.PMR.Diagnostics; using Tango.Settings; using Tango.SharedUI; @@ -34,6 +39,7 @@ namespace Tango.MachineStudio.DataCapture.ViewModels private INotificationProvider _notification; private IStudioApplicationManager _applicationManager; private IDiagnosticsFrameProvider _frameProvider; + private IEventLogger _eventLogger; private String _recordingsFolder; private BarItem _recordingBarItem; private BarItem _playerBarItem; @@ -100,6 +106,16 @@ namespace Tango.MachineStudio.DataCapture.ViewModels set { _captureDevices = value; RaisePropertyChangedAuto(); } } + private TimelineViewVM _timelineViewVM; + /// <summary> + /// Gets or sets the timeline view VM. + /// </summary> + public TimelineViewVM TimelineViewVM + { + get { return _timelineViewVM; } + set { _timelineViewVM = value; RaisePropertyChangedAuto(); } + } + #endregion #region Commands @@ -161,15 +177,20 @@ namespace Tango.MachineStudio.DataCapture.ViewModels /// <summary> /// Initializes a new instance of the <see cref="MainViewVM"/> class. /// </summary> - public MainViewVM(IVideoCaptureProvider videoCaptureProvider, INotificationProvider notification, IStudioApplicationManager applicationManager, IDiagnosticsFrameProvider frameProvider) + public MainViewVM(IVideoCaptureProvider videoCaptureProvider, INotificationProvider notification, IStudioApplicationManager applicationManager, IDiagnosticsFrameProvider frameProvider, IEventLogger eventLogger) { _notification = notification; _applicationManager = applicationManager; _frameProvider = frameProvider; + _eventLogger = eventLogger; + + _eventLogger.NewLog += _eventLogger_NewLog; Recorder = new DiagnosticsFileRecorder(); Player = new DiagnosticsFilePlayer(); + TimelineViewVM = new TimelineViewVM(notification) { EnableTimeMarker = true }; + VideoCaptureProvider = videoCaptureProvider; Recordings = new ObservableCollection<DataRecording>(); @@ -204,6 +225,14 @@ namespace Tango.MachineStudio.DataCapture.ViewModels #region Event Handlers + private void _eventLogger_NewLog(object sender, MachinesEvent ev) + { + if (Recorder.IsRecording) + { + Recorder.Write(ev); + } + } + private void ApplicationManager_ConnectedMachineChanged(object sender, IExternalBridgeClient machine) { MachineOperator = machine; @@ -222,7 +251,10 @@ namespace Tango.MachineStudio.DataCapture.ViewModels { CaptureDevices.First().Invoke(() => { - Recorder.Write(CaptureDevices.Where(x => x.VideoSource != null).Select(x => x.VideoSource.GetAsFrozen() as BitmapSource)); + if (Recorder.IsRecording) + { + Recorder.Write(CaptureDevices.Where(x => x.VideoSource != null).Select(x => x.VideoSource.GetAsFrozen() as BitmapSource)); + } }); }); } @@ -240,6 +272,8 @@ namespace Tango.MachineStudio.DataCapture.ViewModels { Recordings.Add(new DataRecording(file, File.GetCreationTime(file))); } + + Recordings = Recordings.OrderByDescending(x => x.Date).ToObservableCollection(); } /// <summary> @@ -248,7 +282,11 @@ namespace Tango.MachineStudio.DataCapture.ViewModels /// <param name="recording">The recording.</param> private void RemoveRecording(DataRecording recording) { - Recordings.Remove(recording); + if (_notification.ShowQuestion("Are you sure you want to remove the specified recording?")) + { + Recordings.Remove(recording); + PathHelper.TryDeleteFile(recording.FilePath); + } } /// <summary> @@ -275,6 +313,8 @@ namespace Tango.MachineStudio.DataCapture.ViewModels { SelectedRecording.Player = new DiagnosticsFilePlayer(); await SelectedRecording.Player.Load(SelectedRecording.FilePath); + TimelineViewVM.Initialize(SelectedRecording.Player.MachineEvents); + TimelineViewVM.TimelineMaxTime = SelectedRecording.Player.TotalTime; } } @@ -327,6 +367,8 @@ namespace Tango.MachineStudio.DataCapture.ViewModels CaptureDevices[i].VideoSource = frame.VideoFrames[i].ToByteArray().ToBitmapSource(); } }); + + TimelineViewVM.CurrentPosition = (sender as DiagnosticsFilePlayer).CurrentTime; } } @@ -335,7 +377,7 @@ namespace Tango.MachineStudio.DataCapture.ViewModels using (_notification.PushTaskItem("Starting Recording...")) { Recorder.Start(); - + _eventLogger.Log(EventTypes.RecordingStarted, "Recording Started..."); _recordingBarItem.Push(); } @@ -350,6 +392,8 @@ namespace Tango.MachineStudio.DataCapture.ViewModels { await Recorder.Stop(); _recordingBarItem.Pop(); + + _eventLogger.Log(EventTypes.RecordingStopped, "Recording Stopped..."); } String recordingName = _notification.ShowTextInput("Enter recording name", "Recording name"); @@ -370,6 +414,7 @@ namespace Tango.MachineStudio.DataCapture.ViewModels else if (Player.IsPlaying) { await Player.Stop(); + TimelineViewVM.CurrentPosition = TimeSpan.Zero; CaptureDevices.ForEach(x => x.EnableSourceUpdate()); _frameProvider.Disable = false; _playerBarItem.Pop(); |
