aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics
diff options
context:
space:
mode:
authorVictoria Plitt <Victoria.Plitt@twine-s.com>2020-03-04 13:24:05 +0200
committerVictoria Plitt <Victoria.Plitt@twine-s.com>2020-03-04 13:24:05 +0200
commit122461b98adad3fc7a267cdb6a0126a6439c5e78 (patch)
treeb2fcb964e61d84d04c879fefa427b7fb435e4c3a /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics
parent4c8c314504a2280a1ee4c48c0eb6132504dde886 (diff)
downloadTango-122461b98adad3fc7a267cdb6a0126a6439c5e78.tar.gz
Tango-122461b98adad3fc7a267cdb6a0126a6439c5e78.zip
Statistics JobRunView GUI changes.
Related Work Items: #2509
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/DateTimeToStringFormatConverter.cs28
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/MidTankLevelToElementHeightConverter.cs2
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj1
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs43
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml248
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml.cs16
6 files changed, 200 insertions, 138 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/DateTimeToStringFormatConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/DateTimeToStringFormatConverter.cs
new file mode 100644
index 000000000..79b8cb92e
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/DateTimeToStringFormatConverter.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Data;
+
+namespace Tango.MachineStudio.Statistics.Converters
+{
+ public class DateTimeToStringFormatConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if(value is DateTime)
+ {
+ DateTime date = (DateTime)value;
+ return date.ToLocalTime().ToString(@"hh\:mm\:ss");
+ }
+ return "";
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/MidTankLevelToElementHeightConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/MidTankLevelToElementHeightConverter.cs
index e9f513cc3..4ea46336f 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/MidTankLevelToElementHeightConverter.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/MidTankLevelToElementHeightConverter.cs
@@ -25,7 +25,7 @@ namespace Tango.MachineStudio.Statistics.Converters
if (midTankLevel < (MAX_QUANTITY/10))// if quantity < 10|% set 2 pixel
delta = 2.0;
var test = delta;
- return test;// (parentActualHeight - (midTankLevel / MAX_QUANTITY) * parentActualHeight);
+ return parentActualHeight - delta;
}
catch
{
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj
index 603429f94..1300d7dba 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj
@@ -74,6 +74,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Converters\CollectionConverter .cs" />
+ <Compile Include="Converters\DateTimeToStringFormatConverter.cs" />
<Compile Include="Converters\LiquidTypeToColorConverter.cs" />
<Compile Include="Converters\MidTankLevelToElementHeightConverter.cs" />
<Compile Include="Converters\StringToBoolYesNoNullConverter.cs" />
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs
index 07e431751..567867a80 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs
@@ -25,7 +25,6 @@ namespace Tango.MachineStudio.Statistics.ViewModels
private List<Machine> _allMachines;
private List<User> _allUsers;
private List<RmlModel> _rmlsModels;
- private List<Job> _allJobRuns;
#region Properties
@@ -172,7 +171,7 @@ namespace Tango.MachineStudio.Statistics.ViewModels
/// </summary>
public ISuggestionProvider JobsProvider { get; set; }
- private Job _selectedJob;
+ private Job _selectedJob;
/// <summary>
/// Gets or sets the job. Used as Sele
/// </summary>
@@ -182,17 +181,10 @@ namespace Tango.MachineStudio.Statistics.ViewModels
set
{
_selectedJob = value;
- SelectedJobName = _selectedJob != null ? _selectedJob.Name : "";
RaisePropertyChangedAuto();
}
}
- /// <summary>
- /// Gets or sets the name of the selected job. Used in filter.
- /// </summary>
- private string SelectedJobName { get; set; }
-
-
#endregion
public RelayCommand LoadJobRunsCommand { get; set; }
@@ -201,7 +193,7 @@ namespace Tango.MachineStudio.Statistics.ViewModels
{
_notification = notificationProvider;
JobRuns = new ObservableCollection<JobRunModel>();
- LoadJobRunsCommand = new RelayCommand(async () => await LoadJobRuns(), ()=> IsFree);
+ LoadJobRunsCommand = new RelayCommand(async () => await LoadJobRuns(), () => IsFree);
LengthUpperValue = 5000.0;
LengthLowerValue = 0.0;
DateTime now = DateTime.Now;
@@ -233,7 +225,7 @@ namespace Tango.MachineStudio.Statistics.ViewModels
JobRunStatus.Failed,
});
- JobRunSelectedStatuses.SelectionChanged -= (x,y)=> RaisePropertyChanged(nameof(JobRunSelectedStatuses));
+ JobRunSelectedStatuses.SelectionChanged -= (x, y) => RaisePropertyChanged(nameof(JobRunSelectedStatuses));
JobRunSelectedStatuses.SelectionChanged += (x, y) => RaisePropertyChanged(nameof(JobRunSelectedStatuses));
IsGradientSelection = new SelectedObjectCollection<bool>(new ObservableCollection<bool>
@@ -251,15 +243,25 @@ namespace Tango.MachineStudio.Statistics.ViewModels
{
try
{
- SelectedJobName = filter;
- return _allJobRuns.Where(x => x.Name != null && x.Name.ToString().StartsWith(filter, StringComparison.CurrentCultureIgnoreCase)).ToList();
+ if (filter != null)
+ {
+ using (ObservablesContext db = ObservablesContext.CreateDefault())
+ {
+ return db.Jobs.Where(x => x.Name!= null && x.Name.ToLower().Contains(filter.ToLower())).ToList();
+ }
+ }
+ else
+ {
+ return new List<Job>();
+ }
}
- catch
+ catch (Exception ex)
{
+ LogManager.Log(ex, "Error loading jobs.");
return null;
}
});
-
+
}
/// <summary>
@@ -275,13 +277,11 @@ namespace Tango.MachineStudio.Statistics.ViewModels
using (var db = ObservablesContext.CreateDefault())
{
- _allJobRuns = await db.Jobs.ToListAsync(); ;
_allMachines = await db.Machines.ToListAsync();
_allUsers = await db.Users.Include(x => x.Contact).ToListAsync();
- _rmlsModels = await db.Rmls.Select(x=> new RmlModel(){ Name = x.Name, Guid = x.Guid}).ToListAsync();
+ _rmlsModels = await db.Rmls.Select(x => new RmlModel() { Name = x.Name, Guid = x.Guid }).ToListAsync();
SelectedMachines = new SelectedObjectCollection<Machine>(_allMachines.ToObservableCollection(), new ObservableCollection<Machine>());
SelectedThreads = new SelectedObjectCollection<RmlModel>(_rmlsModels.ToObservableCollection(), new ObservableCollection<RmlModel>());
-
}
}
catch (Exception ex)
@@ -311,6 +311,7 @@ namespace Tango.MachineStudio.Statistics.ViewModels
DateTime startUtc = StartSelectedDate.ToUniversalTime();
TimeSpan offsetTime = (EndSelectedDate.Date == DateTime.Now.Date) ? DateTime.Now.TimeOfDay : new TimeSpan(23, 59, 59);
DateTime endUtc = EndSelectedDate.ToUniversalTime() + offsetTime;
+ string jobName = SelectedJob == null ? "" : SelectedJob.Name;
var runs = await new JobRunsCollectionBuilder(db).Set(x => x.ActualStartDate <= DbFunctions.TruncateTime(endUtc) && x.ActualStartDate >= DbFunctions.TruncateTime(startUtc.Date))
.WithMachines(SelectedMachines.SynchedSource.ToList())
@@ -318,10 +319,10 @@ namespace Tango.MachineStudio.Statistics.ViewModels
.WithJobStatus(JobRunSelectedStatuses.SynchedSource)
.WithGradient(IsGradientSelection.SynchedSource)
.WithRmls(SelectedThreads.SynchedSource.Select(x => x.Guid).ToList())
- .Query(y => y.Where(x => (String.IsNullOrEmpty(SelectedJobName) || x.JobName.ToString().ToLower().StartsWith(SelectedJobName.ToLower()))
- && ( x.JobLength < LengthUpperValue && x.JobLength >= LengthLowerValue)
- ))
+ .Query(y => y.Where(x => ( String.IsNullOrEmpty(jobName) || x.JobName.ToLower().StartsWith(jobName.ToLower()))
+ && (x.JobLength < LengthUpperValue && x.JobLength >= LengthLowerValue)))
.BuildListAsync();
+
var modelList = runs.Select(x => new JobRunModel()
{
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml
index c82fa3beb..82043ae72 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml
@@ -17,7 +17,7 @@
<sharedConverters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
<sharedConverters:BooleanToYesNoConverter x:Key="BooleanToYesNoConverter"/>
<sharedConverters:EnumToDescriptionConverter x:Key="EnumToDescriptionConverter" />
- <sharedConverters:TimeSpanToTwoDigitsTimeConverter x:Key="TimeSpanToTwoDigitsTimeConverter" />
+ <localConverters:DateTimeToStringFormatConverter x:Key="DateTimeToStringFormatConverter" />
<sharedConverters:DateTimeUTCToShortDateTimeConverter x:Key="DateTimeUTCToShortDateTimeConverter"/>
<localConverters:StringToBoolYesNoNullConverter x:Key="StringToBoolYesNoNullConverter"/>
<localConverters:LiquidTypeToColorConverter x:Key="LiquidTypeToColorConverter"/>
@@ -36,12 +36,44 @@
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
+ <DataTemplate x:Key="PopUpDataTemplate">
+ <CheckBox VerticalAlignment="Center" FontSize="11" DockPanel.Dock="Left" IsChecked="{Binding IsSelected}">
+ <CheckBox.Content>
+ <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Text="{Binding Data}"></TextBlock>
+ </CheckBox.Content>
+ </CheckBox>
+ </DataTemplate>
+
+ <DataTemplate x:Key="PopUpSNDataTemplate">
+ <CheckBox VerticalAlignment="Center" FontSize="11" DockPanel.Dock="Left" IsChecked="{Binding IsSelected}" >
+ <CheckBox.Content>
+ <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Text="{Binding Data.SerialNumber}" ToolTip="{Binding Data.SerialNumber}" FontFamily="{StaticResource FontName}"></TextBlock>
+ </CheckBox.Content>
+ </CheckBox>
+ </DataTemplate>
+
+ <DataTemplate x:Key="PopupBoolDataTemplate">
+ <CheckBox VerticalAlignment="Center" FontSize="11" DockPanel.Dock="Left" IsChecked="{Binding IsSelected}">
+ <CheckBox.Content>
+ <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Text="{Binding Data, Converter={StaticResource BooleanToYesNoConverter}}"/>
+ </CheckBox.Content>
+ </CheckBox>
+ </DataTemplate>
+
+ <DataTemplate x:Key="PopupThreadDataTemplate">
+ <CheckBox VerticalAlignment="Center" FontSize="11" DockPanel.Dock="Left" IsChecked="{Binding IsSelected}" >
+ <CheckBox.Content>
+ <TextBlock Margin="5 0 5 0" VerticalAlignment="Center" Text="{Binding Data.Name}" ToolTip="{Binding Data.Name}" FontFamily="{StaticResource FontName}" FontSize="11"></TextBlock>
+ </CheckBox.Content>
+ </CheckBox>
+ </DataTemplate>
+
<DataTemplate x:Key="LiquidQuantitiesTemplate">
- <DockPanel ToolTip="{Binding Quantity}">
- <Grid DockPanel.Dock="Top" Height="40" Margin="2 0 2 -5" >
- <Border x:Name="LiquidTypeBorder" BorderThickness="1" BorderBrush="{StaticResource borderBrush}" CornerRadius="2" ClipToBounds="True" >
- <Canvas Width="16" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="0">
- <Border Height="39" Width="16" MinHeight="2" CornerRadius="0 0 2 2 " BorderThickness="0 0 0 3">
+ <DockPanel ToolTip="{Binding Quantity}" ToolTipService.Placement="Center" ToolTipService.VerticalOffset="10">
+ <Grid DockPanel.Dock="Top" Height="40" Margin="8 10 0 0" Width="16">
+ <Border x:Name="LiquidTypeBorder" BorderThickness="1" BorderBrush="{StaticResource borderBrush}" CornerRadius="2">
+ <Canvas x:Name="LiquidCanvas" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="0" ClipToBounds="True" ToolTip="{Binding Quantity}" ToolTipService.Placement="Left" ToolTipService.VerticalOffset="10">
+ <Border Height="{Binding RelativeSource={RelativeSource AncestorType=Canvas}, Path=ActualHeight }" Width="{Binding RelativeSource={RelativeSource AncestorType=Canvas}, Path=ActualWidth }">
<Border.Background>
<SolidColorBrush Color="{Binding LiquidType,Converter={StaticResource LiquidTypeToColorConverter}}" />
</Border.Background>
@@ -50,7 +82,7 @@
<Setter Property="Canvas.Top" >
<Setter.Value>
<MultiBinding Converter="{StaticResource MidTankLevelToElementHeightConverter}">
- <Binding RelativeSource="{RelativeSource FindAncestor,AncestorType={x:Type Border}, AncestorLevel=1}" Path="ActualHeight" />
+ <Binding RelativeSource="{RelativeSource Self}" Path="ActualHeight" />
<Binding Path="Quantity" />
</MultiBinding>
</Setter.Value>
@@ -65,6 +97,11 @@
</DockPanel>
</DataTemplate>
+ <Style x:Key="{x:Type ToolTip}" TargetType="{x:Type ToolTip}" BasedOn="{StaticResource MaterialDesignToolTip}">
+ <Setter Property="Background" Value="{StaticResource Logging.Background}" />
+ <Setter Property="Foreground" Value="{StaticResource MainWindow.Foreground}" />
+ </Style>
+
</UserControl.Resources>
<Grid IsEnabled="{Binding IsFree}" >
@@ -85,7 +122,7 @@
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
- <ColumnDefinition Width="120"/>
+ <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid >
@@ -96,7 +133,7 @@
<StackPanel Orientation="Horizontal" Grid.Row="0">
<StackPanel Margin="10 5 0 0" Orientation="Vertical" HorizontalAlignment="Center">
<TextBlock Text="Machine:" VerticalAlignment="Center" FontSize="11"></TextBlock>
- <ToggleButton Width="130" Margin="0 10 0 0" x:Name="selectMachineButton" HorizontalAlignment="Left" FontSize="16" VerticalAlignment="Center">
+ <ToggleButton Width="140" Margin="0 10 0 0" x:Name="selectMachineButton" HorizontalAlignment="Left" FontSize="16" VerticalAlignment="Center">
<ToggleButton.Template>
<ControlTemplate>
<Grid>
@@ -120,20 +157,13 @@
</TextBlock>
</DockPanel>
</Border>
- <Popup StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}" >
- <Border Background="{StaticResource Logging.Background}" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}" CornerRadius="3" BorderThickness="0.5" Padding="2">
- <ScrollViewer MaxHeight="600" Background="{DynamicResource ComboBox.Floating.Background}">
- <ItemsControl ItemsSource="{Binding SelectedMachines}" Foreground="{StaticResource MainWindow.Foreground}">
- <ItemsControl.ItemTemplate>
- <DataTemplate>
- <CheckBox VerticalAlignment="Center" DockPanel.Dock="Left" IsChecked="{Binding IsSelected}" >
- <CheckBox.Content>
- <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Text="{Binding Data.SerialNumber}" ToolTip="{Binding Data.SerialNumber}" FontFamily="{StaticResource FontName}"></TextBlock>
- </CheckBox.Content>
- </CheckBox>
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- </ItemsControl>
+ <Popup AllowsTransparency="True" StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }">
+ <Border Padding="3" CornerRadius="0 0 3 3" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}" Margin="5" Background="#F6F6F6" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}" >
+ <Border.Effect>
+ <DropShadowEffect Opacity="0.2" />
+ </Border.Effect>
+ <ScrollViewer MaxHeight="600" Background="#F6F6F6" >
+ <ItemsControl ItemsSource="{Binding SelectedMachines}" Foreground="{StaticResource MainWindow.Foreground}" ItemTemplate="{StaticResource PopUpSNDataTemplate}"/>
</ScrollViewer>
</Border>
</Popup>
@@ -154,10 +184,9 @@
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="1">
- <StackPanel Margin="10 20 0 0" Orientation="Vertical" HorizontalAlignment="Center">
- <!--<TextBlock Text="Job Name:" VerticalAlignment="Center" FontSize="11"></TextBlock>-->
- <!--<TextBox Text="{Binding JobName}" VerticalAlignment="Center" FontSize="11" Margin="0 5 0 0" Width="130"></TextBox>-->
- <autoComplete:AutoCompleteTextBox Provider="{Binding JobsProvider}" Width="130" FontSize="11" LoadingContent="Loading..." SelectedItem="{Binding SelectedJob,Mode=TwoWay}" materialDesign:HintAssist.Hint="Job Name" DisplayMember="Name" materialDesign:HintAssist.IsFloating="True">
+ <StackPanel Margin="10 10 0 0" Orientation="Vertical" HorizontalAlignment="Center">
+ <TextBlock Text="Job Name:" VerticalAlignment="Center" FontSize="11"></TextBlock>
+ <autoComplete:AutoCompleteTextBox Margin="0 10 0 0" Provider="{Binding JobsProvider}" Width="140" FontSize="11" LoadingContent="Loading..." SelectedItem="{Binding SelectedJob,Mode=TwoWay}" materialDesign:HintAssist.Hint="All" DisplayMember="Name" materialDesign:HintAssist.IsFloating="False">
<autoComplete:AutoCompleteTextBox.ItemTemplate>
<DataTemplate>
<StackPanel>
@@ -167,7 +196,7 @@
</autoComplete:AutoCompleteTextBox.ItemTemplate>
</autoComplete:AutoCompleteTextBox>
</StackPanel>
- <StackPanel Margin="40 10 0 0" Orientation="Vertical" HorizontalAlignment="Center">
+ <StackPanel Margin="50 10 0 0" Orientation="Vertical" HorizontalAlignment="Center">
<TextBlock Text="Source:" VerticalAlignment="Center" FontSize="11"></TextBlock>
<ToggleButton Width="130" Height="24" Margin="0 10 0 0" x:Name="selectJobRunSources" HorizontalAlignment="Left" FontSize="16" VerticalAlignment="Center">
<ToggleButton.Template>
@@ -181,19 +210,13 @@
<TextBlock VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" FontSize="11" Margin="5" Text="{Binding JobRunSelectedSources.SynchedSource, Converter={StaticResource CollectionConverter}}"/>
</DockPanel>
</Border>
- <Popup StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }" Width="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}">
- <Border Background="{DynamicResource ComboBox.Floating.Background}" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}" >
- <ItemsControl ItemsSource="{Binding JobRunSelectedSources}" Foreground="{StaticResource MainWindow.Foreground}">
- <ItemsControl.ItemTemplate>
- <DataTemplate>
- <CheckBox VerticalAlignment="Center" DockPanel.Dock="Left" IsChecked="{Binding IsSelected}">
- <CheckBox.Content>
- <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Text="{Binding Data}"></TextBlock>
- </CheckBox.Content>
- </CheckBox>
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- </ItemsControl>
+ <Popup AllowsTransparency="True" StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }">
+ <Border Padding="3" CornerRadius="0 0 3 3" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}" Margin="5" Background="#F6F6F6" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}" >
+ <Border.Effect>
+ <DropShadowEffect Opacity="0.2" />
+ </Border.Effect>
+ <ItemsControl ItemsSource="{Binding JobRunSelectedSources}" Foreground="{StaticResource MainWindow.Foreground}" ItemTemplate="{StaticResource PopUpDataTemplate}"/>
+
</Border>
</Popup>
</Grid>
@@ -201,7 +224,7 @@
</ToggleButton.Template>
</ToggleButton>
</StackPanel>
- <StackPanel Margin="40 10 0 0" Orientation="Vertical" HorizontalAlignment="Center">
+ <StackPanel Margin="50 10 0 0" Orientation="Vertical" HorizontalAlignment="Center">
<TextBlock Text="Gradient:" VerticalAlignment="Center" FontSize="11"></TextBlock>
<ToggleButton Height="24" Width="130" Margin="0 10 0 0" x:Name="selectIsGradient" HorizontalAlignment="Left" FontSize="16" VerticalAlignment="Center">
<ToggleButton.Template>
@@ -217,19 +240,13 @@
</TextBlock>
</DockPanel>
</Border>
- <Popup StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }" Width="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}">
- <Border Padding="5" Background="{DynamicResource ComboBox.Floating.Background}" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}">
- <ItemsControl ItemsSource="{Binding IsGradientSelection}" Foreground="{StaticResource MainWindow.Foreground}">
- <ItemsControl.ItemTemplate>
- <DataTemplate>
- <CheckBox VerticalAlignment="Center" DockPanel.Dock="Left" IsChecked="{Binding IsSelected}">
- <CheckBox.Content>
- <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Text="{Binding Data, Converter={StaticResource BooleanToYesNoConverter}}"/>
- </CheckBox.Content>
- </CheckBox>
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- </ItemsControl>
+ <Popup AllowsTransparency="True" StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }">
+ <Border Padding="3" CornerRadius="0 0 3 3" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}" Margin="5" Background="#F6F6F6" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}">
+ <Border.Effect>
+ <DropShadowEffect Opacity="0.2" />
+ </Border.Effect>
+ <ItemsControl ItemsSource="{Binding IsGradientSelection}" Foreground="{StaticResource MainWindow.Foreground}" ItemTemplate="{StaticResource PopupBoolDataTemplate}"/>
+
</Border>
</Popup>
</Grid>
@@ -239,14 +256,14 @@
</StackPanel>
<StackPanel Margin="40 10 0 0" Orientation="Vertical" HorizontalAlignment="Center">
<TextBlock Text="Length:" VerticalAlignment="Center" FontSize="11"></TextBlock>
- <Border MinWidth="200" BorderThickness="1" CornerRadius="3" BorderBrush="{StaticResource borderBrush}" Margin="0 5 0 0" Height="40">
- <StackPanel Orientation="Horizontal" Width="200" Margin="2 0 2 0">
- <TextBlock Text="{Binding LengthLowerValue, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" FontSize="11"></TextBlock>
- <mahapps:RangeSlider Height="40" Margin="5 5 5 5" Minimum="0" Maximum="5000" Width="140"
- LowerValue="{Binding LengthLowerValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Delay=100}"
- UpperValue="{Binding LengthUpperValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Delay=100}"
+ <Border BorderThickness="1" CornerRadius="3" BorderBrush="{StaticResource borderBrush}" Margin="0 10 0 0" Height="24" Padding="10 0">
+ <StackPanel Orientation="Horizontal">
+ <TextBlock Text="{Binding LengthLowerValue, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" FontSize="11" Width="30"></TextBlock>
+ <mahapps:RangeSlider Focusable="True" Height="40" Margin="5 5 5 5" Minimum="0" Maximum="5000" Width="140" ExtendedMode="True"
+ LowerValue="{Binding LengthLowerValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
+ UpperValue="{Binding LengthUpperValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Center" IsSnapToTickEnabled="True" FontSize="8"/>
- <TextBlock Text="{Binding LengthUpperValue}" VerticalAlignment="Center" FontSize="11"></TextBlock>
+ <TextBlock Text="{Binding LengthUpperValue}" VerticalAlignment="Center" FontSize="11" Width="30"></TextBlock>
</StackPanel>
</Border>
</StackPanel>
@@ -264,19 +281,12 @@
<TextBlock VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" FontSize="11" Margin="5" Text="{Binding JobRunSelectedStatuses.SynchedSource, Converter={StaticResource CollectionConverter}}"/>
</DockPanel>
</Border>
- <Popup StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}">
- <Border Padding="5" Background="{DynamicResource ComboBox.Floating.Background}" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}" >
- <ItemsControl ItemsSource="{Binding JobRunSelectedStatuses}" Foreground="{StaticResource MainWindow.Foreground}">
- <ItemsControl.ItemTemplate>
- <DataTemplate>
- <CheckBox VerticalAlignment="Center" DockPanel.Dock="Left" IsChecked="{Binding IsSelected}">
- <CheckBox.Content>
- <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Text="{Binding Data}"/>
- </CheckBox.Content>
- </CheckBox>
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- </ItemsControl>
+ <Popup AllowsTransparency="True" StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }">
+ <Border Padding="3" CornerRadius="0 0 3 3" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}" Margin="5" Background="#F6F6F6" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}" >
+ <Border.Effect>
+ <DropShadowEffect Opacity="0.2" />
+ </Border.Effect>
+ <ItemsControl ItemsSource="{Binding JobRunSelectedStatuses}" Foreground="{StaticResource MainWindow.Foreground}" ItemTemplate="{StaticResource PopUpDataTemplate}"/>
</Border>
</Popup>
</Grid>
@@ -310,20 +320,14 @@
</TextBlock>
</DockPanel>
</Border>
- <Popup StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}" >
- <Border Background="{DynamicResource ComboBox.Floating.Background}" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}" CornerRadius="3" BorderThickness="0.5" Padding="2">
+ <Popup AllowsTransparency="True" StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }" >
+ <Border Padding="3" CornerRadius="0 0 3 3" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}" Margin="5" Background="#F6F6F6" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}" >
+ <Border.Effect>
+ <DropShadowEffect Opacity="0.2" />
+ </Border.Effect>
<ScrollViewer MaxHeight="600" Background="{DynamicResource ComboBox.Floating.Background}">
- <ItemsControl ItemsSource="{Binding SelectedThreads}" Foreground="{StaticResource MainWindow.Foreground}">
- <ItemsControl.ItemTemplate>
- <DataTemplate>
- <CheckBox VerticalAlignment="Center" DockPanel.Dock="Left" IsChecked="{Binding IsSelected}" >
- <CheckBox.Content>
- <TextBlock Margin="5 0 5 0" VerticalAlignment="Center" Text="{Binding Data.Name}" ToolTip="{Binding Data.Name}" FontFamily="{StaticResource FontName}" FontSize="16"></TextBlock>
- </CheckBox.Content>
- </CheckBox>
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- </ItemsControl>
+ <ItemsControl ItemsSource="{Binding SelectedThreads}" Foreground="{StaticResource MainWindow.Foreground}" ItemTemplate="{StaticResource PopupThreadDataTemplate}"/>
+
</ScrollViewer>
</Border>
</Popup>
@@ -334,30 +338,41 @@
</StackPanel>
</StackPanel>
</Grid>
- <Button Grid.Column="1" HorizontalAlignment="Right" Command="{Binding LoadJobRunsCommand}" Margin="10" Width="100" VerticalAlignment="Center">GO</Button>
+ <Button Grid.Column="1" HorizontalAlignment="Right" Command="{Binding LoadJobRunsCommand}" Margin="0 0 10 0" Padding="70 15" Height="Auto" VerticalAlignment="Center">RUN</Button>
</Grid>
</Border>
</Grid>
- <DataGrid Grid.Row="1" Margin="20 0 0 10" SelectionMode="Single" SelectionUnit="FullRow" BorderBrush="{StaticResource borderBrush}" IsReadOnly="True" BorderThickness="1" RowHeight="80"
- Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserReorderColumns="True"
- CanUserAddRows="False" CanUserDeleteRows="False" ItemsSource="{Binding JobRuns}" HorizontalScrollBarVisibility="Disabled"
- SelectedItem="{Binding SelectedJobRun}" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" FontSize="11">
-
+ <DataGrid x:Name="ItemsGrid" GridLinesVisibility="None" Grid.Row="1" Margin="20 0 0 10" SelectionMode="Single" SelectionUnit="FullRow" BorderBrush="{StaticResource borderBrush}" IsReadOnly="True" BorderThickness="1" RowHeight="80"
+ Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserReorderColumns="False"
+ CanUserAddRows="False" CanUserDeleteRows="False" ItemsSource="{Binding JobRuns}" HorizontalScrollBarVisibility="Disabled" CanUserResizeColumns="False" CanUserResizeRows="False"
+ SelectedItem="{Binding SelectedJobRun}" CanUserSortColumns="True" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" FontSize="11">
+
+ <DataGrid.Resources>
+ <Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
+ <Setter Property="HorizontalAlignment" Value="Left"></Setter>
+ <Setter Property="HorizontalContentAlignment" Value="Left"></Setter>
+ <Setter Property="Padding" Value="0 8 0 8"></Setter>
+ <Setter Property="Margin" Value="0 0 0 0"></Setter>
+ <Setter Property="FontWeight" Value="SemiBold"/>
+ </Style>
+ </DataGrid.Resources>
+
<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>
- <Setter Property="VerticalAlignment" Value="Stretch"/>
+ <Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
- <!--<Setter Property="Template">
+ <Setter Property="Margin" Value="0 0 10 0"/>
+ <Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</ControlTemplate>
</Setter.Value>
- </Setter>-->
+ </Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Transparent"></Setter>
@@ -368,7 +383,8 @@
</DataGrid.CellStyle>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
-
+ <Setter Property="BorderThickness" Value="0 0 0 1"/>
+ <Setter Property="BorderBrush" Value="LightGray"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Transparent"></Setter>
@@ -386,10 +402,10 @@
</DataGrid.RowStyle>
<DataGrid.Columns>
- <DataGridTemplateColumn Header="#">
+ <DataGridTemplateColumn Header="" Width="50">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
- <materialDesign:PackIcon Width="24" Height="24" Margin="3 -5 0 0">
+ <materialDesign:PackIcon Width="24" Height="24" Margin="8 -5 0 0">
<materialDesign:PackIcon.Style>
<Style TargetType="materialDesign:PackIcon">
<Setter Property="Kind" Value="Check"></Setter>
@@ -413,20 +429,20 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
- <DataGridTextColumn Header="ID" Binding="{Binding JobRun.ID}" MaxWidth="100" ElementStyle="{StaticResource WrapText}"/>
- <DataGridTextColumn Header="Machine" Binding="{Binding Machine.SerialNumber}" Width="Auto" />
- <DataGridTextColumn Header="User" Binding="{Binding User.Contact.FullName}" Width="80" ElementStyle="{StaticResource WrapText}"/>
- <DataGridTextColumn Header="Job Name" Binding="{Binding JobRun.JobName}" MaxWidth="100" ElementStyle="{StaticResource WrapText}"/>
- <DataGridTextColumn Header="Length" Binding="{Binding JobRun.JobLength, StringFormat={}{0:0.00}}" Width="Auto" />
- <DataGridTextColumn Header="Source" Binding="{Binding JobRun.Source, Converter={StaticResource EnumToDescriptionConverter}}" Width="Auto" />
- <DataGridTextColumn Header="Upload &#10;Duration" Binding="{Binding UploadDuration, Converter={StaticResource TimeSpanToTwoDigitsTimeConverter}, FallbackValue=5}" Width="Auto"/>
- <DataGridTextColumn Header="Heating &#10;Duration" Binding="{Binding HeatingDuration, Converter={StaticResource TimeSpanToTwoDigitsTimeConverter}, FallbackValue=5}" Width="Auto" />
- <DataGridTextColumn Header="Start Time" Binding="{Binding JobRun.ActualStartDate, Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="Auto" />
- <DataGridTextColumn Header="IsGradient" Binding="{Binding JobRun.IsGradient}" Width="Auto" />
- <DataGridTextColumn Header="GR" Binding="{Binding JobRun.GradientResolutionCm}" Width="Auto" />
- <DataGridTextColumn Header="Status" Binding="{Binding JobRun.JobRunStatus, Converter={StaticResource EnumToDescriptionConverter}}" Width="Auto"/>
- <DataGridTextColumn Header="End Time" Binding="{Binding JobRun.EndDate, Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="Auto" />
- <DataGridTextColumn Header="End &#10;Position" Binding="{Binding JobRun.EndPosition, StringFormat={}{0:0.00}}" Width="Auto" />
+ <DataGridTextColumn Header="ID" Binding="{Binding JobRun.ID}" Width="50" ElementStyle="{StaticResource WrapText}"/>
+ <DataGridTextColumn Header="Machine" Binding="{Binding Machine.SerialNumber}" Width="100" ></DataGridTextColumn>
+ <DataGridTextColumn Header="User" Binding="{Binding User.Contact.FullName}" Width="100" ElementStyle="{StaticResource WrapText}" />
+ <DataGridTextColumn Header="Job Name" Binding="{Binding JobRun.JobName}" Width="100" ElementStyle="{StaticResource WrapText}"/>
+ <DataGridTextColumn Header="Length" Binding="{Binding JobRun.JobLength, StringFormat={}{0:0.00}}" Width="60" />
+ <DataGridTextColumn Header="Source" Binding="{Binding JobRun.Source, Converter={StaticResource EnumToDescriptionConverter}}" Width="60" />
+ <DataGridTextColumn Header="Upload &#10;Duration" Binding="{Binding UploadDuration, Converter={StaticResource DateTimeToStringFormatConverter}, FallbackValue=5}" Width="90"/>
+ <DataGridTextColumn Header="Heating &#10;Duration" Binding="{Binding HeatingDuration, Converter={StaticResource DateTimeToStringFormatConverter}, FallbackValue=5}" Width="90" />
+ <DataGridTextColumn Header="Start Time" Binding="{Binding JobRun.ActualStartDate, Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="90" />
+ <DataGridTextColumn Header="IsGradient" Binding="{Binding JobRun.IsGradient}" Width="70" />
+ <DataGridTextColumn Header="GR" Binding="{Binding JobRun.GradientResolutionCm}" Width="30" />
+ <DataGridTextColumn Header="Status" Binding="{Binding JobRun.JobRunStatus, Converter={StaticResource EnumToDescriptionConverter}}" Width="70"/>
+ <DataGridTextColumn Header="End Time" Binding="{Binding JobRun.EndDate, Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="90" />
+ <DataGridTextColumn Header="End &#10;Position" Binding="{Binding JobRun.EndPosition, StringFormat={}{0:0.00}}" Width="90" />
<DataGridTemplateColumn Header="Liquid Quantities" Width="1*" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
@@ -452,13 +468,13 @@
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
- <Border Grid.Row="1" Grid.Column="1" Margin="20, 0, 20, 10" BorderBrush="{StaticResource borderBrush}" Background="{StaticResource TransparentBackgroundBrush}" BorderThickness="1">
+ <Border Grid.Row="1" Grid.Column="1" Grid.RowSpan="2" Margin="20, 0, 20, 20" BorderBrush="{StaticResource borderBrush}" Background="{StaticResource TransparentBackgroundBrush}" BorderThickness="1">
<StackPanel>
<TextBlock Margin="10" Text="{Binding SelectedJobName}"></TextBlock>
</StackPanel>
</Border>
- <Border Grid.Row="2" Grid.ColumnSpan="2" Margin="20, 10, 20, 20" BorderBrush="{StaticResource borderBrush}" Background="{StaticResource TransparentBackgroundBrush}" BorderThickness="1">
+ <Border Grid.Row="2" Margin="20, 10, 0, 20" BorderBrush="{StaticResource borderBrush}" Background="{StaticResource TransparentBackgroundBrush}" BorderThickness="1">
<StackPanel Background="{StaticResource TransparentBackgroundBrush}" >
<TextBlock>TOTALS:</TextBlock>
<TextBlock>Cyan:</TextBlock>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml.cs
index 39b0d2c02..c460e2a9b 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml.cs
@@ -20,9 +20,11 @@ namespace Tango.MachineStudio.Statistics.Views
/// </summary>
public partial class JobRunsView : UserControl
{
+ private int _lastSelectedGridItemIndex;
public JobRunsView()
{
InitializeComponent();
+ _lastSelectedGridItemIndex = -1;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
@@ -63,5 +65,19 @@ namespace Tango.MachineStudio.Statistics.Views
selectThreadsButton.IsChecked = true;
e.Handled = true;
}
+
+ private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ DataGrid dataGrid = sender as DataGrid;
+ _lastSelectedGridItemIndex = -1;
+ if (e.AddedItems != null && e.AddedItems.Count > 0)
+ {
+ DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromItem(e.AddedItems[0]);
+ if (row != null)
+ {
+ _lastSelectedGridItemIndex = row.GetIndex();
+ }
+ }
+ }
}
}