aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Recording/DataRecording.cs23
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Tango.MachineStudio.DataCapture.csproj7
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/ViewModels/MainViewVM.cs83
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Views/MainView.xaml5
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Views/PlayingBarView.xaml53
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Views/PlayingBarView.xaml.cs28
6 files changed, 166 insertions, 33 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Recording/DataRecording.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Recording/DataRecording.cs
index a191c244e..ddf24e113 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Recording/DataRecording.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Recording/DataRecording.cs
@@ -1,14 +1,31 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.Core;
+using Tango.Integration.Diagnostics;
namespace Tango.MachineStudio.DataCapture.Recording
{
public class DataRecording : ExtendedObject
{
+ public DataRecording()
+ {
+ Date = DateTime.Now;
+ }
+
+ public DataRecording(String filePath) : this()
+ {
+ FilePath = filePath;
+ }
+
+ public DataRecording(String filePath, DateTime date) : this(filePath)
+ {
+ Date = date;
+ }
+
private DateTime _date;
public DateTime Date
@@ -17,12 +34,9 @@ namespace Tango.MachineStudio.DataCapture.Recording
set { _date = value; RaisePropertyChangedAuto(); }
}
- private String _name;
-
public String Name
{
- get { return _name; }
- set { _name = value; RaisePropertyChangedAuto(); }
+ get { return Path.GetFileNameWithoutExtension(FilePath); }
}
private String _file;
@@ -33,5 +47,6 @@ namespace Tango.MachineStudio.DataCapture.Recording
set { _file = value; RaisePropertyChangedAuto(); }
}
+ public DiagnosticsFilePlayer Player { get; set; }
}
}
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 1c13be809..8936a66db 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
@@ -81,6 +81,9 @@
<Link>GlobalVersionInfo.cs</Link>
</Compile>
<Compile Include="DataCaptureModule.cs" />
+ <Compile Include="Views\PlayingBarView.xaml.cs">
+ <DependentUpon>PlayingBarView.xaml</DependentUpon>
+ </Compile>
<Compile Include="Views\RecordingBarView.xaml.cs">
<DependentUpon>RecordingBarView.xaml</DependentUpon>
</Compile>
@@ -88,6 +91,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
+ <Page Include="Views\PlayingBarView.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
<Page Include="Views\RecordingBarView.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
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 b63ee51d0..269007dac 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
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
+using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
@@ -32,6 +33,8 @@ namespace Tango.MachineStudio.DataCapture.ViewModels
private IStudioApplicationManager _applicationManager;
private IDiagnosticsFrameProvider _frameProvider;
private String _recordingsFolder;
+ private BarItem _recordingBarItem;
+ private BarItem _playerBarItem;
#region Properties
@@ -52,7 +55,7 @@ namespace Tango.MachineStudio.DataCapture.ViewModels
public DataRecording SelectedRecording
{
get { return _selectedRecording; }
- set { _selectedRecording = value; RaisePropertyChangedAuto(); }
+ set { _selectedRecording = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); }
}
/// <summary>
@@ -140,35 +143,29 @@ namespace Tango.MachineStudio.DataCapture.ViewModels
ToggleCameraCommand = new RelayCommand<CaptureDevice>(ToggleCamera);
- Recordings.Add(new DataRecording()
- {
- Name = "Recording 1"
- });
- Recordings.Add(new DataRecording()
- {
- Name = "Recording 2"
- });
- Recordings.Add(new DataRecording()
- {
- Name = "Recording 3"
- });
-
RemoveRecordingCommand = new RelayCommand<DataRecording>(RemoveRecording);
MediaRecordingCommand = new RelayCommand(StartDiagnosticsRecording, () => !Recorder.IsRecording && MachineOperator != null && !Player.IsPlaying);
MediaStopCommand = new RelayCommand(StopRecorderOrPlayer, () => Recorder.IsRecording || Player.IsPlaying);
- MediaPlayPauseCommand = new RelayCommand(DiagnosticsTogglePlayPause, () => !Recorder.IsRecording && Player.IsLoaded);
+ MediaPlayPauseCommand = new RelayCommand(DiagnosticsTogglePlayPause, () => !Recorder.IsRecording && SelectedRecording != null);
_recordingsFolder = Path.Combine(SettingsManager.DefaultFolder, "Recordings");
Directory.CreateDirectory(_recordingsFolder);
_frameProvider.FrameReceived += _frameProvider_FrameReceived;
- _notification.PushBarItem(new RecordingBarView() { DataContext = this });
-
applicationManager.ConnectedMachineChanged += ApplicationManager_ConnectedMachineChanged;
+
+ _recordingBarItem = new BarItem(_notification, new RecordingBarView() { DataContext = this });
+ _playerBarItem = new BarItem(_notification, new PlayingBarView() { DataContext = this });
+
+ LoadRecordings();
}
+ #endregion
+
+ #region Event Handlers
+
private void ApplicationManager_ConnectedMachineChanged(object sender, Integration.Services.IExternalBridgeClient machine)
{
MachineOperator = machine;
@@ -186,10 +183,19 @@ namespace Tango.MachineStudio.DataCapture.ViewModels
}
}
+
#endregion
#region Private Methods
+ private void LoadRecordings()
+ {
+ foreach (var file in Directory.GetFiles(_recordingsFolder, "*.tdr"))
+ {
+ Recordings.Add(new DataRecording(file, File.GetCreationTime(file)));
+ }
+ }
+
/// <summary>
/// Removes the recording.
/// </summary>
@@ -211,11 +217,28 @@ namespace Tango.MachineStudio.DataCapture.ViewModels
}
}
- private void DiagnosticsTogglePlayPause()
+ private async void DiagnosticsTogglePlayPause()
{
if (!Player.IsPlaying || Player.IsPaused)
{
_frameProvider.Disable = true;
+
+ if (SelectedRecording.Player == null)
+ {
+ using (_notification.PushTaskItem("Loading Recording..."))
+ {
+ SelectedRecording.Player = new DiagnosticsFilePlayer();
+ await SelectedRecording.Player.Load(SelectedRecording.FilePath);
+ }
+ }
+
+ RegisterPlayer(SelectedRecording.Player);
+
+ if (!Player.IsPlaying)
+ {
+ _playerBarItem.Push();
+ }
+
Player.Play();
}
else
@@ -226,21 +249,21 @@ namespace Tango.MachineStudio.DataCapture.ViewModels
InvalidateRelayCommands();
}
- private async void LoadSelectedRecording()
+ private void RegisterPlayer(DiagnosticsFilePlayer player)
{
- using (_notification.PushTaskItem("Loading Recording..."))
+ foreach (var recording in Recordings)
{
- if (Player != null)
+ if (recording.Player != null)
{
- Player.Dispose();
+ recording.Player.FrameReceived -= Player_FrameReceived;
}
+ }
- Player = new DiagnosticsFilePlayer();
+ if (player != null)
+ {
+ Player = player;
Player.FrameReceived += Player_FrameReceived;
- await Player.Load(SelectedRecording.FilePath);
}
-
- InvalidateRelayCommands();
}
private void Player_FrameReceived(object sender, DataFileFrame frame)
@@ -256,6 +279,8 @@ namespace Tango.MachineStudio.DataCapture.ViewModels
using (_notification.PushTaskItem("Starting Recording..."))
{
Recorder.Start();
+
+ _recordingBarItem.Push();
}
InvalidateRelayCommands();
@@ -268,6 +293,7 @@ namespace Tango.MachineStudio.DataCapture.ViewModels
using (_notification.PushTaskItem("Stopping Recording..."))
{
await Recorder.Stop();
+ _recordingBarItem.Pop();
}
String recordingName = _notification.ShowTextInput("Enter recording name", "Recording name");
@@ -276,7 +302,9 @@ namespace Tango.MachineStudio.DataCapture.ViewModels
{
using (_notification.PushTaskItem("Saving Recording..."))
{
- await Recorder.Save(Path.Combine(_recordingsFolder, recordingName + ".tdr"));
+ String filePath = Path.Combine(_recordingsFolder, recordingName + ".tdr");
+ await Recorder.Save(filePath);
+ Recordings.Insert(0, new DataRecording(filePath));
}
}
@@ -287,6 +315,7 @@ namespace Tango.MachineStudio.DataCapture.ViewModels
{
await Player.Stop();
_frameProvider.Disable = false;
+ _playerBarItem.Pop();
}
InvalidateRelayCommands();
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 74addf942..72f7da03d 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
@@ -17,6 +17,7 @@
<converters:StringEllipsisConverter x:Key="StringEllipsisConverter" />
<converters:BooleanToVisibilityInverseConverter x:Key="BooleanToVisibilityInverseConverter" />
<converters:NumberToFileSizeConverter x:Key="NumberToFileSizeConverter"/>
+ <converters:BooleanInverseConverter x:Key="BooleanInverseConverter" />
</UserControl.Resources>
<Grid>
@@ -38,7 +39,7 @@
</Grid>
<Grid Margin="0 10 0 0">
- <ListBox ItemsSource="{Binding Recordings}" SelectedItem="{Binding SelectedRecording}" HorizontalContentAlignment="Stretch">
+ <ListBox IsEnabled="{Binding Player.IsPlaying,Converter={StaticResource BooleanInverseConverter}}" ItemsSource="{Binding Recordings}" SelectedItem="{Binding SelectedRecording}" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
@@ -50,7 +51,7 @@
<StackPanel Orientation="Horizontal" DockPanel.Dock="Left">
<Image Source="../Images/tape.png" VerticalAlignment="Top" Width="32" Height="40" Stretch="Fill"></Image>
<TextBlock VerticalAlignment="Top" Margin="5 5 0 0">
- <Run Text="{Binding Name}"></Run>
+ <Run Text="{Binding Name,Mode=OneWay}"></Run>
<LineBreak/>
<Run Text="{Binding Date}" FontSize="10"></Run>
</TextBlock>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Views/PlayingBarView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Views/PlayingBarView.xaml
new file mode 100644
index 000000000..3e76ce6ef
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Views/PlayingBarView.xaml
@@ -0,0 +1,53 @@
+<UserControl x:Class="Tango.MachineStudio.DataCapture.Views.PlayingBarView"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ 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:video="clr-namespace:Tango.Video.DirectCapture;assembly=Tango.Video"
+ xmlns:global="clr-namespace:Tango.MachineStudio.DataCapture"
+ xmlns:local="clr-namespace:Tango.MachineStudio.DataCapture.Views"
+ mc:Ignorable="d"
+ Width="350" Height="30" Background="{StaticResource AccentColorBrush}" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}">
+ <Grid>
+ <DockPanel>
+
+ <StackPanel Orientation="Horizontal" DockPanel.Dock="Right">
+ <TextBlock VerticalAlignment="Center" FontFamily="{StaticResource digital-7}" Foreground="#F6F6F6" FontSize="20">
+ <Run Text="{Binding Player.CurrentTime,Mode=OneWay,StringFormat=hh\\:mm\\:ss,FallbackValue='00:00:00'}"/>
+ <Run>/</Run>
+ <Run Text="{Binding Player.TotalTime,Mode=OneWay,StringFormat=hh\\:mm\\:ss,FallbackValue='00:00:00'}"/>
+ </TextBlock>
+ </StackPanel>
+
+ <StackPanel Orientation="Horizontal" DockPanel.Dock="Left">
+ <Button Command="{Binding MediaPlayPauseCommand}" Style="{StaticResource MaterialDesignFlatButton}" Padding="0" Width="30" Height="30" Foreground="White">
+ <materialDesign:PackIcon Width="30" Height="30">
+ <materialDesign:PackIcon.Style>
+ <Style TargetType="materialDesign:PackIcon">
+ <Setter Property="Kind" Value="Play"></Setter>
+ <Style.Triggers>
+ <MultiDataTrigger>
+ <MultiDataTrigger.Conditions>
+ <Condition Binding="{Binding Player.IsPlaying}" Value="True" />
+ <Condition Binding="{Binding Player.IsPaused}" Value="False" />
+ </MultiDataTrigger.Conditions>
+ <Setter Property="Kind" Value="Pause"></Setter>
+ </MultiDataTrigger>
+ </Style.Triggers>
+ </Style>
+ </materialDesign:PackIcon.Style>
+ </materialDesign:PackIcon>
+ </Button>
+ <Button Command="{Binding MediaStopCommand}" Style="{StaticResource MaterialDesignFlatButton}" Padding="0" Width="30" Height="30" Foreground="White">
+ <materialDesign:PackIcon Kind="Stop" Width="30" Height="30" />
+ </Button>
+ </StackPanel>
+
+ <Slider VerticalAlignment="Center" Margin="10 0 10 0" Foreground="White" Maximum="{Binding Player.TotalFrames}" Value="{Binding Player.CurrentFrame}"></Slider>
+ </DockPanel>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Views/PlayingBarView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Views/PlayingBarView.xaml.cs
new file mode 100644
index 000000000..f9e502f8b
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/Views/PlayingBarView.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.MachineStudio.DataCapture.Views
+{
+ /// <summary>
+ /// Interaction logic for RecordingBarView.xaml
+ /// </summary>
+ public partial class PlayingBarView : UserControl
+ {
+ public PlayingBarView()
+ {
+ InitializeComponent();
+ }
+ }
+}