From 17a77c30765fe8a0d3ca57a9ec60fb43b82432d2 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Sun, 8 Apr 2018 16:55:37 +0300 Subject: Implemented timeline events ! --- .../Tango.MachineStudio.DataCapture.csproj | 7 ++ .../ViewModels/MainViewVM.cs | 53 ++++++++++++- .../Views/MainView.xaml | 86 +++++++++++++++------- 3 files changed, 116 insertions(+), 30 deletions(-) (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture') diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Tango.MachineStudio.DataCapture.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Tango.MachineStudio.DataCapture.csproj index efa6d2ad7..384a3fc32 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Tango.MachineStudio.DataCapture.csproj +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Tango.MachineStudio.DataCapture.csproj @@ -169,6 +169,10 @@ {cb0b0aa2-bb24-4bca-a720-45e397684e12} Tango.MachineStudio.Common + + {1674f726-0e66-414f-b9fd-c6f20d7f07c7} + Tango.MachineStudio.Logging + @@ -185,5 +189,8 @@ + + + \ No newline at end of file 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; + /// + /// Gets or sets the timeline view VM. + /// + public TimelineViewVM TimelineViewVM + { + get { return _timelineViewVM; } + set { _timelineViewVM = value; RaisePropertyChangedAuto(); } + } + #endregion #region Commands @@ -161,15 +177,20 @@ namespace Tango.MachineStudio.DataCapture.ViewModels /// /// Initializes a new instance of the class. /// - 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(); @@ -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(); } /// @@ -248,7 +282,11 @@ namespace Tango.MachineStudio.DataCapture.ViewModels /// The recording. 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); + } } /// @@ -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(); diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Views/MainView.xaml index 445d0d216..37f92dea7 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Views/MainView.xaml @@ -8,6 +8,7 @@ xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls" xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" xmlns:vm="clr-namespace:Tango.MachineStudio.DataCapture.ViewModels" + xmlns:logging="clr-namespace:Tango.MachineStudio.Logging.Views;assembly=Tango.MachineStudio.Logging" xmlns:video="clr-namespace:Tango.Video.DirectCapture;assembly=Tango.Video" xmlns:global="clr-namespace:Tango.MachineStudio.DataCapture" xmlns:local="clr-namespace:Tango.MachineStudio.DataCapture.Views" @@ -73,7 +74,7 @@ - + @@ -179,26 +180,15 @@ - - - - Total Frames: - - - - File Size: - - - - - + + - -