diff options
48 files changed, 1402 insertions, 256 deletions
diff --git a/Software/Visual_Studio/Advanced Installer Projects/Eureka Installer.aip b/Software/Visual_Studio/Advanced Installer Projects/Eureka Installer.aip index c1ff02c34..7bfcaa3a4 100644 --- a/Software/Visual_Studio/Advanced Installer Projects/Eureka Installer.aip +++ b/Software/Visual_Studio/Advanced Installer Projects/Eureka Installer.aip @@ -15,10 +15,10 @@ <ROW Property="CTRLS" Value="2"/> <ROW Property="ExtractFilesFirst" Value="1"/> <ROW Property="Manufacturer" Value="Twine Solutions LTD"/> - <ROW Property="ProductCode" Value="1033:{F8FA8ADD-EE53-487E-894A-5F57E2036781} " Type="16"/> + <ROW Property="ProductCode" Value="1033:{046987E0-D4F0-425A-8D40-434E9AF58EF5} " Type="16"/> <ROW Property="ProductLanguage" Value="1033"/> <ROW Property="ProductName" Value="Twine X4"/> - <ROW Property="ProductVersion" Value="2.0.4.0" Type="32" TargetFile="Tango.PPC.UI.exe"/> + <ROW Property="ProductVersion" Value="2.0.8.0" Type="32" TargetFile="Tango.PPC.UI.exe"/> <ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/> <ROW Property="UpgradeCode" Value="{4D8FDA03-F63E-4002-9A96-4BDE65B04355}"/> <ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/> @@ -482,7 +482,7 @@ <ROW Action="AI_DetectSoftware" Sequence="101"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.BuildComponent"> - <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\Eureka" PackageFileName="TwineX4 Installer_v2.0.4" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="TwineX4 Installer_v2.0.4"/> + <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\Eureka" PackageFileName="TwineX4 Installer_v2.0.8" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="TwineX4 Installer_v2.0.8"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent"> <ROW Path="<AI_DICTS>ui.ail"/> diff --git a/Software/Visual_Studio/Advanced Installer Projects/FSE Installer.aip b/Software/Visual_Studio/Advanced Installer Projects/FSE Installer.aip index a18abd6ac..baa6d6fb9 100644 --- a/Software/Visual_Studio/Advanced Installer Projects/FSE Installer.aip +++ b/Software/Visual_Studio/Advanced Installer Projects/FSE Installer.aip @@ -29,10 +29,10 @@ <ROW Property="ExtractFilesFirst" Value="1"/> <ROW Property="LogoIcon" Value="externalui.ico" MultiBuildValue="DefaultBuild:machine_full_0UZ_icon.ico_1" Type="1" MsiKey="LogoIcon"/> <ROW Property="Manufacturer" Value="Twine Solutions LTD"/> - <ROW Property="ProductCode" Value="1033:{D08B5A85-0EAD-4425-9148-DC6F6539AA76} " Type="16"/> + <ROW Property="ProductCode" Value="1033:{ACD29FBD-AB01-477D-8FDB-4D8625896C70} " Type="16"/> <ROW Property="ProductLanguage" Value="1033"/> <ROW Property="ProductName" Value="Tango FSE"/> - <ROW Property="ProductVersion" Value="2.0.1.0" Type="32"/> + <ROW Property="ProductVersion" Value="2.0.2.0" Type="32"/> <ROW Property="RUNAPPLICATION" Value="1" Type="4"/> <ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/> <ROW Property="UpgradeCode" Value="{0E13CB0D-89F7-465E-9F56-F1CBD6773E6E}"/> @@ -1201,7 +1201,7 @@ <ROW Action="AI_DetectSoftware" Sequence="101"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.BuildComponent"> - <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\FSE\Release" PackageFileName="Tango FSE v2.0.1" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Tango FSE v2.0.1"/> + <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\FSE\Release" PackageFileName="Tango FSE v2.0.2" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Tango FSE v2.0.2"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent"> <ROW Path="<AI_DICTS>ui.ail"/> diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Procedures.Documentation/Help/proc-doc.chm b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Procedures.Documentation/Help/proc-doc.chm Binary files differindex 32466caf1..b6bc6d4cd 100644 --- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Procedures.Documentation/Help/proc-doc.chm +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Procedures.Documentation/Help/proc-doc.chm diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Properties/AssemblyInfo.cs index cd4408202..f13bd3e02 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Properties/AssemblyInfo.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Properties/AssemblyInfo.cs @@ -8,4 +8,4 @@ using System.Windows; // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("Tango FSE")] -[assembly: AssemblyVersion("2.0.1.0")] +[assembly: AssemblyVersion("2.0.2.0")] diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Converters/LengthWithSpoolsConverter.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Converters/LengthWithSpoolsConverter.cs new file mode 100644 index 000000000..60f94b8aa --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Converters/LengthWithSpoolsConverter.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Data; + +namespace Tango.PPC.Jobs.Converters +{ + public class LengthWithSpoolsConverter : IMultiValueConverter + { + public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) + { + try + { + double length = System.Convert.ToDouble(values[0]); + bool isEureka = System.Convert.ToBoolean(values[1]); + double spools = System.Convert.ToDouble(values[2]); + + if (isEureka) + return length * spools; + else return length; + } + catch + { + return 0d; + } + } + + public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/VectorFineTuningDialog.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/VectorFineTuningDialog.xaml index 0e72c6aa0..99b78d7ec 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/VectorFineTuningDialog.xaml +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/VectorFineTuningDialog.xaml @@ -548,7 +548,18 @@ <TextBlock FontSize="{StaticResource TangoSmallFontSize}" FontWeight="SemiBold" Margin="10 0 0 -5" HorizontalAlignment="Left" >Correction</TextBlock> <Border Grid.Row="1" Height="220" Margin="0 10 0 0" CornerRadius="0 0 0 0" BorderThickness="0" BorderBrush="{StaticResource TangoGrayBrush}" Background="{Binding VisualCorrectionModel.ManualColorBrush}" > - <UniformGrid Rows="3" Columns="1" VerticalAlignment="Bottom" Background="Transparent"> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="1*"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <StackPanel Grid.Row="0" Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center" Visibility="{Binding VisualCorrectionModel.IsOutOfGamut,Converter={StaticResource BooleanToVisibilityConverter}}"> + <Image Margin="30 0 24 0" Stretch="Fill" Width="47" Height="43" RenderOptions.BitmapScalingMode="Fant" Source="../Images/ColorSelection/Exclamation.png" HorizontalAlignment="Center"></Image> + <!--<Border Margin=" 0 10 0 0" MinWidth="115" Height="31" Background="{StaticResource TangoDarkForegroundBrush}" CornerRadius="2"> + <TextBlock Margin="10 0" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="{StaticResource TangoLightForegroundBrush}" FontSize="{StaticResource TangoSmallFontSize}" FontWeight="SemiBold" Text="This color is not supported." ></TextBlock> + </Border>--> + </StackPanel> + <UniformGrid Grid.Row="1" Rows="3" Columns="1" VerticalAlignment="Bottom" Background="Transparent"> <TextBlock FontWeight="Medium" Margin="10 10 0 0" VerticalAlignment="Center" Foreground="{Binding VisualCorrectionModel.ManualColorBrush, Converter={StaticResource ColorContrastConverter}}" FontSize="{StaticResource TangoSmallFontSize}"> <Run Text="L:" ></Run> <Run Text="{Binding VisualCorrectionModel.L, StringFormat={}{0:F2}}"></Run> @@ -562,7 +573,8 @@ <Run Text="{Binding VisualCorrectionModel.B, StringFormat={}{0:F2}}"></Run> </TextBlock> </UniformGrid> - </Border> + </Grid> + </Border> </StackPanel> <StackPanel Orientation="Vertical" Grid.Column="2" Grid.Row="1" Margin="0 10 0 0" Visibility="{Binding IsTargetVisible, Converter={StaticResource BooleanToVisibilityConverter}, Mode=TwoWay}"> <TextBlock FontSize="{StaticResource TangoSmallFontSize}" FontWeight="SemiBold" Margin="10 0 0 -5" HorizontalAlignment="Left" >Target</TextBlock> diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/VectorFineTuningDialogVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/VectorFineTuningDialogVM.cs index e473fa420..b9149b81f 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/VectorFineTuningDialogVM.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/VectorFineTuningDialogVM.cs @@ -1319,6 +1319,7 @@ namespace Tango.PPC.Jobs.Dialogs ActiveLogModel.VectorCorrectionL = VisualCorrectionModel.L; ActiveLogModel.VectorCorrectionA = VisualCorrectionModel.A; ActiveLogModel.VectorCorrectionB = VisualCorrectionModel.B; + VisualCorrectionModel.IsOutOfGamut = IsOutOfGammot(); TestCommand.RaiseCanExecuteChanged(); ByPassTestCommand.RaiseCanExecuteChanged(); @@ -1333,6 +1334,7 @@ namespace Tango.PPC.Jobs.Dialogs ActiveLogModel.VectorCorrectionL = VisualCorrectionModel.L; ActiveLogModel.VectorCorrectionA = VisualCorrectionModel.A; ActiveLogModel.VectorCorrectionB = VisualCorrectionModel.B; + VisualCorrectionModel.IsOutOfGamut = IsOutOfGammot(); TestCommand.RaiseCanExecuteChanged(); ByPassTestCommand.RaiseCanExecuteChanged(); } @@ -1347,10 +1349,25 @@ namespace Tango.PPC.Jobs.Dialogs ActiveLogModel.VectorCorrectionL = VisualCorrectionModel.L; ActiveLogModel.VectorCorrectionA = VisualCorrectionModel.A; ActiveLogModel.VectorCorrectionB = VisualCorrectionModel.B; + VisualCorrectionModel.IsOutOfGamut = IsOutOfGammot(); TestCommand.RaiseCanExecuteChanged(); ByPassTestCommand.RaiseCanExecuteChanged(); } + private bool IsOutOfGammot() + { + BrushStopModel.ColorSpace = ColorSpaces.LAB; + BrushStopModel.PreventPropertyUpdate = true; + BrushStopModel.L = ActiveLogModel.VectorCorrectionL; + BrushStopModel.A = ActiveLogModel.VectorCorrectionA; + BrushStopModel.B = ActiveLogModel.VectorCorrectionB; + BrushStopModel.PreventPropertyUpdate = false; + BrushStopModel.IsOutputOfGamut(ColorSpaces.LAB); + + return BrushStopModel.IsOutOfGamut; + + } + #endregion #region Job diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/BrushStopModel.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/BrushStopModel.cs index d415dbb79..5464aa5ed 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/BrushStopModel.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/BrushStopModel.cs @@ -1796,6 +1796,25 @@ namespace Tango.PPC.Jobs.Models } } + public void IsOutputOfGamut(ColorSpaces colorSpace) + { + try + { + BrushStop stop = CreateBrushStop(colorSpace); + Configuration configuration = SegmentModel.Job.Machine.Configuration; + Rml rml = SegmentModel.Job.Rml; + IsOutOfGamut = _converter.IsOutOfGamut(stop, configuration, rml); + } + catch (Exception ex) + { + LogManager.Log(ex, "An error occurred while trying to test IsOutputOfGammut from conversion engine." + ex); + BestMatchColor = Color.FromRgb((byte)Red, (byte)Green, (byte)Blue); + } + finally + { + IsBusy = false; + } + } #endregion } } diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/VisualOffsetModel.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/VisualOffsetModel.cs index a0b6156a3..74651992e 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/VisualOffsetModel.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/VisualOffsetModel.cs @@ -237,7 +237,24 @@ namespace Tango.PPC.Jobs.Models return new SolidColorBrush() { Color = Color.FromRgb((byte)rgb.R, (byte)rgb.G, (byte)rgb.B) }; } } - + + private bool _isOutOfGamut; + /// <summary> + /// Gets or sets a value indicating whether this instance is out of gamut. + /// </summary> + public bool IsOutOfGamut + { + get { return _isOutOfGamut; } + set + { + if (_isOutOfGamut != value) + { + _isOutOfGamut = value; + RaisePropertyChangedAuto(); + } + } + } + #endregion public VisualOffsetModel() @@ -248,7 +265,9 @@ namespace Tango.PPC.Jobs.Models MaxChroma = new VisualLCHOffset(TypeColorCorrection.Chroma, 1); MinHue = new VisualLCHOffset(TypeColorCorrection.Hue, -1); MaxHue = new VisualLCHOffset(TypeColorCorrection.Hue, 1); - + IsOutOfGamut = false; + + } public void InitLAB(double l, double a, double b, double c, double h) @@ -292,6 +311,7 @@ namespace Tango.PPC.Jobs.Models B = b; C = last_LCH.C; H = last_LCH.h; + IsOutOfGamut = false; } diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Tango.PPC.JobsV2.csproj b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Tango.PPC.JobsV2.csproj index c0e24ac8c..3aefa29a1 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Tango.PPC.JobsV2.csproj +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Tango.PPC.JobsV2.csproj @@ -240,6 +240,7 @@ <Compile Include="Converters\JobToPieImageConverter.cs" /> <Compile Include="Converters\JobTypeToImageConverter.cs" /> <Compile Include="Converters\LengthToWeightConverter.cs" /> + <Compile Include="Converters\LengthWithSpoolsConverter.cs" /> <Compile Include="Converters\MarginOffsetSliderConverter .cs" /> <Compile Include="Converters\RoundDoubleConverter.cs" /> <Compile Include="Converters\TimeSpanToHoursConverter.cs" /> @@ -753,7 +754,7 @@ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <ProjectExtensions> <VisualStudio> - <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" /> + <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" /> </VisualStudio> </ProjectExtensions> </Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobsViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobsViewVM.cs index 0e4ec8fa4..e5e41b382 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobsViewVM.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobsViewVM.cs @@ -225,6 +225,11 @@ namespace Tango.PPC.Jobs.ViewModels /// </summary> public RelayCommand ExportJobCommand { get; set; } + /// <summary> + /// Gets or sets the move to list ( History or Draft) jobs command. + /// </summary> + public RelayCommand MoveToListJobsCommand { get; set; } + #endregion #region Constructors @@ -251,6 +256,7 @@ namespace Tango.PPC.Jobs.ViewModels DeleteJobsCommand = new RelayCommand(() => DeleteJobs(SelectedJobs)); CloneJobsCommand = new RelayCommand(() => CloneJobs(SelectedJobs)); ExportJobCommand = new RelayCommand(ExportJob); + MoveToListJobsCommand = new RelayCommand(() => MoveToListJobs(SelectedJobs)); RegisterForMessage<JobRemovedMessage>(HandleJobRemovedMessage); RegisterForMessage<JobSavedMessage>(HandleJobSavedMessage); @@ -371,7 +377,7 @@ namespace Tango.PPC.Jobs.ViewModels _colorSpaces = _db.ColorSpaces.ToList(); - var jobs = new JobsCollectionBuilder(_db).Set(x => x.MachineGuid == MachineProvider.Machine.Guid).WithSegments().WithBrushStops().WithCustomer().WithColorSpace().WithSegmentsGroups().Build(); + var jobs = new JobsCollectionBuilder(_db).Set(x => x.MachineGuid == MachineProvider.Machine.Guid).WithSegments().WithBrushStops().WithCustomer().WithColorSpace().WithSegmentsGroups().WithRmls().Build(); InvokeUI(() => { @@ -644,6 +650,52 @@ namespace Tango.PPC.Jobs.ViewModels } /// <summary> + /// Moves to list (Draft/History) jobs. + /// </summary> + /// <param name="jobs">The jobs.</param> + private async void MoveToListJobs(ObservableCollection<Job> jobs) + { + bool isHistory = SelectedCategory == JobsCategory.History; + string list = isHistory ? "Draft" : "History"; + try + { + + LogManager.Log($"Move To {list} selected jobs:\n{jobs.Select(x => x.Name).ToList().ToJsonString()}"); + + foreach (var job in SelectedJobs) + { + if(isHistory) + { + if(job.JobStatus != JobStatuses.Draft) + { + job.JobStatus = JobStatuses.Draft; + job.LastUpdated = DateTime.UtcNow; + } + } + if(!isHistory)//draft + { + if(job.JobStatus == JobStatuses.Draft) + { + job.JobStatus = JobStatuses.Completed; + job.LastUpdated = DateTime.UtcNow; + } + } + } + + await _db.SaveChangesAsync(); + + HistoryJobsCollectionView.Refresh(); + DraftJobsCollectionView.Refresh(); + ClearSelection(); + } + catch (Exception ex) + { + LogManager.Log(ex, $"Error Move To {list} selected jobs."); + await NotificationProvider.ShowError($"An error occurred while trying to Move To {list} the selected jobs."); + } + } + + /// <summary> /// Called when the search filter has been changed /// </summary> private void OnFilterChanged() diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobEurekaView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobEurekaView.xaml index efa080561..165f251c3 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobEurekaView.xaml +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobEurekaView.xaml @@ -30,9 +30,10 @@ <converters:BooleanToVisibilityInverseConverter x:Key="BooleanToVisibilityInverseConverter"/> <converters:EnumToDescriptionConverter x:Key="EnumToDescriptionConverter"/> <converters:TimeSpanToMinutesConverter x:Key="TimeSpanToMinutesConverter"/> + <converters:TimeSpanToTwoDigitsTimeConverter x:Key="TimeSpanToTwoDigitsTimeConverter"/> + <converters:TimeSpanToLabelConverter x:Key="TimeSpanToLabelConverter"/> <localConverters:MarginOffsetSliderConverter x:Key="MarginOffsetSliderConverter"/> <localConverters:FirstValueCollectionConverter x:Key="FirstValueCollectionConverter"/> - <localConverters:TimeSpanToHoursConverter x:Key="TimeSpanToHoursConverter"/> <localConverters:LengthToWeightConverter x:Key="LengthToWeightConverter"/> <BitmapImage x:Key="Image_Out_Of_Gamut" UriSource="../Images/JobView/error.png" /> @@ -257,8 +258,8 @@ <Border Margin="20 0 0 0" BorderThickness="1" Height="44" CornerRadius="12" BorderBrush="{StaticResource TangoMidAccentBrush}" Visibility="{Binding ElementName=segmentsGrid, Path=DataContext.IsWeightView, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> <touch:TouchNumericTextBox Margin="20 0 0 0" Width="192" FocusSelectionMode="SelectAll" HorizontalAlignment="Left" HideUnderline="True" VerticalAlignment="Center" Value="{Binding Length, UpdateSourceTrigger=LostFocus}" VerticalContentAlignment="Center" - StringFormat="0.0" AutoCalculateJogStep="False" - HasDecimalPoint="True" Minimum="1" Maximum="100000" + StringFormat="N1" AutoCalculateJogStep="False" + HasDecimalPoint="True" Minimum="1" Maximum="1000000" KeyboardContainer="{Binding ElementName=Container}" FontSize="18" ValueChangedEnd="Length_ValueChanged" TextGotFocus="Length_BeforeChangeValue" RippleBrush="Transparent"/> @@ -267,7 +268,7 @@ <touch:TouchNumericTextBox Margin="20 0 0 0" Width="192" FocusSelectionMode="SelectAll" HorizontalAlignment="Left" HideUnderline="True" VerticalAlignment="Center" Value="{Binding Weight, UpdateSourceTrigger=LostFocus}" VerticalContentAlignment="Center" StringFormat="0.0" AutoCalculateJogStep="False" - HasDecimalPoint="True" Minimum="0" Maximum="1000" + HasDecimalPoint="True" Minimum="0" Maximum="100000" KeyboardContainer="{Binding ElementName=Container}" FontSize="18" RippleBrush="Transparent"/> </Border> @@ -886,14 +887,14 @@ <StackPanel Orientation="Horizontal"> <TextBlock HorizontalAlignment="Left" Margin="0 10 0 0" Text="Copies" FontSize="{StaticResource TangoButtonFontSize}" Width="145"/> <Border Margin="20 0 0 0" BorderThickness="1" Height="44" CornerRadius="12" BorderBrush="{StaticResource TangoMidAccentBrush}" Width="120"> - <touch:TouchNumericTextBox BorderBrush="Transparent" HasDecimalPoint="False" Minimum="4" Step="4" Margin="0 0 0 0" FontSize="{StaticResource TangoComboBoxItemFontSize}" VerticalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" Value="{Binding JobModel.Copies}" HideUnderline="True" RippleBrush="Transparent"></touch:TouchNumericTextBox> + <touch:TouchNumericTextBox BorderBrush="Transparent" HasDecimalPoint="False" Minimum="4" Maximum="1000000" Step="4" Margin="0 0 0 0" FontSize="{StaticResource TangoComboBoxItemFontSize}" VerticalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" Value="{Binding JobModel.Copies}" HideUnderline="True" RippleBrush="Transparent"></touch:TouchNumericTextBox> </Border> </StackPanel> </DockPanel> <StackPanel Orientation="Horizontal" Margin="60 0 60 20" Visibility="{Binding IsBasicMode, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> - <TextBlock HorizontalAlignment="Left" Margin="0 10 0 0" Text="White Gap (m)" FontSize="{StaticResource TangoButtonFontSize}" Width="145"/> + <TextBlock HorizontalAlignment="Left" Margin="0 10 0 0" Text="White Gap(m)" FontSize="{StaticResource TangoButtonFontSize}" Width="145"/> <Border Margin="20 0 0 0" BorderThickness="1" Height="44" CornerRadius="12" BorderBrush="{StaticResource TangoMidAccentBrush}" Width="120"> <touch:TouchNumericTextBox BorderBrush="Transparent" HasDecimalPoint="False" Minimum="0" Margin="0 0 0 0" FontSize="{StaticResource TangoComboBoxItemFontSize}" VerticalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" Value="{Binding JobModel.InterSegmentLength}" HideUnderline="True" RippleBrush="Transparent"></touch:TouchNumericTextBox> @@ -1029,7 +1030,7 @@ <touch:TouchNumericTextBox Margin="20 0 0 0" Width="192" FocusSelectionMode="SelectAll" HorizontalAlignment="Left" HideUnderline="True" VerticalAlignment="Center" Value="{Binding Length, UpdateSourceTrigger=LostFocus}" VerticalContentAlignment="Center" StringFormat="0.0" AutoCalculateJogStep="False" - HasDecimalPoint="True" Minimum="1" Maximum="100000" + HasDecimalPoint="True" Minimum="1" Maximum="1000000" KeyboardContainer="{Binding ElementName=Container}" FontSize="18" ValueChangedEnd="Length_ValueChanged" TextGotFocus="Length_BeforeChangeValue" RippleBrush="Transparent"/> @@ -1039,7 +1040,7 @@ <touch:TouchNumericTextBox Margin="20 0 0 0" Width="192" FocusSelectionMode="SelectAll" HorizontalAlignment="Left" HideUnderline="True" VerticalAlignment="Center" Value="{Binding Weight, UpdateSourceTrigger=LostFocus}" VerticalContentAlignment="Center" StringFormat="0.0" AutoCalculateJogStep="False" - HasDecimalPoint="True" Minimum="0" Maximum="1000" + HasDecimalPoint="True" Minimum="0" Maximum="100000" KeyboardContainer="{Binding ElementName=Container}" FontSize="18" RippleBrush="Transparent"/> @@ -1188,18 +1189,18 @@ </Grid> <!--<touch:TouchDropShadowBorder Grid.Row="3" Margin="10 0 10 15" CornerRadius="0" BorderThickness="0" Padding="0" >--> - <Border Grid.Row="2" Margin="10 0 10 15" BorderThickness="0"> - <touch:TouchExpander x:Name="summaryExpander" IsExpanded="{Binding IsSummaryOpened, Mode=TwoWay}" Grid.Row="3" Margin="15 0 15 0 " FontSize="{StaticResource TangoTitleFontSize}" BorderThickness="0" Style="{StaticResource TouchRoundedExpander}"> + <Border Grid.Row="2" Margin="0 0 0 0" BorderThickness="0"> + <touch:TouchExpander x:Name="summaryExpander" IsExpanded="{Binding IsSummaryOpened, Mode=TwoWay}" Grid.Row="3" Margin="15 0 15 0 " FontSize="{StaticResource TangoTitleFontSize}" BorderThickness="0" Style="{StaticResource TouchRoundedExpander}" CornerRadius="20 20 0 0" Padding="10" IsTabStop="False" > <touch:TouchExpander.Header> - <DockPanel > - <StackPanel Orientation="Horizontal" DockPanel.Dock="Right" Margin="0 0 20 0" > + <DockPanel Height="80"> + <StackPanel Orientation="Horizontal" DockPanel.Dock="Right" Margin="0 0 10 0" VerticalAlignment="Center" > <StackPanel Orientation="Horizontal" Visibility="{Binding IsSummaryOpened, Converter={StaticResource BooleanToVisibilityInverseConverter}, Mode=TwoWay}"> - <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> + <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoTitleFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> <Run Text="Copy:" FontWeight="Normal"></Run> <Run Text="{Binding JobModel.Length,Mode=OneWay,StringFormat=0.##}" FontWeight="DemiBold"/> <Run Text="m" FontWeight="DemiBold"></Run> </TextBlock> - <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityConverter}}"> + <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoTitleFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityConverter}}"> <Run Text="Copy:" FontWeight="Normal"></Run> <Run FontWeight="DemiBold"> <Run.Text> @@ -1211,14 +1212,14 @@ </Run> <Run Text="g" FontWeight="DemiBold"></Run> </TextBlock> - <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" FontSize="{StaticResource TangoDefaultFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> + <TextBlock VerticalAlignment="Center" Margin="10 0 0 0" FontSize="{StaticResource TangoTitleFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> <Run Text="Total:" FontWeight="Normal"></Run> - <Run Text="{Binding JobModel.LengthIncludingNumberOfUnitsAndSpools,Mode=OneWay, StringFormat=0.##}" FontWeight="DemiBold"/> - <Run Text="m" FontWeight="DemiBold"></Run> + <Run Text="{Binding JobModel.LengthIncludingNumberOfUnitsAndSpools,Mode=OneWay, StringFormat=0.##}" FontWeight="Bold"/> + <Run Text="m" FontWeight="Bold"></Run> </TextBlock> - <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" FontSize="{StaticResource TangoDefaultFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityConverter}}"> + <TextBlock VerticalAlignment="Center" Margin="10 0 0 0" FontSize="{StaticResource TangoTitleFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityConverter}}"> <Run Text="Total:" FontWeight="Normal"></Run> - <Run FontWeight="DemiBold"> + <Run FontWeight="Bold"> <Run.Text> <MultiBinding Converter="{StaticResource LengthToWeightConverter}" StringFormat="0.##" > <Binding Path="JobModel.LengthIncludingNumberOfUnitsAndSpools" Mode="OneWay"/> @@ -1226,23 +1227,23 @@ </MultiBinding> </Run.Text> </Run> - <Run Text="g" FontWeight="DemiBold"></Run> + <Run Text="g" FontWeight="Bold"></Run> </TextBlock> </StackPanel> - <TextBlock Margin="20 0 0 0" VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}" FontWeight="SemiBold" Foreground="{StaticResource TangoDarkForegroundBrush}"> - <Run Text="Duration: "></Run> - <Run Text="{Binding JobModel.GetEstimatedDuration, Converter={StaticResource TimeSpanToHoursConverter}, FallbackValue=0, Mode=OneWay,StringFormat=0.0}"></Run> - <Run Text="h"></Run> - </TextBlock> + <TextBlock Margin="10 0 0 0" VerticalAlignment="Center" FontSize="{StaticResource TangoTitleFontSize}" FontWeight="Bold" Foreground="{StaticResource TangoDarkForegroundBrush}"> + <Run Text="Duration: " FontWeight="Normal"></Run> + <Run Text="{Binding JobModel.GetEstimatedDuration, Converter={StaticResource TimeSpanToTwoDigitsTimeConverter}, FallbackValue=0, Mode=OneWay}"></Run> + <Run Text="{Binding JobModel.GetEstimatedDuration, Converter={StaticResource TimeSpanToLabelConverter}, FallbackValue=min, Mode=OneWay}"></Run> + </TextBlock> </StackPanel> <StackPanel DockPanel.Dock="Left" Orientation="Horizontal" VerticalAlignment="Center" Style="{StaticResource Level1Container}"> <Image Source="../Images/JobView/job-summary.png" Width="39" /> - <TextBlock FontWeight="Medium" Margin="20 0 0 0" VerticalAlignment="Center" FontSize="{StaticResource TangoExpanderHeaderFontSize}">Job Summary</TextBlock> + <TextBlock FontWeight="Medium" Margin="10 0 0 0" VerticalAlignment="Center" FontSize="{StaticResource TangoExpanderHeaderFontSize}">Summary</TextBlock> </StackPanel> </DockPanel> </touch:TouchExpander.Header> - <Grid Margin="40 0 40 0"> + <Grid Margin="40 0 40 10"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> @@ -1254,15 +1255,15 @@ </Grid> <UniformGrid Grid.Row="1" Margin="0 40 0 0" Columns="4" Rows="1" HorizontalAlignment="Stretch" > - <TextBlock Text="Total:" FontWeight="DemiBold" FontSize="{StaticResource TangoDefaultFontSize}" ></TextBlock> - <TextBlock FontSize="{StaticResource TangoDefaultFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> + <TextBlock Text="Total:" FontWeight="Bold" FontSize="{StaticResource TangoTitleFontSize}" ></TextBlock> + <TextBlock FontSize="{StaticResource TangoTitleFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> <Run Text="Copy:" FontWeight="Normal"></Run> - <Run Text="{Binding JobModel.Length,Mode=OneWay,StringFormat=0.##}" FontWeight="DemiBold"/> - <Run Text="m" FontWeight="DemiBold"></Run> + <Run Text="{Binding JobModel.Length,Mode=OneWay,StringFormat=0.##}" FontWeight="Bold"/> + <Run Text="m" FontWeight="Bold"></Run> </TextBlock> - <TextBlock FontSize="{StaticResource TangoDefaultFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityConverter}}"> + <TextBlock FontSize="{StaticResource TangoTitleFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityConverter}}"> <Run Text="Copy:" FontWeight="Normal"></Run> - <Run FontWeight="DemiBold"> + <Run FontWeight="Bold"> <Run.Text> <MultiBinding Converter="{StaticResource LengthToWeightConverter}" StringFormat="0.##" > <Binding Path="JobModel.Length" Mode="OneWay"/> @@ -1272,18 +1273,18 @@ </Run> <Run Text="g" FontWeight="DemiBold"></Run> </TextBlock> - <TextBlock FontSize="{StaticResource TangoDefaultFontSize}"> + <TextBlock FontSize="{StaticResource TangoTitleFontSize}"> <Run Text="Copies:" FontWeight="Normal"></Run> - <Run Text="{Binding JobModel.Copies}" FontWeight="DemiBold"/> + <Run Text="{Binding JobModel.Copies}" FontWeight="Bold"/> </TextBlock> - <TextBlock FontSize="{StaticResource TangoDefaultFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> + <TextBlock FontSize="{StaticResource TangoTitleFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> <Run Text="Total:" FontWeight="Normal"></Run> - <Run Text="{Binding JobModel.LengthIncludingNumberOfUnitsAndSpools,Mode=OneWay, StringFormat=0.##}" FontWeight="DemiBold"/> - <Run Text="m" FontWeight="DemiBold"></Run> + <Run Text="{Binding JobModel.LengthIncludingNumberOfUnitsAndSpools,Mode=OneWay, StringFormat=0.##}" FontWeight="Bold"/> + <Run Text="m" FontWeight="Bold"></Run> </TextBlock> - <TextBlock FontSize="{StaticResource TangoDefaultFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityConverter}}"> + <TextBlock FontSize="{StaticResource TangoTitleFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityConverter}}"> <Run Text="Total:" FontWeight="Normal"></Run> - <Run FontWeight="DemiBold"> + <Run FontWeight="Bold"> <Run.Text> <MultiBinding Converter="{StaticResource LengthToWeightConverter}" StringFormat="0.##" > <Binding Path="JobModel.LengthIncludingNumberOfUnitsAndSpools" Mode="OneWay"/> @@ -1291,27 +1292,27 @@ </MultiBinding> </Run.Text> </Run> - <Run Text="g" FontWeight="DemiBold"></Run> + <Run Text="g" FontWeight="Bold"></Run> </TextBlock> </UniformGrid> <UniformGrid Grid.Row="2" Margin="0 40 0 0" Columns="4" Rows="1" HorizontalAlignment="Stretch"> - <TextBlock Text="Per Spool:" FontWeight="DemiBold" FontSize="{StaticResource TangoDefaultFontSize}"></TextBlock> - <TextBlock FontSize="{StaticResource TangoDefaultFontSize}"> + <TextBlock Text="Per Spool:" FontWeight="Bold" FontSize="{StaticResource TangoTitleFontSize}"></TextBlock> + <TextBlock FontSize="{StaticResource TangoTitleFontSize}"> <Run Text="Spools:" FontWeight="Normal"></Run> - <Run Text="{Binding JobModel.NumberSpools}" FontWeight="DemiBold"/> + <Run Text="{Binding JobModel.NumberSpools}" FontWeight="Bold"/> </TextBlock> - <TextBlock FontSize="{StaticResource TangoDefaultFontSize}"> + <TextBlock FontSize="{StaticResource TangoTitleFontSize}"> <Run Text="Copies:" FontWeight="Normal"></Run> - <Run Text="{Binding JobModel.NumberOfUnits}" FontWeight="DemiBold"/> + <Run Text="{Binding JobModel.NumberOfUnits}" FontWeight="Bold"/> </TextBlock> - <TextBlock FontSize="{StaticResource TangoDefaultFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> + <TextBlock FontSize="{StaticResource TangoTitleFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> <Run Text="Total:" FontWeight="Normal"></Run> - <Run Text="{Binding JobModel.LengthIncludingNumberOfUnits,Mode=OneWay, StringFormat=0.##}" FontWeight="DemiBold"/> - <Run Text="m" FontWeight="DemiBold"></Run> + <Run Text="{Binding JobModel.LengthIncludingNumberOfUnits,Mode=OneWay, StringFormat=0.##}" FontWeight="Bold"/> + <Run Text="m" FontWeight="Bold"></Run> </TextBlock> - <TextBlock FontSize="{StaticResource TangoDefaultFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityConverter}}"> + <TextBlock FontSize="{StaticResource TangoTitleFontSize}" Visibility="{Binding IsWeightView, Converter={StaticResource BooleanToVisibilityConverter}}"> <Run Text="Total:" FontWeight="Normal"></Run> - <Run FontWeight="DemiBold"> + <Run FontWeight="Bold"> <Run.Text> <MultiBinding Converter="{StaticResource LengthToWeightConverter}" StringFormat="0.##" > <Binding Path="JobModel.LengthIncludingNumberOfUnits" Mode="OneWay"/> @@ -1319,7 +1320,7 @@ </MultiBinding> </Run.Text> </Run> - <Run Text="g" FontWeight="DemiBold"></Run> + <Run Text="g" FontWeight="Bold"></Run> </TextBlock> </UniformGrid> </Grid> diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobsView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobsView.xaml index d143268c7..0e9e6d617 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobsView.xaml +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobsView.xaml @@ -29,6 +29,7 @@ </ResourceDictionary.MergedDictionaries> <converters:JobToPieImageConverter x:Key="JobToPieImageConverter" /> + <converters:LengthWithSpoolsConverter x:Key="LengthWithSpoolsConverter"/> <sharedConverters:DateTimeUTCToShortDateConverter x:Key="DateTimeUTCToShortDateConverter" /> <sharedConverters:EnumToDescriptionConverter x:Key="EnumToDescriptionConverter" /> <sharedConverters:EnumToItemsSourceConverter x:Key="EnumToItemsSourceConverter" /> @@ -90,26 +91,17 @@ </Style.Triggers> </Style> </StackPanel.Style> - <touch:TouchIconButton Command="{Binding ClearSelectionCommand}" Visibility="{Binding IsMultiSelecting,Converter={StaticResource BooleanToVisibilityConverter}}" Margin="0 0 30 0" Padding="20" Icon="Undo"> + <touch:TouchIconButton Command="{Binding ClearSelectionCommand}" Visibility="{Binding IsMultiSelecting,Converter={StaticResource BooleanToVisibilityConverter}}" Margin="0 0 30 0" Padding="20" Icon="Close" Width="50" Height="50" Style="{StaticResource TangoRoundTouchIconButton}"> + + </touch:TouchIconButton> + <touch:TouchIconButton Command="{Binding MoveToListJobsCommand}" Margin="0 0 30 0" Padding="20" > <touch:TouchIconButton.Style> <Style TargetType="touch:TouchIconButton" BasedOn="{StaticResource TangoRoundTouchIconButton}"> <Setter Property="IconAngle" Value="0"></Setter> + <Setter Property="Icon" Value="Redo"/> <Style.Triggers> - <DataTrigger Binding="{Binding IsMultiSelecting}" Value="True"> - <DataTrigger.EnterActions> - <BeginStoryboard> - <Storyboard> - <DoubleAnimation Storyboard.TargetProperty="IconAngle" To="360" Duration="00:00:0.2"></DoubleAnimation> - </Storyboard> - </BeginStoryboard> - </DataTrigger.EnterActions> - <DataTrigger.ExitActions> - <BeginStoryboard> - <Storyboard> - <DoubleAnimation Storyboard.TargetProperty="IconAngle" To="0" Duration="00:00:00"></DoubleAnimation> - </Storyboard> - </BeginStoryboard> - </DataTrigger.ExitActions> + <DataTrigger Binding="{Binding SelectedCategoryIndex}" Value="1"> + <Setter Property="Icon" Value="Undo"/> </DataTrigger> </Style.Triggers> </Style> @@ -167,7 +159,7 @@ <DockPanel> <Rectangle Margin="0 0 20 0" HorizontalAlignment="Center" VerticalAlignment="Bottom" Stroke="{StaticResource TangoGrayBrush}" StrokeThickness="1" Height="25"></Rectangle> <touch:TouchIcon DockPanel.Dock="Left" Foreground="{StaticResource TangoGrayBrush}" Width="20" Height="20" VerticalAlignment="Bottom" Icon="Magnify" /> - <touch:TouchTextBox Margin="5 0 0 0" Width="300" Text="{Binding Filter,Mode=TwoWay}" Watermark="find name, customer..."></touch:TouchTextBox> + <touch:TouchTextBox Margin="5 0 0 0" Width="300" Text="{Binding Filter,Mode=TwoWay}" Watermark="find name"></touch:TouchTextBox> </DockPanel> </Grid> <StackPanel Orientation="Horizontal" DockPanel.Dock="Right" HorizontalAlignment="Right" Margin="0 20 20 0" Visibility="{Binding BuildProvider.IsEureka, Converter={StaticResource BooleanToVisibilityConverter}}"> @@ -256,28 +248,44 @@ </touch:LightTouchDataGridColumn.Header> <touch:LightTouchDataGridColumn.CellTemplate> <DataTemplate> - <TextBlock Margin="20 0 0 0" IsHitTestVisible="False" Text="{Binding Name,Converter={StaticResource StringEllipsisConverter},ConverterParameter='40'}"></TextBlock> + <TextBlock Margin="20 0 0 0" IsHitTestVisible="False" Text="{Binding Name,Converter={StaticResource StringEllipsisConverter},ConverterParameter='56'}" TextWrapping="Wrap"></TextBlock> + </DataTemplate> + </touch:LightTouchDataGridColumn.CellTemplate> + </touch:LightTouchDataGridColumn> + <touch:LightTouchDataGridColumn Width="200" Header="Thread" SortMember="ThreadName" HorizontalContentAlignment="Left"> + <touch:LightTouchDataGridColumn.CellTemplate> + <DataTemplate> + <TextBlock Margin="5 0 0 0" IsHitTestVisible="False" Text="{Binding ThreadName,Converter={StaticResource StringEllipsisConverter},ConverterParameter='44'}" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Center" FontWeight="Regular"></TextBlock> </DataTemplate> </touch:LightTouchDataGridColumn.CellTemplate> </touch:LightTouchDataGridColumn> - <touch:LightTouchDataGridColumn Width="117" Header="Length (m)" SortMember="Length"> + <touch:LightTouchDataGridColumn Width="117" Header="Length (m)" SortMember="LengthIncludingNumberOfUnits"> <touch:LightTouchDataGridColumn.CellTemplate> <DataTemplate> - <TextBlock IsHitTestVisible="False" Text="{Binding Length,StringFormat=0.0}"></TextBlock> + <TextBlock IsHitTestVisible="False"> + <TextBlock.Text> + <MultiBinding Converter="{StaticResource LengthWithSpoolsConverter}" StringFormat="0.0" TargetNullValue='0' FallbackValue='0' Mode="OneWay"> + <Binding Path="LengthIncludingNumberOfUnits" Mode="OneWay"/> + <Binding Path="DataContext.BuildProvider.IsEureka" Mode="OneWay" RelativeSource="{RelativeSource AncestorType=UserControl}"/> + <Binding Path="Spools" Mode="OneWay"/> + </MultiBinding> + </TextBlock.Text> + </TextBlock> </DataTemplate> </touch:LightTouchDataGridColumn.CellTemplate> </touch:LightTouchDataGridColumn> + <touch:LightTouchDataGridColumn Header="Colors" SortMember="Segments.Count" Width="85"> <touch:LightTouchDataGridColumn.CellTemplate> <DataTemplate> - <Image Stretch="Fill" IsHitTestVisible="False" Source="{Binding Converter={StaticResource JobToPieImageConverter},ConverterParameter='25,25',IsAsync=True}" Width="25" Height="25" HorizontalAlignment="Left"></Image> + <Image Stretch="Fill" IsHitTestVisible="False" Source="{Binding Converter={StaticResource JobToPieImageConverter},ConverterParameter='60,60',IsAsync=True}" Width="60" Height="60" HorizontalAlignment="Left"></Image> </DataTemplate> </touch:LightTouchDataGridColumn.CellTemplate> </touch:LightTouchDataGridColumn> <touch:LightTouchDataGridColumn Width="100" Header="Updated" SortMember="LastUpdated"> <touch:LightTouchDataGridColumn.CellTemplate> <DataTemplate> - <TextBlock IsHitTestVisible="False" Text="{Binding LastUpdated,Converter={StaticResource DateTimeUTCToShortDateConverter}}"></TextBlock> + <TextBlock IsHitTestVisible="False" Text="{Binding LastUpdated,Converter={StaticResource DateTimeUTCToShortDateConverter}}" FontWeight="Regular"></TextBlock> </DataTemplate> </touch:LightTouchDataGridColumn.CellTemplate> </touch:LightTouchDataGridColumn> @@ -356,35 +364,50 @@ <touch:LightTouchDataGridColumn Width="100" Header="Status" SortMember="JobStatus" HorizontalContentAlignment="Left"> <touch:LightTouchDataGridColumn.CellTemplate> <DataTemplate> - <TextBlock IsHitTestVisible="False" Text="{Binding JobStatus,Converter={StaticResource EnumToDescriptionConverter}}" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock> + <TextBlock IsHitTestVisible="False" Text="{Binding JobStatus,Converter={StaticResource EnumToDescriptionConverter}}" HorizontalAlignment="Left" VerticalAlignment="Center" FontWeight="Regular"></TextBlock> </DataTemplate> </touch:LightTouchDataGridColumn.CellTemplate> </touch:LightTouchDataGridColumn> <touch:LightTouchDataGridColumn Width="1*" Header="Name" SortMember="Name" HorizontalContentAlignment="Left"> <touch:LightTouchDataGridColumn.CellTemplate> <DataTemplate> - <TextBlock IsHitTestVisible="False" Text="{Binding Name,Converter={StaticResource StringEllipsisConverter},ConverterParameter='40'}" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock> + <TextBlock IsHitTestVisible="False" Text="{Binding Name,Converter={StaticResource StringEllipsisConverter},ConverterParameter='46'}" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Center"></TextBlock> + </DataTemplate> + </touch:LightTouchDataGridColumn.CellTemplate> + </touch:LightTouchDataGridColumn> + <touch:LightTouchDataGridColumn Width="200" Header="Thread" SortMember="ThreadName" HorizontalContentAlignment="Left"> + <touch:LightTouchDataGridColumn.CellTemplate> + <DataTemplate> + <TextBlock Margin="5 0 0 0" IsHitTestVisible="False" Text="{Binding ThreadName,Converter={StaticResource StringEllipsisConverter},ConverterParameter='43'}" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Center" FontWeight="Regular"></TextBlock> </DataTemplate> </touch:LightTouchDataGridColumn.CellTemplate> </touch:LightTouchDataGridColumn> - <touch:LightTouchDataGridColumn Width="117" Header="Length (m)" SortMember="Length"> + <touch:LightTouchDataGridColumn Width="117" Header="Length (m)" SortMember="LengthIncludingNumberOfUnits"> <touch:LightTouchDataGridColumn.CellTemplate> <DataTemplate> - <TextBlock IsHitTestVisible="False" Text="{Binding Length,StringFormat=0.0}"></TextBlock> + <TextBlock IsHitTestVisible="False" > + <TextBlock.Text> + <MultiBinding Converter="{StaticResource LengthWithSpoolsConverter}" StringFormat="0.0" TargetNullValue='0' FallbackValue='0'> + <Binding Path="LengthIncludingNumberOfUnits" Mode="OneWay"/> + <Binding Path="DataContext.BuildProvider.IsEureka" Mode="OneWay" RelativeSource="{RelativeSource AncestorType=UserControl}"/> + <Binding Path="Spools" Mode="OneWay"/> + </MultiBinding> + </TextBlock.Text> + </TextBlock> </DataTemplate> </touch:LightTouchDataGridColumn.CellTemplate> </touch:LightTouchDataGridColumn> <touch:LightTouchDataGridColumn Header="Colors" SortMember="Segments.Count" Width="85"> <touch:LightTouchDataGridColumn.CellTemplate> <DataTemplate> - <Image Stretch="Fill" IsHitTestVisible="False" Source="{Binding Converter={StaticResource JobToPieImageConverter},ConverterParameter='25,25',IsAsync=True}" Width="25" Height="25" HorizontalAlignment="Left"></Image> + <Image Stretch="Fill" IsHitTestVisible="False" Source="{Binding Converter={StaticResource JobToPieImageConverter},ConverterParameter='60,60',IsAsync=True}" Width="60" Height="60" HorizontalAlignment="Left"></Image> </DataTemplate> </touch:LightTouchDataGridColumn.CellTemplate> </touch:LightTouchDataGridColumn> <touch:LightTouchDataGridColumn Width="100" Header="Updated" SortMember="LastUpdated"> <touch:LightTouchDataGridColumn.CellTemplate> <DataTemplate> - <TextBlock IsHitTestVisible="False" Text="{Binding LastUpdated,Converter={StaticResource DateTimeUTCToShortDateConverter}}"></TextBlock> + <TextBlock IsHitTestVisible="False" Text="{Binding LastUpdated,Converter={StaticResource DateTimeUTCToShortDateConverter}}" FontWeight="Regular"></TextBlock> </DataTemplate> </touch:LightTouchDataGridColumn.CellTemplate> </touch:LightTouchDataGridColumn> diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Views/MainView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Views/MainView.xaml index 6475869dd..764f044d0 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Views/MainView.xaml +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Views/MainView.xaml @@ -461,7 +461,7 @@ </DockPanel> <DockPanel Margin="0 20 0 0" TextElement.FontSize="{StaticResource TangoDefaultFontSize}"> - <TextBlock VerticalAlignment="Center">Show advanced options (Multi-segments & Gradients) in the Job Editor</TextBlock> + <TextBlock VerticalAlignment="Center">Show advanced options (Segments & Gradients) in the Job Editor</TextBlock> <touch:TouchToggleSlider IsChecked="{Binding Settings.ShowAdvancedOptions}" Margin="0 0 100 0" DockPanel.Dock="Right" Style="{StaticResource TangoToggleButtonGrayAccent}" HorizontalAlignment="Right" Width="90"></touch:TouchToggleSlider> </DockPanel> diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Resources/Fonts.xaml b/Software/Visual_Studio/PPC/Tango.PPC.Common/Resources/Fonts.xaml index 1f0068c3e..4e704751c 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Resources/Fonts.xaml +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Resources/Fonts.xaml @@ -2,8 +2,8 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:Tango.PPC.Common.Resources"> - - <FontFamily x:Key="Poppins" >..//Fonts//#Poppins</FontFamily> + + <FontFamily x:Key="Poppins" >pack://application:,,,/Tango.PPC.Common;Component/Fonts/#Poppins</FontFamily> </ResourceDictionary>
\ No newline at end of file diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/App.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/App.xaml index bdcf675e3..38a5b91b2 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/App.xaml +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/App.xaml @@ -20,6 +20,7 @@ <ResourceDictionary Source="Resources/Colors.xaml"></ResourceDictionary> <ResourceDictionary Source="Resources/Fonts.xaml"></ResourceDictionary> <ResourceDictionary Source="Resources/Styles.xaml"></ResourceDictionary> + <ResourceDictionary Source="Resources/Graphs.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Converters/ProgressUnitSpoolConverter.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Converters/ProgressUnitSpoolConverter.cs index 054ccd3df..d0cc8284e 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Converters/ProgressUnitSpoolConverter.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Converters/ProgressUnitSpoolConverter.cs @@ -17,7 +17,7 @@ namespace Tango.PPC.UI.Converters if (values.Count() == 1)//may be added count of spools { int CurrentUnit = System.Convert.ToInt16(values[0]); - CurrentUnit +=1; + var totalBy4Spools = (double)CurrentUnit * 4;// spools ; return totalBy4Spools.ToString(); diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Converters/ProgressWeightSpoolConverter.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Converters/ProgressWeightSpoolConverter.cs index 05a41912c..f451fe0d9 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Converters/ProgressWeightSpoolConverter.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Converters/ProgressWeightSpoolConverter.cs @@ -42,7 +42,7 @@ namespace Tango.PPC.UI.Converters var currentProgressBy4Spools = (double)currentProgresslength * 4; int coeff = (int)currentProgressBy4Spools / (int)totalBy4Spools; - var progressCurrent = coeff == 0 ? currentProgressBy4Spools : currentProgressBy4Spools % (coeff * totalBy4Spools);//show for progress + var progressCurrent = (coeff == 0 || coeff == 1) ? currentProgressBy4Spools : currentProgressBy4Spools % (coeff * totalBy4Spools);//show for progress var weight = ((double)progressCurrent * coef) / (1000);//(g) if (forOneSpool) { diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Converters/StatisticTabToVisibilityConverter.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Converters/StatisticTabToVisibilityConverter.cs new file mode 100644 index 000000000..06c75a999 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Converters/StatisticTabToVisibilityConverter.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; +using System.Windows.Data; +using static Tango.PPC.UI.ViewModels.MachineStatusViewVM; + +namespace Tango.PPC.UI.Converters +{ + public class StatisticTabToVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + StatisticTab selected = (StatisticTab)Enum.Parse(typeof(StatisticTab), parameter.ToString()); + StatisticTab statTab = (StatisticTab)value; + + return statTab.Equals(selected) ? Visibility.Visible : Visibility.Hidden; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Graphs/GraphHelper.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Graphs/GraphHelper.cs new file mode 100644 index 000000000..d06ed042a --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Graphs/GraphHelper.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows; +using System.Windows.Media; + +namespace Tango.PPC.UI.Graphs +{ + public static class GraphHelper + { + public enum GraphColor + { + White, + Red, + Yellow, + Green, + Orange + } + + public static Color GetGraphColor(GraphColor graphColor) + { + return (Color)Application.Current.Resources[$"Tango_RealTimeGraph_{graphColor.ToString()}"]; + } + + public static Brush GetGraphBrush(GraphColor graphColor) + { + return new SolidColorBrush(GetGraphColor(graphColor)); + } + + public static Color GetGraphStrokeColor() + { + return (Color)Application.Current.Resources["Tango_RealTimeGraph_ForegroundColor"]; + } + } +} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Graphs/RealTimeGraph.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Graphs/RealTimeGraph.cs new file mode 100644 index 000000000..303b18892 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Graphs/RealTimeGraph.cs @@ -0,0 +1,149 @@ +using RealTimeGraphX; +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media; + +namespace Tango.PPC.UI.Graphs +{ + public class RealTimeGraph : Control + { + /// <summary> + /// Gets or sets the graph controller. + /// </summary> + public IGraphController Controller + { + get { return (IGraphController)GetValue(ControllerProperty); } + set { SetValue(ControllerProperty, value); } + } + public static readonly DependencyProperty ControllerProperty = + DependencyProperty.Register("Controller", typeof(IGraphController), typeof(RealTimeGraph), new PropertyMetadata(null)); + + + /// <summary> + /// Gets or sets the string format of the y-axis. + /// </summary> + public String StringFormat + { + get { return (String)GetValue(StringFormatProperty); } + set { SetValue(StringFormatProperty, value); } + } + public static readonly DependencyProperty StringFormatProperty = + DependencyProperty.Register("StringFormat", typeof(String), typeof(RealTimeGraph), new PropertyMetadata("0.0")); + + + /// <summary> + /// Gets or sets the display name. + /// </summary> + public String DisplayName + { + get { return (String)GetValue(DisplayNameProperty); } + set { SetValue(DisplayNameProperty, value); } + } + public static readonly DependencyProperty DisplayNameProperty = + DependencyProperty.Register("DisplayName", typeof(String), typeof(RealTimeGraph), new PropertyMetadata(null)); + + + /// <summary> + /// Gets or sets the display units. + /// </summary> + public String DisplayUnits + { + get { return (String)GetValue(DisplayUnitsProperty); } + set { SetValue(DisplayUnitsProperty, value); } + } + public static readonly DependencyProperty DisplayUnitsProperty = + DependencyProperty.Register("DisplayUnits", typeof(String), typeof(RealTimeGraph), new PropertyMetadata(null)); + + /// <summary> + /// Gets or sets the graph label visibility. + /// </summary> + public Visibility GraphLabelVisibility + { + get { return (Visibility)GetValue(GraphLabelVisibilityProperty); } + set { SetValue(GraphLabelVisibilityProperty, value); } + } + public static readonly DependencyProperty GraphLabelVisibilityProperty = + DependencyProperty.Register("GraphLabelVisibility", typeof(Visibility), typeof(RealTimeGraph), new PropertyMetadata(Visibility.Visible)); + + + /// <summary> + /// Gets or sets the vertical ticks. + /// </summary> + public int VerticalTicks + { + get { return (int)GetValue(VerticalTicksProperty); } + set { SetValue(VerticalTicksProperty, value); } + } + public static readonly DependencyProperty VerticalTicksProperty = + DependencyProperty.Register("VerticalTicks", typeof(int), typeof(RealTimeGraph), new PropertyMetadata(10)); + + + /// <summary> + /// Gets or sets the horizontal ticks. + /// </summary> + public int HorizontalTicks + { + get { return (int)GetValue(HorizontalTicksProperty); } + set { SetValue(HorizontalTicksProperty, value); } + } + public static readonly DependencyProperty HorizontalTicksProperty = + DependencyProperty.Register("HorizontalTicks", typeof(int), typeof(RealTimeGraph), new PropertyMetadata(10)); + + public Brush GridLinesBrush + { + get { return (Brush)GetValue(GridLinesBrushProperty); } + set { SetValue(GridLinesBrushProperty, value); } + } + public static readonly DependencyProperty GridLinesBrushProperty = + DependencyProperty.Register("GridLinesBrush", typeof(Brush), typeof(RealTimeGraph), new PropertyMetadata(null)); + + public Visibility HorizontalAxisVisibility + { + get { return (Visibility)GetValue(HorizontalAxisVisibilityProperty); } + set { SetValue(HorizontalAxisVisibilityProperty, value); } + } + public static readonly DependencyProperty HorizontalAxisVisibilityProperty = + DependencyProperty.Register("HorizontalAxisVisibility", typeof(Visibility), typeof(RealTimeGraph), new PropertyMetadata(Visibility.Visible)); + + public Visibility VerticalAxisVisibility + { + get { return (Visibility)GetValue(VerticalAxisVisibilityProperty); } + set { SetValue(VerticalAxisVisibilityProperty, value); } + } + public static readonly DependencyProperty VerticalAxisVisibilityProperty = + DependencyProperty.Register("VerticalAxisVisibility", typeof(Visibility), typeof(RealTimeGraph), new PropertyMetadata(Visibility.Visible)); + + public Visibility CurrentValueVisibility + { + get { return (Visibility)GetValue(CurrentValueVisibilityProperty); } + set { SetValue(CurrentValueVisibilityProperty, value); } + } + public static readonly DependencyProperty CurrentValueVisibilityProperty = + DependencyProperty.Register("CurrentValueVisibility", typeof(Visibility), typeof(RealTimeGraph), new PropertyMetadata(Visibility.Collapsed)); + + public double CurrentValueFontSize + { + get { return (double)GetValue(CurrentValueFontSizeProperty); } + set { SetValue(CurrentValueFontSizeProperty, value); } + } + public static readonly DependencyProperty CurrentValueFontSizeProperty = + DependencyProperty.Register("CurrentValueFontSize", typeof(double), typeof(RealTimeGraph), new PropertyMetadata(25.0)); + + public Thickness CurrentValueMargin + { + get { return (Thickness)GetValue(CurrentValueMarginProperty); } + set { SetValue(CurrentValueMarginProperty, value); } + } + public static readonly DependencyProperty CurrentValueMarginProperty = + DependencyProperty.Register("CurrentValueMargin", typeof(Thickness), typeof(RealTimeGraph), new PropertyMetadata(new Thickness(20))); + + /// <summary> + /// Initializes the <see cref="RealTimeGraph"/> class. + /// </summary> + static RealTimeGraph() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(RealTimeGraph), new FrameworkPropertyMetadata(typeof(RealTimeGraph))); + } + } +} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Graphs/RealTimeGraph.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Graphs/RealTimeGraph.xaml new file mode 100644 index 000000000..8844f9627 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Graphs/RealTimeGraph.xaml @@ -0,0 +1,106 @@ +<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:realTimeGraphX="clr-namespace:RealTimeGraphX.WPF;assembly=RealTimeGraphX.WPF" + xmlns:local="clr-namespace:Tango.PPC.UI.Graphs"> + + <BitmapImage x:Key="PPC_Screw" UriSource="../Images/screw.png" /> + + <Style TargetType="{x:Type local:RealTimeGraph}"> + <Setter Property="BorderThickness" Value="1"></Setter> + <Setter Property="BorderBrush" Value="{StaticResource Tango_RealTimeGraph_OuterBorderBrush}"></Setter> + <Setter Property="Padding" Value="20 20 30 20"></Setter> + <Setter Property="FontSize" Value="11"></Setter> + <Setter Property="Foreground" Value="{StaticResource Tango_RealTimeGraph_ForegroundBrush}"></Setter> + <Setter Property="Background" Value="{StaticResource Tango_RealTimeGraph_BackgroundBrush}"></Setter> + <Setter Property="GridLinesBrush" Value="{StaticResource Tango_RealTimeGraph_GridLinesBrush}"></Setter> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="{x:Type local:RealTimeGraph}"> + <Grid> + <Border Background="{TemplateBinding Background}" + BorderBrush="{TemplateBinding BorderBrush}" + BorderThickness="{TemplateBinding BorderThickness}" + CornerRadius="5" + Padding="{TemplateBinding Padding}"> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="1*"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="1*"/> + </Grid.ColumnDefinitions> + + <Grid Grid.Column="1"> + <realTimeGraphX:WpfGraphGridLines Controller="{TemplateBinding Controller}" Foreground="{TemplateBinding GridLinesBrush}" /> + <realTimeGraphX:WpfGraphSurface x:Name="surface" Controller="{TemplateBinding Controller}" BorderThickness="1 0 0 1" BorderBrush="{StaticResource Tango_RealTimeGraph_InnerBorderBrush}" /> + </Grid> + + <realTimeGraphX:WpfGraphAxisControl Width="70" Visibility="{TemplateBinding VerticalAxisVisibility}" Orientation="Vertical" Controller="{TemplateBinding Controller}" StringFormat="{TemplateBinding StringFormat}" Ticks="{TemplateBinding VerticalTicks}" /> + <realTimeGraphX:WpfGraphAxisControl Height="35" Visibility="{TemplateBinding HorizontalAxisVisibility}" Orientation="Horizontal" Controller="{TemplateBinding Controller}" Grid.Column="1" Grid.Row="1" Ticks="{TemplateBinding HorizontalTicks}" StringFormat="hh\:mm\:ss"/> + </Grid> + </Border> + <Image HorizontalAlignment="Left" VerticalAlignment="Top" Margin="8" Source="{StaticResource PPC_Screw}" RenderOptions.BitmapScalingMode="Fant" Width="10" Height="10" /> + <Image HorizontalAlignment="Right" VerticalAlignment="Top" Margin="8" Source="{StaticResource PPC_Screw}" RenderOptions.BitmapScalingMode="Fant" Width="10" Height="10" /> + + <Image HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="8" Source="{StaticResource PPC_Screw}" RenderOptions.BitmapScalingMode="Fant" Width="10" Height="10" /> + <Image HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="8" Source="{StaticResource PPC_Screw}" RenderOptions.BitmapScalingMode="Fant" Width="10" Height="10" /> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + + <Style TargetType="{x:Type local:RealTimeGraph}" x:Key="PPC_RealTimeGraph_Flat"> + <Setter Property="BorderThickness" Value="1"></Setter> + <Setter Property="BorderBrush" Value="{StaticResource Tango_RealTimeGraph_OuterBorderBrush}"></Setter> + <Setter Property="Padding" Value="0"></Setter> + <Setter Property="FontSize" Value="11"></Setter> + <Setter Property="Foreground" Value="{StaticResource Tango_RealTimeGraph_ForegroundBrush}"></Setter> + <Setter Property="Background" Value="Transparent"></Setter> + <Setter Property="GridLinesBrush" Value="{StaticResource Tango_RealTimeGraph_GridLinesBrush}"></Setter> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="{x:Type local:RealTimeGraph}"> + <Grid> + <Border Background="{TemplateBinding Background}" + BorderBrush="{TemplateBinding BorderBrush}" + BorderThickness="{TemplateBinding BorderThickness}" + Padding="{TemplateBinding Padding}"> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="1*"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="1*"/> + </Grid.ColumnDefinitions> + + <Grid Grid.Column="1" ClipToBounds="True"> + <realTimeGraphX:WpfGraphGridLines Controller="{TemplateBinding Controller}" Foreground="{TemplateBinding GridLinesBrush}" Rows="5" Columns="0"/> + <realTimeGraphX:WpfGraphSurface Margin="-2 0 0 0" x:Name="surface" Controller="{TemplateBinding Controller}" BorderThickness="0 0 0 0" BorderBrush="{StaticResource Tango_RealTimeGraph_InnerBorderBrush}" /> + </Grid> + + <realTimeGraphX:WpfGraphAxisControl Width="30" Visibility="{TemplateBinding VerticalAxisVisibility}" Orientation="Vertical" Controller="{TemplateBinding Controller}" StringFormat="{TemplateBinding StringFormat}" Ticks="{TemplateBinding VerticalTicks}" /> + <realTimeGraphX:WpfGraphAxisControl Height="38" Visibility="{TemplateBinding HorizontalAxisVisibility}" Orientation="Horizontal" Controller="{TemplateBinding Controller}" Grid.Column="1" Grid.Row="1" Ticks="{TemplateBinding HorizontalTicks}" StringFormat="hh\:mm"/> + </Grid> + </Border> + + <Viewbox IsHitTestVisible="False" Stretch="Uniform" Margin="{TemplateBinding CurrentValueMargin}" Visibility="{TemplateBinding CurrentValueVisibility}"> + <Grid Width="200" Height="200"> + <!--<Ellipse Stroke="#38FFFFFF" StrokeThickness="20" />--> + + <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> + <TextBlock Opacity="0.8" HorizontalAlignment="Center" VerticalAlignment="Center" FontWeight="SemiBold" FontSize="{TemplateBinding CurrentValueFontSize}" Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=Controller.DataSeriesCollection[0].CurrentValue}"></TextBlock> + </StackPanel> + </Grid> + </Viewbox> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + +</ResourceDictionary>
\ No newline at end of file diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/Error.png b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/Error.png Binary files differindex b9138f444..a5a178bdb 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/Error.png +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/Error.png diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/Normal.png b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/Normal.png Binary files differindex a562e9228..8ddeecbe0 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/Normal.png +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/Normal.png diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/motor.png b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/motor.png Binary files differnew file mode 100644 index 000000000..8401a8e30 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/motor.png diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/pr_data.png b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/pr_data.png Binary files differnew file mode 100644 index 000000000..ebd02a99b --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/pr_data.png diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/pressure.png b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/pressure.png Binary files differnew file mode 100644 index 000000000..12ade5d92 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/pressure.png diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/temperature.png b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/temperature.png Binary files differnew file mode 100644 index 000000000..de9b042c4 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Overview Icons/temperature.png diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/screw.png b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/screw.png Binary files differnew file mode 100644 index 000000000..46a8134fe --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/screw.png diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Models/MachineOverviewErrorItem.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Models/MachineOverviewErrorItem.cs new file mode 100644 index 000000000..3925a1752 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Models/MachineOverviewErrorItem.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core; + +namespace Tango.PPC.UI.Models +{ + public class MachineOverviewErrorItem : ExtendedObject + { + private bool _isErrorState; + + public bool IsErrorState + { + get { return _isErrorState; } + set { _isErrorState = value; RaisePropertyChangedAuto();} + } + + public MachineOverviewErrorItem() + { + IsErrorState = false; + } + + } +} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Models/MachineOverviewErrorStates.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Models/MachineOverviewErrorStates.cs new file mode 100644 index 000000000..1863b01e1 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Models/MachineOverviewErrorStates.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core; + +namespace Tango.PPC.UI.Models +{ + public class MachineOverviewErrorStates : ExtendedObject + { + public ObservableCollection<MachineOverviewErrorItem> Winders { get; set; } + + public ObservableCollection<MachineOverviewErrorItem> Dancers { get; set; } + + public ObservableCollection<MachineOverviewErrorItem> BTSRs { get; set; } + + public MachineOverviewErrorStates() + { + Winders = new ObservableCollection<MachineOverviewErrorItem>(); + Dancers = new ObservableCollection<MachineOverviewErrorItem>(); + BTSRs = new ObservableCollection<MachineOverviewErrorItem>(); + for ( int i = 0; i < 4 ; i++) + { + Winders.Add( new MachineOverviewErrorItem()); + Dancers.Add(new MachineOverviewErrorItem()); + BTSRs.Add(new MachineOverviewErrorItem()); + } + } + + public void UpdateWinders(List<bool> updates) + { + if(!UpdateCollection(Winders, updates)) + { + LogManager.Log("Error in display Winders Errors. Number of Winders In Error is less then 4!"); + } + } + public void UpdateDancers(List<bool> updates) + { + if(!UpdateCollection(Dancers, updates)) + { + LogManager.Log("Error in display Dancers Errors. Number of Dancers In Error is less then 4!"); + } + } + public void UpdateBTSRs(List<bool> updates) + { + if(!UpdateCollection(BTSRs, updates)) + { + LogManager.Log("Error in display BTSRs Errors. Number of BTSRs In Error is less then 4!"); + } + } + + private bool UpdateCollection(ObservableCollection<MachineOverviewErrorItem> collection, List<bool> updates ) + { + if (collection.Count == updates.Count) + { + for (int i = 0; i < collection.Count; i++) + { + collection[i].IsErrorState = updates[i]; + } + return true; + } + return false; + + } + } +} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Models/MachineOverviewItem.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Models/MachineOverviewItem.cs index ded7e33e8..42f6bd180 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Models/MachineOverviewItem.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Models/MachineOverviewItem.cs @@ -17,6 +17,13 @@ namespace Tango.PPC.UI.Models set { _displayValue = value; RaisePropertyChangedAuto(); } } + private String _displayMaxValue; + public String DisplayMaxValue + { + get { return _displayMaxValue; } + set { _displayMaxValue = value; RaisePropertyChangedAuto(); } + } + private String _status; public String Status { @@ -53,6 +60,7 @@ namespace Tango.PPC.UI.Models DisplayValue = "--"; Value = 0; MaxValue = 100; + DisplayMaxValue = ""; } } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Models/MachineOverviewModel.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Models/MachineOverviewModel.cs index bd34122c6..beba47246 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Models/MachineOverviewModel.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Models/MachineOverviewModel.cs @@ -56,7 +56,7 @@ namespace Tango.PPC.UI.Models public void Update(StartDiagnosticsResponse diagnostics, Rml rml, ProcessParametersTable processParameters) { //Dryer Zone 3 - var dryerZone3State = diagnostics.HeatersStates.FirstOrDefault(x => x.HeaterType == HeaterType.HeaterZone3); + var dryerZone3State = diagnostics.HeatersStates.FirstOrDefault(x => x.HeaterType == HeaterType.EDryerHeater3); UpdateHeaterItem(DryerZone3, dryerZone3State); //Dryer Air @@ -70,11 +70,29 @@ namespace Tango.PPC.UI.Models UpdateHeaterItem(Tunnel, tunnelState); //Pumps Pressure - if (diagnostics.Monitors.EuInkLinesPressure.Count > 0 && diagnostics.Monitors.EuInkLinesPressure.Any(x => x.Data.Count > 0)) - { - var pumpsPressuerValue = diagnostics.Monitors.EuInkLinesPressure.SelectMany(x => x.Data).Max(); - UpdatePumpsPressureItem(pumpsPressuerValue); - } + + //EuDispenser1Pressure + List<double> EuDispensersPressure = new List<double>(); + var EuDispenser1PressureValue = diagnostics.Monitors.EuDispenser1Pressure.FirstOrDefault(); + EuDispensersPressure.Add(EuDispenser1PressureValue); + var EuDispenser2PressureValue = diagnostics.Monitors.EuDispenser2Pressure.FirstOrDefault(); + EuDispensersPressure.Add(EuDispenser2PressureValue); + var EuDispenser3PressureValue = diagnostics.Monitors.EuDispenser3Pressure.FirstOrDefault(); + EuDispensersPressure.Add(EuDispenser3PressureValue); + var EuDispenser4PressureValue = diagnostics.Monitors.EuDispenser4Pressure.FirstOrDefault(); + EuDispensersPressure.Add(EuDispenser4PressureValue); + var EuDispenser5PressureValue = diagnostics.Monitors.EuDispenser5Pressure.FirstOrDefault(); + EuDispensersPressure.Add(EuDispenser5PressureValue); + var EuDispenser6PressureValue = diagnostics.Monitors.EuDispenser6Pressure.FirstOrDefault(); + EuDispensersPressure.Add(EuDispenser6PressureValue); + var EuDispenser7PressureValue = diagnostics.Monitors.EuDispenser7Pressure.FirstOrDefault(); + EuDispensersPressure.Add(EuDispenser7PressureValue); + var EuDispenser8PressureValue = diagnostics.Monitors.EuDispenser8Pressure.FirstOrDefault(); + EuDispensersPressure.Add(EuDispenser8PressureValue); + + var pumpsPressuerValue = EuDispensersPressure.Max();// diagnostics.Monitors.EuInkLinesPressure.SelectMany(x => x.Data).Max(); + UpdatePumpsPressureItem(pumpsPressuerValue); + //Lubricant var lubricantValue = diagnostics.Monitors.EuLubricantCurrent.FirstOrDefault(); @@ -92,23 +110,33 @@ namespace Tango.PPC.UI.Models { item.Status = "Heating Up"; item.Color = Colors.Orange; - item.DisplayValue = $"{state.CurrentValue} / {state.SetPoint}"; + item.DisplayValue = $"{state.CurrentValue.ToString("N1")}"; + item.DisplayMaxValue = $"/{state.SetPoint}"; item.MaxValue = state.SetPoint; item.Value = state.CurrentValue; } - else if (state.SetPoint == 0 || (state.CurrentValue >= (state.SetPoint - 10) || state.CurrentValue <= (state.SetPoint + 10))) + else if (state.SetPoint == 0 || (state.CurrentValue >= (state.SetPoint - 10) && state.CurrentValue <= (state.SetPoint + 10))) { item.Status = "Operational"; item.Color = Colors.Green; item.DisplayValue = $" {state.SetPoint}"; - item.MaxValue = state.SetPoint; + item.DisplayMaxValue = ""; + if(state.SetPoint == 0 && state.CurrentValue == 0) + { + item.MaxValue = 10; + } + else + { + item.MaxValue = state.SetPoint; + } item.Value = state.CurrentValue; } else if (!state.IsRampingUp && (state.CurrentValue < (state.SetPoint - 10) || state.CurrentValue > (state.SetPoint + 10))) { item.Status = "Over-temperature"; item.Color = Colors.Red; - item.DisplayValue = $"{state.CurrentValue} / {state.SetPoint}"; + item.DisplayValue = $"{state.CurrentValue.ToString("N1")}"; + item.DisplayMaxValue = $"/{state.SetPoint}"; item.MaxValue = state.SetPoint; item.Value = state.CurrentValue > state.SetPoint? state.SetPoint : state.CurrentValue; } @@ -117,6 +145,7 @@ namespace Tango.PPC.UI.Models item.Color = Colors.Gray; item.MaxValue = 100; item.Value = 0; + item.DisplayMaxValue = ""; } } } @@ -127,13 +156,13 @@ namespace Tango.PPC.UI.Models { DryerAir.Status = "Heating Up"; DryerAir.Color = Colors.Orange; - DryerAir.DisplayValue = $"{currentvalue}"; + DryerAir.DisplayValue = currentvalue.ToString("N1"); } else if (currentvalue >= DryerAirMaxValue) { DryerAir.Status = "Operational"; DryerAir.Color = Colors.Green; - DryerAir.DisplayValue = $"{currentvalue}"; + DryerAir.DisplayValue = currentvalue.ToString("N1"); } DryerAir.Value = currentvalue; } @@ -144,13 +173,13 @@ namespace Tango.PPC.UI.Models { PumpsPressure.Status = "Overpressure"; PumpsPressure.Color = Colors.Red; - PumpsPressure.DisplayValue = maxValue.ToString(); + PumpsPressure.DisplayValue = maxValue.ToString("N1"); } else { PumpsPressure.Status = "Operational"; PumpsPressure.Color = Colors.Green; - PumpsPressure.DisplayValue = maxValue.ToString(); + PumpsPressure.DisplayValue = maxValue.ToString("N1"); } PumpsPressure.Value = maxValue; } @@ -170,13 +199,16 @@ namespace Tango.PPC.UI.Models return; } Lubricant.Status = "Active"; - Lubricant.DisplayValue = lubricantValue.ToString(); + Lubricant.DisplayValue = lubricantValue.ToString("N1"); Lubricant.Color = Colors.Green; + return; + } + else + { + Lubricant.Status = "NotActive"; + Lubricant.DisplayValue = "None"; + Lubricant.Color = Colors.Gray; } - - Lubricant.Status = "NotActive"; - Lubricant.DisplayValue = "None"; - Lubricant.Color = Colors.Gray; } } } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs index 4940201f0..16a8c01b9 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs @@ -8,4 +8,4 @@ using System.Windows; // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("Tango PPC Application")] -[assembly: AssemblyVersion("2.0.4.0")] +[assembly: AssemblyVersion("2.0.8.0")] diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Resources/Graphs.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Resources/Graphs.xaml new file mode 100644 index 000000000..67047cf1f --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Resources/Graphs.xaml @@ -0,0 +1,8 @@ +<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="clr-namespace:Tango.PPC.UI.Resources"> + <ResourceDictionary.MergedDictionaries> + <ResourceDictionary Source="pack://application:,,,/Tango.PPC.UI;component/Graphs/RealTimeGraph.xaml" /> + </ResourceDictionary.MergedDictionaries> + +</ResourceDictionary>
\ No newline at end of file diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj b/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj index 51600b0e8..e2d447be5 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Tango.PPC.UI.csproj @@ -176,6 +176,7 @@ <Compile Include="Converters\ProgressLengthSpoolConverter.cs" /> <Compile Include="Converters\ProgressUnitSpoolConverter.cs" /> <Compile Include="Converters\ProgressWeightSpoolConverter.cs" /> + <Compile Include="Converters\StatisticTabToVisibilityConverter.cs" /> <Compile Include="Dialogs\BitResultsView.xaml.cs"> <DependentUpon>BitResultsView.xaml</DependentUpon> </Compile> @@ -236,11 +237,15 @@ </Compile> <Compile Include="Dialogs\FirmwareUpgradeFromFileViewVM.cs" /> <Compile Include="Dialogs\UpdateFromFileViewVM.cs" /> + <Compile Include="Graphs\GraphHelper.cs" /> + <Compile Include="Graphs\RealTimeGraph.cs" /> <Compile Include="Helpers\DpiHelper.cs" /> <Compile Include="InternalModule.cs" /> + <Compile Include="Models\MachineOverviewErrorStates.cs" /> <Compile Include="Models\MachineOverviewItem.cs" /> <Compile Include="Models\MachineOverviewModel.cs" /> <Compile Include="Models\JerricanLevelModel.cs" /> + <Compile Include="Models\MachineOverviewErrorItem.cs" /> <Compile Include="Modules\DefaultPPCModuleLoader.cs" /> <Compile Include="Navigation\EurekaNavigationManager.cs" /> <Compile Include="Navigation\DefaultNavigationManager.cs" /> @@ -407,6 +412,10 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> + <Page Include="Graphs\RealTimeGraph.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> <Page Include="MainWindow.xaml"> <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> @@ -431,6 +440,10 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> + <Page Include="Resources\Graphs.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> <Page Include="Resources\Styles.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -625,6 +638,11 @@ <Resource Include="Images\Overview Icons\Feeder4.png" /> <Resource Include="Manifests\eureka_debug.xml" /> <Resource Include="Images\Overview Icons\JericanRemoved.png" /> + <Resource Include="Images\Overview Icons\motor.png" /> + <Resource Include="Images\Overview Icons\pressure.png" /> + <Resource Include="Images\Overview Icons\pr_data.png" /> + <Resource Include="Images\Overview Icons\temperature.png" /> + <Resource Include="Images\screw.png" /> <Content Include="Intro.wmv" /> <Content Include="Manifests\release.xml" /> <Content Include="Manifests\debug.xml" /> @@ -646,6 +664,14 @@ <None Include="App.config" /> </ItemGroup> <ItemGroup> + <ProjectReference Include="..\..\SideChains\RealTimeGraphX-master\RealTimeGraphX.WPF\RealTimeGraphX.WPF.csproj"> + <Project>{6b9774f7-960d-438e-ad81-c6b9be328d50}</Project> + <Name>RealTimeGraphX.WPF</Name> + </ProjectReference> + <ProjectReference Include="..\..\SideChains\RealTimeGraphX-master\RealTimeGraphX\RealTimeGraphX.csproj"> + <Project>{f13a489c-80ee-4cd0-bdd4-92d959215646}</Project> + <Name>RealTimeGraphX</Name> + </ProjectReference> <ProjectReference Include="..\..\Tango.AnimatedGif\Tango.AnimatedGif.csproj"> <Project>{d129789c-3096-4d0b-8dd7-fe24a4df4b21}</Project> <Name>Tango.AnimatedGif</Name> diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineStatusViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineStatusViewVM.cs index 828047ccf..103084e11 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineStatusViewVM.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineStatusViewVM.cs @@ -20,11 +20,27 @@ using System.Timers; using System.Windows.Threading; using System.Diagnostics; using Tango.PMR.Printing; +using System.ComponentModel; +using RealTimeGraphX.WPF; +using RealTimeGraphX.DataPoints; +using Tango.PPC.UI.Graphs; namespace Tango.PPC.UI.ViewModels { public class MachineStatusViewVM : PPCViewModel { + public enum StatisticTab + { + [Description("Production Data")] + Productiondata = 0, + [Description("Temperature")] + Temperature = 1, + [Description("Pressure")] + Pressure = 2, + [Description("Motor")] + Motor = 3 + } + #region Properties [TangoInject] @@ -45,6 +61,7 @@ namespace Tango.PPC.UI.ViewModels if (_job == null) IsDyeingProcess = false; RaisePropertyChangedAuto(); + InvalidateRelayCommands(); } } @@ -185,6 +202,13 @@ namespace Tango.PPC.UI.ViewModels set { _midTankLevels = value; RaisePropertyChangedAuto(); } } + private JerricanLevelModel _midTankLubLevel; + public JerricanLevelModel MidTankLubLevel + { + get { return _midTankLubLevel; } + set { _midTankLubLevel = value; RaisePropertyChangedAuto(); } + } + public MachineOverviewModel OverviewModel { get; set; } private bool _isDisplayJobOutline; @@ -206,7 +230,84 @@ namespace Tango.PPC.UI.ViewModels get { return _jobOutlineTicket; } set { _jobOutlineTicket = value; RaisePropertyChangedAuto(); } } - + + public MachineOverviewErrorStates MachineErrorStates { get; set; } + + private bool _isExpandedNotificatios; + + public bool IsExpandedNotifications + { + get { return _isExpandedNotificatios; } + set { + _isExpandedNotificatios = value; + RaisePropertyChangedAuto();} + } + + private int _selectedStatisticTabIndex; + /// <summary> + /// Gets or sets the index of the selected category. + /// </summary> + public int SelectedStatisticTabIndex + { + get { return _selectedStatisticTabIndex; } + set + { + if (_selectedStatisticTabIndex != value) + { + _selectedStatisticTabIndex = value; + RaisePropertyChangedAuto(); + switch (_selectedStatisticTabIndex) + { + case 0: + { + SelectedStatisticTab = StatisticTab.Productiondata; + break; + } + case 1: + { + SelectedStatisticTab = StatisticTab.Temperature; + break; + } + case 2: + { + SelectedStatisticTab = StatisticTab.Pressure; + break; + } + case 3: + { + SelectedStatisticTab = StatisticTab.Motor; + break; + } + } + } + } + } + + private StatisticTab _selectedStatisticTab; + /// <summary> + /// Gets or sets the selected category. + /// </summary> + /// + public StatisticTab SelectedStatisticTab + { + get + { + return _selectedStatisticTab; + } + set + { + if (_selectedStatisticTab != value) + { + _selectedStatisticTab = value; + RaisePropertyChangedAuto(); + } + _selectedStatisticTabIndex = _selectedStatisticTab.ToInt32(); + RaisePropertyChanged(nameof(SelectedStatisticTabIndex)); + } + } + + public WpfGraphController<DateTimeDataPoint, DoubleDataPoint> JobController { get; set; } + #endregion #region Commands @@ -241,7 +342,7 @@ namespace Tango.PPC.UI.ViewModels StopCommand = new RelayCommand(StopJob, () => CanStopped()); AbortCommand = new RelayCommand(AbortJob, () => CanStopped()); - GoToJobCommand = new RelayCommand(GoToJob); + GoToJobCommand = new RelayCommand(GoToJob, () => IsEnableGoToJob()); JobStatusViewCommand = new RelayCommand(JobStatusView); OverviewViewCommand = new RelayCommand(OverviewView); ClearAllNotificationsCommand = new RelayCommand(ClearAllNotifications); @@ -254,17 +355,32 @@ namespace Tango.PPC.UI.ViewModels IsWeghtView = false; OverviewModel = new MachineOverviewModel(); + MachineErrorStates = new MachineOverviewErrorStates(); + + IsExpandedNotifications = false; + SelectedStatisticTabIndex = 0; + + JobController = CreateController(CreateSeries("Total", GraphHelper.GraphColor.Green)); } public override void OnApplicationReady() { base.OnApplicationReady(); + EventLogger.EventReceived += EventLogger_EventReceived; - MidTankLevels = MachineProvider.Machine.Configuration.NoneEmptyIdsPacks.Where(x => x.MidTankType.HasLevelMeasure || x.MidTankType.Type == MidTankTypes.LubricantMidTank).OrderBy(x => x.PackIndex).Select(x => new JerricanLevelModel() + MidTankLevels = MachineProvider.Machine.Configuration.NoneEmptyIdsPacks.Where(x => x.MidTankType.HasLevelMeasure ).OrderBy(x => x.PackIndex).Select(x => new JerricanLevelModel() { Max = x.MidTankType.LiterCapacity, IDSPack = x, - }).OrderBy(y => y.IDSPack.LiquidType.PreferredIndex).ToList(); + }).OrderBy(y => y.IDSPack.LiquidType.Type).ToList(); + var LubLevel = MachineProvider.Machine.Configuration.NoneEmptyIdsPacks.Where(x => x.MidTankType.Type == MidTankTypes.LubricantMidTank).FirstOrDefault(); + + MidTankLubLevel = new JerricanLevelModel(); + if(LubLevel != null) + { + MidTankLubLevel.Max = LubLevel.MidTankType.LiterCapacity; + MidTankLubLevel.IDSPack = LubLevel; + }; MachineProvider.MachineOperator.MachineStatusChanged += MachineOperator_MachineStatusChanged; @@ -272,9 +388,21 @@ namespace Tango.PPC.UI.ViewModels #region Events - private void MachineOperator_MachineStatusChanged(object sender, MachineStatus status) + private void EventLogger_EventReceived(object sender, MachinesEvent ev) + { + InvokeUI(() => + { + if (ev.Category == EventTypeCategories.Error || ev.Category == EventTypeCategories.Critical) + { + IsExpandedNotifications = true; + } + }); + } + + private void MachineOperator_MachineStatusChanged(object sender, MachineStatus status) { UpdateMidTankLevels(status); + UpdateMachineStatusErrors(status); } private void UpdateMidTankLevels(MachineStatus status) { @@ -282,7 +410,15 @@ namespace Tango.PPC.UI.ViewModels { foreach (var item in status.IDSPacksLevels) { - var model = MidTankLevels.SingleOrDefault(x => x.IDSPack.PackIndex == item.Index); + JerricanLevelModel model = null; + if (item.Index == 8)//lub + { + model = MidTankLubLevel; + + } + else { + model = MidTankLevels.SingleOrDefault(x => x.IDSPack.PackIndex == item.Index); + } if (model != null) { @@ -348,6 +484,16 @@ namespace Tango.PPC.UI.ViewModels } } + private void UpdateMachineStatusErrors(MachineStatus status) + { + var windersInError = status.WindersInError.ToList();// to test + MachineErrorStates.UpdateWinders(windersInError); + var dansersInError = status.DancersInError.ToList(); + MachineErrorStates.UpdateDancers(dansersInError); + var btsrsInErrors = status.BtsrsInError.ToList(); + MachineErrorStates.UpdateBTSRs(btsrsInErrors); + } + private void MachineOperator_InkFillingStatusChanged(object sender, InkFillingStatusChangedEventArgs e) { //foreach (var cartridge in e.Status.CartridgesStatuses.Where(x => x.Cartridge.Slot != CartridgeSlot.Ink)) @@ -453,6 +599,11 @@ namespace Tango.PPC.UI.ViewModels #region Methods + private bool IsEnableGoToJob() + { + return Job != null && _handler != null; + } + private void GoToJob() { @@ -545,6 +696,35 @@ namespace Tango.PPC.UI.ViewModels } } + private WpfGraphController<DateTimeDataPoint, DoubleDataPoint> CreateController(params WpfGraphDataSeries[] seriesCollection) + { + var controller = new WpfGraphController<DateTimeDataPoint, DoubleDataPoint>(); + + foreach (var series in seriesCollection) + { + controller.DataSeriesCollection.Add(series); + } + + controller.Range.AutoY = true; + controller.Range.MaximumY = 100; + controller.Range.MinimumY = 0; + controller.Range.MaximumX = new DateTime(0).AddMinutes(30); + + controller.RefreshRate = TimeSpan.FromMilliseconds(300000);//5 min + + return controller; + } + + private WpfGraphDataSeries CreateSeries(String name, GraphHelper.GraphColor fill) + { + WpfGraphDataSeries series = new WpfGraphDataSeries(); + series.Name = name; + series.Fill = GraphHelper.GetGraphBrush(fill); + series.StrokeThickness = 1; + series.Stroke = GraphHelper.GetGraphStrokeColor(); + return series; + } + #endregion } } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutEurekaView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutEurekaView.xaml index 84d1108f2..049f2268d 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutEurekaView.xaml +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutEurekaView.xaml @@ -61,7 +61,7 @@ Foreground="{StaticResource TangoLightForegroundBrush}" Background="{StaticResource TangoMidAccentBrush}" CornerRadius="18" Margin="0 8 0 8"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> - <touch:TouchIcon Icon="ArrowLeft" Background="Transparent" Width="30" BorderThickness="0"> + <touch:TouchIcon Icon="ArrowLeft" Background="Transparent" Width="30" BorderThickness="0" HorizontalAlignment="Center" Margin="-8 0 0 0"> <touch:TouchIcon.Style> <Style TargetType="touch:TouchIcon" BasedOn="{StaticResource {x:Type touch:TouchIcon}}"> <Style.Triggers> @@ -72,7 +72,7 @@ </Style> </touch:TouchIcon.Style> </touch:TouchIcon> - <TextBlock Background="Transparent" FontSize="{StaticResource TangoComboBoxItemFontSize}" VerticalAlignment="Center" Foreground="{StaticResource TangoLightForegroundBrush}" Margin="0 0 0 0" >Back</TextBlock> + <TextBlock HorizontalAlignment="Center" Background="Transparent" FontSize="{StaticResource TangoComboBoxItemFontSize}" VerticalAlignment="Center" Foreground="{StaticResource TangoLightForegroundBrush}" Margin="5 0 0 0" >Back</TextBlock> </StackPanel> </touch:TouchButton> @@ -85,7 +85,7 @@ <touch:TouchButton Height="45" Margin="0 0 0 0" Padding="10 0" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.ModuleNavigationCommand}" CommandParameter="{Binding Name}" > <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <Image VerticalAlignment="Center" Source="{Binding Image}" Width="20" Height="20"></Image> - <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" Text="{Binding Name}" FontSize="{StaticResource TangoComboBoxItemFontSize}" FontWeight="Light"></TextBlock> + <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" Text="{Binding Name}" FontSize="{StaticResource TangoDataGridHeaderFontSize}" FontWeight="Light"></TextBlock> </StackPanel> <touch:TouchButton.Style> <Style TargetType="touch:TouchButton" BasedOn="{StaticResource TangoFlatButton}" > @@ -119,7 +119,7 @@ <touch:TouchButton Style="{StaticResource TangoFlatButton}" Padding="10 0" Height="45" Foreground="{StaticResource TangoDarkForegroundBrush}" Command="{Binding UpdateCommand}"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <Image Source="/Images/Menu/update.png" VerticalAlignment="Center" Width="20" Height="20"></Image> - <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" Foreground="{StaticResource TangoLightForegroundBrush}" FontSize="{StaticResource TangoComboBoxItemFontSize}" FontWeight="Light">Update</TextBlock> + <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" Foreground="{StaticResource TangoLightForegroundBrush}" FontSize="{StaticResource TangoDataGridHeaderFontSize}" FontWeight="Light">Update</TextBlock> </StackPanel> </touch:TouchButton> </Border> @@ -129,7 +129,7 @@ <touch:TouchButton Style="{StaticResource TangoFlatButton}" Padding="10 0" Height="45" Foreground="{StaticResource TangoDarkForegroundBrush}" Command="{Binding PowerCommand}"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <Image Source="/Images/menu/power.png" VerticalAlignment="Center" Width="20" Height="20" ></Image> - <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" Foreground="{StaticResource TangoLightForegroundBrush}" FontSize="{StaticResource TangoComboBoxItemFontSize}" FontWeight="Light">Power</TextBlock> + <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" Foreground="{StaticResource TangoLightForegroundBrush}" FontSize="{StaticResource TangoDataGridHeaderFontSize}" FontWeight="Light">Power</TextBlock> </StackPanel> </touch:TouchButton> </Border> diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineStatusView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineStatusView.xaml index 666fffe72..9e766fffc 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineStatusView.xaml +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineStatusView.xaml @@ -12,6 +12,7 @@ xmlns:localConverters="clr-namespace:Tango.PPC.UI.Converters" xmlns:global="clr-namespace:Tango.PPC.UI" xmlns:models="clr-namespace:Tango.PPC.UI.Models" + xmlns:graphs="clr-namespace:Tango.PPC.UI.Graphs" xmlns:local="clr-namespace:Tango.PPC.UI.Views" mc:Ignorable="d" d:DesignHeight="1280" d:DesignWidth="932" d:DataContext="{d:DesignInstance Type=vm:MachineStatusViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MachineStatusViewVM}"> @@ -25,6 +26,7 @@ <localConverters:LiquidTypeToBrushConverter x:Key="LiquidTypeToBrushConverter"/> <localConverters:MidTankLevelToElementRectConverter x:Key="MidTankLevelToElementRectConverter"/> <localConverters:ProgressUnitSpoolConverter x:Key="ProgressUnitSpoolConverter"/> + <localConverters:StatisticTabToVisibilityConverter x:Key="StatisticTabToVisibilityConverter"/> <Style x:Key="LinkRoundButtonStyle" TargetType="{x:Type touch:TouchButton}"> <Setter Property="Background" Value="{StaticResource TangoMidAccentBrush}"></Setter> @@ -162,25 +164,110 @@ </Path> </Grid> - <UniformGrid Rows="4" Columns="1" Margin="0 15 0 15" HorizontalAlignment="Center"> - <Rectangle Width="10" Height="2" Stroke="{StaticResource TangoTextWatermarkBrush}"></Rectangle> - <Rectangle Width="10" Height="2" Stroke="{StaticResource TangoTextWatermarkBrush}"></Rectangle> - <Rectangle Width="10" Height="2" Stroke="{StaticResource TangoTextWatermarkBrush}"></Rectangle> - <Rectangle Width="10" Height="2" Stroke="{StaticResource TangoTextWatermarkBrush}"></Rectangle> + <UniformGrid Rows="4" Columns="1" Margin="0 12 0 12" HorizontalAlignment="Center"> + <Rectangle Width="6" Height="2" Fill="{StaticResource TangoKeyboardKeyDarkBrush}"></Rectangle> + <Rectangle Width="6" Height="2" Fill="{StaticResource TangoKeyboardKeyDarkBrush}"></Rectangle> + <Rectangle Width="6" Height="2" Fill="{StaticResource TangoKeyboardKeyDarkBrush}"></Rectangle> + <Rectangle Width="6" Height="2" Fill="{StaticResource TangoKeyboardKeyDarkBrush}"></Rectangle> </UniformGrid> - <Image Stretch="Fill" VerticalAlignment="Top" Width="24" Height="24" Margin="0 4 0 0"> + <Image Stretch="Fill" VerticalAlignment="Top" Margin="0 4 0 0"> <Image.Style> <Style TargetType="{x:Type Image}" > <Setter Property="Source" Value="{x:Null}"/> + <Setter Property="Image.Width" Value="24"/> + <Setter Property="Image.Height" Value="24"/> <Style.Triggers> <DataTrigger Binding="{Binding IsMidTankLow}" Value="True"> <Setter Property="Source" Value="../Images/Overview Icons/Warning.png"/> </DataTrigger> <DataTrigger Binding="{Binding FillingTimeoutError}" Value="True"> <Setter Property="Source" Value="../Images/Overview Icons/Error.png"/> + <Setter Property="Image.Width" Value="21"/> + <Setter Property="Image.Height" Value="26"/> </DataTrigger> <DataTrigger Binding="{Binding MidTankEmpty}" Value="True"> <Setter Property="Source" Value="../Images/Overview Icons/Error.png"/> + <Setter Property="Image.Width" Value="21"/> + <Setter Property="Image.Height" Value="26"/> + </DataTrigger> + <DataTrigger Binding="{Binding MidTankRefillPumpActive}" Value="True" > + <Setter Property="Source" Value="../Images/Overview Icons/UpdateInk.png"/> + </DataTrigger> + <DataTrigger Binding="{Binding JerricanPresent}" Value="False" > + <Setter Property="Source" Value="../Images/Overview Icons/JericanRemoved.png"/> + </DataTrigger> + </Style.Triggers> + </Style> + </Image.Style> + </Image> + </Grid> + </DockPanel> + </DataTemplate> + + <DataTemplate x:Key="LubLiquidBox" DataType="{x:Type models:JerricanLevelModel}"> + <DockPanel> + <TextBlock DockPanel.Dock="Bottom" Text="Lub" HorizontalAlignment="Center" Margin="0 8 0 0"></TextBlock> + <Grid Height="15" DockPanel.Dock="Top"> + <TextBlock DockPanel.Dock="Top" Height="15" VerticalAlignment="Top" TextAlignment="Center" Visibility="{Binding HasRemainingTimeoutError,Converter={StaticResource BooleanToVisibilityConverter}}" Text="{Binding RemainingTimeoutError, StringFormat='{}{0:hh}:{0:mm}m', FallbackValue=00:00}" HorizontalAlignment="Center" FontSize="{StaticResource TangoSmallFontSizeBar}" ></TextBlock> + </Grid> + <Grid > + <Grid ClipToBounds="True" HorizontalAlignment="Center"> + <Path Fill="{Binding Path=IDSPack.LiquidType, Converter={StaticResource LiquidTypeToBrushConverter}}" StrokeThickness="1.5" > + <Path.Resources> + <sys:Double x:Key="RectWidth">30</sys:Double> + <sys:Double x:Key="RectHeight">88</sys:Double> + </Path.Resources> + <Path.Data> + <CombinedGeometry GeometryCombineMode="Intersect"> + <CombinedGeometry.Geometry1> + <StaticResource ResourceKey="InkContainerPath"/> + </CombinedGeometry.Geometry1> + <CombinedGeometry.Geometry2> + <!--Rect="1,30 30,88"--> + <RectangleGeometry > + <RectangleGeometry.Rect> + <MultiBinding Converter="{StaticResource MidTankLevelToElementRectConverter}"> + <Binding Source="{StaticResource RectHeight}"/> + <Binding Source="{StaticResource RectWidth}"/> + <Binding Path="Level" /> + <Binding Path="IDSPack.MidTankType.LiterCapacity" /> + </MultiBinding> + </RectangleGeometry.Rect> + </RectangleGeometry> + </CombinedGeometry.Geometry2> + </CombinedGeometry> + </Path.Data> + + </Path> + <Path Stroke="{StaticResource TangoTextWatermarkBrush}" Fill="Transparent" StrokeThickness="1" Data="{StaticResource InkContainerPath}"> + + </Path> + </Grid> + <UniformGrid Rows="4" Columns="1" Margin="0 12 0 12" HorizontalAlignment="Center"> + <Rectangle Width="6" Height="2" Fill="{StaticResource TangoKeyboardKeyDarkBrush}"></Rectangle> + <Rectangle Width="6" Height="2" Fill="{StaticResource TangoKeyboardKeyDarkBrush}"></Rectangle> + <Rectangle Width="6" Height="2" Fill="{StaticResource TangoKeyboardKeyDarkBrush}"></Rectangle> + <Rectangle Width="6" Height="2" Fill="{StaticResource TangoKeyboardKeyDarkBrush}"></Rectangle> + </UniformGrid> + <Image Stretch="Fill" VerticalAlignment="Top" Margin="0 4 0 0"> + <Image.Style> + <Style TargetType="{x:Type Image}" > + <Setter Property="Source" Value="{x:Null}"/> + <Setter Property="Image.Width" Value="24"/> + <Setter Property="Image.Height" Value="24"/> + <Style.Triggers> + <DataTrigger Binding="{Binding IsMidTankLow}" Value="True"> + <Setter Property="Source" Value="../Images/Overview Icons/Warning.png"/> + </DataTrigger> + <DataTrigger Binding="{Binding FillingTimeoutError}" Value="True"> + <Setter Property="Source" Value="../Images/Overview Icons/Error.png"/> + <Setter Property="Image.Width" Value="21"/> + <Setter Property="Image.Height" Value="26"/> + </DataTrigger> + <DataTrigger Binding="{Binding MidTankEmpty}" Value="True"> + <Setter Property="Source" Value="../Images/Overview Icons/Error.png"/> + <Setter Property="Image.Width" Value="21"/> + <Setter Property="Image.Height" Value="26"/> </DataTrigger> <DataTrigger Binding="{Binding MidTankRefillPumpActive}" Value="True" > <Setter Property="Source" Value="../Images/Overview Icons/UpdateInk.png"/> @@ -230,18 +317,43 @@ </Path> <Path Stroke="{StaticResource TangoTextWatermarkBrush}" Fill="Transparent" StrokeThickness="1" Data="{StaticResource InkContainerPath}"/> </Grid> - <UniformGrid Rows="4" Columns="1" Margin="0 15 0 15" HorizontalAlignment="Center"> - <Rectangle Stroke="{StaticResource TangoTextWatermarkBrush}" Width="10" Height="2" ></Rectangle> - <Rectangle Width="10" Height="2" Stroke="{StaticResource TangoTextWatermarkBrush}"></Rectangle> - <Rectangle Width="10" Height="2" Stroke="{StaticResource TangoTextWatermarkBrush}"></Rectangle> - <Rectangle Width="10" Height="2" Stroke="{StaticResource TangoTextWatermarkBrush}"></Rectangle> + <UniformGrid Rows="4" Columns="1" Margin="0 12 0 12" HorizontalAlignment="Center"> + <Rectangle Fill="{StaticResource TangoKeyboardKeyDarkBrush}" Width="6" Height="2" ></Rectangle> + <Rectangle Width="6" Height="2" Fill="{StaticResource TangoKeyboardKeyDarkBrush}"></Rectangle> + <Rectangle Width="6" Height="2" Fill="{StaticResource TangoKeyboardKeyDarkBrush}"></Rectangle> + <Rectangle Width="6" Height="2" Fill="{StaticResource TangoKeyboardKeyDarkBrush}"></Rectangle> </UniformGrid> </Grid> </DockPanel> </DataTemplate> + <DataTemplate x:Key="ErrorState" DataType="{x:Type models:MachineOverviewErrorItem}"> + <Border Margin="0"> + <Image Stretch="Fill" HorizontalAlignment="Center" VerticalAlignment="Center" > + <Image.Style> + <Style> + <Setter Property="Image.Width" Value="24"/> + <Setter Property="Image.Height" Value="24"/> + <Setter Property="Image.Source" Value="../Images/Overview Icons/Normal.png"/> + <Style.Triggers> + <DataTrigger Binding="{Binding IsErrorState}" Value="True"> + <Setter Property="Image.Source" Value="../Images/Overview Icons/Error.png"/> + <Setter Property="Image.Width" Value="21"/> + <Setter Property="Image.Height" Value="26"/> + </DataTrigger> + </Style.Triggers> + </Style> + </Image.Style> + </Image> + </Border> + </DataTemplate> + + <Style x:Key="DynamicResolutionGraph" TargetType="graphs:RealTimeGraph" BasedOn="{StaticResource {x:Type graphs:RealTimeGraph}}"> + <Setter Property="VerticalTicks" Value="5"></Setter> + </Style> + </UserControl.Resources> - <Grid Width="960" Height="1080"> + <Grid Width="998" Height="1123"> <Grid > <Grid.ColumnDefinitions> <ColumnDefinition Width="28"></ColumnDefinition> @@ -308,8 +420,30 @@ <DockPanel> <touch:TouchButton Command="{Binding GoToJobCommand}" DockPanel.Dock="Right" VerticalAlignment="Top" Style="{StaticResource TangoLinkButton}" Foreground="{StaticResource TangoPrimaryAccentBrush}"> <StackPanel Orientation="Vertical"> - <TextBlock Margin="5 0 0 0" FontSize="{StaticResource TangoButtonFontSize}" VerticalAlignment="Bottom">Go To Job</TextBlock> - <Rectangle Height="3" Fill="{StaticResource TangoPrimaryAccentBrush}" VerticalAlignment="Bottom" Margin="0 2 0 0"></Rectangle> + <TextBlock Margin="5 0 0 0" FontSize="{StaticResource TangoButtonFontSize}" VerticalAlignment="Bottom" Text="Go To Job"> + <TextBlock.Style> + <Style TargetType="{x:Type TextBlock}"> + <Setter Property="Foreground" Value="{StaticResource TangoPrimaryAccentBrush}"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsEnabled}" Value="False"> + <Setter Property="Foreground" Value="{StaticResource TangoDisabledBackgroundBrush}"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </TextBlock.Style> + </TextBlock> + <Rectangle Height="3" VerticalAlignment="Bottom" Margin="0 2 0 0"> + <Rectangle.Style> + <Style TargetType="{x:Type Rectangle}"> + <Setter Property="Fill" Value="{StaticResource TangoPrimaryAccentBrush}"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsEnabled}" Value="False"> + <Setter Property="Fill" Value="{StaticResource TangoDisabledBackgroundBrush}"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Rectangle.Style> + </Rectangle> </StackPanel> </touch:TouchButton> <touch:TouchButton DockPanel.Dock="Right" Visibility="{Binding ApplicationManager.IsInTechnicianMode,Converter={StaticResource BooleanToVisibilityConverter}}" VerticalAlignment="Top" Margin="0 0 20 0" Command="{Binding DisplayJobOutlineCommand}" Style="{StaticResource TangoLinkButton}" FontSize="{StaticResource TangoTitleFontSize}"> @@ -318,7 +452,7 @@ <Rectangle Height="3" Fill="{StaticResource TangoPrimaryAccentBrush}" VerticalAlignment="Bottom" Margin="0 2 0 0"></Rectangle> </StackPanel> </touch:TouchButton> - <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TangoLargeHeaderFontSize}" Text="{Binding Job.Name, TargetNullValue='-', FallbackValue='-'}"></TextBlock> + <TextBlock DockPanel.Dock="Left" FontSize="28" Text="{Binding Job.Name, TargetNullValue='-', FallbackValue='-'}"></TextBlock> </DockPanel> <Border Height="2" Background="{StaticResource TangoLightBorderBrush}" VerticalAlignment="Bottom" Margin="0 2 0 0" CornerRadius="2"></Border> </Grid> @@ -331,19 +465,19 @@ </StackPanel> </StackPanel> - <UniformGrid DockPanel.Dock="Left" Columns="1" Rows="5" HorizontalAlignment="Left" Margin="0 0 0 0" Height="326" VerticalAlignment="Top"> + <UniformGrid x:Name="JobProperties" DockPanel.Dock="Left" Columns="1" Rows="5" HorizontalAlignment="Left" Margin="0 0 0 0" Height="390" VerticalAlignment="Top" MaxWidth="260"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <Image Source="../Images/Job Issues/thread_type.png" Stretch="None" VerticalAlignment="Top"/> <StackPanel Orientation="Vertical" Margin="15 0 0 0"> <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}">Thread Type</TextBlock> - <TextBlock Text="{Binding Job.Rml.Name, TargetNullValue='-', FallbackValue='-'}" FontWeight="DemiBold" FontSize="{StaticResource TangoComboBoxItemFontSize}"></TextBlock> + <TextBlock Text="{Binding Job.Rml.DisplayName,Converter={StaticResource StringEllipsisConverter},ConverterParameter='38', TargetNullValue='-', FallbackValue='-'}" FontWeight="DemiBold" FontSize="{StaticResource TangoComboBoxItemFontSize}" TextWrapping="Wrap" MaxWidth="200" MaxHeight="52" ></TextBlock> </StackPanel> </StackPanel> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <Image Source="../Images/Job Issues/job_length.png" Stretch="None" VerticalAlignment="Top" HorizontalAlignment="Left"/> <StackPanel Orientation="Vertical" Margin="15 0 0 0"> - <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}">Job Length</TextBlock> + <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}">Job Length (m)</TextBlock> <TextBlock FontWeight="DemiBold" FontSize="{StaticResource TangoComboBoxItemFontSize}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}"> @@ -361,7 +495,7 @@ <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <Image Source="../Images/Job Issues/job_weight.png" Stretch="None" VerticalAlignment="Top"/> <StackPanel Orientation="Vertical" Margin="15 0 0 0"> - <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}">Job Weight</TextBlock> + <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}">Job Weight (g)</TextBlock> <TextBlock FontWeight="DemiBold" FontSize="{StaticResource TangoComboBoxItemFontSize}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}"> @@ -486,7 +620,7 @@ <StackPanel Orientation="Horizontal" Margin="0 15 0 0" HorizontalAlignment="Center" Visibility="{Binding IsWeghtView, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> <TextBlock FontSize="{StaticResource TangoLargeInfoFontSize}" VerticalAlignment="Center"> <TextBlock.Text> - <MultiBinding Converter="{StaticResource ProgressLengthSpoolConverter}" StringFormat="0.#" TargetNullValue='-' FallbackValue='0' Mode="OneWay"> + <MultiBinding Converter="{StaticResource ProgressLengthSpoolConverter}" StringFormat="0.0" TargetNullValue='-' FallbackValue='0' Mode="OneWay"> <Binding Path="RunningJobStatus.TotalProgressMinusSettingUp" /> <Binding Path="IsSpoolView"/> <Binding Path="RunningJobStatus.ProgressMinusSettingUp" /> @@ -508,7 +642,7 @@ <StackPanel Orientation="Horizontal" Margin="0 10 0 0" HorizontalAlignment="Center" Visibility="{Binding IsWeghtView, Converter={StaticResource BooleanToVisibilityConverter}}"> <TextBlock FontSize="{StaticResource TangoLargeInfoFontSize}" VerticalAlignment="Center"> <TextBlock.Text> - <MultiBinding Converter="{StaticResource ProgressWeightSpoolConverter}" StringFormat="0.##" TargetNullValue='-' FallbackValue='0'> + <MultiBinding Converter="{StaticResource ProgressWeightSpoolConverter}" StringFormat="0.00" TargetNullValue='-' FallbackValue='0'> <Binding Path="RunningJobStatus.TotalProgressMinusSettingUp" /> <Binding Path="IsSpoolView"/> <Binding Path="RunningJobStatus.ProgressMinusSettingUp" /> @@ -530,14 +664,15 @@ </StackPanel> </StackPanel> - <StackPanel Height="90" Visibility="{Binding RunningJobStatus.IsSettingUp, FallbackValue=collapsed, Converter={StaticResource BooleanToVisibilityConverter}}"> - <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> + <DockPanel Height="106" Visibility="{Binding RunningJobStatus.IsSettingUp, FallbackValue=collapsed, Converter={StaticResource BooleanToVisibilityConverter}}"> + <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" DockPanel.Dock="Top"> <Image Source="../Images/JobProgressView/drop.png" Stretch="None" /> <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" FontSize="{StaticResource TangoTitleFontSize}">Getting Ready...</TextBlock> </StackPanel> - </StackPanel> + <TextBlock Margin="40 30 40 0" FontSize="{StaticResource TangoSmallFontSize}" FontWeight="Light" Text="{Binding RunningJobStatus.Message, FallbackValue='', TargetNullValue='', Converter={StaticResource StringEllipsisConverter},ConverterParameter='76'}" TextWrapping="Wrap" MaxWidth="310" HorizontalAlignment="Center" TextAlignment="Center" Height="42"></TextBlock> + </DockPanel> - <Rectangle Margin="0 10 0 0" Width="250" Stroke="{StaticResource TangoDividerBrush}" /> + <Rectangle x:Name="Rrect" Margin="0 10 0 0" Width="250" Stroke="{StaticResource TangoLightBorderBrush}" StrokeThickness="1" Fill="{StaticResource TangoLightBorderBrush}" Height="2" /> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0 15 0 0"> <Image Source="../Images/JobProgressView/clock.png" Stretch="None" VerticalAlignment="Center" /> @@ -606,7 +741,7 @@ <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <Image Source="../Images/Job Issues/job_length.png" Stretch="None" VerticalAlignment="Top" HorizontalAlignment="Left"/> <StackPanel Orientation="Vertical" Margin="15 0 0 0"> - <TextBlock x:Name="ProgressLength" VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}">Job Length</TextBlock> + <TextBlock x:Name="ProgressLength" VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}">Job Length (m)</TextBlock> <TextBlock FontWeight="DemiBold" FontSize="{StaticResource TangoComboBoxItemFontSize}"> <TextBlock.Text> <MultiBinding Converter="{StaticResource LengthWithSpoolsConverter}" StringFormat="0.##" TargetNullValue='-' FallbackValue='-' Mode="OneWay"> @@ -620,7 +755,7 @@ <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <Image Source="../Images/Job Issues/job_weight.png" Stretch="None" VerticalAlignment="Top"/> <StackPanel Orientation="Vertical" Margin="15 0 0 0"> - <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}">Job Weight</TextBlock> + <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}">Job Weight (g)</TextBlock> <TextBlock FontWeight="DemiBold" FontSize="{StaticResource TangoComboBoxItemFontSize}"> <TextBlock.Text> <MultiBinding Converter="{StaticResource LengthToWeightConverter}" StringFormat="0.##" TargetNullValue='-' FallbackValue='-' Mode="OneWay"> @@ -637,11 +772,25 @@ <StackPanel Orientation="Vertical" Margin="15 0 0 0"> <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}">Copies</TextBlock> <TextBlock FontWeight="DemiBold" FontSize="{StaticResource TangoComboBoxItemFontSize}"> - <TextBlock.Text> - <MultiBinding Converter="{StaticResource ProgressUnitSpoolConverter}" TargetNullValue='-' FallbackValue='-' > - <Binding Path="RunningJobStatus.CurrentUnit" Mode="OneWay"/> - </MultiBinding> - </TextBlock.Text> + <TextBlock.Style> + <Style TargetType="{x:Type TextBlock}"> + <Setter Property="Text" Value="-"/> + <Style.Triggers> + <DataTrigger Binding="{Binding RunningJobStatus.IsCompleted}" Value="True"> + <Setter Property="Text" Value="{Binding Job.NumberOfUnitsMultipliedBySpools}"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding RunningJobStatus.IsCompleted}" Value="False"> + <Setter Property="Text" > + <Setter.Value> + <MultiBinding Converter="{StaticResource ProgressUnitSpoolConverter}" TargetNullValue='-' FallbackValue='-' > + <Binding Path="RunningJobStatus.CurrentUnit" Mode="OneWay"/> + </MultiBinding> + </Setter.Value> + </Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </TextBlock.Style> </TextBlock> </StackPanel> </StackPanel> @@ -649,7 +798,7 @@ <Image Source="../Images/Job Issues/ttime_left.png" Stretch="None" VerticalAlignment="Top"/> <StackPanel Orientation="Vertical" Margin="15 0 0 0"> <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}">Time Left</TextBlock> - <TextBlock FontWeight="Light" FontSize="{StaticResource TangoComboBoxItemFontSize}" Margin="0 0 0 0" HorizontalAlignment="Center"> + <TextBlock FontWeight="DemiBold" FontSize="{StaticResource TangoComboBoxItemFontSize}" Margin="0 0 0 0" HorizontalAlignment="Left"> <Run Text="{Binding RunningJobStatus.RemainingTime,Converter={StaticResource TimeSpanToTwoDigitsTimeConverter},FallbackValue=5}"></Run> <Run FontSize="16" Text="{Binding RunningJobStatus.RemainingTime,Converter={StaticResource TimeSpanToLabelConverter},FallbackValue=min}"></Run> @@ -820,7 +969,7 @@ </Grid.ColumnDefinitions> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" > <Image Margin="0 2 0 0" Source="../Images/Job Issues/job_length.png" Stretch="Uniform" VerticalAlignment="Top" HorizontalAlignment="Left" Width="Auto" Height="32" /> - <TextBlock Margin="20 10 0 0" Width="50" FontWeight="SemiBold" FontSize="{StaticResource TangoComboBoxItemFontSize}" > + <TextBlock Margin="20 5 0 0" Width="Auto" FontWeight="SemiBold" FontSize="{StaticResource TangoComboBoxItemFontSize}" VerticalAlignment="Top"> <TextBlock.Text> <MultiBinding Converter="{StaticResource LengthWithSpoolsConverter}" StringFormat="0.##" TargetNullValue='-' FallbackValue='-' Mode="OneWay"> <Binding Path="RunningJobStatus.ProgressMinusSettingUp" Mode="OneWay"/> @@ -830,7 +979,7 @@ </TextBlock> </StackPanel> <!--<Grid Grid.Column="1" Margin="20 8 20 0" VerticalAlignment="Top" Height="20">--> - <locaControls:RunningJobViewerEureka Grid.Column="1" Margin="20 12 20 0" VerticalAlignment="Top" ThumbHeight="16" Height="14" HeightSlider="14" DisplayMarkers="False" IsActive="True" Job="{Binding Job}" + <locaControls:RunningJobViewerEureka Grid.Column="1" Margin="10 12 20 0" VerticalAlignment="Top" ThumbHeight="16" Height="14" HeightSlider="14" DisplayMarkers="False" IsActive="True" Job="{Binding Job}" RunningJobStatus="{Binding RunningJobStatus}" MaximumValue="{Binding RunningJobStatus.TotalProgressMinusSettingUp, FallbackValue=100,TargetNullValue=100}" MinimumValue="0" @@ -840,7 +989,7 @@ <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Grid.Column="2" Margin="0 0 0 0"> <Image Margin="0 2 0 0" Source="../Images/Job Issues/ttime_left.png" Stretch="Uniform" VerticalAlignment="Top" Height="32"/> - <TextBlock Margin="15 10 0 0" FontWeight="Light" FontSize="{StaticResource TangoComboBoxItemFontSize}" HorizontalAlignment="Center"> + <TextBlock Margin="15 5 0 0" FontWeight="Light" FontSize="{StaticResource TangoComboBoxItemFontSize}" HorizontalAlignment="Center"> <Run Text="{Binding RunningJobStatus.RemainingTime,Converter={StaticResource TimeSpanToTwoDigitsTimeConverter},FallbackValue=5}"></Run> <Run FontSize="16" Text="{Binding RunningJobStatus.RemainingTime,Converter={StaticResource TimeSpanToLabelConverter},FallbackValue=min}"></Run> @@ -878,12 +1027,15 @@ <SolidColorBrush Color="{Binding DryerZone3.Color}"/> </touch:TouchArcProgress.Foreground> </touch:TouchArcProgress> - <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="{StaticResource TangoComboBoxItemFontSize}" FontWeight="Bold" Text="{Binding DryerZone3.DisplayValue}"> - <TextBlock.Foreground> - <SolidColorBrush Color="{Binding DryerZone3.Color}"/> - </TextBlock.Foreground> + <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}" FontWeight="Bold" > + <Run Text="{Binding DryerZone3.DisplayValue}"> + <Run.Foreground> + <SolidColorBrush Color="{Binding DryerZone3.Color}"/> + </Run.Foreground> + </Run> + <Run Text="{Binding DryerZone3.DisplayMaxValue}" ></Run> </TextBlock> - <TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0 0 0 20" FontSize="{StaticResource TangoComboBoxItemFontSize}" >ºC</TextBlock> + <TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0 0 0 20" FontSize="{StaticResource TangoDefaultFontSize}" >ºC</TextBlock> </Grid> <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center">Dryer Zone 3</TextBlock> @@ -896,12 +1048,12 @@ <SolidColorBrush Color="{Binding DryerAir.Color}"/> </touch:TouchArcProgress.Foreground> </touch:TouchArcProgress> - <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="{StaticResource TangoComboBoxItemFontSize}" FontWeight="SemiBold" Text="{Binding DryerAir.DisplayValue}"> + <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}" FontWeight="SemiBold" Text="{Binding DryerAir.DisplayValue}"> <TextBlock.Foreground> <SolidColorBrush Color="{Binding DryerAir.Color}"/> </TextBlock.Foreground> </TextBlock> - <TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0 0 0 20" FontSize="{StaticResource TangoComboBoxItemFontSize}" FontWeight="SemiBold" Text="ºC" > + <TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0 0 0 20" FontSize="{StaticResource TangoDefaultFontSize}" FontWeight="SemiBold" Text="ºC" > </TextBlock> </Grid> <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center">Dryer Air</TextBlock> @@ -913,12 +1065,15 @@ <SolidColorBrush Color="{Binding Tunnel.Color}"/> </touch:TouchArcProgress.Foreground> </touch:TouchArcProgress> - <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="{StaticResource TangoComboBoxItemFontSize}" FontWeight="SemiBold" Text="{Binding Tunnel.DisplayValue}"> - <TextBlock.Foreground> - <SolidColorBrush Color="{Binding Tunnel.Color}"/> - </TextBlock.Foreground> + <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}" FontWeight="SemiBold" > + <Run Text="{Binding Tunnel.DisplayValue}"> + <Run.Foreground> + <SolidColorBrush Color="{Binding Tunnel.Color}"/> + </Run.Foreground> + </Run> + <Run Text="{Binding Tunnel.DisplayMaxValue}" ></Run> </TextBlock> - <TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0 0 0 20" FontSize="{StaticResource TangoComboBoxItemFontSize}" FontWeight="SemiBold" Text="ºC"></TextBlock> + <TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0 0 0 20" FontSize="{StaticResource TangoDefaultFontSize}" FontWeight="SemiBold" Text="ºC"></TextBlock> </Grid> <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center">Tunnel</TextBlock> @@ -930,12 +1085,12 @@ <SolidColorBrush Color="{Binding PumpsPressure.Color}"/> </touch:TouchArcProgress.Foreground> </touch:TouchArcProgress> - <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="{StaticResource TangoComboBoxItemFontSize}" FontWeight="SemiBold" Text="{Binding PumpsPressure.DisplayValue}"> + <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}" FontWeight="SemiBold" Text="{Binding PumpsPressure.DisplayValue}"> <TextBlock.Foreground> <SolidColorBrush Color="{Binding PumpsPressure.Color}"/> </TextBlock.Foreground> </TextBlock> - <TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0 0 0 20" FontSize="{StaticResource TangoComboBoxItemFontSize}" FontWeight="SemiBold" Text="Bar"></TextBlock> + <TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0 0 0 20" FontSize="{StaticResource TangoDefaultFontSize}" FontWeight="SemiBold" Text="Bar"></TextBlock> </Grid> <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center">Pumps pressure</TextBlock> @@ -947,12 +1102,12 @@ <SolidColorBrush Color="{Binding Lubricant.Color}"/> </touch:TouchArcProgress.Foreground> </touch:TouchArcProgress> - <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="{StaticResource TangoComboBoxItemFontSize}" FontWeight="SemiBold" Text="{Binding Lubricant.DisplayValue}"> + <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}" FontWeight="SemiBold" Text="{Binding Lubricant.DisplayValue, StringFormat=0.## }"> <TextBlock.Foreground> <SolidColorBrush Color="{Binding Lubricant.Color}"/> </TextBlock.Foreground> </TextBlock> - <TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0 0 0 20" FontSize="{StaticResource TangoComboBoxItemFontSize}" FontWeight="SemiBold" Text="mVolts"></TextBlock> + <TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0 0 0 20" FontSize="{StaticResource TangoDefaultFontSize}" FontWeight="SemiBold" Text="mVolts"></TextBlock> </Grid> <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center">Lubricant</TextBlock> @@ -963,43 +1118,25 @@ <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> <StackPanel Orientation="Vertical"> <Border Height="184" Width="83" VerticalAlignment="Center" CornerRadius="2 0 0 2" BorderThickness="0" BorderBrush="{StaticResource TangoBlackInkBrush}"> - <UniformGrid Columns="1" Rows="4" Margin="24"> - <Image Stretch="Fill" Width="24" Height="24" Source="../Images/Overview Icons/Normal.png" HorizontalAlignment="Center" > - <!--<Image.Style> - <Style> - <Style.Triggers> - <DataTrigger Binding="{Binding Job.BTSR}}" Value="True"> - <Setter Property="Image.Source" Value="../Images/Overview Icons/Error.png"/> - </DataTrigger> - </Style.Triggers> - </Style> - </Image.Style>--> - </Image> - <Image Stretch="Fill" Width="24" Height="24" Source="../Images/Overview Icons/Normal.png" HorizontalAlignment="Center" ></Image> - <Image Stretch="Fill" Width="24" Height="24" Source="../Images/Overview Icons/Normal.png" HorizontalAlignment="Center" ></Image> - <Image Stretch="Fill" Width="24" Height="24" Source="../Images/Overview Icons/Normal.png" HorizontalAlignment="Center" ></Image> - </UniformGrid> + <ItemsControl Margin="0 21 0 9" ItemsSource="{Binding MachineErrorStates.Winders}" ItemTemplate="{StaticResource ErrorState}"> + <ItemsControl.ItemsPanel> + <ItemsPanelTemplate> + <UniformGrid Columns="1" Rows="4" IsItemsHost="True" VerticalAlignment="Stretch"></UniformGrid> + </ItemsPanelTemplate> + </ItemsControl.ItemsPanel> + </ItemsControl> </Border> <TextBlock HorizontalAlignment="Center" Margin="0 4 0 0" FontWeight="Thin">Winder</TextBlock> </StackPanel> <StackPanel Orientation="Vertical"> - <Border Height="171" Width="95" VerticalAlignment="Center" CornerRadius="0" BorderThickness="0" BorderBrush="{StaticResource TangoBlackInkBrush}"> - <UniformGrid Columns="1" Rows="4" Margin="0 21 0 9" VerticalAlignment="Stretch"> - <Image Stretch="Fill" Width="24" Height="24" Source="../Images/Overview Icons/Normal.png" HorizontalAlignment="Center" > - <!--<Image.Style> - <Style> - <Style.Triggers> - <DataTrigger Binding="{Binding Job.BTSR}}" Value="True"> - <Setter Property="Image.Source" Value="../Images/Overview Icons/Error.png"/> - </DataTrigger> - </Style.Triggers> - </Style> - </Image.Style>--> - </Image> - <Image Stretch="Fill" Width="24" Height="24" Source="../Images/Overview Icons/Normal.png" HorizontalAlignment="Center" ></Image> - <Image Stretch="Fill" Width="24" Height="24" Source="../Images/Overview Icons/Normal.png" HorizontalAlignment="Center" ></Image> - <Image Stretch="Fill" Width="24" Height="24" Source="../Images/Overview Icons/Normal.png" HorizontalAlignment="Center" ></Image> - </UniformGrid> + <Border Height="171" Width="95" VerticalAlignment="Center" CornerRadius="0" BorderThickness="0" BorderBrush="{StaticResource TangoBlackInkBrush}"> + <ItemsControl Margin="0 21 0 9" ItemsSource="{Binding MachineErrorStates.Dancers}" ItemTemplate="{StaticResource ErrorState}"> + <ItemsControl.ItemsPanel> + <ItemsPanelTemplate> + <UniformGrid Columns="1" Rows="4" IsItemsHost="True" VerticalAlignment="Stretch"></UniformGrid> + </ItemsPanelTemplate> + </ItemsControl.ItemsPanel> + </ItemsControl> </Border> <TextBlock HorizontalAlignment="Center" Margin="14 18 14 14" FontWeight="Thin">Dancer</TextBlock> </StackPanel> @@ -1007,22 +1144,13 @@ <StackPanel Orientation="Vertical" Margin="274 0 0 0"> <Border Height="171" Width="95" VerticalAlignment="Center" CornerRadius="0" BorderThickness="0" BorderBrush="{StaticResource TangoBlackInkBrush}"> - <UniformGrid Columns="1" Rows="4" Margin="0 21 0 9" VerticalAlignment="Stretch"> - <Image Stretch="Fill" Width="24" Height="24" Source="../Images/Overview Icons/Normal.png" HorizontalAlignment="Center" > - <!--<Image.Style> - <Style> - <Style.Triggers> - <DataTrigger Binding="{Binding Job.BTSR}}" Value="True"> - <Setter Property="Image.Source" Value="../Images/Overview Icons/Error.png"/> - </DataTrigger> - </Style.Triggers> - </Style> - </Image.Style>--> - </Image> - <Image Stretch="Fill" Width="24" Height="24" Source="../Images/Overview Icons/Normal.png" HorizontalAlignment="Center" ></Image> - <Image Stretch="Fill" Width="24" Height="24" Source="../Images/Overview Icons/Normal.png" HorizontalAlignment="Center" ></Image> - <Image Stretch="Fill" Width="24" Height="24" Source="../Images/Overview Icons/Normal.png" HorizontalAlignment="Center" ></Image> - </UniformGrid> + <ItemsControl Margin="0 21 0 9" ItemsSource="{Binding MachineErrorStates.BTSRs}" ItemTemplate="{StaticResource ErrorState}"> + <ItemsControl.ItemsPanel> + <ItemsPanelTemplate> + <UniformGrid Columns="1" Rows="4" IsItemsHost="True" VerticalAlignment="Stretch"></UniformGrid> + </ItemsPanelTemplate> + </ItemsControl.ItemsPanel> + </ItemsControl> </Border> <TextBlock HorizontalAlignment="Center" Margin="0 18 0 0" FontWeight="Thin">BTSR</TextBlock> </StackPanel> @@ -1052,7 +1180,7 @@ <TextBlock Margin="12 0 0 0 " VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="{StaticResource TangoComboBoxItemFontSize}">Waste</TextBlock> </StackPanel> <StackPanel Orientation="Horizontal" Margin="-25 24 0 0"> - <Rectangle Height="88" Width="2" Fill="{StaticResource TangoColumnDividerBrush}" VerticalAlignment="Top" Margin="-15 15 0 0"/> + <Rectangle Height="88" Width="2" Fill="{StaticResource TangoTextWatermarkBrush}" VerticalAlignment="Top" Margin="-15 15 0 0"/> <ContentControl Margin="20 0 0 0" ContentTemplate="{StaticResource WasteBox}" Content="{Binding}" IsTabStop="False"/> </StackPanel> @@ -1070,9 +1198,10 @@ </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl> - - <!--<Rectangle Height="88" Width="2" Fill="{StaticResource TangoColumnDividerBrush}" VerticalAlignment="Top" Margin="12 15 0 0"/> - <ContentControl Margin="45 0 0 0" ContentTemplate="{StaticResource LubBox}" Content="{Binding}" IsTabStop="False"/>--> + <StackPanel Orientation="Horizontal" Margin="40 0 0 0"> + <Rectangle Height="88" Width="2" Fill="{StaticResource TangoTextWatermarkBrush}" VerticalAlignment="Top" Margin="-15 15 0 0"/> + <ContentControl Margin="30 0 0 0" ContentTemplate="{StaticResource LubLiquidBox}" Content="{Binding MidTankLubLevel}" IsTabStop="False"/> + </StackPanel> </StackPanel> </StackPanel> </DockPanel> @@ -1080,11 +1209,69 @@ </StackPanel> <Border VerticalAlignment="Bottom" Height="2" Background="{StaticResource TangoLightBorderBrush}" Margin="0 0 0 0" CornerRadius="2"></Border> </Grid> + <Grid Grid.Row="3" x:Name="StatRealGraph" Margin="0 8 0 0"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="186"></ColumnDefinition> + <ColumnDefinition Width="32"></ColumnDefinition> + <ColumnDefinition Width="1*"></ColumnDefinition> + </Grid.ColumnDefinitions> + + <touch:TouchNavigationLinks BorderBrush="{StaticResource TangoDividerBrush}" BorderThickness="0 0 0 0" x:Name="navigationSTLinks" HorizontalContentAlignment="Left" + SelectedIndex="{Binding SelectedStatisticTabIndex,Mode=TwoWay}" VerticalAlignment="Bottom" Margin="0,10,0,20" Padding="0 0 0 0" + FontSize="{StaticResource TangoNavigationLinksFontSize}" LineThickness="0" PreviewTouchDown="NavigationSTLinks_PreviewTouchDown" PreviewMouseDown="NavigationSTLinks_PreviewMouseDown"> + + <DockPanel HorizontalAlignment="Stretch"> + <Image DockPanel.Dock="Left" Source="../Images/Overview Icons/pr_data.png" Stretch="UniformToFill" VerticalAlignment="Top" HorizontalAlignment="Left" Width="32" Height="32"/> + <TextBlock HorizontalAlignment="Left" Margin="12 0 0 0" FontSize="{StaticResource TangoDefaultFontSize}" VerticalAlignment="Center">Production Data</TextBlock> + </DockPanel> + <DockPanel HorizontalAlignment="Stretch" IsEnabled="False" Margin="0 12 0 0"> + <Image DockPanel.Dock="Left" Source="../Images/Overview Icons/temperature.png" Stretch="UniformToFill" VerticalAlignment="Top" HorizontalAlignment="Left" Width="32" Height="32"/> + <TextBlock HorizontalAlignment="Left" Margin="12 0 0 0" FontSize="{StaticResource TangoDefaultFontSize}" VerticalAlignment="Center" Foreground="{StaticResource TangoDisabledForegroundBrush}">Temperature</TextBlock> + </DockPanel> + <DockPanel HorizontalAlignment="Stretch" IsEnabled="False"> + <Image DockPanel.Dock="Left" Source="../Images/Overview Icons/pressure.png" Stretch="UniformToFill" VerticalAlignment="Top" HorizontalAlignment="Left" Width="32" Height="32"/> + <TextBlock HorizontalAlignment="Left" Margin="12 0 0 0" FontSize="{StaticResource TangoDefaultFontSize}" VerticalAlignment="Center" Foreground="{StaticResource TangoDisabledForegroundBrush}">Pressure</TextBlock> + </DockPanel> + <DockPanel HorizontalAlignment="Stretch" IsEnabled="False" > + <Image DockPanel.Dock="Left" Source="../Images/Overview Icons/motor.png" Stretch="UniformToFill" VerticalAlignment="Top" HorizontalAlignment="Left" Width="32" Height="32"/> + <TextBlock HorizontalAlignment="Left" Margin="12 0 0 0" FontSize="{StaticResource TangoDefaultFontSize}" VerticalAlignment="Center" Foreground="{StaticResource TangoDisabledForegroundBrush}">Motor</TextBlock> + </DockPanel> + <touch:TouchNavigationLinks.Style> + <Style TargetType="{x:Type touch:TouchNavigationLinks}"> + <Setter Property="ItemsPanel"> + <Setter.Value> + <ItemsPanelTemplate> + <UniformGrid Rows="4" /> + </ItemsPanelTemplate> + </Setter.Value> + </Setter> + </Style> + </touch:TouchNavigationLinks.Style> + + </touch:TouchNavigationLinks> + <Grid Grid.Column="1" Margin="0 40 0 0"> + <Rectangle Width="20" Height="2" Fill="{StaticResource TangoBlackInkBrush}" VerticalAlignment="Top" Margin="0 0 0 0" ></Rectangle> + <!--<Rectangle Width="2" Height="138" Margin="20 0 0 0" Fill="{StaticResource TangoBlackInkBrush}" VerticalAlignment="Top" ></Rectangle>--> + <Rectangle Margin="20 0 0 0" VerticalAlignment="Top" Fill="{StaticResource TangoBlackInkBrush}" Height="2" Width="138" HorizontalAlignment="Stretch"> + <Rectangle.LayoutTransform> + <TransformGroup> + <RotateTransform Angle="90"/> + </TransformGroup> + </Rectangle.LayoutTransform> + </Rectangle> + </Grid> + <Grid Grid.Column="2" x:Name="StatGrid" Margin="0,0,0.4,0"> + <Grid Visibility="{Binding SelectedStatisticTab,Converter={StaticResource StatisticTabToVisibilityConverter},ConverterParameter='Productiondata'}"> + <graphs:RealTimeGraph Style="{StaticResource PPC_RealTimeGraph_Flat}" Controller="{Binding JobController}" Background="Transparent" StringFormat="0" GridLinesBrush="red" BorderBrush="Transparent" + VerticalAxisVisibility="Visible" HorizontalAxisVisibility="Visible" VerticalTicks =" 5"/> + </Grid> + </Grid> + </Grid> </Grid> </Grid> </Grid> - <Grid VerticalAlignment="Bottom" Grid.ColumnSpan="2" Margin="10 0 0 0"> - <touch:TouchExpander x:Name="Notifications" Style="{StaticResource TouchRoundedExpander}" IsTabStop="False" KeyboardNavigation.TabNavigation ="None" BorderThickness="0" IsExpanded="false" CornerRadius="20 20 0 0" > + <Grid VerticalAlignment="Bottom" Grid.ColumnSpan="2" Margin="10 0 10 0"> + <touch:TouchExpander x:Name="Notifications" Style="{StaticResource TouchRoundedExpander}" IsTabStop="False" KeyboardNavigation.TabNavigation ="None" BorderThickness="0" CornerRadius="20 20 0 0" Margin="0 0 0 -1" IsExpanded="{Binding IsExpandedNotifications, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> <touch:TouchExpander.Header> <DockPanel > <touch:TouchButton Margin="0 0 20 0" Content="Clear All" DockPanel.Dock="Right" Width="120" Height="38" HorizontalAlignment="Right" VerticalAlignment="Center" EnableDropShadow="False" Background="Transparent" BorderThickness="1" CornerRadius="19" BorderBrush="{StaticResource TangoPrimaryAccentBrush}" Foreground="{StaticResource TangoPrimaryAccentBrush}" Command="{Binding ClearAllNotificationsCommand}" Visibility="{Binding NotificationProvider.HasNotificationItems, Converter={StaticResource BooleanToVisibilityConverter}}" > @@ -1127,13 +1314,13 @@ </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> - <Grid HorizontalAlignment="Stretch" Width="1220" Height="62"> + <Grid HorizontalAlignment="Stretch" Height="60"> <Border BorderThickness="1" Margin="-1 0 0 0" BorderBrush="{StaticResource TangoDividerBrush}"> <Grid HorizontalAlignment="Stretch" > <Grid.ColumnDefinitions> <ColumnDefinition Width="56"/> <ColumnDefinition Width="1*"/> - <ColumnDefinition Width="56"/> + <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <touch:TouchIcon Margin="24 0 0 0" DockPanel.Dock="Left" Height="32" Grid.Column="0"> <touch:TouchIcon.Style> @@ -1164,10 +1351,12 @@ </Style> </touch:TouchIcon.Style> </touch:TouchIcon> - <StackPanel Margin="15 3 20 3" VerticalAlignment="Center" Grid.Column="1"> - <TextBlock Text="{Binding Message}" TextTrimming="CharacterEllipsis" TextWrapping="Wrap" Foreground="Black" VerticalAlignment="Center" ></TextBlock> - <TextBlock Margin="0 5 0 0" Foreground="{StaticResource TangoDarkForegroundBrush}" Text="{Binding ExpandedMessage}" FontSize="{StaticResource TangoSmallFontSize}" TextWrapping="Wrap" VerticalAlignment="Center" /> + + <StackPanel Margin="15 3 10 5" VerticalAlignment="Center" Grid.Column="1"> + <TextBlock Text="{Binding Message}" TextTrimming="CharacterEllipsis" TextWrapping="Wrap" Foreground="Black" VerticalAlignment="Top" ></TextBlock> + <TextBlock Margin="0 3 0 0" Foreground="{StaticResource TangoDarkForegroundBrush}" Text="{Binding ExpandedMessage}" FontSize="{StaticResource TangoSmallFontSize}" TextWrapping="NoWrap" VerticalAlignment="Center" HorizontalAlignment="Left" TextTrimming="CharacterEllipsis"/> </StackPanel> + <Grid Grid.Column="2" Width="40" HorizontalAlignment="Right" VerticalAlignment="Stretch" Visibility="{Binding CanClose,Converter={StaticResource BooleanToVisibilityConverter}}"> <Grid Margin="0 0 20 0" HorizontalAlignment="Right" VerticalAlignment="Center" Width="14" Height="14"> <touch:TouchIcon Icon="Close" Foreground="Black" /> diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineStatusView.xaml.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineStatusView.xaml.cs index 2ee98bc2b..e49e062b7 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineStatusView.xaml.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MachineStatusView.xaml.cs @@ -57,5 +57,15 @@ namespace Tango.PPC.UI.Views { _timer.Stop(); } + + private void NavigationSTLinks_PreviewTouchDown(object sender, TouchEventArgs e) + { + e.Handled = true; + } + + private void NavigationSTLinks_PreviewMouseDown(object sender, MouseButtonEventArgs e) + { + e.Handled = true; + } } } diff --git a/Software/Visual_Studio/Tango.BL/Builders/JobsCollectionBuilder.cs b/Software/Visual_Studio/Tango.BL/Builders/JobsCollectionBuilder.cs index c155e7020..a2c9c3678 100644 --- a/Software/Visual_Studio/Tango.BL/Builders/JobsCollectionBuilder.cs +++ b/Software/Visual_Studio/Tango.BL/Builders/JobsCollectionBuilder.cs @@ -63,5 +63,16 @@ namespace Tango.BL.Builders } }); } + + public virtual JobsCollectionBuilder WithRmls() + { + return AddStep(4, () => + { + foreach (var job in Entities.ToList()) + { + Context.Rmls.Where(x => x.Guid == job.RmlGuid).ToList(); + } + }); + } } } diff --git a/Software/Visual_Studio/Tango.BL/Entities/Job.cs b/Software/Visual_Studio/Tango.BL/Entities/Job.cs index 2784dea32..29f7e1054 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/Job.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/Job.cs @@ -406,7 +406,13 @@ namespace Tango.BL.Entities [NotMapped] [JsonIgnore] public double GramPerLength { get; set;} - + + [NotMapped] + [JsonIgnore] + public String ThreadName + { + get { return Rml == null ? "" : Rml.DisplayName;} + } #endregion @@ -480,6 +486,7 @@ namespace Tango.BL.Entities } else GramPerLength = 0; + RaisePropertyChanged(nameof(ThreadName)); } #endregion diff --git a/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs b/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs index f873dbece..a081efb25 100644 --- a/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs +++ b/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs @@ -170,8 +170,22 @@ namespace Tango.Emulations.Emulators MidTankLevel = 2.5, }); } + for (int i = 0; i < 4; i++) + { + if( i == 2) + { + MachineStatus.WindersInError.Add(false); + MachineStatus.DancersInError.Add(true); + MachineStatus.BtsrsInError.Add(true); + } + else { + MachineStatus.WindersInError.Add(false); + MachineStatus.DancersInError.Add(false); + MachineStatus.BtsrsInError.Add(false); + } + } - EventsStates = MachineEventState.GetAllEventsStates(); + EventsStates = MachineEventState.GetAllEventsStates(); _valveStates = new List<ValveState>(); _blower_states = new List<SetBlowerStateRequest>(); @@ -213,6 +227,21 @@ namespace Tango.Emulations.Emulators HeaterType = (HeaterType)item.Code, }); } + var tunnel = _heater_states.FirstOrDefault(x => x.HeaterType == HeaterType.ETunnelHeater); + if(tunnel != null) + { + tunnel.IsRampingUp = true; + tunnel.CurrentValue = 108.5; + tunnel.SetPoint = 170; + } + var dryerZone3 = _heater_states.FirstOrDefault(x => x.HeaterType == HeaterType.EDryerHeater3); + if (dryerZone3 != null) + { + dryerZone3.IsRampingUp = false; + dryerZone3.CurrentValue = 200.8; + dryerZone3.SetPoint = 170; + } + //DryerZone3 foreach (var item in adapter.HardwareBlowerTypes) { @@ -621,6 +650,12 @@ namespace Tango.Emulations.Emulators monitors.Dispenser7MotorFrequency.AddRange(dispenserFrequencies[6].Data); monitors.Dispenser8MotorFrequency.AddRange(dispenserFrequencies[7].Data); + monitors.EuDispenser1Pressure.Clear(); + monitors.EuDispenser1Pressure.Add(5); + + monitors.EuLubricantCurrent.Add(4000.12345); + + //res.HeatersStates.Add(new HeaterState() //{ // CurrentValue = 50, diff --git a/Software/Visual_Studio/Tango.Integration/Operation/JobHandler.cs b/Software/Visual_Studio/Tango.Integration/Operation/JobHandler.cs index 7aa491369..23bd2b1ba 100644 --- a/Software/Visual_Studio/Tango.Integration/Operation/JobHandler.cs +++ b/Software/Visual_Studio/Tango.Integration/Operation/JobHandler.cs @@ -440,15 +440,11 @@ namespace Tango.Integration.Operation Status.CurrentUnitTotalProgress = Status.RemainingUnits > 1 && Job.EnableInterSegment ? Job.Length + (Job.InterSegmentLength) : Job.Length; - if (s.Message != _lastStatusMessage && s.Message != String.Empty) + if (s.Message != _lastStatusMessage ) { Status.Message = s.Message; } - else - { - Status.Message = null; - } - + _lastStatusMessage = s.Message; diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchExpander.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchExpander.cs index b85be6c49..80974bd4a 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchExpander.cs +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchExpander.cs @@ -39,7 +39,12 @@ namespace Tango.Touch.Controls set { SetValue(IsExpandedProperty, value); } } public static readonly DependencyProperty IsExpandedProperty = - DependencyProperty.Register("IsExpanded", typeof(bool), typeof(TouchExpander), new PropertyMetadata(false)); + DependencyProperty.Register("IsExpanded", typeof(bool), typeof(TouchExpander), new FrameworkPropertyMetadata + { + DefaultValue = false, + BindsTwoWayByDefault = true, + DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged + }); static TouchExpander() { diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchNavigationLinks.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchNavigationLinks.cs index 3a0d3de9e..5fb4496e0 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchNavigationLinks.cs +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchNavigationLinks.cs @@ -24,7 +24,18 @@ namespace Tango.Touch.Controls private const string PART_Rectangle = "PART_Rectangle"; private Line _line; private Object _lastSelectedItem; + + public int LineThickness + { + get { return (int)GetValue(LineThicknessProperty); } + set { SetValue(LineThicknessProperty, value); } + } + + // Using a DependencyProperty as the backing store for LineThickness. This enables animation, styling, binding, etc... + public static readonly DependencyProperty LineThicknessProperty = + DependencyProperty.Register("LineThickness", typeof(int), typeof(TouchNavigationLinks), new PropertyMetadata(3)); + static TouchNavigationLinks() { DefaultStyleKeyProperty.OverrideMetadata(typeof(TouchNavigationLinks), new FrameworkPropertyMetadata(typeof(TouchNavigationLinks))); @@ -48,12 +59,14 @@ namespace Tango.Touch.Controls private void MoveLineToSelectedItem() { - if (SelectedItem != null) + if (SelectedItem != null ) { + if(SelectedItem is UIElement && ((UIElement)SelectedItem).IsEnabled == false) + return; var container = ItemContainerGenerator.ContainerFromItem(SelectedItem) as FrameworkElement; - + ContentPresenter presenter = container.FindChild<ContentPresenter>().FindChild<ContentPresenter>(); - + if (presenter != null) { Point relativePoint = presenter.TransformToAncestor(this).Transform(new Point(0, 0)); @@ -87,8 +100,9 @@ namespace Tango.Touch.Controls _line.BeginAnimation(Line.X2Property, aniX2); } } + _lastSelectedItem = SelectedItem; } - + _lastSelectedItem = SelectedItem; } } diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchNavigationLinks.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchNavigationLinks.xaml index 599dfdf7c..2b8b4ff03 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchNavigationLinks.xaml +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchNavigationLinks.xaml @@ -37,10 +37,11 @@ <Setter Property="BorderThickness" Value="1"/> <Setter Property="MinHeight" Value="40"></Setter> <Setter Property="FocusVisualStyle" Value="{x:Null}"/> + <Setter Property="IsEnabled" Value="true"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ListBoxItem}"> - <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> + <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true" IsEnabled="{TemplateBinding IsEnabled}"> <components:Ripple CornerRadius="5" RippleBrush="{StaticResource TangoRippleDarkBrush}"> <StackPanel Orientation="Horizontal"> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> @@ -77,7 +78,7 @@ <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> <StackPanel> <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalAlignment="Stretch"/> - <Line x:Name="PART_Rectangle" X1="0" X2="0" Y1="0" Y2="0" Margin="0 5 0 -3" Stroke="{StaticResource TangoPrimaryAccentBrush}" StrokeThickness="3" HorizontalAlignment="Stretch"></Line> + <Line x:Name="PART_Rectangle" X1="0" X2="0" Y1="0" Y2="0" Margin="0 5 0 -3" Stroke="{StaticResource TangoPrimaryAccentBrush}" StrokeThickness="{Binding RelativeSource={RelativeSource AncestorType=local:TouchNavigationLinks},Path=LineThickness}" HorizontalAlignment="Stretch"></Line> </StackPanel> </Border> </ControlTemplate> diff --git a/Software/Visual_Studio/Tango.Touch/Resources/Colors.xaml b/Software/Visual_Studio/Tango.Touch/Resources/Colors.xaml index 283e69b45..1dc2090aa 100644 --- a/Software/Visual_Studio/Tango.Touch/Resources/Colors.xaml +++ b/Software/Visual_Studio/Tango.Touch/Resources/Colors.xaml @@ -60,6 +60,17 @@ <Color x:Key="TangoPanelMaskColorLight">#55FFFFFF</Color> <Color x:Key="TangoMenuPanelDarkColor">#000131</Color> + <Color x:Key="Tango_RealTimeGraph_White">#18FFFFFF</Color> + <Color x:Key="Tango_RealTimeGraph_Red">#B6FF6F6F</Color> + <Color x:Key="Tango_RealTimeGraph_Yellow">#BBFFB84B</Color> + <Color x:Key="Tango_RealTimeGraph_Green">#B958C13B</Color> + <Color x:Key="Tango_RealTimeGraph_Orange">#BBFA9252</Color> + + <Color x:Key="Tango_RealTimeGraph_ForegroundColor">#7C98B3</Color> + <Color x:Key="Tango_RealTimeGraph_OuterBorderColor">#202020</Color> + <Color x:Key="Tango_RealTimeGraph_InnerBorderColor">#505050</Color> + <Color x:Key="Tango_RealTimeGraph_GridLinesColor">#303030</Color> + <!--Brushes--> <SolidColorBrush x:Key="TangoPrimaryBackgroundBrush" Color="{StaticResource TangoPrimaryBackgroundColor}"></SolidColorBrush> <SolidColorBrush x:Key="TangoMidBackgroundBrush" Color="{StaticResource TangoMidBackgroundColor}"></SolidColorBrush> @@ -128,4 +139,21 @@ <SolidColorBrush x:Key="TangoPowerMenuOpenedBackgroundBrush" Color="{StaticResource TangoPowerMenuOpenedBackgroundColor}"></SolidColorBrush> <SolidColorBrush x:Key="TangoMenuPanelDarkBrush" Color="{StaticResource TangoMenuPanelDarkColor}"></SolidColorBrush> + + <SolidColorBrush x:Key="Tango_RealTimeGraph_ForegroundBrush" Color="{StaticResource Tango_RealTimeGraph_ForegroundColor}" /> + <SolidColorBrush x:Key="Tango_RealTimeGraph_OuterBorderBrush" Color="{StaticResource Tango_RealTimeGraph_OuterBorderColor}" /> + <SolidColorBrush x:Key="Tango_RealTimeGraph_InnerBorderBrush" Color="{StaticResource Tango_RealTimeGraph_InnerBorderColor}" /> + <SolidColorBrush x:Key="Tango_RealTimeGraph_GridLinesBrush" Color="{StaticResource Tango_RealTimeGraph_GridLinesColor}" /> + + <LinearGradientBrush x:Key="Tango_RealTimeGraph_BackgroundBrush" EndPoint="0.5,1" StartPoint="0.5,0" > + <GradientStop Color="#202020"/> + <GradientStop Color="#FF333333" Offset="1"/> + </LinearGradientBrush> + + <SolidColorBrush x:Key="Tango_RealTimeGraph_WhiteBrush" Color="{StaticResource Tango_RealTimeGraph_White}"></SolidColorBrush> + <SolidColorBrush x:Key="Tango_RealTimeGraph_RedBrush" Color="{StaticResource Tango_RealTimeGraph_Red}"></SolidColorBrush> + <SolidColorBrush x:Key="Tango_RealTimeGraph_YellowBrush" Color="{StaticResource Tango_RealTimeGraph_Yellow}"></SolidColorBrush> + <SolidColorBrush x:Key="Tango_RealTimeGraph_GreenBrush" Color="{StaticResource Tango_RealTimeGraph_Green}"></SolidColorBrush> + <SolidColorBrush x:Key="Tango_RealTimeGraph_OrangeBrush" Color="{StaticResource Tango_RealTimeGraph_Orange}"></SolidColorBrush> + </ResourceDictionary>
\ No newline at end of file |
