diff options
| author | Roy <Roy.mail.net@gmail.com> | 2022-06-30 16:58:51 +0300 |
|---|---|---|
| committer | Roy <Roy.mail.net@gmail.com> | 2022-06-30 16:58:51 +0300 |
| commit | 3973aa5fa582c91d315d9c4281d47922e82f7c05 (patch) | |
| tree | 36e7ed3ec55e0462f4bf2ee3c197ad47b14e1100 /Software | |
| parent | d573512b53b51050575025f65a7455aeb6c0734b (diff) | |
| parent | c2c59833f0f946418b69b935c62867ca5fcccd49 (diff) | |
| download | Tango-3973aa5fa582c91d315d9c4281d47922e82f7c05.tar.gz Tango-3973aa5fa582c91d315d9c4281d47922e82f7c05.zip | |
Merge branch 'software' of https://twinetfs.visualstudio.com/Tango/_git/Tango into software
Diffstat (limited to 'Software')
31 files changed, 483 insertions, 109 deletions
diff --git a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt Binary files differindex 1a2038cfa..5fe5afe5a 100644 --- a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt +++ b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt diff --git a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip index 5f0600844..08a07593f 100644 --- a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip +++ b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip @@ -18,10 +18,10 @@ <ROW Property="ARPNOREPAIR" Value="1" MultiBuildValue="DefaultBuild:1"/> <ROW Property="ARPSYSTEMCOMPONENT" Value="1"/> <ROW Property="Manufacturer" Value="Twine"/> - <ROW Property="ProductCode" Value="1033:{2EB83EBD-7508-4DD7-B9E4-7182425006B8} " Type="16"/> + <ROW Property="ProductCode" Value="1033:{497937BE-96C2-4192-BDA2-491A4EEF9549} " Type="16"/> <ROW Property="ProductLanguage" Value="1033"/> <ROW Property="ProductName" Value="Tango"/> - <ROW Property="ProductVersion" Value="1.7.8.0" Type="32"/> + <ROW Property="ProductVersion" Value="1.7.9.0" Type="32"/> <ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/> <ROW Property="UpgradeCode" Value="{F8EAB8B4-FD57-45B7-8307-D52DF760273D}"/> <ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/> @@ -217,11 +217,13 @@ <ROW Component="mscoree.dll" ComponentId="{85F439D0-8FD0-4B99-888D-336C7A125E3D}" Directory_="APPDIR" Attributes="0" KeyPath="mscoree.dll"/> <ROW Component="msvcp140d.dll" ComponentId="{69E32675-9ACF-4C23-A495-300B78913B66}" Directory_="APPDIR" Attributes="0" KeyPath="msvcp140d.dll"/> <ROW Component="protobufnet.dll" ComponentId="{163F1E17-6462-4ABE-BC86-E055F7690139}" Directory_="APPDIR" Attributes="0" KeyPath="protobufnet.dll"/> + <ROW Component="turbojpeg.dll" ComponentId="{3DA36B93-E36D-4EA1-9A9A-6E4443FD30A1}" Directory_="win7x64_Dir" Attributes="256" KeyPath="turbojpeg.dll"/> + <ROW Component="turbojpeg.dll.meta" ComponentId="{D1EF30BF-00D4-403A-B0B9-76C1B867E814}" Directory_="win7x64_Dir" Attributes="0" KeyPath="turbojpeg.dll.meta" Type="0"/> + <ROW Component="turbojpeg.dll.meta_1" ComponentId="{B3E07B6B-45B8-4E75-89B0-AC3B2860DBEF}" Directory_="win7x86_Dir" Attributes="0" KeyPath="turbojpeg.dll.meta_1" Type="0"/> + <ROW Component="turbojpeg.dll_1" ComponentId="{11B2CB2F-D96F-4E60-84BB-3FAFDC4D60DC}" Directory_="win7x86_Dir" Attributes="0" KeyPath="turbojpeg.dll_1"/> <ROW Component="ucrtbased.dll" ComponentId="{B8D025EA-CD16-4EE7-A3E7-713E2BE82BF3}" Directory_="APPDIR" Attributes="0" KeyPath="ucrtbased.dll"/> <ROW Component="vcruntime140.dll" ComponentId="{144594CC-D19B-45E4-A420-7A1BBB122EE3}" Directory_="APPDIR" Attributes="0" KeyPath="vcruntime140.dll"/> <ROW Component="vcruntime140d.dll" ComponentId="{7653420C-C6C3-4F31-97E8-D6DE417D3DF2}" Directory_="APPDIR" Attributes="0" KeyPath="vcruntime140d.dll"/> - <ROW Component="win7x64" ComponentId="{5FE69239-D0EC-4DB6-9960-C4202AC44985}" Directory_="win7x64_Dir" Attributes="0"/> - <ROW Component="win7x86" ComponentId="{1EE5BE61-C29E-495A-BF21-92487A654851}" Directory_="win7x86_Dir" Attributes="0"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent"> <ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0"/> @@ -493,6 +495,11 @@ <ROW File="System.Spatial.dll" Component_="System.Spatial.dll" FileName="SYSTE~11.DLL|System.Spatial.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\System.Spatial.dll" SelfReg="false"/> <ROW File="Tango.PDF.dll" Component_="Tango.PDF.dll" FileName="TANGO~17.DLL|Tango.PDF.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PDF.dll" SelfReg="false"/> <ROW File="Tango.PDF.pdb" Component_="Tango.PDF.dll" FileName="TANGO~18.PDB|Tango.PDF.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PDF.pdb" SelfReg="false"/> + <ROW File="LibGit2Sharp.dll.config" Component_="CommandLine.xml" FileName="LIBGIT~1.CON|LibGit2Sharp.dll.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\LibGit2Sharp.dll.config" SelfReg="false"/> + <ROW File="turbojpeg.dll" Component_="turbojpeg.dll" FileName="TURBOJ~1.DLL|turbojpeg.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x64\turbojpeg.dll" SelfReg="false"/> + <ROW File="turbojpeg.dll.meta" Component_="turbojpeg.dll.meta" FileName="TURBOJ~1.MET|turbojpeg.dll.meta" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x64\turbojpeg.dll.meta" SelfReg="false"/> + <ROW File="turbojpeg.dll_1" Component_="turbojpeg.dll_1" FileName="TURBOJ~1.DLL|turbojpeg.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x86\turbojpeg.dll" SelfReg="false"/> + <ROW File="turbojpeg.dll.meta_1" Component_="turbojpeg.dll.meta_1" FileName="TURBOJ~1.MET|turbojpeg.dll.meta" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x86\turbojpeg.dll.meta" SelfReg="false"/> <ATTRIBUTE name="DontAddFileAttributes" value="true"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent"> @@ -502,7 +509,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\PPC" PackageFileName="PPC Installer_v1.7.8" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="PPC Installer_v1.7.8"/> + <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\PPC" PackageFileName="PPC Installer_v1.7.9" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="PPC Installer_v1.7.9"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent"> <ROW Path="<AI_DICTS>ui.ail"/> @@ -570,8 +577,6 @@ <COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent"> <ROW Directory_="SHORTCUTDIR" Component_="SHORTCUTDIR" ManualDelete="false"/> <ROW Directory_="APPDIR" Component_="APPDIR" ManualDelete="true"/> - <ROW Directory_="win7x64_Dir" Component_="win7x64" ManualDelete="false"/> - <ROW Directory_="win7x86_Dir" Component_="win7x86" ManualDelete="false"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent"> <ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/> @@ -777,8 +782,10 @@ <ROW Feature_="MainFeature" Component_="Microsoft.Data.Services.Client.dll"/> <ROW Feature_="MainFeature" Component_="System.Spatial.dll"/> <ROW Feature_="MainFeature" Component_="Tango.PDF.dll"/> - <ROW Feature_="MainFeature" Component_="win7x64"/> - <ROW Feature_="MainFeature" Component_="win7x86"/> + <ROW Feature_="MainFeature" Component_="turbojpeg.dll"/> + <ROW Feature_="MainFeature" Component_="turbojpeg.dll.meta"/> + <ROW Feature_="MainFeature" Component_="turbojpeg.dll_1"/> + <ROW Feature_="MainFeature" Component_="turbojpeg.dll.meta_1"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.MsiInstExSeqComponent"> <ROW Action="AI_STORE_LOCATION" Condition="(Not Installed) OR REINSTALL" Sequence="1502"/> diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionView.xaml index 56dd24e86..fc38552d5 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionView.xaml +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionView.xaml @@ -6,6 +6,7 @@ xmlns:local="clr-namespace:Tango.PPC.Jobs.Dialogs" xmlns:vm="clr-namespace:Tango.PPC.Jobs.Dialogs" xmlns:models="clr-namespace:Tango.PPC.Jobs.Models" + xmlns:helpers="clr-namespace:Tango.PPC.Jobs.Helpers" xmlns:controls="clr-namespace:Tango.PPC.Jobs.Controls" xmlns:sharedConverters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" xmlns:touch="clr-namespace:Tango.Touch.Controls;assembly=Tango.Touch" @@ -57,7 +58,7 @@ </Style> <DataTemplate x:Key="brushColorPanel"> - <Grid Height="180" Margin="93 10 0 0" HorizontalAlignment="Stretch"> + <Grid Height="180" Margin="83 10 0 0" HorizontalAlignment="Stretch"> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*"/> <ColumnDefinition Width="270"/> @@ -74,11 +75,11 @@ </StackPanel> <StackPanel Orientation="Vertical" Margin="0 0 0 0" > <TextBlock FontSize="{StaticResource TangoDataGridHeaderFontSize}" HorizontalAlignment="Center" Visibility="{Binding IsEditMode, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> - <Run Text="First Choice - Segments "></Run> + <Run Text="First Choice - Segment "></Run> <Run Text="{Binding SegmentIndex,Mode=OneWay}"/> </TextBlock> <TextBlock FontSize="{StaticResource TangoDataGridHeaderFontSize}" HorizontalAlignment="Center" Visibility="{Binding IsEditMode, Converter={StaticResource BooleanToVisibilityConverter}}"> - <Run Text="Edited - Segments"></Run> + <Run Text="Edited - Segment"></Run> <Run Text="{Binding SegmentIndex,Mode=OneWay}"></Run> </TextBlock> <Border Height="120" CornerRadius="20" BorderThickness="1" BorderBrush="{StaticResource TangoGrayBrush}"> @@ -139,21 +140,10 @@ <Canvas Grid.Column="1" Width="28" Height="28" VerticalAlignment="Top" HorizontalAlignment="Left"> <touch:TouchToggleButton Canvas.Left="0" Canvas.Top="0" x:Name="addColorToGroup" EnableDropShadow="False" Foreground="{StaticResource TangoKeyboardKeyDarkTextBrush}" Background="Transparent" BorderThickness="0" Command="{Binding SaveMyColorsCommand}" - IsEnabled="{Binding SelectedBrushStop.IsLiquidVolumesOutOfRange, Converter={StaticResource BooleanInverseConverter}}"> - <touch:TouchToggleButton.Style > - <Style TargetType="touch:TouchToggleButton" > - <Setter Property="Background" Value="{StaticResource TangoPrimaryAccentBrush}"/> - <Setter Property="Foreground" Value="{StaticResource TangoLightForegroundBrush}"/> - <Style.Triggers> - <Trigger Property="IsEnabled" Value="False"> - <Setter Property="Foreground" Value="{StaticResource TangoLightForegroundBrush}"></Setter> - <Setter Property="Background" Value="{StaticResource TangoPrimaryAccentBrush}"></Setter> - </Trigger> - </Style.Triggers> - </Style> - </touch:TouchToggleButton.Style> + IsEnabled="{Binding SelectedBrushStop.IsLiquidVolumesOutOfRange, Converter={StaticResource BooleanInverseConverter}}" Style="{StaticResource TangoTouchToggleButtonNoDisable}"> + <Border Height="26" Width="28" BorderThickness="0" BorderBrush="{StaticResource TangoKeyboardKeyDarkBrush}" Background="Transparent" HorizontalAlignment="Left"> - <Image Stretch="Fill" RenderOptions.BitmapScalingMode="Fant"> + <Image Stretch="Fill" RenderOptions.BitmapScalingMode="Fant" > <Image.Style> <Style TargetType="{x:Type Image}"> <Setter Property="Source" Value="../Images/ColorSelection/Heart.png" /> @@ -162,7 +152,7 @@ <Setter Property="Source" Value="../Images/ColorSelection/fillheart.png"/> </DataTrigger> <DataTrigger Binding="{Binding SelectedBrushStop.IsLiquidVolumesOutOfRange}" Value="True"> - <Setter Property="Source" Value="../Images/ColorSelection/Heart_disable.png"/> + <Setter Property="Source" Value="../Images/ColorSelection/Heart.png"/> </DataTrigger> </Style.Triggers> </Style> @@ -216,6 +206,20 @@ </Grid> </DataTemplate> + <ControlTemplate x:Key="validationTemplate"> + <!--<DockPanel> + <touch:TouchTextBox Foreground="Red" FontSize="20" Text="!"></touch:TouchTextBox> + <AdornedElementPlaceholder/> + </DockPanel>--> + <Grid ClipToBounds="False" > + <Border BorderBrush="Red" BorderThickness="2" Margin="-1" ToolTip="{Binding ElementName=adornedElement, Path=AdornedElement.(Validation.Errors)/ErrorContent }"> + <AdornedElementPlaceholder Name="adornedElement" /> + </Border> + <Polygon Points="15,15 15,0 0,0" Fill="Red" HorizontalAlignment="Right" VerticalAlignment="Top" + ToolTip="{Binding ElementName=adornedElement, Path=AdornedElement.(Validation.Errors)/ErrorContent }"/> + </Grid> + </ControlTemplate> + <DataTemplate x:Key="ColorLibrary_Template" DataType="{x:Type models:ColorLibrary}"> <DockPanel Margin="40 0 20 20"> <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Visibility="{Binding EditColorsGroupMode , Converter={StaticResource BooleanToVisibilityInverseConverter}}"> @@ -225,7 +229,22 @@ <DockPanel DockPanel.Dock="Top" Visibility="{Binding EditColorsGroupMode , Converter={StaticResource BooleanToVisibilityConverter}}"> <touch:TouchIconButton DockPanel.Dock="Right" Icon="TrashAltRegular" Width="16" Height="16.5" Margin="0 0 35 1" EnableDropShadow="False" Foreground="{StaticResource TangoBlackInkBrush}" Command="{Binding DataContext.DeleteGroupCommand , ElementName=colorSelectionView}" /> <StackPanel Orientation="Horizontal" DockPanel.Dock="Left"> - <touch:TouchTextBox MaxLength="20" Text="{Binding Name, UpdateSourceTrigger=LostFocus}" MinWidth="100" Margin="0 0 0 0" FontSize="{StaticResource TangoButtonFontSize}" FontWeight="SemiBold" VerticalAlignment="Center" Foreground="{StaticResource TangoBlackInkBrush}" ></touch:TouchTextBox> + <touch:TouchTextBox MaxLength="20" Validation.ErrorTemplate="{StaticResource validationTemplate}" MinWidth="100" Margin="0 0 0 0" FontSize="{StaticResource TangoButtonFontSize}" FontWeight="SemiBold" VerticalAlignment="Center" Foreground="{StaticResource TangoBlackInkBrush}" > + <touch:TouchTextBox.Resources> + <helpers:BindingProxy x:Key="proxy" Data="{Binding DataContext, ElementName=colorSelectionView}"/> + </touch:TouchTextBox.Resources> + <touch:TouchTextBox.Text> + <Binding Path="Name" UpdateSourceTrigger="PropertyChanged"> + <Binding.ValidationRules> + <helpers:ColorLibraryNamesValidationRule> + <helpers:ColorLibraryNamesValidationRule.Wrapper> + <helpers:WrapperColorLibrary Library="{Binding Data.Libraries, Source={StaticResource proxy}}"/> + </helpers:ColorLibraryNamesValidationRule.Wrapper> + </helpers:ColorLibraryNamesValidationRule> + </Binding.ValidationRules> + </Binding> + </touch:TouchTextBox.Text> + </touch:TouchTextBox> <touch:TouchIconButton Margin="20 0 0 0" VerticalAlignment="Center" Foreground="{StaticResource TangoPrimaryAccentBrush}" Height="16.5" Icon="PencilAltSolid" Command="{Binding DataContext.EditColorsLibraryCommand, ElementName=colorSelectionView}" CommandParameter="{Binding }" /> </StackPanel> </DockPanel> @@ -341,8 +360,8 @@ </Grid.RowDefinitions> <touch:TouchNavigationLinks x:Name="navigationCSTLinks" SelectionChanged="TouchNavigationLinks_SelectionChanged" - SelectedIndex="{Binding SelectedColorTabIndex,Mode=TwoWay}" VerticalAlignment="Bottom" Margin="20,0,20.4,20" - FontSize="{StaticResource TangoNavigationLinksFontSize}" HorizontalContentAlignment="Stretch" Grid.RowSpan="2"> + SelectedIndex="{Binding SelectedColorTabIndex,Mode=TwoWay}" VerticalAlignment="Bottom" Margin="70,0,0,20" + FontSize="{StaticResource TangoNavigationLinksFontSize}" HorizontalContentAlignment="Stretch" Grid.RowSpan="2" > <!--<TextBlock HorizontalAlignment="Center" Visibility="Collapsed" >HSB</TextBlock>--> <TextBlock HorizontalAlignment="Center" >LAB</TextBlock> <TextBlock HorizontalAlignment="Center" >RGB</TextBlock> diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionViewVM.cs index aadfc5b1a..43759f1c2 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionViewVM.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/ColorSelectionViewVM.cs @@ -506,13 +506,13 @@ namespace Tango.PPC.Jobs.Dialogs SelectedBrushStop = InitialBrushStop.Clone(); SelectedBrushStop.Guid = InitialBrushStop.Guid; - SelectedBrushStop.ColorSpace = InitialBrushStop.ColorSpace; if (SelectedBrushStop.ColorSpace == ColorSpaces.Volume) SelectedColorTab = ColorTab.Volume; if (SelectedBrushStop.ColorSpace == ColorSpaces.LAB) { SelectedColorTab = ColorTab.CIELab; + SelectedBrushStop.SaveLABBeforeChanges(); } else if (SelectedBrushStop.ColorSpace == ColorSpaces.Catalog) { @@ -540,7 +540,9 @@ namespace Tango.PPC.Jobs.Dialogs } SelectedBrushStop.ColorCatalogsItemChanged -= OnColorSelectionItemChanged; SelectedBrushStop.ColorCatalogsItemChanged += OnColorSelectionItemChanged; + SelectedBrushStop.PreventPropertyUpdate = true; UpdateVolumesMaxValues(); + SelectedBrushStop.PreventPropertyUpdate = false; OKCommand.RaiseCanExecuteChanged(); SelectedBrushStop.LiquidVolumesOutOfRangeChanged -= OnLiquidVolumesOutOfRangeChanged; SelectedBrushStop.LiquidVolumesOutOfRangeChanged += OnLiquidVolumesOutOfRangeChanged; @@ -699,12 +701,20 @@ namespace Tango.PPC.Jobs.Dialogs { if (SelectedBrushStop.IsOutOfGamut) { - if( false == await NotificationProvider.ShowQuestion("The color you chose is not supported, by pressing OK the system will enter the best-match color.")) + if( false == await NotificationProvider.ShowQuestion("The color you chose is not supported, by pressing OK the system will enter the best-match color.")) { - return; + return; + } + if (SelectedBrushStop.ColorSpace == ColorSpaces.LAB) + { + var testColor = TrialsLogEngine.Default.GetByBrushStopGuid(SelectedBrushStop.Guid); + if (testColor != null && testColor.TrialslogList.Count > 0) + { + TrialsLogEngine.Default.Delete(testColor); + } } } - + _selectedBrushStop.LiquidVolumesOutOfRangeChanged -= OnLiquidVolumesOutOfRangeChanged; _selectedBrushStop.InitColorsFromBestmatch(); base.Accept(); @@ -760,6 +770,10 @@ namespace Tango.PPC.Jobs.Dialogs { Libraries.Insert(0 ,MyColorsEngine.Default.AddLibrary(name)); } + else + { + NotificationProvider.ShowInfo("A group with this name already exists. Try adding a different name."); + } NewGroupName = "Library" + (Libraries.Count() + 1); } @@ -776,6 +790,11 @@ namespace Tango.PPC.Jobs.Dialogs library = MyColorsEngine.Default.AddLibrary(name); Libraries.Insert(0, library); } + else + { + NotificationProvider.ShowInfo("A group with this name already exists. Try adding a different name."); + } + AddColorToLibrary(library); } NewGroupName = "Library" + (Libraries.Count() + 1); @@ -973,6 +992,8 @@ namespace Tango.PPC.Jobs.Dialogs #region Vector Fine tuning private void OpenVectorFineTuning() { + SelectedBrushStop.SaveLABBeforeChanges(); + VectorFineTuningDialogVM.Init( SelectedBrushStop, SelectedBrushStop.L, SelectedBrushStop.A, SelectedBrushStop.B, SelectedBrushStop.Color); IsOpenVectorFineTuningDialog = true; @@ -1016,6 +1037,11 @@ namespace Tango.PPC.Jobs.Dialogs TrialsLogEngine.Default.Delete( testColor); return true; } + else + { + await NotificationProvider.ShowInfo("The color will not be changed."); + SelectedBrushStop.UndoLABChanges(); + } return false; } return true; diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/JobCreationView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/JobCreationView.xaml index 87ff0e14c..399e2b64f 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/JobCreationView.xaml +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Dialogs/JobCreationView.xaml @@ -72,7 +72,7 @@ <DockPanel HorizontalAlignment="Stretch" Margin="0 50 0 0"> <TextBlock HorizontalAlignment="Left" Margin="0 10 0 0" Text="Thread Type" FontSize="{StaticResource TangoDialogFontSize}" Width="155"/> <Border Margin="49 0 0 0" BorderThickness="1" Height="44" CornerRadius="22" BorderBrush="{StaticResource TangoMidAccentBrush}"> - <touch:TouchComboBox Margin="20 0 10 10" ItemsSource="{Binding Rmls}" SelectedItem="{Binding SelectedRML,Mode=TwoWay}" Focusable="False" > + <touch:TouchComboBox Margin="20 0 10 10" ItemsSource="{Binding Rmls}" SelectedItem="{Binding SelectedRML,Mode=TwoWay}" Focusable="False" KeyboardNavigation.TabNavigation ="None"> <touch:TouchComboBox.ItemTemplate> <DataTemplate> <TextBlock Margin="20 10 10 10" TextTrimming="CharacterEllipsis" FontSize="{StaticResource TangoDialogFontSize}" Text="{Binding FinalName}"> 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 f1226597a..074ce4fa3 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 @@ -123,7 +123,7 @@ <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> - + <Grid Background="{StaticResource TangoPrimaryBackgroundBrush}"> <Grid.RowDefinitions> <RowDefinition Height="200"></RowDefinition> @@ -184,7 +184,7 @@ </Style> </UniformGrid.Style> <StackPanel Orientation="Horizontal"> - <TextBlock Text="L" FontSize="{StaticResource TangoComboBoxItemFontSize}" FontWeight="SemiBold" VerticalAlignment="Center"/> + <TextBlock Text="L" FontSize="{StaticResource TangoComboBoxItemFontSize}" FontWeight="SemiBold" VerticalAlignment="Center" /> <touch:TouchNumericUpDownConrol Margin="30 0 0 0" NumericPartWidth="94.0" Width="200" Height="40" HorizontalAlignment="Stretch" BorderThickness="0.8" MaxValue="100" MinValue="0" Value="{Binding MeasuredL, Delay=1000}" FontSize="{StaticResource TangoButtonFontSize}" FontWeight="SemiBold"/> </StackPanel> <StackPanel Orientation="Horizontal"> @@ -225,7 +225,7 @@ </Grid> </Grid> - <Border BorderThickness="0" Grid.Row="1" > + <Border BorderThickness="0" Grid.Row="1"> <!--<Border.Style > <Style TargetType="Border"> <Setter Property="IsEnabled" Value="True"/> @@ -237,7 +237,7 @@ </Style> </Border.Style>--> <touch:TouchExpander Grid.Row="1" x:Name="trailsListExpander" IsExpanded="{Binding IsExpanderOpened, Mode=TwoWay}" Margin="0 0 0 0 " FontSize="{StaticResource TangoSmallFontSize}" BorderThickness="0" - Style="{StaticResource TouchRoundedExpander}"> + Style="{StaticResource TouchRoundedExpander}" IsTabStop="False" KeyboardNavigation.TabNavigation ="None"> <touch:TouchExpander.Header> <DockPanel > <StackPanel Orientation="Horizontal" DockPanel.Dock="Right" Margin="0 0 20 0" Visibility="{Binding IsExpanderOpened, Converter={StaticResource BooleanToVisibilityConverter}, Mode=TwoWay}"> 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 2258fdc80..b085b2a78 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 @@ -557,10 +557,11 @@ namespace Tango.PPC.Jobs.Dialogs // if (result != null) { + DateTime reportDateTime = DateTime.UtcNow.ToLocalTime(); ColorCorrectionRepotVM vm = new ColorCorrectionRepotVM() { JobName = BrushStopModel.SegmentModel.Job.Name, - TargetColor = String.Format($"L*{TargetL:0.##} a*{TargetA:0.##} b*{TargetB:0.##}") + TargetColor = String.Format($"L*{TargetL:0.##} a*{TargetA:0.##} b*{TargetB:0.##}"), }; foreach (var item in TrialsLogitems) { @@ -578,13 +579,14 @@ namespace Tango.PPC.Jobs.Dialogs { PdfWpfWriter writer = new PdfWpfWriter(); writer.AddElement(new ColorCorrectionReport() { DataContext = vm }); - string path = StorageProvider.Drive.Name + "\\Color Correction Report_" + DateTime.UtcNow.ToString(@"d_MM_y_H_mm") + ExplorerFileDefinition.PDFFile.Extension; + string path = StorageProvider.Drive.Name + "\\Color Correction Report_" + reportDateTime.ToString(@"MM_dd_y_HH_mm") + ExplorerFileDefinition.PDFFile.Extension; if(File.Exists(path)) { - path = StorageProvider.Drive.Name + "\\Color Correction Report_" + DateTime.UtcNow.ToString(@"d_MM_y_H_mm") + "_1" + ExplorerFileDefinition.PDFFile.Extension; + path = StorageProvider.Drive.Name + "\\Color Correction Report_" + reportDateTime.ToString(@"MM_dd_y_HH_mm") + "_1" + ExplorerFileDefinition.PDFFile.Extension; } writer.Save(path); - await NotificationProvider.ShowSuccess("Job saved successfully."); + await NotificationProvider.ShowSuccess("Color Correction Report saved successfully."); + LogManager.Log( $"Color Correction Report saved successfully to file {path}."); } catch (Exception ex) { diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Helpers/BindingProxy.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Helpers/BindingProxy.cs new file mode 100644 index 000000000..d6b057c1a --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Helpers/BindingProxy.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; + +namespace Tango.PPC.Jobs.Helpers +{ + public class BindingProxy : System.Windows.Freezable + { + protected override Freezable CreateInstanceCore() + { + return new BindingProxy(); + } + + public object Data + { + get { return (object)GetValue(DataProperty); } + set { SetValue(DataProperty, value); } + } + + public static readonly DependencyProperty DataProperty = + DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new PropertyMetadata(null)); + } +} diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Helpers/ColorLibraryNamesValidationRule.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Helpers/ColorLibraryNamesValidationRule.cs new file mode 100644 index 000000000..12ec1831e --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Helpers/ColorLibraryNamesValidationRule.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Controls; + +namespace Tango.PPC.Jobs.Helpers +{ + public class ColorLibraryNamesValidationRule : ValidationRule + { + public WrapperColorLibrary Wrapper { get; set; } + + public override System.Windows.Controls.ValidationResult Validate(object value, CultureInfo cultureInfo) + { + string name = value.ToString(); + if (!String.IsNullOrEmpty(name) && Wrapper != null && Wrapper.Library != null && true == Wrapper.Library.Any(x => x.Name.ToUpper() == name.ToUpper())) + { + return new System.Windows.Controls.ValidationResult(false, "A group with this name already exists."); + } + + return System.Windows.Controls.ValidationResult.ValidResult; + } + } +} diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Helpers/WrapperColorLibrary.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Helpers/WrapperColorLibrary.cs new file mode 100644 index 000000000..4c43623ae --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Helpers/WrapperColorLibrary.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using Tango.PPC.Jobs.Models; + +namespace Tango.PPC.Jobs.Helpers +{ + public class WrapperColorLibrary : DependencyObject + { + public static readonly DependencyProperty LibraryProperty = + DependencyProperty.Register("Library", typeof(ObservableCollection<ColorLibrary>), + typeof(WrapperColorLibrary), new FrameworkPropertyMetadata(null)); + + public ObservableCollection<ColorLibrary> Library + { + get { return (ObservableCollection<ColorLibrary>)GetValue(LibraryProperty); } + set { SetValue(LibraryProperty, value); } + } + } +} 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 f24874ab5..5ab53223b 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 @@ -15,6 +15,8 @@ using Tango.BL.Dispensing; using Tango.BL; using Tango.Core.ExtensionMethods; using Newtonsoft.Json; +using Tango.Settings; +using Tango.PPC.Common; namespace Tango.PPC.Jobs.Models { @@ -625,7 +627,7 @@ namespace Tango.PPC.Jobs.Models { get { - if (RequiredMaxLiquidTest) + if (RequiredMaxLiquidTest && (ColorSpace == ColorSpaces.Volume || ColorSpace == ColorSpaces.CMYK)) { var sum = GetColorNLPerCm(Cyan, LiquidTypes.Cyan) + GetColorNLPerCm(Magenta, LiquidTypes.Magenta) + GetColorNLPerCm(Yellow, LiquidTypes.Yellow) + GetColorNLPerCm(Black, LiquidTypes.Black); var maxLiq = GetTotalMaximumLiquidNlPerCMLimit(); @@ -655,6 +657,13 @@ namespace Tango.PPC.Jobs.Models [JsonIgnore] public ColorSpaces LastChangedColorSpace { get; set; } + [JsonIgnore] + public Double LBeforeChange { get; set; } + [JsonIgnore] + public Double ABeforeChange { get; set; } + [JsonIgnore] + public Double BBeforeChange { get; set; } + #endregion #region constructors @@ -670,7 +679,8 @@ namespace Tango.PPC.Jobs.Models SegmentModel = segmentModel; Color = Colors.White; - ColorSpace = ColorSpaces.Volume; + var settings = SettingsManager.Default.GetOrCreate<PPCSettings>(); + ColorSpace = settings.DefaultTabColorSpace == null? ColorSpaces.Volume: (ColorSpaces)settings.DefaultTabColorSpace; LastChangedColorSpace = ColorSpace; ColorCatalogsItem = null; PreventPropertyUpdate = false; @@ -962,6 +972,22 @@ namespace Tango.PPC.Jobs.Models return s; } + + public void UndoLABChanges() + { + PreventPropertyUpdate = true; + L = LBeforeChange; + A = ABeforeChange; + PreventPropertyUpdate = false; + B = BBeforeChange; + } + + public void SaveLABBeforeChanges() + { + LBeforeChange = L; + ABeforeChange = A; + BBeforeChange = B; + } #endregion #region changes @@ -1131,7 +1157,7 @@ namespace Tango.PPC.Jobs.Models { if (ColorSpace != ColorSpaces.RGB) { - IsOutOfGamut = false; + if ( LastChangedColorSpace != ColorSpaces.RGB) { if (LastChangedColorSpace == ColorSpaces.Catalog && ColorCatalogsItem != null) @@ -1151,7 +1177,12 @@ namespace Tango.PPC.Jobs.Models _green = output.SingleCoordinates.Green; _blue = output.SingleCoordinates.Blue; IsOutOfGamut = output.OutOfGamut; - } + if (IsLiquidVolumesOutOfRange) + { + BestMatchColor = Color.FromRgb((byte)output.SingleCoordinates.Red, (byte)output.SingleCoordinates.Green, (byte)output.SingleCoordinates.Blue); + InitColor(); + } + } catch (Exception ex) { LogManager.Log(ex, "An error occurred while trying to get volume => RGB from conversion engine."); @@ -1197,7 +1228,6 @@ namespace Tango.PPC.Jobs.Models BestMatchL = _l; BestMatchA = _a; BestMatchB = _b; - } else if (LastChangedColorSpace == ColorSpaces.Volume) { @@ -1213,6 +1243,13 @@ namespace Tango.PPC.Jobs.Models BestMatchA = _a; BestMatchB = _b; IsOutOfGamut = output.OutOfGamut; + if(IsLiquidVolumesOutOfRange) + { + Lab lab1 = new Lab(_l, _a, _b); + Rgb rgb = new Rgb(lab1.ToRgb()); + BestMatchColor = Color.FromRgb((byte)(int)rgb.R, (byte)(int)rgb.G, (byte)(int)rgb.B); + InitColor(); + } } catch (Exception ex) { diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/JobModel.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/JobModel.cs index d07739af6..d79d1d586 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/JobModel.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Models/JobModel.cs @@ -458,6 +458,35 @@ namespace Tango.PPC.Jobs.Models } } + [JsonIgnore] + public bool IsReverseEnable + { + get + { + var items = GroupingSegments.Where(x=> x.IsSelected).ToList(); + + foreach(var item in items) + { + if(item is SegmentModel seg) + { + if(seg.IsGradient) + return true; + } + else if (item is SegmentsGroupModel group) + { + foreach (var segment in group.Segments) + { + if (segment.IsGradient) + { + return true; + } + } + } + } + return false ; + } + } + private List<ISegmentModel> _segmentsToCopy; [JsonIgnore] public List<ISegmentModel> SegmentsToCopy @@ -865,10 +894,10 @@ namespace Tango.PPC.Jobs.Models _selectAllSegments = false; } RaisePropertyChanged(nameof(SelectAllSegments)); - RaisePropertyChanged(nameof(HasSelectedItems)); + UpdateSelectedButtons(); } } - + private void SegmentsGroup_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { foreach (var group in GroupingSegments.ToList()) @@ -902,10 +931,16 @@ namespace Tango.PPC.Jobs.Models _selectAllSegments = false; } RaisePropertyChanged(nameof(SelectAllSegments)); - RaisePropertyChanged(nameof(HasSelectedItems)); + UpdateSelectedButtons(); } } + private void UpdateSelectedButtons() + { + RaisePropertyChanged(nameof(HasSelectedItems)); + RaisePropertyChanged(nameof(IsReverseEnable)); + } + /// <summary> /// Called when the <see cref="Length"/> property has been changed /// </summary> @@ -927,7 +962,7 @@ namespace Tango.PPC.Jobs.Models _preventChange = true; GroupingSegments.ToList().ForEach(x => x.IsSelected = SelectAllSegments); _preventChange = false; - RaisePropertyChanged(nameof(HasSelectedItems)); + UpdateSelectedButtons(); } } diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Reports/ColorCorrectionReport.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Reports/ColorCorrectionReport.xaml index 0871dfd1b..f2e929378 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Reports/ColorCorrectionReport.xaml +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Reports/ColorCorrectionReport.xaml @@ -4,9 +4,14 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:Tango.PPC.Jobs.Reports" + xmlns:sharedConverters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" mc:Ignorable="d" d:DesignHeight="1280" d:DesignWidth="800"> - <UserControl.Resources> + + <UserControl.Resources> + <sharedConverters:DateTimeUTCToShortDateTimeConverter x:Key="DateTimeUTCToShortDateTimeConverter" /> + + <Style x:Key="CCRGridColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"> <Setter Property="Height" Value="50"/> <Setter Property="FontSize" Value="14"/> @@ -26,8 +31,8 @@ </UserControl.Resources> <Grid> <StackPanel Orientation="Vertical" Margin="30"> - <DockPanel Height="120" VerticalAlignment="Top" > - <TextBlock DockPanel.Dock="Right" FontSize="12" Text="{Binding Date, StringFormat='{}{0:MM/dd/yyyy hh:mm}'}" VerticalAlignment="Bottom" HorizontalAlignment="Right"/> + <DockPanel Height="120" VerticalAlignment="Top" > + <TextBlock DockPanel.Dock="Right" FontSize="12" Text="{Binding Date, Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" VerticalAlignment="Bottom" HorizontalAlignment="Right"/> <Image DockPanel.Dock="Left" Source="../Images/logo.png" Stretch="Uniform" HorizontalAlignment="Left" Margin="40 0 0 0" Width="282" VerticalAlignment="Top" MinHeight="106"></Image> </DockPanel> @@ -49,7 +54,7 @@ </DataGrid.CellStyle> <DataGrid.Columns> <DataGridTextColumn Header="#" FontSize="12" Binding="{Binding Trial}" Width="40" /> - <DataGridTextColumn Header="Date" FontSize="12" Binding="{Binding Date}" Width="130"/> + <DataGridTextColumn Header="Date" FontSize="12" Binding="{Binding Date, Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="130"/> <DataGridTextColumn Header="CMYK" FontSize="12" Binding="{Binding CMYK}" Width="130"/> <DataGridTextColumn Header="Measured L*a*b" FontSize="12" Binding="{Binding MeasuredLAB}" Width="130"/> <DataGridTemplateColumn Header="dE(CMC)" Width="120"> 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 9f7f981a0..4dcf689b9 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 @@ -285,7 +285,10 @@ <DependentUpon>VectorFineTuningDialog.xaml</DependentUpon> </Compile> <Compile Include="Dialogs\VectorFineTuningDialogVM.cs" /> + <Compile Include="Helpers\BindingProxy.cs" /> + <Compile Include="Helpers\ColorLibraryNamesValidationRule.cs" /> <Compile Include="Helpers\GroupSegmentTemplateSelector.cs" /> + <Compile Include="Helpers\WrapperColorLibrary.cs" /> <Compile Include="JobsV2Module.cs" /> <Compile Include="JobsModuleSettings.cs" /> <Compile Include="Messages\JobSelectedMessage.cs" /> @@ -708,7 +711,7 @@ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <ProjectExtensions> <VisualStudio> - <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" /> + <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" /> </VisualStudio> </ProjectExtensions> </Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/CopySegmentCommand.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/CopySegmentCommand.cs index dc9c1a81d..a041ee640 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/CopySegmentCommand.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/CopySegmentCommand.cs @@ -18,7 +18,8 @@ namespace Tango.PPC.Jobs.UndoRedoCommands } public void Execute() { - _jobModel.SegmentsToCopy.Clear(); + List<ISegmentModel> SegmentsToCopy = new List<ISegmentModel>(_jobModel.SegmentsToCopy); + SegmentsToCopy.Clear(); if (false == _jobModel.Segments.ToList().Any(x => x.IsSelected)) return; @@ -28,17 +29,18 @@ namespace Tango.PPC.Jobs.UndoRedoCommands foreach (var segment in _jobModel.GroupingSegments.Where(i => i.IsSelected).ToList()) { //segment.IsSelected = false; - _jobModel.SegmentsToCopy.Add(segment.Clone()); + SegmentsToCopy.Add(segment.Clone()); var index = _jobModel.GroupingSegments.ToList().IndexOf(segment); indexToPasteCopySegments = index > indexToPasteCopySegments? index: indexToPasteCopySegments; } + _jobModel.SegmentsToCopy = SegmentsToCopy; _jobModel.IndexToPasteCopySegments = indexToPasteCopySegments; } public void UnExecute() { - _jobModel.SegmentsToCopy.Clear(); + _jobModel.SegmentsToCopy= new List<ISegmentModel>(); } } } diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/ReverseCommand.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/ReverseCommand.cs index 719460e71..c699dd95b 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/ReverseCommand.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/UndoRedoCommands/ReverseCommand.cs @@ -15,7 +15,7 @@ namespace Tango.PPC.Jobs.UndoRedoCommands public ReverseCommand(JobModel job) { _jobModel = job; - _indexes = _jobModel.GroupingSegments.Select((segm, ind) => new { Index = ind, Segment = segm }).Where( x=>x.Segment.IsSelected).Select(t=> t.Index).ToList(); + _indexes = _jobModel.GroupingSegments.Select((segm, ind) => new { Index = ind, Segment = segm }).Where( x=>x.Segment.IsSelected ).Select(t=> t.Index).ToList(); } public void Execute() @@ -23,13 +23,13 @@ namespace Tango.PPC.Jobs.UndoRedoCommands if (_indexes.Count == 0) return; - for (int index = 0, endIndex = _indexes.Count -1; index < _indexes.Count && index < endIndex; index++, endIndex--) - { - int firstIndexToSwap = _indexes[index]; - int lastIndexToSwap = _indexes[endIndex]; + //for (int index = 0, endIndex = _indexes.Count -1; index < _indexes.Count && index < endIndex; index++, endIndex--) + //{ + // int firstIndexToSwap = _indexes[index]; + // int lastIndexToSwap = _indexes[endIndex]; - _jobModel.SwapSegments(firstIndexToSwap, lastIndexToSwap); - } + // _jobModel.SwapSegments(firstIndexToSwap, lastIndexToSwap); + //} for (int index = 0; index < _indexes.Count && index < _jobModel.GroupingSegments.Count; index++) { if(_jobModel.GroupingSegments[_indexes[index]] is SegmentModel segmentModel) @@ -59,13 +59,13 @@ namespace Tango.PPC.Jobs.UndoRedoCommands if (_indexes.Count == 0) return; - for (int index = 0, endIndex = _indexes.Count - 1; index < _indexes.Count && index < endIndex; index++, endIndex--) - { - int firstIndexToSwap = _indexes[index]; - int lastIndexToSwap = _indexes[endIndex]; + //for (int index = 0, endIndex = _indexes.Count - 1; index < _indexes.Count && index < endIndex; index++, endIndex--) + //{ + // int firstIndexToSwap = _indexes[index]; + // int lastIndexToSwap = _indexes[endIndex]; - _jobModel.SwapSegments(firstIndexToSwap, lastIndexToSwap); - } + // _jobModel.SwapSegments(firstIndexToSwap, lastIndexToSwap); + //} for (int index = 0; index < _indexes.Count && index < _jobModel.GroupingSegments.Count; index++) { if (_jobModel.GroupingSegments[_indexes[index]] is SegmentModel segmentModel) diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobViewVM.cs index 370ed7f3a..e0749c94e 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobViewVM.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/ViewModels/JobViewVM.cs @@ -1479,7 +1479,13 @@ namespace Tango.PPC.Jobs.ViewModels RaiseMessage(new JobSavedMessage() { Job = Job }); await _db.SaveChangesAsync(); - + + JsonSerializerSettings settings1 = new JsonSerializerSettings() + { + ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore, + PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects + }; + _jsonJobModelLoaded = JsonConvert.SerializeObject(JobModel, Formatting.Indented, settings1); } diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobView.xaml index 884399f95..20949333d 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobView.xaml +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.JobsV2/Views/JobView.xaml @@ -237,7 +237,7 @@ </StackPanel> <StackPanel Margin="0 0 0 0" Orientation="Horizontal"> <controls:FastTextBlock VerticalAlignment="Bottom" DockPanel.Dock="Left" Text="Length (m):" FontSize="18"></controls:FastTextBlock> - <touch:TouchNumericTextBox Margin="20 0 0 0" Width="92" DockPanel.Dock="Right" Value="{Binding Length, UpdateSourceTrigger=LostFocus}" StringFormat="0.0" AutoCalculateJogStep="False" HasDecimalPoint="True" Minimum="1" Maximum="100000" KeyboardContainer="{Binding ElementName=Container}" FontSize="18" ValueChangedEnd="Length_ValueChanged" TextGotFocus="Length_BeforeChangeValue"/> + <touch:TouchNumericTextBox Margin="20 0 0 0" Width="92" DockPanel.Dock="Right" Value="{Binding Length, UpdateSourceTrigger=LostFocus}" StringFormat="0.0" AutoCalculateJogStep="False" HasDecimalPoint="True" Minimum="1" Maximum="100000" KeyboardContainer="{Binding ElementName=Container}" FontSize="18" ValueChangedEnd="Length_ValueChanged" TextGotFocus="Length_BeforeChangeValue" RippleBrush="Transparent"/> </StackPanel> </StackPanel> @@ -303,7 +303,7 @@ <StackPanel Grid.Column="1" Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center"> <!--<touch:TouchIconButton Command="{Binding ElementName=view,Path=DataContext.AddColorCommand}" CommandParameter="{Binding}" Height="40" Width="40" Style="{StaticResource TangoRoundTouchIconButton}" Icon="Plus" Background="{StaticResource TangoRippleDarkBrush}" Foreground="{StaticResource TangoLightForegroundBrush}" Padding="12" Margin="20 0 0 0" />--> - <touch:TouchButton Margin="0 0 0 0" VerticalAlignment="Center" Command="{Binding ElementName=view,Path=DataContext.AddColorCommand}" CommandParameter="{Binding}" EnableDropShadow="False" Foreground="{StaticResource TangoKeyboardKeyDarkTextBrush}" Background="Transparent" BorderThickness="0"> + <touch:TouchButton Margin="0 0 0 0" VerticalAlignment="Center" Command="{Binding ElementName=view,Path=DataContext.AddColorCommand}" CommandParameter="{Binding}" EnableDropShadow="False" Foreground="{StaticResource TangoKeyboardKeyDarkTextBrush}" Background="Transparent" BorderThickness="0" BorderBrush="Transparent" RippleBrush="Transparent" > <Border Height="40" Width="40" BorderThickness="0" BorderBrush="{StaticResource TangoKeyboardKeyDarkBrush}" Background="Transparent" HorizontalAlignment="Left"> <Image Stretch="Fill" RenderOptions.BitmapScalingMode="Fant" Source="../Images/JobView/AddColor.png"/> </Border> @@ -791,24 +791,18 @@ <RowDefinition Height="1*"/> </Grid.RowDefinitions> <Border Grid.Row="0" x:Name="jobDetailsBorder" Background="{StaticResource TangoPrimaryBackgroundBrush}" BorderThickness="0 0 0 1" BorderBrush="{StaticResource TangoLightBorderBrush}" Margin="0 0 0 0"> - - <Grid x:Name="job_details" HorizontalAlignment="Stretch" > - <DockPanel Height="72" HorizontalAlignment="Stretch"> - <touch:TouchButton Margin="0 0 30 0" DockPanel.Dock="Right" VerticalAlignment="Center" EnableDropShadow="False" Background="Transparent" BorderThickness="0" Command="{Binding EditJobDetailsCommand}" > - <Border Height="20" Width="20" BorderThickness="0" Background="Transparent" HorizontalAlignment="Right"> - <Image Stretch="Fill" RenderOptions.BitmapScalingMode="Fant" Source="../Images/JobView/job_details.png"/> - </Border> - </touch:TouchButton> + <Grid x:Name="job_details" HorizontalAlignment="Stretch" Height="72"> - <Grid DockPanel.Dock="Left" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="0 0 30 0" > + <touch:TouchButton Margin="0 0 30 0" VerticalAlignment="Center" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" EnableDropShadow="False" Background="Transparent" BorderThickness="0" Command="{Binding EditJobDetailsCommand}" Foreground="{StaticResource TangoKeyboardKeyDarkTextBrush}" > + + <Grid VerticalAlignment="Center" HorizontalAlignment="Stretch" Background="Transparent"> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*"/> <ColumnDefinition Width="auto" MaxWidth="320"/> <ColumnDefinition Width="auto" MaxWidth="320"/> + <ColumnDefinition Width="40"/> </Grid.ColumnDefinitions> - - <TextBlock Margin="16 0 0 5" TextTrimming="CharacterEllipsis" HorizontalAlignment="Left" VerticalAlignment="Center" FontWeight="SemiBold" FontSize="{StaticResource TangoMessageBoxTitleFontSize}" Text="{Binding JobModel.Name,FallbackValue='Job Name'}" ToolTip="{Binding JobModel.Name}"/> <StackPanel Margin="10 0 0 0" Grid.Column="1" VerticalAlignment="Center" Orientation="Horizontal" HorizontalAlignment="Left"> @@ -820,7 +814,7 @@ <TextBlock Text="Thread Type:" VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}" ></TextBlock> <TextBlock Margin="10 0 0 0" VerticalAlignment="Center" TextTrimming="CharacterEllipsis" FontWeight="Medium" Text="{Binding JobModel.Rml.FinalName}"/> </StackPanel> - + <StackPanel Margin="10 0 0 0" Grid.Column="2" VerticalAlignment="Center" Orientation="Horizontal" HorizontalAlignment="Center"> <StackPanel.ToolTip> <ToolTip> @@ -830,8 +824,13 @@ <TextBlock Text="Spool Type:" VerticalAlignment="Center" FontSize="{StaticResource TangoDefaultFontSize}" ></TextBlock> <TextBlock Text="{Binding JobModel.SpoolType.Name}" Margin="10 0 0 0" VerticalAlignment="Center" TextTrimming="CharacterEllipsis" FontWeight="Medium"/> </StackPanel> + + <Border Grid.Column="3" Height="20" Margin="20 0 0 0" BorderThickness="0" Background="Transparent" HorizontalAlignment="Right"> + <Image Stretch="Fill" RenderOptions.BitmapScalingMode="Fant" Source="../Images/JobView/job_details.png"/> + </Border> </Grid> - </DockPanel> + </touch:TouchButton> + </Grid> </Border> @@ -852,31 +851,31 @@ <DropShadowEffect Opacity="0.5" ShadowDepth="6" Color="Silver" BlurRadius="10" Direction="270"/> </Border.Effect> <UniformGrid Columns="6" Rows="1" DockPanel.Dock="Left" HorizontalAlignment="Stretch" > - <touch:TouchButton Style="{StaticResource CollapsedPanelButton}" EnableDropShadow="False" Command="{Binding RepeateSegmentCommand}" IsEnabled="{Binding JobModel.HasSelectedItems, Converter={StaticResource BooleanToVisibilityConverter}}"> + <touch:TouchButton Style="{StaticResource CollapsedPanelButton}" EnableDropShadow="False" Command="{Binding RepeateSegmentCommand}" IsEnabled="{Binding JobModel.HasSelectedItems}"> <StackPanel Orientation="Vertical" VerticalAlignment="Center" > <Image Width="20" Stretch="Fill" RenderOptions.BitmapScalingMode="Fant" Source="../Images/JobView/repeat.png"/> <TextBlock FontWeight="Medium" Margin="0 0 0 0" VerticalAlignment="Center" FontSize="{StaticResource TangoSmallFontSizeBar}" >Repeat</TextBlock> </StackPanel> </touch:TouchButton> - <touch:TouchButton Style="{StaticResource CollapsedPanelButton}" EnableDropShadow="False" Command="{Binding ReverseCommand}" IsEnabled="{Binding JobModel.HasSelectedItems, Converter={StaticResource BooleanToVisibilityConverter}}"> + <touch:TouchButton Style="{StaticResource CollapsedPanelButton}" EnableDropShadow="False" Command="{Binding ReverseCommand}" IsEnabled="{Binding JobModel.IsReverseEnable}"> <StackPanel Orientation="Vertical" VerticalAlignment="Center"> <Image Width="20" Stretch="Fill" RenderOptions.BitmapScalingMode="Fant" Source="../Images/JobView/reverse.png"/> <TextBlock FontWeight="Medium" Margin="0 0 0 0" VerticalAlignment="Center" FontSize="{StaticResource TangoSmallFontSizeBar}" Foreground="{StaticResource TangoMidAccentBrush}">Reverse</TextBlock> </StackPanel> </touch:TouchButton> - <touch:TouchButton Style="{StaticResource CollapsedPanelButton}" EnableDropShadow="False" Command="{Binding DeleteSegmentCommand}" IsEnabled="{Binding JobModel.HasSelectedItems, Converter={StaticResource BooleanToVisibilityConverter}}"> + <touch:TouchButton Style="{StaticResource CollapsedPanelButton}" EnableDropShadow="False" Command="{Binding DeleteSegmentCommand}" IsEnabled="{Binding JobModel.HasSelectedItems}"> <StackPanel Orientation="Vertical" VerticalAlignment="Center"> <Image Width="20" Stretch="Fill" RenderOptions.BitmapScalingMode="Fant" Source="../Images/JobView/delete_segment.png"/> <TextBlock FontWeight="Medium" Margin="0" VerticalAlignment="Center" FontSize="{StaticResource TangoSmallFontSizeBar}" Foreground="{StaticResource TangoMidAccentBrush}">Delete</TextBlock> </StackPanel> </touch:TouchButton> - <touch:TouchButton Style="{StaticResource CollapsedPanelButton}" EnableDropShadow="False" Command="{Binding PasteCommand}" IsEnabled="{Binding JobModel.HasSegmentsToCopy, Converter={StaticResource BooleanToVisibilityConverter}}" > + <touch:TouchButton Style="{StaticResource CollapsedPanelButton}" EnableDropShadow="False" Command="{Binding PasteCommand}" IsEnabled="{Binding JobModel.HasSegmentsToCopy}" > <StackPanel Orientation="Vertical" VerticalAlignment="Center"> <Image Width="20" Stretch="Fill" RenderOptions.BitmapScalingMode="Fant" Source="../Images/JobView/paste.png"/> <TextBlock FontWeight="Medium" Margin="0" VerticalAlignment="Center" FontSize="{StaticResource TangoSmallFontSizeBar}" Foreground="{StaticResource TangoMidAccentBrush}">Paste</TextBlock> </StackPanel> </touch:TouchButton> - <touch:TouchButton Style="{StaticResource CollapsedPanelButton}" EnableDropShadow="False" Command="{Binding CopyCommand}" IsEnabled="{Binding JobModel.HasSelectedItems, Converter={StaticResource BooleanToVisibilityConverter}}"> + <touch:TouchButton Style="{StaticResource CollapsedPanelButton}" EnableDropShadow="False" Command="{Binding CopyCommand}" IsEnabled="{Binding JobModel.HasSelectedItems}"> <StackPanel Orientation="Vertical" VerticalAlignment="Center"> <Image Width="19" Height="23" Stretch="Fill" RenderOptions.BitmapScalingMode="Fant" Source="../Images/JobView/copy.png"/> <TextBlock FontWeight="Medium" Margin="0" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="{StaticResource TangoSmallFontSizeBar}" Foreground="{StaticResource TangoMidAccentBrush}">Copy</TextBlock> 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 bf033b71f..132f33849 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 @@ -168,12 +168,12 @@ <touch:TouchNumericTextBox HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="200" Minimum="100" Maximum="500" Value="{Binding FineTuningLength}" HasDecimalPoint="False" KeyboardContainer="{Binding ElementName=Container}"></touch:TouchNumericTextBox> <TextBlock VerticalAlignment="Bottom">Use Light Inks When Possible</TextBlock> - <touch:TouchToggleSlider Style="{StaticResource TangoToggleButtonGrayAccent}" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="90" IsChecked="{Binding UseLightInks}"></touch:TouchToggleSlider> + <touch:TouchToggleSlider Style="{StaticResource TangoToggleButtonGrayAccent}" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="90" IsChecked="{Binding UseLightInks}" KeyboardNavigation.TabNavigation ="None" IsTabStop="False"></touch:TouchToggleSlider> </controls:TableGrid> <DockPanel Margin="10 -50 0 0"> - <touch:TouchIcon VerticalAlignment="Top" Icon="InformationOutline" Foreground="{StaticResource TangoGrayTextBrush}"></touch:TouchIcon> - <TextBlock Margin="10 0 0 0" VerticalAlignment="Top" TextWrapping="Wrap" FontSize="{StaticResource TangoSmallFontSize}" Foreground="{StaticResource TangoGrayTextBrush}"> + <touch:TouchIcon VerticalAlignment="Top" Icon="InformationOutline" Foreground="{StaticResource TangoGrayTextBrush}" IsTabStop="False"></touch:TouchIcon> + <TextBlock Margin="10 0 0 0" VerticalAlignment="Top" TextWrapping="Wrap" FontSize="{StaticResource TangoSmallFontSize}" Foreground="{StaticResource TangoGrayTextBrush}" KeyboardNavigation.TabNavigation="None"> Job settings allows you to set the default configuration for new jobs. </TextBlock> </DockPanel> diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/logo.png b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/logo.png Binary files differindex b49838e37..efb481bc4 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/logo.png +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/logo.png 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 891d8c809..58f659ad1 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("1.7.8.0")] +[assembly: AssemblyVersion("1.7.9.0")] diff --git a/Software/Visual_Studio/Tango.PMR/ExtensionMethods.cs b/Software/Visual_Studio/Tango.PMR/ExtensionMethods.cs index 24f6a4534..5e6507bd0 100644 --- a/Software/Visual_Studio/Tango.PMR/ExtensionMethods.cs +++ b/Software/Visual_Studio/Tango.PMR/ExtensionMethods.cs @@ -143,8 +143,8 @@ public static class ExtensionMethods var ti = stop.Dispensers.FirstOrDefault(x => x.DispenserLiquidType == DispenserLiquidType.TransparentInk); if (ti == null) return; - if (Math.Max(0, minInkUptake - nlPcmSum) < minInkUptake * 0.02d) return; - + //if (Math.Max(0, minInkUptake - nlPcmSum) < minInkUptake * 0.02d) return; + if (Math.Max(0, nlPerCM - nlPcmSum) < nlPerCM * 0.02d) return; //Daria change double newNlCM = Math.Max(0, nlPerCM - nlPcmSum); ti.NanoliterPerCentimeter = newNlCM; diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.cs index 77891b36b..dbda2320e 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.cs +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.cs @@ -131,6 +131,15 @@ namespace Tango.Touch.Controls public static readonly DependencyProperty UpdateBindingOnlyWhenFocusedProperty = DependencyProperty.Register("UpdateBindingOnlyWhenFocused", typeof(bool), typeof(TouchNumericTextBox), new PropertyMetadata(false)); + public Brush RippleBrush + { + get { return (Brush)GetValue(RippleBrushProperty); } + set { SetValue(RippleBrushProperty, value); } + } + public static readonly DependencyProperty RippleBrushProperty = + DependencyProperty.Register("RippleBrush", typeof(Brush), typeof(TouchNumericTextBox), new PropertyMetadata(new SolidColorBrush(Color.FromRgb(189,189,189)) { Opacity = 0.28 })); + + public virtual bool HasError { get diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.xaml index f26e53e73..ff4756160 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.xaml +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.xaml @@ -87,7 +87,8 @@ </Grid> <Grid> - <components:Ripple RippleBrush="{StaticResource TangoRippleDarkBrush}" RippleFactor="15"> + <components:Ripple RippleBrush="{TemplateBinding RippleBrush}" RippleFactor="15"> + <Grid> <TextBox FontSize="{TemplateBinding FontSize}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Foreground="{TemplateBinding Foreground}" Padding="0 0 0 4" CaretBrush="{StaticResource TangoPrimaryAccentBrush}" FocusVisualStyle="{x:Null}" x:Name="PART_TextBox" BorderThickness="0" Background="Transparent"> <TextBox.Style> diff --git a/Software/Visual_Studio/Tango.Touch/Styles/TouchToggleButton.xaml b/Software/Visual_Studio/Tango.Touch/Styles/TouchToggleButton.xaml index edf25c256..8f4134d02 100644 --- a/Software/Visual_Studio/Tango.Touch/Styles/TouchToggleButton.xaml +++ b/Software/Visual_Studio/Tango.Touch/Styles/TouchToggleButton.xaml @@ -4,6 +4,12 @@ xmlns:components="clr-namespace:Tango.Touch.Components" xmlns:local="clr-namespace:Tango.Touch.Styles"> + <ResourceDictionary.MergedDictionaries> + <ResourceDictionary Source="../Resources/Colors.xaml" /> + <ResourceDictionary Source="../Resources/Fonts.xaml" /> + <ResourceDictionary Source="../Controls/TouchToggleButton.xaml" /> + </ResourceDictionary.MergedDictionaries> + <Style x:Key="TangoTouchToggleButtonHamburger" TargetType="{x:Type controls:TouchToggleButton}"> <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}"/> <Setter Property="Background" Value="Transparent" /> @@ -193,4 +199,18 @@ </Setter.Value> </Setter> </Style> + + <Style x:Key="TangoTouchToggleButtonNoDisable" TargetType="{x:Type controls:TouchToggleButton}"> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="{x:Type controls:TouchToggleButton}"> + <Border x:Name="border" Style="{StaticResource DropShadowBorder}" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="{TemplateBinding CornerRadius}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true"> + <components:Ripple CornerRadius="{TemplateBinding CornerRadius}" RippleBrush="{TemplateBinding RippleBrush}"> + <ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </components:Ripple> + </Border> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> </ResourceDictionary>
\ No newline at end of file diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/FlowAnalyser.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/FlowAnalyser.cs index ed37daf43..b452decc7 100644 --- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/FlowAnalyser.cs +++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/FlowAnalyser.cs @@ -167,8 +167,15 @@ namespace Tango.DispenserAnalyzer.UI.Analyzers /// <param name="differenceMaxMin">The difference maximum minimum.</param> public void SetLocalErrors(List<int> differenceMaxMin, List<int> differenceMaxMinToLocationArr) { + List< int > deviationsRange = new List<int>(); + for (int n = 0; n < differenceMaxMinToLocationArr.Count && n < differenceMaxMin.Count; n++) + { + if(differenceMaxMinToLocationArr.ElementAt(n) >= (double)Settings.GetValueByName(AnalyzerSettingsEnum.DeviationAtRevolutionsMin) && differenceMaxMinToLocationArr.ElementAt(n) <= (double)Settings.GetValueByName(AnalyzerSettingsEnum.DeviationAtRevolutionsMax)) + deviationsRange.Add( differenceMaxMin.ElementAt(n)); + } // int count = differenceMaxMin.Where(x => x > 25 ).Count(); - int max_key = FindMaxErrorObject(differenceMaxMin); + int max_key = FindMaxErrorObject(differenceMaxMin, deviationsRange); + if (!BackgroundMode) { var points = RangeToCountChart.Points; @@ -213,14 +220,17 @@ namespace Tango.DispenserAnalyzer.UI.Analyzers /// <summary> /// Finds the maximum error object. Init LocalErrors message. Return max range value. /// </summary> - private int FindMaxErrorObject(List<int> range_values) + private int FindMaxErrorObject(List<int> range_values, List<int> deviationsRange) { var countValArr = range_values.GroupBy(x => x).Select(t => new { Key = t.Key, Value = t.Count() }).OrderBy(x=>x.Key).ToArray(); + var deviationsValArr = deviationsRange.GroupBy(x => x).Select(t => new { Key = t.Key, Value = t.Count() }).OrderBy(x => x.Key).ToArray(); double merror = (double)Settings.GetValueByName(AnalyzerSettingsEnum.TakeOffMaxMin);// BuildMeasurementError(range_values); double dividerMaxError = (double)Settings.GetValueByName(AnalyzerSettingsEnum.DividerMaxError);// BuildMeasurementError(range_values); double sum = 0; int max_key = 0; int range = 0; + int occurrence = 0; + for (int i = countValArr.Count() - 1; i >= 0; i--) { sum += countValArr[i].Value; @@ -230,14 +240,28 @@ namespace Tango.DispenserAnalyzer.UI.Analyzers { double persentageOfError = countValArr[i].Key / dividerMaxError * 100; range = countValArr[i].Key; - int occurrence = countValArr[i].Value; + occurrence = countValArr[i].Value; LocalErrors = $" {persentageOfError.ToString("F2")}% where max local error = {range.ToString()} and occurrence = {occurrence.ToString()}"; break; } } + var res = range / dividerMaxError * 100; - Result = res <= (double)Settings.GetValueByName(AnalyzerSettingsEnum.MaxError) ? AnalyzerResultValue.Passed : AnalyzerResultValue.Failed; + if(res <= (double)Settings.GetValueByName(AnalyzerSettingsEnum.MaxError)) + Result = AnalyzerResultValue.Passed; + else + { + Result = AnalyzerResultValue.Failed; + var entryindeviations = deviationsValArr.FirstOrDefault(x => x.Key == range); + if (entryindeviations != null) + { + int val = entryindeviations.Value; + if((occurrence - val) == 0) + Result = AnalyzerResultValue.Passed; + } + } + return max_key; } diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Models/SettingsModel.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Models/SettingsModel.cs index cb9614559..36ed964f0 100644 --- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Models/SettingsModel.cs +++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Models/SettingsModel.cs @@ -126,7 +126,7 @@ namespace Tango.DispenserAnalyzer.UI.Models [JsonProperty] public bool IsRangeVisible { get; set; } - + #endregion #region event and command @@ -156,6 +156,22 @@ namespace Tango.DispenserAnalyzer.UI.Models SetDefaultCommand = new RelayCommand(SetDefault); } + public BaseSettingModel(AnalyzerSettingsEnum enumNameMinValue, AnalyzerSettingsEnum enumNameMaxValue, string defaultValueDisplay) + { + _enumName = enumNameMinValue; + PropertyName = _enumName.ToDescription(); + DefaultValueDisplay = defaultValueDisplay; + DefaultValue = Settings.GetDefaultValueByName(enumNameMinValue); + PropertyValue = Settings.GetValueByName(enumNameMinValue); + IsRangeVisible = true; + + MinDefaultRangeValue = (double)(Settings.GetDefaultValueByName(enumNameMinValue)); + MaxDefaultRangeValue = (double)(Settings.GetDefaultValueByName(enumNameMaxValue)); + MinRangeValue = (double)(Settings.GetValueByName(enumNameMinValue)); + MaxRangeValue = (double)(Settings.GetValueByName(enumNameMaxValue)); + SetDefaultCommand = new RelayCommand(SetDefault); + } + private void SetDefault() { if (IsRangeVisible) diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Properties/app.manifest b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Properties/app.manifest new file mode 100644 index 000000000..60eec7703 --- /dev/null +++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Properties/app.manifest @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="utf-8"?> +<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> + <assemblyIdentity version="1.0.0.0" name="MyApplication.app" /> + <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> + <security> + <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> + <!-- UAC Manifest Options + If you want to change the Windows User Account Control level replace the + requestedExecutionLevel node with one of the following. + + <requestedExecutionLevel level="asInvoker" uiAccess="false" /> + <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> + <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> + + Specifying requestedExecutionLevel element will disable file and registry virtualization. + Remove this element if your application requires this virtualization for backwards + compatibility. + --> + <requestedExecutionLevel level="asInvoker" uiAccess="false" /> + </requestedPrivileges> + <applicationRequestMinimum> + <defaultAssemblyRequest permissionSetReference="Custom" /> + <PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" Unrestricted="true" /> + </applicationRequestMinimum> + </security> + </trustInfo> + <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <!-- A list of the Windows versions that this application has been tested on + and is designed to work with. Uncomment the appropriate elements + and Windows will automatically select the most compatible environment. --> + <!-- Windows Vista --> + <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />--> + <!-- Windows 7 --> + <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />--> + <!-- Windows 8 --> + <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />--> + <!-- Windows 8.1 --> + <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />--> + <!-- Windows 10 --> + <!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />--> + </application> + </compatibility> + <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher + DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need + to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should + also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. --> + <!-- + <application xmlns="urn:schemas-microsoft-com:asm.v3"> + <windowsSettings> + <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> + </windowsSettings> + </application> + --> + <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) --> + <!-- + <dependency> + <dependentAssembly> + <assemblyIdentity + type="win32" + name="Microsoft.Windows.Common-Controls" + version="6.0.0.0" + processorArchitecture="*" + publicKeyToken="6595b64144ccf1df" + language="*" + /> + </dependentAssembly> + </dependency> + --> +</assembly>
\ No newline at end of file diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Settings.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Settings.cs index 177756b0f..b370169c7 100644 --- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Settings.cs +++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Settings.cs @@ -43,6 +43,10 @@ namespace Tango.DispenserAnalyzer.UI CancelMovingAVG, [Description("Divider for calculation max error")] DividerMaxError, + [Description("Deviation range")] + DeviationAtRevolutionsMin, + [Description("Deviation range")] + DeviationAtRevolutionsMax, } @@ -61,7 +65,7 @@ namespace Tango.DispenserAnalyzer.UI DefaultValues[AnalyzerSettingsEnum.AvgMaxValue] = 1850.0; DefaultValues[AnalyzerSettingsEnum.MaxMinRange] = 450.0; DefaultValues[AnalyzerSettingsEnum.MaxMinIntervals] = 450.0; - DefaultValues[AnalyzerSettingsEnum.MaxError] = 1.5; + DefaultValues[AnalyzerSettingsEnum.MaxError] = 1.67; DefaultValues[AnalyzerSettingsEnum.TakeOffMaxMin] = 3.0; DefaultValues[AnalyzerSettingsEnum.TimeInterval] = 0.1; DefaultValues[AnalyzerSettingsEnum.StartCalculation] = 600.0; @@ -69,6 +73,9 @@ namespace Tango.DispenserAnalyzer.UI DefaultValues[AnalyzerSettingsEnum.MovingAvg] = 50.0; DefaultValues[AnalyzerSettingsEnum.CancelMovingAVG] = false; DefaultValues[AnalyzerSettingsEnum.DividerMaxError] = 1500.0; + DefaultValues[AnalyzerSettingsEnum.DeviationAtRevolutionsMin] = 200.0; + DefaultValues[AnalyzerSettingsEnum.DeviationAtRevolutionsMax] = 218.0; + CurrentValues = new Dictionary<AnalyzerSettingsEnum, object>(DefaultValues); diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Tango.DispenserAnalyzer.UI.csproj b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Tango.DispenserAnalyzer.UI.csproj index d0317431b..11eb3f263 100644 --- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Tango.DispenserAnalyzer.UI.csproj +++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Tango.DispenserAnalyzer.UI.csproj @@ -29,7 +29,7 @@ <ProductName>Dispenser Analyser</ProductName> <PublisherName>Twine</PublisherName> <OpenBrowserOnPublish>false</OpenBrowserOnPublish> - <ApplicationRevision>1</ApplicationRevision> + <ApplicationRevision>3</ApplicationRevision> <ApplicationVersion>5.1.1.%2a</ApplicationVersion> <UseApplicationTrust>true</UseApplicationTrust> <CreateDesktopShortcut>true</CreateDesktopShortcut> @@ -45,6 +45,7 @@ <DefineConstants>DEBUG;TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> + <Prefer32Bit>false</Prefer32Bit> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <PlatformTarget>AnyCPU</PlatformTarget> @@ -61,6 +62,12 @@ <PropertyGroup> <GenerateManifests>true</GenerateManifests> </PropertyGroup> + <PropertyGroup> + <TargetZone>LocalIntranet</TargetZone> + </PropertyGroup> + <PropertyGroup> + <ApplicationManifest>Properties\app.manifest</ApplicationManifest> + </PropertyGroup> <ItemGroup> <Reference Include="MahApps.Metro"> <HintPath>..\..\packages\MahApps.Metro.1.5.0\lib\net45\MahApps.Metro.dll</HintPath> @@ -201,6 +208,7 @@ </EmbeddedResource> <EmbeddedResource Include="Models\FlowRangeToTimeResults.xlsx" /> <None Include="packages.config" /> + <None Include="Properties\app.manifest" /> <None Include="Properties\Settings.settings"> <Generator>SettingsSingleFileGenerator</Generator> <LastGenOutput>Settings.Designer.cs</LastGenOutput> diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/SettingsVM.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/SettingsVM.cs index 74ec5db79..515b2df4e 100644 --- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/SettingsVM.cs +++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/SettingsVM.cs @@ -88,10 +88,11 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels list.Add(new BaseSettingModel(AnalyzerSettingsEnum.AvgMinValue, "1400-1850 [mbar]", true)); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.MaxMinRange, "450 reads")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.MaxMinIntervals, "450 reads")); - list.Add(new BaseSettingModel(AnalyzerSettingsEnum.MaxError, "1.5%")); + list.Add(new BaseSettingModel(AnalyzerSettingsEnum.MaxError, "1.67%")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.TakeOffMaxMin, "3")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.CancelMovingAVG, "False")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.DividerMaxError, "1500")); + list.Add(new BaseSettingModel(AnalyzerSettingsEnum.DeviationAtRevolutionsMin, AnalyzerSettingsEnum.DeviationAtRevolutionsMax, "200-218")); list.ForEach(x => x.SettingValueEvent += new EventHandler(OnSettingValueChanged)); model.AddSettings(list); Settings.Add(model); |
