aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-10-25 13:35:52 +0300
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-10-25 13:35:52 +0300
commitf681b137c727f7dcdb7d3f5765af8b5b3048c2d9 (patch)
treee9811c974c90a9d3bc3fefab891e6f9b7271ed8e /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer
parent57ad0a219784843d565524235122dbd1ad6c37ae (diff)
downloadTango-f681b137c727f7dcdb7d3f5765af8b5b3048c2d9.tar.gz
Tango-f681b137c727f7dcdb7d3f5765af8b5b3048c2d9.zip
Implemented Job Outline.
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Converters/ObjectToPropertiesConverter.cs33
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Tango.MachineStudio.Developer.csproj3
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs39
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/RunningJobView.xaml484
4 files changed, 406 insertions, 153 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Converters/ObjectToPropertiesConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Converters/ObjectToPropertiesConverter.cs
new file mode 100644
index 000000000..09e7b527a
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Converters/ObjectToPropertiesConverter.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Data;
+
+namespace Tango.MachineStudio.Developer.Converters
+{
+ public class ObjectToPropertiesConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value != null)
+ {
+ var properties = value.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(x => (!x.PropertyType.IsClass && !typeof(IEnumerable).IsAssignableFrom(x.PropertyType)) || x.PropertyType == typeof(String)).ToList();
+ return properties.Select(x => new { x.Name, Value = x.GetValue(value) });
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Tango.MachineStudio.Developer.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Tango.MachineStudio.Developer.csproj
index dca470eed..86f30cd3a 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Tango.MachineStudio.Developer.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Tango.MachineStudio.Developer.csproj
@@ -105,6 +105,7 @@
<Compile Include="Converters\LiquidVolumesToLubricantLiquidVolume.cs" />
<Compile Include="Converters\MillisecondsToTimeSpanConverter.cs" />
<Compile Include="Converters\ObjectsNotEqualToBooleanConveter.cs" />
+ <Compile Include="Converters\ObjectToPropertiesConverter.cs" />
<Compile Include="Converters\OneToPercentConverter.cs" />
<Compile Include="Converters\SegmentLengthToWidthConverter.cs" />
<Compile Include="Converters\SegmentToBrushConverter.cs" />
@@ -360,7 +361,7 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
+ <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
index f55ece6a1..f0568ad6c 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
@@ -62,7 +62,6 @@ namespace Tango.MachineStudio.Developer.ViewModels
private INotificationProvider _notification;
private TimeSpan _runningJobEstimatedDuration;
- private JobHandler _jobHandler;
private DeveloperNavigationManager _navigation;
private INavigationManager _msNavigation;
private bool _blockInvalidateCommands;
@@ -113,6 +112,22 @@ namespace Tango.MachineStudio.Developer.ViewModels
set { _runningJobStatus = value; RaisePropertyChangedAuto(); }
}
+ private JobHandler _jobHandler;
+ /// <summary>
+ /// Gets or sets the current running job handler.
+ /// </summary>
+ public JobHandler JobHandler
+ {
+ get
+ {
+ return _jobHandler;
+ }
+ set
+ {
+ _jobHandler = value; RaisePropertyChangedAuto();
+ }
+ }
+
private ObservableCollection<ColorSpace> _colorSpaces;
/// <summary>
/// Gets or sets the color spaces.
@@ -1017,7 +1032,7 @@ namespace Tango.MachineStudio.Developer.ViewModels
if (events.ToList().Exists(x => x.ActionTypes.Contains(BL.Enumerations.ActionTypes.AbortRunningJob)))
{
- if (_jobHandler != null)
+ if (JobHandler != null)
{
InvokeUI(StopJob);
}
@@ -1207,7 +1222,7 @@ namespace Tango.MachineStudio.Developer.ViewModels
LogManager.Log("Stopping job...");
IsJobRunning = false;
IsJobCanceled = true;
- _jobHandler.Cancel();
+ JobHandler.Cancel();
}
/// <summary>
@@ -1278,16 +1293,16 @@ namespace Tango.MachineStudio.Developer.ViewModels
if (resumeFunc == null)
{
- _jobHandler = MachineOperator.Print(ActiveJob, SelectedProcessParametersTable);
+ JobHandler = MachineOperator.Print(ActiveJob, SelectedProcessParametersTable);
}
else
{
- _jobHandler = resumeFunc(ActiveJob);
+ JobHandler = resumeFunc(ActiveJob);
}
_eventLogger.Log(String.Format("Job '{0}' started...", ActiveJob.Name));
- _jobHandler.StatusChanged += (x, status) =>
+ JobHandler.StatusChanged += (x, status) =>
{
if (IsJobRunning)
{
@@ -1301,7 +1316,7 @@ namespace Tango.MachineStudio.Developer.ViewModels
}
};
- _jobHandler.SegmentStarted += (x, segment) =>
+ JobHandler.SegmentStarted += (x, segment) =>
{
if (!segment.IsInterSegment)
{
@@ -1315,13 +1330,13 @@ namespace Tango.MachineStudio.Developer.ViewModels
}
};
- _jobHandler.UnitCompleted += (x, unit) =>
+ JobHandler.UnitCompleted += (x, unit) =>
{
_speech.SpeakInfo(String.Format("{0} Units Completed.", unit + 1));
_eventLogger.Log(String.Format("{0} Units Completed.", unit + 1));
};
- _jobHandler.Failed += (x, ex) =>
+ JobHandler.Failed += (x, ex) =>
{
LogManager.Log(ex, String.Format("Job {0} has failed.", RunningJob.Name));
_eventLogger.Log(ex, String.Format("Job {0} has failed.", RunningJob.Name));
@@ -1334,14 +1349,14 @@ namespace Tango.MachineStudio.Developer.ViewModels
});
};
- _jobHandler.Finalizing += (_, __) =>
+ JobHandler.Finalizing += (_, __) =>
{
_speech.SpeakInfo("Finalizing job...");
LogManager.Log(String.Format("Finalizing job {0}.", RunningJob.Name));
_eventLogger.Log(String.Format("Finalizing job {0}.", RunningJob.Name));
};
- _jobHandler.Completed += (x, e) =>
+ JobHandler.Completed += (x, e) =>
{
LogManager.Log(String.Format("Job {0} has completed.", RunningJob.Name));
_eventLogger.Log(String.Format("Job {0} has completed.", RunningJob.Name));
@@ -1349,7 +1364,7 @@ namespace Tango.MachineStudio.Developer.ViewModels
StopRecordingIfInProgress();
};
- _jobHandler.Canceled += (x, y) =>
+ JobHandler.Canceled += (x, y) =>
{
LogManager.Log(String.Format("Job {0} has been canceled.", RunningJob.Name));
_eventLogger.Log(String.Format("Job {0} has been canceled.", RunningJob.Name));
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/RunningJobView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/RunningJobView.xaml
index fe04cead7..cff53ea8d 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/RunningJobView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/RunningJobView.xaml
@@ -4,6 +4,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
+ xmlns:localConverters="clr-namespace:Tango.MachineStudio.Developer.Converters"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:vm="clr-namespace:Tango.MachineStudio.Developer.ViewModels"
xmlns:global="clr-namespace:Tango.MachineStudio.Developer"
@@ -13,130 +14,40 @@
<UserControl.Resources>
<converters:DateTimeUTCToStringConverter x:Key="DateTimeUTCToStringConverter" />
+ <localConverters:ObjectToPropertiesConverter x:Key="ObjectToPropertiesConverter" />
+ <converters:MathOperatorConverter x:Key="MathOperatorConverter" />
</UserControl.Resources>
- <Grid Margin="40">
- <Grid.RowDefinitions>
- <RowDefinition Height="900*" MinHeight="50" />
- <RowDefinition Height="5"/>
- <RowDefinition Height="743*" MinHeight="170"/>
- </Grid.RowDefinitions>
+ <Grid>
+ <Grid Margin="40">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="900*" MinHeight="50" />
+ <RowDefinition Height="5"/>
+ <RowDefinition Height="743*" MinHeight="170"/>
+ </Grid.RowDefinitions>
- <Grid>
- <DockPanel>
- <StackPanel Margin="0 0 0 0" Orientation="Horizontal" DockPanel.Dock="Top">
- <materialDesign:PackIcon Kind="Settings" Width="40" Height="40" />
- <TextBlock FontSize="30" FontWeight="SemiBold" VerticalAlignment="Center" Margin="10 0 0 0">Status</TextBlock>
- </StackPanel>
- <DataGrid x:Name="gridSegments" SelectionMode="Single" SelectionChanged="DataGrid_SelectionChanged" SelectionUnit="FullRow" RowHeight="40" GridLinesVisibility="None" ItemsSource="{Binding RunningJobStatus.Segments}" IsSynchronizedWithCurrentItem="True" SelectedItem="{Binding RunningJobStatus.CurrentSegment}" Background="Transparent" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" IsReadOnly="True" AutoGenerateColumns="False">
- <DataGrid.RowStyle>
- <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
- <Style.Triggers>
- <Trigger Property="IsSelected" Value="True">
- <Setter Property="Foreground" Value="White"></Setter>
- <Setter Property="Background">
- <Setter.Value>
- <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
- <GradientStop Color="#FFFF7A7A"/>
- <GradientStop Color="Transparent" Offset="1"/>
- </LinearGradientBrush>
- </Setter.Value>
- </Setter>
- <Setter Property="BorderThickness" Value="1"></Setter>
- <Setter Property="BorderBrush" Value="White"></Setter>
- </Trigger>
- </Style.Triggers>
- </Style>
- </DataGrid.RowStyle>
- <DataGrid.CellStyle>
- <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
- <Setter Property="BorderThickness" Value="0"/>
- <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
- <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
- <Style.Triggers>
- <Trigger Property="IsSelected" Value="True">
- <Setter Property="Background" Value="Transparent"></Setter>
- <Setter Property="Foreground" Value="White"></Setter>
- </Trigger>
- </Style.Triggers>
- </Style>
- </DataGrid.CellStyle>
- <DataGrid.Columns>
- <DataGridTextColumn Width="Auto" Header="#" Binding="{Binding SegmentIndex}" />
- <DataGridTemplateColumn Header="Status">
- <DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <materialDesign:PackIcon VerticalAlignment="Center" HorizontalAlignment="Center">
- <materialDesign:PackIcon.Style>
- <Style TargetType="materialDesign:PackIcon">
- <Setter Property="Kind" Value="PauseCircle"></Setter>
- <Setter Property="Foreground" Value="Gray"></Setter>
- <Style.Triggers>
- <DataTrigger Binding="{Binding Started}" Value="True">
- <Setter Property="Kind" Value="ClockFast"></Setter>
- <Setter Property="Foreground" Value="White"></Setter>
- </DataTrigger>
- <DataTrigger Binding="{Binding Completed}" Value="True">
- <Setter Property="Kind" Value="CheckCircle"></Setter>
- <Setter Property="Foreground" Value="#29B31D"></Setter>
- </DataTrigger>
- </Style.Triggers>
- </Style>
- </materialDesign:PackIcon.Style>
- </materialDesign:PackIcon>
- </DataTemplate>
- </DataGridTemplateColumn.CellTemplate>
- </DataGridTemplateColumn>
- <DataGridTemplateColumn>
- <DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <Rectangle Width="80" Fill="{Binding SegmentBrush}" Stroke="Gray"></Rectangle>
- </DataTemplate>
- </DataGridTemplateColumn.CellTemplate>
- </DataGridTemplateColumn>
- <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
- <DataGridTextColumn Header="Length" Binding="{Binding Length,StringFormat={}{0:F2} m}" />
- <DataGridTextColumn Header="Progress" Binding="{Binding Progress,StringFormat={}{0:F2} m}" />
- <DataGridTextColumn Header="Estimated Duration" Binding="{Binding EstimatedDuration,StringFormat='hh\\:mm\\:ss'}" />
- <DataGridTextColumn Header="Remaining Time" Binding="{Binding RemainingTime,StringFormat='hh\\:mm\\:ss'}" />
- </DataGrid.Columns>
- </DataGrid>
- </DockPanel>
- </Grid>
-
- <GridSplitter Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Stretch" Height="5" Background="Black" />
- <Grid Grid.Row="2" Margin="0 40 0 0">
- <DockPanel>
- <StackPanel Margin="0 0 0 0" Orientation="Horizontal" DockPanel.Dock="Top">
- <materialDesign:PackIcon Kind="Settings" Width="40" Height="40" />
- <TextBlock FontSize="30" FontWeight="SemiBold" VerticalAlignment="Center" Margin="10 0 0 0">Events</TextBlock>
- </StackPanel>
- <Grid DockPanel.Dock="Bottom" Height="40">
- <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0 0 0 0">
- <Button Command="{Binding BackToJobCommand}" Style="{StaticResource MaterialDesignFlatButton}" FontSize="16">
- <StackPanel Orientation="Horizontal">
- <materialDesign:PackIcon VerticalAlignment="Center" Kind="KeyboardBackspace" Width="24" Height="24"></materialDesign:PackIcon>
- <TextBlock Margin="10 0 0 0">BACK TO JOB</TextBlock>
- </StackPanel>
- </Button>
+ <Grid>
+ <DockPanel>
+ <StackPanel Margin="0 0 0 0" Orientation="Horizontal" DockPanel.Dock="Top">
+ <materialDesign:PackIcon Kind="Settings" Width="40" Height="40" />
+ <TextBlock FontSize="30" FontWeight="SemiBold" VerticalAlignment="Center" Margin="10 0 0 0">Status</TextBlock>
</StackPanel>
- </Grid>
-
- <Grid>
- <DataGrid Background="Transparent" AutoGenerateColumns="False" SelectionMode="Single" ItemsSource="{Binding JobEvents}" SelectedItem="{Binding SelectedJobEvent}" RowHeight="40" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" IsReadOnly="True">
+ <DataGrid x:Name="gridSegments" SelectionMode="Single" SelectionChanged="DataGrid_SelectionChanged" SelectionUnit="FullRow" RowHeight="40" GridLinesVisibility="None" ItemsSource="{Binding RunningJobStatus.Segments}" IsSynchronizedWithCurrentItem="True" SelectedItem="{Binding RunningJobStatus.CurrentSegment}" Background="Transparent" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" IsReadOnly="True" AutoGenerateColumns="False">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
<Style.Triggers>
- <Trigger Property="IsMouseOver" Value="True">
- <Setter Property="Background" Value="Transparent"></Setter>
- <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" />
- <Setter Property="Cursor" Value="Hand"></Setter>
- </Trigger>
<Trigger Property="IsSelected" Value="True">
- <Setter Property="Background" Value="Transparent"></Setter>
- </Trigger>
- <Trigger Property="IsFocused" Value="True">
- <Setter Property="Background" Value="Transparent"></Setter>
+ <Setter Property="Foreground" Value="White"></Setter>
+ <Setter Property="Background">
+ <Setter.Value>
+ <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
+ <GradientStop Color="#FFFF7A7A"/>
+ <GradientStop Color="Transparent" Offset="1"/>
+ </LinearGradientBrush>
+ </Setter.Value>
+ </Setter>
+ <Setter Property="BorderThickness" Value="1"></Setter>
+ <Setter Property="BorderBrush" Value="White"></Setter>
</Trigger>
</Style.Triggers>
</Style>
@@ -149,34 +60,29 @@
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Transparent"></Setter>
+ <Setter Property="Foreground" Value="White"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
- <DataGridTemplateColumn Header="#">
+ <DataGridTextColumn Width="Auto" Header="#" Binding="{Binding SegmentIndex}" />
+ <DataGridTemplateColumn Header="Status">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
- <materialDesign:PackIcon Width="16" Height="16">
+ <materialDesign:PackIcon VerticalAlignment="Center" HorizontalAlignment="Center">
<materialDesign:PackIcon.Style>
<Style TargetType="materialDesign:PackIcon">
- <Setter Property="Kind" Value="Alert"></Setter>
+ <Setter Property="Kind" Value="PauseCircle"></Setter>
+ <Setter Property="Foreground" Value="Gray"></Setter>
<Style.Triggers>
- <DataTrigger Binding="{Binding Category}" Value="Info">
- <Setter Property="Kind" Value="Information"></Setter>
- <Setter Property="Foreground" Value="DimGray"></Setter>
- </DataTrigger>
- <DataTrigger Binding="{Binding Category}" Value="Warning">
- <Setter Property="Kind" Value="Alert"></Setter>
- <Setter Property="Foreground" Value="#FFA300"></Setter>
- </DataTrigger>
- <DataTrigger Binding="{Binding Category}" Value="Error">
- <Setter Property="Kind" Value="AlertOctagon"></Setter>
- <Setter Property="Foreground" Value="#FF5C5C"></Setter>
+ <DataTrigger Binding="{Binding Started}" Value="True">
+ <Setter Property="Kind" Value="ClockFast"></Setter>
+ <Setter Property="Foreground" Value="White"></Setter>
</DataTrigger>
- <DataTrigger Binding="{Binding Category}" Value="Critical">
- <Setter Property="Kind" Value="BellPlus"></Setter>
- <Setter Property="Foreground" Value="Red"></Setter>
+ <DataTrigger Binding="{Binding Completed}" Value="True">
+ <Setter Property="Kind" Value="CheckCircle"></Setter>
+ <Setter Property="Foreground" Value="#29B31D"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
@@ -185,20 +91,318 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
- <DataGridTextColumn SortDirection="Descending" Header="DATE TIME" Binding="{Binding DateTime,Converter={StaticResource DateTimeUTCToStringConverter},ConverterParameter='MM/dd/yyyy HH:mm:ss.fff'}" />
- <DataGridTextColumn Header="GROUP" Binding="{Binding EventType.EventTypesGroup.Name}" />
- <DataGridTextColumn Header="EVENT" Binding="{Binding EventType.Name}" />
- <DataGridTemplateColumn Header="MESSAGE" Width="1*">
+ <DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
- <TextBlock Text="{Binding Description}" TextTrimming="CharacterEllipsis"></TextBlock>
+ <Rectangle Width="80" Fill="{Binding SegmentBrush}" Stroke="Gray"></Rectangle>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
+ <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
+ <DataGridTextColumn Header="Length" Binding="{Binding Length,StringFormat={}{0:F2} m}" />
+ <DataGridTextColumn Header="Progress" Binding="{Binding Progress,StringFormat={}{0:F2} m}" />
+ <DataGridTextColumn Header="Estimated Duration" Binding="{Binding EstimatedDuration,StringFormat='hh\\:mm\\:ss'}" />
+ <DataGridTextColumn Header="Remaining Time" Binding="{Binding RemainingTime,StringFormat='hh\\:mm\\:ss'}" />
</DataGrid.Columns>
</DataGrid>
- </Grid>
- </DockPanel>
+ </DockPanel>
+ </Grid>
+
+ <GridSplitter Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Stretch" Height="5" Background="Black" />
+ <Grid Grid.Row="2" Margin="0 40 0 0">
+ <DockPanel>
+ <StackPanel Margin="0 0 0 0" Orientation="Horizontal" DockPanel.Dock="Top">
+ <materialDesign:PackIcon Kind="Settings" Width="40" Height="40" />
+ <TextBlock FontSize="30" FontWeight="SemiBold" VerticalAlignment="Center" Margin="10 0 0 0">Events</TextBlock>
+ </StackPanel>
+ <Grid DockPanel.Dock="Bottom" Height="40">
+ <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0 0 0 0">
+ <Button Command="{Binding BackToJobCommand}" Style="{StaticResource MaterialDesignFlatButton}" FontSize="16">
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon VerticalAlignment="Center" Kind="KeyboardBackspace" Width="24" Height="24"></materialDesign:PackIcon>
+ <TextBlock Margin="10 0 0 0">BACK TO JOB</TextBlock>
+ </StackPanel>
+ </Button>
+ </StackPanel>
+ </Grid>
+
+ <Grid>
+ <DataGrid Background="Transparent" AutoGenerateColumns="False" SelectionMode="Single" ItemsSource="{Binding JobEvents}" SelectedItem="{Binding SelectedJobEvent}" RowHeight="40" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" IsReadOnly="True">
+ <DataGrid.RowStyle>
+ <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
+ <Style.Triggers>
+ <Trigger Property="IsMouseOver" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" />
+ <Setter Property="Cursor" Value="Hand"></Setter>
+ </Trigger>
+ <Trigger Property="IsSelected" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ </Trigger>
+ <Trigger Property="IsFocused" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ </Trigger>
+ </Style.Triggers>
+ </Style>
+ </DataGrid.RowStyle>
+ <DataGrid.CellStyle>
+ <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
+ <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
+ <Style.Triggers>
+ <Trigger Property="IsSelected" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ </Trigger>
+ </Style.Triggers>
+ </Style>
+ </DataGrid.CellStyle>
+ <DataGrid.Columns>
+ <DataGridTemplateColumn Header="#">
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <materialDesign:PackIcon Width="16" Height="16">
+ <materialDesign:PackIcon.Style>
+ <Style TargetType="materialDesign:PackIcon">
+ <Setter Property="Kind" Value="Alert"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding Category}" Value="Info">
+ <Setter Property="Kind" Value="Information"></Setter>
+ <Setter Property="Foreground" Value="DimGray"></Setter>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding Category}" Value="Warning">
+ <Setter Property="Kind" Value="Alert"></Setter>
+ <Setter Property="Foreground" Value="#FFA300"></Setter>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding Category}" Value="Error">
+ <Setter Property="Kind" Value="AlertOctagon"></Setter>
+ <Setter Property="Foreground" Value="#FF5C5C"></Setter>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding Category}" Value="Critical">
+ <Setter Property="Kind" Value="BellPlus"></Setter>
+ <Setter Property="Foreground" Value="Red"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </materialDesign:PackIcon.Style>
+ </materialDesign:PackIcon>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+ <DataGridTextColumn SortDirection="Descending" Header="DATE TIME" Binding="{Binding DateTime,Converter={StaticResource DateTimeUTCToStringConverter},ConverterParameter='MM/dd/yyyy HH:mm:ss.fff'}" />
+ <DataGridTextColumn Header="GROUP" Binding="{Binding EventType.EventTypesGroup.Name}" />
+ <DataGridTextColumn Header="EVENT" Binding="{Binding EventType.Name}" />
+ <DataGridTemplateColumn Header="MESSAGE" Width="1*">
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <TextBlock Text="{Binding Description}" TextTrimming="CharacterEllipsis"></TextBlock>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+ </DataGrid.Columns>
+ </DataGrid>
+ </Grid>
+ </DockPanel>
+ </Grid>
+ </Grid>
+
+ <Grid HorizontalAlignment="Right">
+ <Grid RenderTransformOrigin="1,0.5">
+ <Grid.Style>
+ <Style TargetType="Grid">
+ <Setter Property="LayoutTransform">
+ <Setter.Value>
+ <ScaleTransform ScaleY="1" ScaleX="0" />
+ </Setter.Value>
+ </Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding ElementName=toggleOutline,Path=IsChecked}" Value="True">
+ <DataTrigger.EnterActions>
+ <BeginStoryboard>
+ <Storyboard>
+ <DoubleAnimation To="1" Duration="00:00:0.2" Storyboard.TargetProperty="LayoutTransform.ScaleX" />
+ </Storyboard>
+ </BeginStoryboard>
+ </DataTrigger.EnterActions>
+ <DataTrigger.ExitActions>
+ <BeginStoryboard>
+ <Storyboard>
+ <DoubleAnimation To="0" Duration="00:00:0.2" Storyboard.TargetProperty="LayoutTransform.ScaleX" />
+ </Storyboard>
+ </BeginStoryboard>
+ </DataTrigger.ExitActions>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Grid.Style>
+ <Border BorderBrush="Gray" BorderThickness="1 0 0 0" Background="White">
+ <Grid>
+ <ScrollViewer Padding="20" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
+ <StackPanel>
+ <TextBlock Text="JOB OUTLINE" HorizontalAlignment="Center" Margin="0 10 0 0" FontSize="30"></TextBlock>
+
+ <TextBlock FontSize="17" FontWeight="SemiBold" Margin="0 20 0 0">BASIC</TextBlock>
+ <ItemsControl Margin="10 0 0 0" ItemsSource="{Binding JobHandler.JobTicket,Converter={StaticResource ObjectToPropertiesConverter}}">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal" Margin="0 5 0 0">
+ <materialDesign:PackIcon Kind="Pencil" Width="12" Height="12" VerticalAlignment="Center" />
+ <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">
+ <Run Text="{Binding Name,Mode=OneWay}"></Run><Run>:</Run>
+ <Run Text="{Binding Value,Mode=OneWay}" FontWeight="SemiBold"></Run>
+ </TextBlock>
+ </StackPanel>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+
+ <TextBlock FontSize="17" FontWeight="SemiBold" Margin="0 20 0 0">SPOOL</TextBlock>
+ <ItemsControl Margin="10 0 0 0" ItemsSource="{Binding JobHandler.JobTicket.Spool,Converter={StaticResource ObjectToPropertiesConverter}}">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal" Margin="0 5 0 0">
+ <materialDesign:PackIcon Kind="Pencil" Width="12" Height="12" VerticalAlignment="Center" />
+ <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">
+ <Run Text="{Binding Name,Mode=OneWay}"></Run><Run>:</Run>
+ <Run Text="{Binding Value,Mode=OneWay}" FontWeight="SemiBold"></Run>
+ </TextBlock>
+ </StackPanel>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+
+ <TextBlock FontSize="17" FontWeight="SemiBold" Margin="0 20 0 0">PROCESS PARAMETERS</TextBlock>
+ <ItemsControl Margin="10 0 0 0" ItemsSource="{Binding JobHandler.JobTicket.ProcessParameters,Converter={StaticResource ObjectToPropertiesConverter}}">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal" Margin="0 5 0 0">
+ <materialDesign:PackIcon Kind="Settings" Width="12" Height="12" VerticalAlignment="Center" />
+ <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">
+ <Run Text="{Binding Name,Mode=OneWay}"></Run><Run>:</Run>
+ <Run Text="{Binding Value,Mode=OneWay}" FontWeight="SemiBold"></Run>
+ </TextBlock>
+ </StackPanel>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+
+ <TextBlock FontSize="17" FontWeight="SemiBold" Margin="0 20 0 0">SEGMENTS</TextBlock>
+ <ItemsControl Margin="10 0 0 0" ItemsSource="{Binding JobHandler.JobTicket.Segments}" AlternationCount="10000">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <StackPanel>
+ <TextBlock FontSize="14" FontWeight="SemiBold" Margin="0 10 0 0">
+ <Run>#</Run><Run Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=(ItemsControl.AlternationIndex),Mode=OneWay,Converter={StaticResource MathOperatorConverter},ConverterParameter='+1'}"></Run>
+ <Run Text="SEGMENT"></Run>
+ </TextBlock>
+
+ <ItemsControl Margin="10 0 0 0" ItemsSource="{Binding Converter={StaticResource ObjectToPropertiesConverter}}">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal" Margin="0 5 0 0">
+ <materialDesign:PackIcon Kind="Pencil" Width="12" Height="12" VerticalAlignment="Center" />
+ <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">
+ <Run Text="{Binding Name,Mode=OneWay}"></Run><Run>:</Run>
+ <Run Text="{Binding Value,Mode=OneWay}" FontWeight="SemiBold"></Run>
+ </TextBlock>
+ </StackPanel>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+
+ <TextBlock FontSize="12" FontWeight="SemiBold" Margin="27 10 0 0">BRUSH STOPS</TextBlock>
+ <ItemsControl Margin="40 0 0 0" ItemsSource="{Binding BrushStops}" AlternationCount="10000">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <StackPanel>
+ <TextBlock FontSize="11" FontWeight="SemiBold" Margin="0 5 0 0">
+ <Run>#</Run><Run Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=(ItemsControl.AlternationIndex),Mode=OneWay,Converter={StaticResource MathOperatorConverter},ConverterParameter='+1'}"></Run>
+ <Run Text="STOP"></Run>
+ </TextBlock>
+
+ <ItemsControl Margin="10 0 0 0" ItemsSource="{Binding Converter={StaticResource ObjectToPropertiesConverter}}">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal" Margin="0 5 0 0">
+ <materialDesign:PackIcon Kind="Pencil" Width="12" Height="12" VerticalAlignment="Center" />
+ <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">
+ <Run Text="{Binding Name,Mode=OneWay}"></Run><Run>:</Run>
+ <Run Text="{Binding Value,Mode=OneWay}" FontWeight="SemiBold"></Run>
+ </TextBlock>
+ </StackPanel>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+
+ <TextBlock FontSize="12" FontWeight="SemiBold" Margin="27 10 0 0">DISPENSERS</TextBlock>
+ <ItemsControl Margin="40 0 0 0" ItemsSource="{Binding Dispensers}" AlternationCount="10000">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <StackPanel>
+ <TextBlock FontSize="11" FontWeight="SemiBold" Margin="0 5 0 0">
+ <Run>#</Run><Run Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=(ItemsControl.AlternationIndex),Mode=OneWay,Converter={StaticResource MathOperatorConverter},ConverterParameter='+1'}"></Run>
+ <Run Text="DISPENSER"></Run>
+ </TextBlock>
+
+ <ItemsControl Margin="10 0 0 0" ItemsSource="{Binding Converter={StaticResource ObjectToPropertiesConverter}}">
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal" Margin="0 5 0 0">
+ <materialDesign:PackIcon Kind="ArrowRightBoldCircle" Width="12" Height="12" VerticalAlignment="Center" />
+ <TextBlock Margin="5 0 0 0" VerticalAlignment="Center">
+ <Run Text="{Binding Name,Mode=OneWay}"></Run><Run>:</Run>
+ <Run Text="{Binding Value,Mode=OneWay}" FontWeight="SemiBold"></Run>
+ </TextBlock>
+ </StackPanel>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+ </StackPanel>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+ </StackPanel>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+ </StackPanel>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+ </StackPanel>
+ </ScrollViewer>
+ </Grid>
+ </Border>
+ </Grid>
+
+ <Border VerticalAlignment="Center" HorizontalAlignment="Left" Background="White" Width="30" Height="120" CornerRadius="10 0 0 10" Margin="-28 0 0 0" BorderBrush="Gray" BorderThickness="1 1 0 1">
+ <ToggleButton x:Name="toggleOutline" BorderThickness="0" Cursor="Hand" Background="Transparent">
+ <ToggleButton.Style>
+ <Style TargetType="ToggleButton">
+ <Setter Property="Opacity" Value="1"></Setter>
+ </Style>
+ </ToggleButton.Style>
+ <ToggleButton.Template>
+ <ControlTemplate TargetType="ToggleButton">
+ <Border Background="Transparent">
+ <ContentPresenter></ContentPresenter>
+ </Border>
+
+ <ControlTemplate.Triggers>
+ <Trigger Property="IsPressed" Value="True">
+ <Setter Property="Opacity" Value="0.5"></Setter>
+ </Trigger>
+ </ControlTemplate.Triggers>
+ </ControlTemplate>
+ </ToggleButton.Template>
+ <TextBlock Text="OUTLINE" HorizontalAlignment="Center" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5" Foreground="#FF5151">
+ <TextBlock.LayoutTransform>
+ <RotateTransform Angle="270" />
+ </TextBlock.LayoutTransform>
+ </TextBlock>
+ </ToggleButton>
+ </Border>
+
</Grid>
</Grid>
</UserControl>