diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2019-03-10 09:06:35 +0200 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2019-03-10 09:06:35 +0200 |
| commit | abc70316f80a9cb05b320828051bb7dcbfeaad1b (patch) | |
| tree | a334c1cc23b307710f6338523e5c20fb09017665 /Software/Visual_Studio | |
| parent | cbdd79778764ce38017790e1e1f9316e52ec8104 (diff) | |
| parent | 7256fe1c07cf5ecbe485c3cdac238b88dfc2cd1d (diff) | |
| download | Tango-abc70316f80a9cb05b320828051bb7dcbfeaad1b.tar.gz Tango-abc70316f80a9cb05b320828051bb7dcbfeaad1b.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Visual_Studio')
204 files changed, 4295 insertions, 665 deletions
diff --git a/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip b/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip index 3ee4d0f15..65e40810e 100644 --- a/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip +++ b/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip @@ -15,10 +15,10 @@ <ROW Property="ARPCOMMENTS" Value="This installer database contains the logic and data required to install [|ProductName]." ValueLocId="*"/> <ROW Property="ARPNOREPAIR" MultiBuildValue="DefaultBuild:1"/> <ROW Property="Manufacturer" Value="Twine"/> - <ROW Property="ProductCode" Value="1033:{BD2AD55C-0F0B-4869-A260-2836706DF4B9} " Type="16"/> + <ROW Property="ProductCode" Value="1033:{7A26027D-57C0-4625-AA72-09BF21C0B64C} " Type="16"/> <ROW Property="ProductLanguage" Value="1033"/> <ROW Property="ProductName" Value="Machine Studio"/> - <ROW Property="ProductVersion" Value="4.0.9.0" Type="32"/> + <ROW Property="ProductVersion" Value="4.0.10.0" Type="32"/> <ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/> <ROW Property="UpgradeCode" Value="{CBEE5CAE-7C5A-4280-98DE-AA98113764E4}"/> <ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/> @@ -52,6 +52,7 @@ <ROW Component="DocumentFormat.OpenXml.dll" ComponentId="{E7207B67-8A21-4397-AF76-C8A7A8B368AA}" Directory_="APPDIR" Attributes="0" KeyPath="DocumentFormat.OpenXml.dll"/> <ROW Component="Dragablz.dll" ComponentId="{188C249C-A7F8-4B9C-9942-16C642CC9C9A}" Directory_="APPDIR" Attributes="0" KeyPath="Dragablz.dll"/> <ROW Component="Dragablz.xml" ComponentId="{5279E3B5-D3D3-4751-AA31-081CABF51875}" Directory_="APPDIR" Attributes="0" KeyPath="Dragablz.xml" Type="0"/> + <ROW Component="EFCache.dll" ComponentId="{29ED2BD8-251F-4C61-A584-80CC474134B7}" Directory_="APPDIR" Attributes="0" KeyPath="EFCache.dll"/> <ROW Component="EntityFramework.SqlServer.dll" ComponentId="{16B3827A-B016-4497-BD35-A65E1CF1EFFA}" Directory_="APPDIR" Attributes="0" KeyPath="EntityFramework.SqlServer.dll"/> <ROW Component="EntityFramework.dll" ComponentId="{6FCC5C8B-22AB-4F2D-96AC-2043F5844804}" Directory_="APPDIR" Attributes="0" KeyPath="EntityFramework.dll"/> <ROW Component="FluentFTP.dll" ComponentId="{191CEF27-5A24-4C24-BD5E-352381BBFF39}" Directory_="APPDIR" Attributes="0" KeyPath="FluentFTP.dll"/> @@ -66,9 +67,17 @@ <ROW Component="MaterialDesignColors.dll" ComponentId="{C79117BD-06D7-4004-8BBA-7E4B22B14955}" Directory_="APPDIR" Attributes="0" KeyPath="MaterialDesignColors.dll"/> <ROW Component="MaterialDesignThemes.Wpf.dll" ComponentId="{D4A89F22-F969-46C3-915C-C565E7BE99D1}" Directory_="APPDIR" Attributes="0" KeyPath="MaterialDesignThemes.Wpf.dll"/> <ROW Component="Microsoft.Azure.ActiveDirectory.GraphClient.dll" ComponentId="{623FE6DD-F44D-4E99-8FD5-E54A608BE511}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Azure.ActiveDirectory.GraphClient.dll"/> + <ROW Component="Microsoft.Build.Tasks.CodeAnalysis.dll" ComponentId="{1F2ECD01-6D80-417A-A4D6-6562A95DD554}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.Build.Tasks.CodeAnalysis.dll"/> + <ROW Component="Microsoft.CodeAnalysis.CSharp.Scripting.dll" ComponentId="{D3943F00-719B-4B43-9256-4611471B4C19}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.CSharp.Scripting.dll"/> + <ROW Component="Microsoft.CodeAnalysis.CSharp.dll" ComponentId="{15BB1712-034B-4485-91B9-7DA61477AB81}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.CSharp.dll"/> + <ROW Component="Microsoft.CodeAnalysis.Scripting.dll" ComponentId="{8BFA780D-080F-4FFA-802E-4808854BE434}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.Scripting.dll"/> + <ROW Component="Microsoft.CodeAnalysis.VisualBasic.dll" ComponentId="{0B8BC5F8-D426-488F-8D2D-F980DAB4EDF4}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.VisualBasic.dll"/> + <ROW Component="Microsoft.CodeAnalysis.dll" ComponentId="{587609A7-B978-48B0-96C0-93160C987D75}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.dll"/> <ROW Component="Microsoft.Data.Edm.dll" ComponentId="{C51BFE30-2620-4FDC-B1A5-92877DD14E35}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Data.Edm.dll"/> <ROW Component="Microsoft.Data.OData.dll" ComponentId="{BA852990-2058-467A-9CE4-E5F98FA6D49B}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Data.OData.dll"/> <ROW Component="Microsoft.Data.Services.Client.dll" ComponentId="{21661AE8-E2A2-4DB9-8C8A-8AAC6C4DF836}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Data.Services.Client.dll"/> + <ROW Component="Microsoft.DiaSymReader.Native.amd64.dll" ComponentId="{D9422D42-B8D0-4778-8F3E-A992D08B4AD1}" Directory_="roslyn_Dir" Attributes="256" KeyPath="Microsoft.DiaSymReader.Native.amd64.dll"/> + <ROW Component="Microsoft.DiaSymReader.Native.x86.dll" ComponentId="{40251C10-75DF-4273-979A-4F136CFCBEA6}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.DiaSymReader.Native.x86.dll"/> <ROW Component="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" ComponentId="{58F3DA11-5A38-4749-A7C5-F7BDD2A403AE}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll"/> <ROW Component="Microsoft.IdentityModel.Clients.ActiveDirectory.dll" ComponentId="{C8FF51E6-B8BB-401D-BD03-58FD08E4C389}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.IdentityModel.Clients.ActiveDirectory.dll"/> <ROW Component="Microsoft.Practices.ServiceLocation.dll" ComponentId="{D617BF35-4B16-4F90-88CC-2712E0020822}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Practices.ServiceLocation.dll"/> @@ -98,13 +107,13 @@ <ROW Component="Microsoft.VisualStudio.Services.WebApi.dll" ComponentId="{6F62A0D7-D8EA-4002-8EF6-303226886DDC}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.VisualStudio.Services.WebApi.dll"/> <ROW Component="Microsoft.WITDataStore32.dll" ComponentId="{B6B3AA00-3249-4B76-AF49-B268E63EE4BA}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.WITDataStore32.dll"/> <ROW Component="Microsoft.Win32.Primitives.dll" ComponentId="{BF151A6C-FFF4-4A01-BC24-A9F7DD9A5FDF}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Win32.Primitives.dll"/> + <ROW Component="Microsoft.Win32.Primitives.dll_1" ComponentId="{89AF798E-13F4-4F31-A015-F62E674DAFCB}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.Win32.Primitives.dll_1"/> <ROW Component="Microsoft.WindowsAPICodePack.Shell.dll" ComponentId="{03A1DD34-8B39-4986-A152-2672EEFD6682}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.WindowsAPICodePack.Shell.dll"/> <ROW Component="Microsoft.WindowsAPICodePack.ShellExtensions.dll" ComponentId="{C57A464E-0221-415B-8647-8981BF3C7D44}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.WindowsAPICodePack.ShellExtensions.dll"/> <ROW Component="Microsoft.WindowsAPICodePack.dll" ComponentId="{C75FE6DA-119C-4490-AC08-17B8DC1DBB5F}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.WindowsAPICodePack.dll"/> <ROW Component="Microsoft.WindowsAzure.Storage.dll" ComponentId="{38DD34C7-3DE1-4F73-B1A0-433DA73627F0}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.WindowsAzure.Storage.dll"/> <ROW Component="Newtonsoft.Json.dll" ComponentId="{4900AB50-083B-4DDE-9584-6AD9E63BEE98}" Directory_="APPDIR" Attributes="0" KeyPath="Newtonsoft.Json.dll"/> <ROW Component="ProductInformation" ComponentId="{0E2AEDFB-F480-4EFC-9E30-3BF55F4003A6}" Directory_="APPDIR" Attributes="4" KeyPath="Version"/> - <ROW Component="ProtoCompilers" ComponentId="{61521A57-196C-46E7-AD59-709460D19D1F}" Directory_="ProtoCompilers_Dir" Attributes="0"/> <ROW Component="RazorEngine.dll" ComponentId="{548FE444-B574-42E5-8E6D-74F0BD9ACCA3}" Directory_="APPDIR" Attributes="0" KeyPath="RazorEngine.dll"/> <ROW Component="RealTimeGraphEx.dll" ComponentId="{0B0574AB-1CE2-4592-A6F1-FE6A8CCF3777}" Directory_="APPDIR" Attributes="0" KeyPath="RealTimeGraphEx.dll"/> <ROW Component="RealTimeGraphX.WPF.dll" ComponentId="{9A629F42-5E01-48A8-A690-DB13143EC7D6}" Directory_="APPDIR" Attributes="0" KeyPath="RealTimeGraphX.WPF.dll"/> @@ -114,7 +123,9 @@ <ROW Component="SQLite.Interop.dll_1" ComponentId="{9216F250-66DB-4ED9-8B45-FF9834267AF9}" Directory_="x86_Dir" Attributes="0" KeyPath="SQLite.Interop.dll_1"/> <ROW Component="SimpleValidator.dll" ComponentId="{81091AC7-AB7A-4043-8D23-F329BBCA40BD}" Directory_="APPDIR" Attributes="0" KeyPath="SimpleValidator.dll"/> <ROW Component="System.AppContext.dll" ComponentId="{358E356C-62BE-4F21-8647-16E76597A83B}" Directory_="APPDIR" Attributes="0" KeyPath="System.AppContext.dll"/> + <ROW Component="System.AppContext.dll_1" ComponentId="{B4A4E5A0-43DB-48CB-A213-FA52739A462F}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.AppContext.dll_1"/> <ROW Component="System.Collections.Concurrent.dll" ComponentId="{E0EB1925-1EA9-4E60-BDF7-FDAD9CDCCA54}" Directory_="APPDIR" Attributes="0" KeyPath="System.Collections.Concurrent.dll"/> + <ROW Component="System.Collections.Immutable.dll" ComponentId="{C33288D7-CA7F-4814-A394-233D0CE3316D}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Collections.Immutable.dll"/> <ROW Component="System.Collections.NonGeneric.dll" ComponentId="{011DA1E5-BA07-477C-8A6B-6F7F1C82CEC2}" Directory_="APPDIR" Attributes="0" KeyPath="System.Collections.NonGeneric.dll"/> <ROW Component="System.Collections.Specialized.dll" ComponentId="{26CC4B96-5E70-45BF-BA53-BEF10D2D2EC7}" Directory_="APPDIR" Attributes="0" KeyPath="System.Collections.Specialized.dll"/> <ROW Component="System.Collections.dll" ComponentId="{EB70E9A5-F888-4B4B-840C-E94098874BBC}" Directory_="APPDIR" Attributes="0" KeyPath="System.Collections.dll"/> @@ -123,6 +134,7 @@ <ROW Component="System.ComponentModel.TypeConverter.dll" ComponentId="{29481774-C7DE-404C-866B-00C152FD9F54}" Directory_="APPDIR" Attributes="0" KeyPath="System.ComponentModel.TypeConverter.dll"/> <ROW Component="System.ComponentModel.dll" ComponentId="{66A049C3-F933-41FB-B446-1B59D998A76D}" Directory_="APPDIR" Attributes="0" KeyPath="System.ComponentModel.dll"/> <ROW Component="System.Console.dll" ComponentId="{F70C16C5-D638-4396-94D7-60D61AD29043}" Directory_="APPDIR" Attributes="0" KeyPath="System.Console.dll"/> + <ROW Component="System.Console.dll_1" ComponentId="{11A85615-A8D0-4FFE-AC94-64FFF0171138}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Console.dll_1"/> <ROW Component="System.Data.Common.dll" ComponentId="{12CBF4E7-6852-4A9B-BEA3-68E4D59C74D0}" Directory_="APPDIR" Attributes="0" KeyPath="System.Data.Common.dll"/> <ROW Component="System.Data.SQLite.EF6.dll" ComponentId="{B1DD6B60-0E6F-4308-9748-0D65AC65819F}" Directory_="APPDIR" Attributes="0" KeyPath="System.Data.SQLite.EF6.dll"/> <ROW Component="System.Data.SQLite.Linq.dll" ComponentId="{27E9410A-F14D-44BE-8999-7CAAE6D1E65A}" Directory_="APPDIR" Attributes="0" KeyPath="System.Data.SQLite.Linq.dll"/> @@ -130,8 +142,11 @@ <ROW Component="System.Diagnostics.Contracts.dll" ComponentId="{F7F8A2C5-672E-4DDF-9B06-813BE46ABE9A}" Directory_="APPDIR" Attributes="0" KeyPath="System.Diagnostics.Contracts.dll"/> <ROW Component="System.Diagnostics.Debug.dll" ComponentId="{5398838C-738A-4FFD-9FC4-7A91BE89B332}" Directory_="APPDIR" Attributes="0" KeyPath="System.Diagnostics.Debug.dll"/> <ROW Component="System.Diagnostics.FileVersionInfo.dll" ComponentId="{F5D89192-D7C9-401A-AE25-B55DF0EAF352}" Directory_="APPDIR" Attributes="0" KeyPath="System.Diagnostics.FileVersionInfo.dll"/> + <ROW Component="System.Diagnostics.FileVersionInfo.dll_1" ComponentId="{6F974808-0CD2-47EE-86E8-F983C34662AA}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Diagnostics.FileVersionInfo.dll_1"/> <ROW Component="System.Diagnostics.Process.dll" ComponentId="{AD6B2C65-C00C-4CCE-9857-4525E5155685}" Directory_="APPDIR" Attributes="0" KeyPath="System.Diagnostics.Process.dll"/> + <ROW Component="System.Diagnostics.Process.dll_1" ComponentId="{E03D3372-F7C9-4C9F-A4B1-72E2BB9A1B6E}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Diagnostics.Process.dll_1"/> <ROW Component="System.Diagnostics.StackTrace.dll" ComponentId="{9D42C40E-BA14-446E-9F28-700F79F93CF1}" Directory_="APPDIR" Attributes="0" KeyPath="System.Diagnostics.StackTrace.dll"/> + <ROW Component="System.Diagnostics.StackTrace.dll_1" ComponentId="{26083D58-6EEA-4294-8203-2E77850C4158}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Diagnostics.StackTrace.dll_1"/> <ROW Component="System.Diagnostics.TextWriterTraceListener.dll" ComponentId="{8763EE73-B2CF-4675-BC65-61A5A2844030}" Directory_="APPDIR" Attributes="0" KeyPath="System.Diagnostics.TextWriterTraceListener.dll"/> <ROW Component="System.Diagnostics.Tools.dll" ComponentId="{5F0560B5-B294-4C8E-814D-AA2A7CD38CBE}" Directory_="APPDIR" Attributes="0" KeyPath="System.Diagnostics.Tools.dll"/> <ROW Component="System.Diagnostics.TraceSource.dll" ComponentId="{81026182-D1C0-40AD-B6DF-DA82096ADAAE}" Directory_="APPDIR" Attributes="0" KeyPath="System.Diagnostics.TraceSource.dll"/> @@ -143,13 +158,18 @@ <ROW Component="System.Globalization.dll" ComponentId="{7AF72BE3-61B7-4285-8471-EF35418DE3F7}" Directory_="APPDIR" Attributes="0" KeyPath="System.Globalization.dll"/> <ROW Component="System.IO.Compression.ZipFile.dll" ComponentId="{CF2092A8-AE50-4D12-860E-2F0BD0CE6A6A}" Directory_="APPDIR" Attributes="0" KeyPath="System.IO.Compression.ZipFile.dll"/> <ROW Component="System.IO.Compression.dll" ComponentId="{E35A2B0E-E9DD-4B5D-A7BE-D501A42C9DF4}" Directory_="APPDIR" Attributes="0" KeyPath="System.IO.Compression.dll"/> + <ROW Component="System.IO.Compression.dll_1" ComponentId="{554D26B8-ACAC-4B67-A8E2-5B058E20CA68}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.Compression.dll_1"/> <ROW Component="System.IO.FileSystem.DriveInfo.dll" ComponentId="{983AC4A9-31A9-4D80-98BA-ECFC143D5E7F}" Directory_="APPDIR" Attributes="0" KeyPath="System.IO.FileSystem.DriveInfo.dll"/> + <ROW Component="System.IO.FileSystem.DriveInfo.dll_1" ComponentId="{A94B7382-5B78-4C62-B6B9-E60BAF577736}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.FileSystem.DriveInfo.dll_1"/> <ROW Component="System.IO.FileSystem.Primitives.dll" ComponentId="{29A233E2-6200-43EE-87E9-7313437223EB}" Directory_="APPDIR" Attributes="0" KeyPath="System.IO.FileSystem.Primitives.dll"/> + <ROW Component="System.IO.FileSystem.Primitives.dll_1" ComponentId="{7AF643DF-46F4-478F-B0EC-0BD23D5B8BF8}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.FileSystem.Primitives.dll_1"/> <ROW Component="System.IO.FileSystem.Watcher.dll" ComponentId="{A84EDD4B-8636-492F-8114-EA248483C1E6}" Directory_="APPDIR" Attributes="0" KeyPath="System.IO.FileSystem.Watcher.dll"/> <ROW Component="System.IO.FileSystem.dll" ComponentId="{CEDBD51C-2D62-42FF-8C1D-84219B6029EF}" Directory_="APPDIR" Attributes="0" KeyPath="System.IO.FileSystem.dll"/> + <ROW Component="System.IO.FileSystem.dll_1" ComponentId="{A98E143E-76D0-4AEA-9F6E-7D0BAEC125D3}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.FileSystem.dll_1"/> <ROW Component="System.IO.IsolatedStorage.dll" ComponentId="{83D8FD3C-958D-47B6-849E-15CD940244E0}" Directory_="APPDIR" Attributes="0" KeyPath="System.IO.IsolatedStorage.dll"/> <ROW Component="System.IO.MemoryMappedFiles.dll" ComponentId="{C874420A-A38B-482E-8EC8-5D73CBB256E0}" Directory_="APPDIR" Attributes="0" KeyPath="System.IO.MemoryMappedFiles.dll"/> <ROW Component="System.IO.Pipes.dll" ComponentId="{AF452794-8BF8-4BAD-AA3B-B9DB59D723E3}" Directory_="APPDIR" Attributes="0" KeyPath="System.IO.Pipes.dll"/> + <ROW Component="System.IO.Pipes.dll_1" ComponentId="{607C2F73-1364-4916-B32D-2015E7908167}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.Pipes.dll_1"/> <ROW Component="System.IO.UnmanagedMemoryStream.dll" ComponentId="{514B14A8-9B28-4268-90BD-A39B895B0041}" Directory_="APPDIR" Attributes="0" KeyPath="System.IO.UnmanagedMemoryStream.dll"/> <ROW Component="System.IO.dll" ComponentId="{A5AA6EF0-C89E-4F78-A468-ACFD84069FCF}" Directory_="APPDIR" Attributes="0" KeyPath="System.IO.dll"/> <ROW Component="System.IdentityModel.Tokens.Jwt.dll" ComponentId="{179DD764-B3E6-4913-9930-8361701E3CDD}" Directory_="APPDIR" Attributes="0" KeyPath="System.IdentityModel.Tokens.Jwt.dll"/> @@ -176,6 +196,7 @@ <ROW Component="System.Reactive.PlatformServices.dll" ComponentId="{2DD8FDBF-C96F-4DC9-AA12-1F5A88FB9370}" Directory_="APPDIR" Attributes="0" KeyPath="System.Reactive.PlatformServices.dll"/> <ROW Component="System.Reactive.Windows.Threading.dll" ComponentId="{9C5BC859-0FE4-4C6C-B52A-0E3DB1043861}" Directory_="APPDIR" Attributes="0" KeyPath="System.Reactive.Windows.Threading.dll"/> <ROW Component="System.Reflection.Extensions.dll" ComponentId="{5FCB5312-1D48-4D99-8728-7628637BB4F2}" Directory_="APPDIR" Attributes="0" KeyPath="System.Reflection.Extensions.dll"/> + <ROW Component="System.Reflection.Metadata.dll" ComponentId="{16A1F814-FE67-4398-B57B-80ED65DE3838}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Reflection.Metadata.dll"/> <ROW Component="System.Reflection.Primitives.dll" ComponentId="{11C0857E-2BD7-4A36-B20B-F227826B99F0}" Directory_="APPDIR" Attributes="0" KeyPath="System.Reflection.Primitives.dll"/> <ROW Component="System.Reflection.dll" ComponentId="{4889F7EB-7BBE-4926-B487-65F9E50FD867}" Directory_="APPDIR" Attributes="0" KeyPath="System.Reflection.dll"/> <ROW Component="System.Resources.Reader.dll" ComponentId="{EBDB1797-7E2A-4C28-889D-DF29D154127A}" Directory_="APPDIR" Attributes="0" KeyPath="System.Resources.Reader.dll"/> @@ -192,15 +213,23 @@ <ROW Component="System.Runtime.Serialization.Primitives.dll" ComponentId="{05D7F62B-3EA2-4487-800F-2E3E26A17623}" Directory_="APPDIR" Attributes="0" KeyPath="System.Runtime.Serialization.Primitives.dll"/> <ROW Component="System.Runtime.Serialization.Xml.dll" ComponentId="{72603E1F-3B97-4A61-B3D4-864FF9865F6A}" Directory_="APPDIR" Attributes="0" KeyPath="System.Runtime.Serialization.Xml.dll"/> <ROW Component="System.Runtime.dll" ComponentId="{1A86F578-5323-432C-834E-6A1C7AB1CE76}" Directory_="APPDIR" Attributes="0" KeyPath="System.Runtime.dll"/> + <ROW Component="System.Security.AccessControl.dll" ComponentId="{BD7C3DA1-8542-4CFD-8597-7F8BE2F1ACDF}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.AccessControl.dll"/> <ROW Component="System.Security.Claims.dll" ComponentId="{A58BFEA5-776F-4F09-AD57-783855FBFD2C}" Directory_="APPDIR" Attributes="0" KeyPath="System.Security.Claims.dll"/> + <ROW Component="System.Security.Claims.dll_1" ComponentId="{6632DB51-65BB-4B64-BD39-353A41C7B061}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Claims.dll_1"/> <ROW Component="System.Security.Cryptography.Algorithms.dll" ComponentId="{5510E981-08E6-4C71-AB20-55EC75BD52D3}" Directory_="APPDIR" Attributes="0" KeyPath="System.Security.Cryptography.Algorithms.dll"/> + <ROW Component="System.Security.Cryptography.Algorithms.dll_1" ComponentId="{B42CF37C-0337-4A69-B1BC-78A4A6016932}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Cryptography.Algorithms.dll_1"/> <ROW Component="System.Security.Cryptography.Csp.dll" ComponentId="{3F6AAE9A-0126-43EF-894E-65A4931597F8}" Directory_="APPDIR" Attributes="0" KeyPath="System.Security.Cryptography.Csp.dll"/> <ROW Component="System.Security.Cryptography.Encoding.dll" ComponentId="{086BF834-ACD2-41FC-9C95-098F1C731B0B}" Directory_="APPDIR" Attributes="0" KeyPath="System.Security.Cryptography.Encoding.dll"/> + <ROW Component="System.Security.Cryptography.Encoding.dll_1" ComponentId="{E7BB4AF2-9C9C-4F12-8525-912BCD2A247A}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Cryptography.Encoding.dll_1"/> <ROW Component="System.Security.Cryptography.Primitives.dll" ComponentId="{AC2E9278-0D19-40A4-83B9-E97716BD255D}" Directory_="APPDIR" Attributes="0" KeyPath="System.Security.Cryptography.Primitives.dll"/> + <ROW Component="System.Security.Cryptography.Primitives.dll_1" ComponentId="{1373E00D-6612-4171-A4F8-DFDF06B1CFA0}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Cryptography.Primitives.dll_1"/> <ROW Component="System.Security.Cryptography.X509Certificates.dll" ComponentId="{00F4F6C1-6B4D-4DFD-BD59-72EE690FC246}" Directory_="APPDIR" Attributes="0" KeyPath="System.Security.Cryptography.X509Certificates.dll"/> + <ROW Component="System.Security.Cryptography.X509Certificates.dll_1" ComponentId="{F0AEACA7-7B3B-4406-916D-900D6D64D707}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Cryptography.X509Certificates.dll_1"/> + <ROW Component="System.Security.Principal.Windows.dll" ComponentId="{547E6AD9-C454-4605-AC25-4C8985105EB1}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Principal.Windows.dll"/> <ROW Component="System.Security.Principal.dll" ComponentId="{127424E0-24F8-456F-BBEC-F23E331E1669}" Directory_="APPDIR" Attributes="0" KeyPath="System.Security.Principal.dll"/> <ROW Component="System.Security.SecureString.dll" ComponentId="{C40FA779-F72E-4CF2-9A42-368ADB1D05E4}" Directory_="APPDIR" Attributes="0" KeyPath="System.Security.SecureString.dll"/> <ROW Component="System.Spatial.dll" ComponentId="{896285FC-52ED-459E-90C5-1B963F719973}" Directory_="APPDIR" Attributes="0" KeyPath="System.Spatial.dll"/> + <ROW Component="System.Text.Encoding.CodePages.dll" ComponentId="{DF130901-9A7E-4713-AE3F-D0C069790339}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Text.Encoding.CodePages.dll"/> <ROW Component="System.Text.Encoding.Extensions.dll" ComponentId="{C177E423-71AE-4FB7-BDC1-1FFF650EFEBC}" Directory_="APPDIR" Attributes="0" KeyPath="System.Text.Encoding.Extensions.dll"/> <ROW Component="System.Text.Encoding.dll" ComponentId="{903DBCE1-0C97-4F99-BF85-41B54EF26B33}" Directory_="APPDIR" Attributes="0" KeyPath="System.Text.Encoding.dll"/> <ROW Component="System.Text.RegularExpressions.dll" ComponentId="{BFF6B45B-522B-44D6-8421-EC4B091B3DB5}" Directory_="APPDIR" Attributes="0" KeyPath="System.Text.RegularExpressions.dll"/> @@ -208,19 +237,25 @@ <ROW Component="System.Threading.Tasks.Parallel.dll" ComponentId="{987E51AD-AF06-4D03-B691-7318BD6BDA34}" Directory_="APPDIR" Attributes="0" KeyPath="System.Threading.Tasks.Parallel.dll"/> <ROW Component="System.Threading.Tasks.dll" ComponentId="{B92EED7E-FE98-4A94-B157-F75D4E92EB85}" Directory_="APPDIR" Attributes="0" KeyPath="System.Threading.Tasks.dll"/> <ROW Component="System.Threading.Thread.dll" ComponentId="{4C4CAEB2-FB35-4937-BDCB-2FF8E541EB65}" Directory_="APPDIR" Attributes="0" KeyPath="System.Threading.Thread.dll"/> + <ROW Component="System.Threading.Thread.dll_1" ComponentId="{DCE0005B-8D40-4F25-9B6E-B955AA8CA415}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Threading.Thread.dll_1"/> <ROW Component="System.Threading.ThreadPool.dll" ComponentId="{4AD2E492-AA1B-4C56-98F6-AAF9AC9DD7F5}" Directory_="APPDIR" Attributes="0" KeyPath="System.Threading.ThreadPool.dll"/> <ROW Component="System.Threading.Timer.dll" ComponentId="{8DBA4386-A1D8-4D98-9A3E-FA449DAA031F}" Directory_="APPDIR" Attributes="0" KeyPath="System.Threading.Timer.dll"/> <ROW Component="System.Threading.dll" ComponentId="{08B42E48-C46A-402F-B07A-D944F647A72F}" Directory_="APPDIR" Attributes="0" KeyPath="System.Threading.dll"/> <ROW Component="System.ValueTuple.dll" ComponentId="{33243DAF-2CB1-4158-BD3E-646D178E6BE3}" Directory_="APPDIR" Attributes="0" KeyPath="System.ValueTuple.dll"/> + <ROW Component="System.ValueTuple.dll_1" ComponentId="{147DEBDE-0891-43AE-A662-F7B5628781CF}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.ValueTuple.dll_1"/> <ROW Component="System.Web.Http.WebHost.dll" ComponentId="{76AA8551-7C36-44F1-8076-7DC8C0159CB6}" Directory_="APPDIR" Attributes="0" KeyPath="System.Web.Http.WebHost.dll"/> <ROW Component="System.Web.Http.dll" ComponentId="{7F609038-B81D-44BC-821F-2A742860ECD5}" Directory_="APPDIR" Attributes="0" KeyPath="System.Web.Http.dll"/> <ROW Component="System.Web.Razor.dll" ComponentId="{99E17CE1-4A8D-4008-B311-56ED74C93B78}" Directory_="APPDIR" Attributes="0" KeyPath="System.Web.Razor.dll"/> <ROW Component="System.Windows.Interactivity.dll" ComponentId="{844D2D3C-AC50-418F-A9D4-8D928DBA49A7}" Directory_="APPDIR" Attributes="0" KeyPath="System.Windows.Interactivity.dll"/> <ROW Component="System.Xml.ReaderWriter.dll" ComponentId="{6DAC8C4A-BB06-465D-98B1-9D1015022B9C}" Directory_="APPDIR" Attributes="0" KeyPath="System.Xml.ReaderWriter.dll"/> + <ROW Component="System.Xml.ReaderWriter.dll_1" ComponentId="{3BE80138-FA76-4894-99D2-90CD391EDA4C}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Xml.ReaderWriter.dll_1"/> <ROW Component="System.Xml.XDocument.dll" ComponentId="{A37644F6-E28C-4F46-8A2F-FF8148DE4CEE}" Directory_="APPDIR" Attributes="0" KeyPath="System.Xml.XDocument.dll"/> <ROW Component="System.Xml.XPath.XDocument.dll" ComponentId="{4D676094-4D89-4619-A5C2-C6E26D44F46E}" Directory_="APPDIR" Attributes="0" KeyPath="System.Xml.XPath.XDocument.dll"/> + <ROW Component="System.Xml.XPath.XDocument.dll_1" ComponentId="{07E4D743-0499-450C-8638-40E1B94E889B}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Xml.XPath.XDocument.dll_1"/> <ROW Component="System.Xml.XPath.dll" ComponentId="{60E883E1-D85B-432F-BB51-F83BF3E79BFA}" Directory_="APPDIR" Attributes="0" KeyPath="System.Xml.XPath.dll"/> + <ROW Component="System.Xml.XPath.dll_1" ComponentId="{8D0BF8ED-D36C-47DF-BEA2-AD6C7875A7AE}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Xml.XPath.dll_1"/> <ROW Component="System.Xml.XmlDocument.dll" ComponentId="{A0706488-0521-4073-AB50-2345AC9C663D}" Directory_="APPDIR" Attributes="0" KeyPath="System.Xml.XmlDocument.dll"/> + <ROW Component="System.Xml.XmlDocument.dll_1" ComponentId="{6061AD9F-8663-41AA-8774-9F21717C454E}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Xml.XmlDocument.dll_1"/> <ROW Component="System.Xml.XmlSerializer.dll" ComponentId="{2DD41ED6-51F1-4B11-B7F8-923AD51C1271}" Directory_="APPDIR" Attributes="0" KeyPath="System.Xml.XmlSerializer.dll"/> <ROW Component="Tango.AdvancedInstaller.dll" ComponentId="{1B4CE66E-9A77-4A06-8BCC-8D39EC9F27A7}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.AdvancedInstaller.dll"/> <ROW Component="Tango.AutoComplete.dll" ComponentId="{A39273A4-F15E-4183-B998-065EC4B7F1AD}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.AutoComplete.dll"/> @@ -274,19 +309,26 @@ <ROW Component="Tango.Video.dll" ComponentId="{3CC4C095-51B4-44F0-ACB2-DEB38DCECDCD}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.Video.dll"/> <ROW Component="Tango.Visuals.dll" ComponentId="{B24E5163-6EF0-4986-B5B8-DE3BD27AA084}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.Visuals.dll"/> <ROW Component="Tango.Web.dll" ComponentId="{7544BD5E-0E9E-4E4E-8952-9FFF36EABC33}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.Web.dll"/> + <ROW Component="VBCSCompiler.exe" ComponentId="{48DD15EA-7C78-42C1-83B5-CCB067DEBD58}" Directory_="roslyn_Dir" Attributes="0" KeyPath="VBCSCompiler.exe"/> <ROW Component="WpfAnimatedGif.dll" ComponentId="{80C626E9-F30E-40A1-BA73-57BEF1637D4C}" Directory_="APPDIR" Attributes="0" KeyPath="WpfAnimatedGif.dll"/> <ROW Component="WriteableBitmapEx.Wpf.dll" ComponentId="{911CC544-61DA-491B-AC45-C703DB81A9A6}" Directory_="APPDIR" Attributes="0" KeyPath="WriteableBitmapEx.Wpf.dll"/> + <ROW Component="csc.exe" ComponentId="{CC805C47-3221-4ECA-906C-B7E4753CD54C}" Directory_="roslyn_Dir" Attributes="0" KeyPath="csc.exe"/> + <ROW Component="csc.exe.config" ComponentId="{7EB3CB0B-A192-4C94-B7A4-46DEABDD1A2A}" Directory_="roslyn_Dir" Attributes="0" KeyPath="csc.exe.config" Type="0"/> + <ROW Component="csi.exe" ComponentId="{D2BABF8B-31B9-492A-AB89-00DE28DEFEC1}" Directory_="roslyn_Dir" Attributes="0" KeyPath="csi.exe"/> <ROW Component="fpgen.exe" ComponentId="{054870F7-BFF5-4D98-B670-C7B0FCD68ECB}" Directory_="APPDIR" Attributes="0" KeyPath="fpgen.exe"/> <ROW Component="mscoree.dll" ComponentId="{9E4C7BED-600C-48A8-99FC-FC014A650910}" Directory_="APPDIR" Attributes="0" KeyPath="mscoree.dll"/> <ROW Component="msvcp140d.dll" ComponentId="{618F31BD-1B2E-450C-B1E1-3CC32FE07684}" Directory_="APPDIR" Attributes="0" KeyPath="msvcp140d.dll"/> <ROW Component="netstandard.dll" ComponentId="{27E9F013-8E50-4251-9C63-C53A5AA66DD1}" Directory_="APPDIR" Attributes="0" KeyPath="netstandard.dll"/> - <ROW Component="roslyn" ComponentId="{EC74ED88-C1EA-49A1-B334-D0412E7E8ED8}" Directory_="roslyn_Dir" Attributes="0"/> + <ROW Component="protoc.exe" ComponentId="{7CBC9DC7-A4CB-40BE-8541-FDC84DE4165C}" Directory_="ProtoCompilers_Dir" Attributes="0" KeyPath="protoc.exe"/> + <ROW Component="protoc1.0M4.jar" ComponentId="{B0FFB939-C6FA-4302-BBA3-327FFC861062}" Directory_="ProtoCompilers_Dir" Attributes="0" KeyPath="protoc1.0M4.jar" Type="0"/> + <ROW Component="protocc.exe" ComponentId="{AC4DBEA8-D3F0-4DB9-9625-9D4E54D0D61E}" Directory_="ProtoCompilers_Dir" Attributes="0" KeyPath="protocc.exe"/> <ROW Component="ucrtbased.dll" ComponentId="{DA7E4E6B-6A10-4C41-8B36-5BBAC6442CBF}" Directory_="APPDIR" Attributes="0" KeyPath="ucrtbased.dll"/> + <ROW Component="vbc.exe" ComponentId="{CA773160-191C-4B74-9BA8-FFD86B2A499B}" Directory_="roslyn_Dir" Attributes="0" KeyPath="vbc.exe"/> <ROW Component="vcruntime140.dll" ComponentId="{96045530-543D-487A-875A-F9A7EBDCFED0}" Directory_="APPDIR" Attributes="0" KeyPath="vcruntime140.dll"/> <ROW Component="vcruntime140d.dll" ComponentId="{23458443-868C-45A1-8E27-1DD772B8B95E}" Directory_="APPDIR" Attributes="0" KeyPath="vcruntime140d.dll"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent"> - <ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0" Components="AI_ExePath ColorMine.dll CommandLine.dll DeepEqual.dll DocumentFormat.OpenXml.dll Dragablz.dll Dragablz.xml EntityFramework.SqlServer.dll EntityFramework.dll FluentFTP.dll FontAwesome.WPF.dll Google.Protobuf.dll ICSharpCode.AvalonEdit.dll Ionic.Zip.dll JWT.dll LiveCharts.Wpf.dll_1 LiveCharts.dll_1 MahApps.Metro.dll MaterialDesignColors.dll MaterialDesignThemes.Wpf.dll Microsoft.Azure.ActiveDirectory.GraphClient.dll Microsoft.Data.Edm.dll Microsoft.Data.OData.dll Microsoft.Data.Services.Client.dll Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll Microsoft.IdentityModel.Clients.ActiveDirectory.dll Microsoft.Practices.ServiceLocation.dll Microsoft.ServiceBus.dll Microsoft.SqlServer.AzureStorageEnum.dll Microsoft.SqlServer.ConnectionInfo.dll Microsoft.SqlServer.Diagnostics.STrace.dll Microsoft.SqlServer.Dmf.Common.dll Microsoft.SqlServer.Management.Sdk.Sfc.dll Microsoft.SqlServer.ServiceBrokerEnum.dll Microsoft.SqlServer.Smo.dll Microsoft.SqlServer.SqlClrProvider.dll Microsoft.SqlServer.SqlEnum.dll Microsoft.TeamFoundation.Client.dll Microsoft.TeamFoundation.Common.dll Microsoft.TeamFoundation.Core.WebApi.dll Microsoft.TeamFoundation.Diff.dll Microsoft.TeamFoundation.Work.WebApi.dll Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll Microsoft.TeamFoundation.WorkItemTracking.Client.QueryLanguage.dll Microsoft.TeamFoundation.WorkItemTracking.Client.dll Microsoft.TeamFoundation.WorkItemTracking.Common.dll Microsoft.TeamFoundation.WorkItemTracking.Proxy.dll Microsoft.TeamFoundation.WorkItemTracking.WebApi.dll Microsoft.VisualStudio.Services.Client.Interactive.dll Microsoft.VisualStudio.Services.Common.dll Microsoft.VisualStudio.Services.WebApi.dll Microsoft.WITDataStore32.dll Microsoft.Win32.Primitives.dll Microsoft.WindowsAPICodePack.Shell.dll Microsoft.WindowsAPICodePack.ShellExtensions.dll Microsoft.WindowsAPICodePack.dll Microsoft.WindowsAzure.Storage.dll Newtonsoft.Json.dll ProductInformation ProtoCompilers RazorEngine.dll RealTimeGraphEx.dll RealTimeGraphX.WPF.dll RealTimeGraphX.dll SHORTCUTDIR SQLite.Interop.dll SQLite.Interop.dll_1 SimpleValidator.dll System.AppContext.dll System.Collections.Concurrent.dll System.Collections.NonGeneric.dll System.Collections.Specialized.dll System.Collections.dll System.ComponentModel.EventBasedAsync.dll System.ComponentModel.Primitives.dll System.ComponentModel.TypeConverter.dll System.ComponentModel.dll System.Console.dll System.Data.Common.dll System.Data.SQLite.EF6.dll System.Data.SQLite.Linq.dll System.Data.SQLite.dll System.Diagnostics.Contracts.dll System.Diagnostics.Debug.dll System.Diagnostics.FileVersionInfo.dll System.Diagnostics.Process.dll System.Diagnostics.StackTrace.dll System.Diagnostics.TextWriterTraceListener.dll System.Diagnostics.Tools.dll System.Diagnostics.TraceSource.dll System.Diagnostics.Tracing.dll System.Drawing.Primitives.dll System.Dynamic.Runtime.dll System.Globalization.Calendars.dll System.Globalization.Extensions.dll System.Globalization.dll System.IO.Compression.ZipFile.dll System.IO.Compression.dll System.IO.FileSystem.DriveInfo.dll System.IO.FileSystem.Primitives.dll System.IO.FileSystem.Watcher.dll System.IO.FileSystem.dll System.IO.IsolatedStorage.dll System.IO.MemoryMappedFiles.dll System.IO.Pipes.dll System.IO.UnmanagedMemoryStream.dll System.IO.dll System.IdentityModel.Tokens.Jwt.dll System.Linq.Expressions.dll System.Linq.Parallel.dll System.Linq.Queryable.dll System.Linq.dll System.Net.Http.Formatting.dll System.Net.Http.dll System.Net.NameResolution.dll System.Net.NetworkInformation.dll System.Net.Ping.dll System.Net.Primitives.dll System.Net.Requests.dll System.Net.Security.dll System.Net.Sockets.dll System.Net.WebHeaderCollection.dll System.Net.WebSockets.Client.dll System.Net.WebSockets.dll System.ObjectModel.dll System.Reactive.Core.dll System.Reactive.Interfaces.dll System.Reactive.Linq.dll System.Reactive.PlatformServices.dll System.Reactive.Windows.Threading.dll System.Reflection.Extensions.dll System.Reflection.Primitives.dll System.Reflection.dll System.Resources.Reader.dll System.Resources.ResourceManager.dll System.Resources.Writer.dll System.Runtime.CompilerServices.VisualC.dll System.Runtime.Extensions.dll System.Runtime.Handles.dll System.Runtime.InteropServices.RuntimeInformation.dll System.Runtime.InteropServices.dll System.Runtime.Numerics.dll System.Runtime.Serialization.Formatters.dll System.Runtime.Serialization.Json.dll System.Runtime.Serialization.Primitives.dll System.Runtime.Serialization.Xml.dll System.Runtime.dll System.Security.Claims.dll System.Security.Cryptography.Algorithms.dll System.Security.Cryptography.Csp.dll System.Security.Cryptography.Encoding.dll System.Security.Cryptography.Primitives.dll System.Security.Cryptography.X509Certificates.dll System.Security.Principal.dll System.Security.SecureString.dll System.Spatial.dll System.Text.Encoding.Extensions.dll System.Text.Encoding.dll System.Text.RegularExpressions.dll System.Threading.Overlapped.dll System.Threading.Tasks.Parallel.dll System.Threading.Tasks.dll System.Threading.Thread.dll System.Threading.ThreadPool.dll System.Threading.Timer.dll System.Threading.dll System.ValueTuple.dll System.Web.Http.WebHost.dll System.Web.Http.dll System.Web.Razor.dll System.Windows.Interactivity.dll System.Xml.ReaderWriter.dll System.Xml.XDocument.dll System.Xml.XPath.XDocument.dll System.Xml.XPath.dll System.Xml.XmlDocument.dll System.Xml.XmlSerializer.dll Tango.AdvancedInstaller.dll Tango.AutoComplete.dll Tango.BL.dll Tango.BrushPicker.dll Tango.CSV.dll Tango.CircularGauge.dll Tango.CodeGeneration.dll Tango.ColorLib.dll Tango.ColorPicker.dll Tango.Core.dll Tango.DAL.Local.dll Tango.DAL.Remote.dll Tango.Documents.dll Tango.DragAndDrop.dll Tango.Editors.dll Tango.Embroidery.dll Tango.EmbroideryUI.dll Tango.Emulations.dll Tango.FirmwareUpdateLib.WPF.dll Tango.FirmwareUpdateLib.dll Tango.Hive.dll Tango.Integration.dll Tango.Logging.dll Tango.MachineStudio.ColorLab.dll Tango.MachineStudio.Common.dll Tango.MachineStudio.DB.dll Tango.MachineStudio.DataCapture.dll Tango.MachineStudio.Developer.dll Tango.MachineStudio.Dispensers.dll Tango.MachineStudio.HardwareDesigner.dll Tango.MachineStudio.Logging.dll Tango.MachineStudio.MachineDesigner.dll Tango.MachineStudio.RML.dll Tango.MachineStudio.Statistics.dll_1 Tango.MachineStudio.Storage.dll Tango.MachineStudio.Stubs.dll Tango.MachineStudio.Technician.dll Tango.MachineStudio.UI.exe Tango.MachineStudio.Updater.exe Tango.MachineStudio.UsersAndRoles.dll Tango.PMR.dll Tango.Scripting.dll Tango.Serialization.dll Tango.Settings.dll Tango.SharedUI.dll Tango.Stubs.dll Tango.Synchronization.dll Tango.TFS.dll Tango.Transport.dll Tango.Video.dll Tango.Visuals.dll Tango.Web.dll WpfAnimatedGif.dll WriteableBitmapEx.Wpf.dll fpgen.exe mscoree.dll msvcp140d.dll netstandard.dll roslyn ucrtbased.dll vcruntime140.dll vcruntime140d.dll"/> + <ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0" Components="AI_ExePath ColorMine.dll CommandLine.dll DeepEqual.dll DocumentFormat.OpenXml.dll Dragablz.dll Dragablz.xml EFCache.dll EntityFramework.SqlServer.dll EntityFramework.dll FluentFTP.dll FontAwesome.WPF.dll Google.Protobuf.dll ICSharpCode.AvalonEdit.dll Ionic.Zip.dll JWT.dll LiveCharts.Wpf.dll_1 LiveCharts.dll_1 MahApps.Metro.dll MaterialDesignColors.dll MaterialDesignThemes.Wpf.dll Microsoft.Azure.ActiveDirectory.GraphClient.dll Microsoft.Build.Tasks.CodeAnalysis.dll Microsoft.CodeAnalysis.CSharp.Scripting.dll Microsoft.CodeAnalysis.CSharp.dll Microsoft.CodeAnalysis.Scripting.dll Microsoft.CodeAnalysis.VisualBasic.dll Microsoft.CodeAnalysis.dll Microsoft.Data.Edm.dll Microsoft.Data.OData.dll Microsoft.Data.Services.Client.dll Microsoft.DiaSymReader.Native.amd64.dll Microsoft.DiaSymReader.Native.x86.dll Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll Microsoft.IdentityModel.Clients.ActiveDirectory.dll Microsoft.Practices.ServiceLocation.dll Microsoft.ServiceBus.dll Microsoft.SqlServer.AzureStorageEnum.dll Microsoft.SqlServer.ConnectionInfo.dll Microsoft.SqlServer.Diagnostics.STrace.dll Microsoft.SqlServer.Dmf.Common.dll Microsoft.SqlServer.Management.Sdk.Sfc.dll Microsoft.SqlServer.ServiceBrokerEnum.dll Microsoft.SqlServer.Smo.dll Microsoft.SqlServer.SqlClrProvider.dll Microsoft.SqlServer.SqlEnum.dll Microsoft.TeamFoundation.Client.dll Microsoft.TeamFoundation.Common.dll Microsoft.TeamFoundation.Core.WebApi.dll Microsoft.TeamFoundation.Diff.dll Microsoft.TeamFoundation.Work.WebApi.dll Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll Microsoft.TeamFoundation.WorkItemTracking.Client.QueryLanguage.dll Microsoft.TeamFoundation.WorkItemTracking.Client.dll Microsoft.TeamFoundation.WorkItemTracking.Common.dll Microsoft.TeamFoundation.WorkItemTracking.Proxy.dll Microsoft.TeamFoundation.WorkItemTracking.WebApi.dll Microsoft.VisualStudio.Services.Client.Interactive.dll Microsoft.VisualStudio.Services.Common.dll Microsoft.VisualStudio.Services.WebApi.dll Microsoft.WITDataStore32.dll Microsoft.Win32.Primitives.dll Microsoft.Win32.Primitives.dll_1 Microsoft.WindowsAPICodePack.Shell.dll Microsoft.WindowsAPICodePack.ShellExtensions.dll Microsoft.WindowsAPICodePack.dll Microsoft.WindowsAzure.Storage.dll Newtonsoft.Json.dll ProductInformation RazorEngine.dll RealTimeGraphEx.dll RealTimeGraphX.WPF.dll RealTimeGraphX.dll SHORTCUTDIR SQLite.Interop.dll SQLite.Interop.dll_1 SimpleValidator.dll System.AppContext.dll System.AppContext.dll_1 System.Collections.Concurrent.dll System.Collections.Immutable.dll System.Collections.NonGeneric.dll System.Collections.Specialized.dll System.Collections.dll System.ComponentModel.EventBasedAsync.dll System.ComponentModel.Primitives.dll System.ComponentModel.TypeConverter.dll System.ComponentModel.dll System.Console.dll System.Console.dll_1 System.Data.Common.dll System.Data.SQLite.EF6.dll System.Data.SQLite.Linq.dll System.Data.SQLite.dll System.Diagnostics.Contracts.dll System.Diagnostics.Debug.dll System.Diagnostics.FileVersionInfo.dll System.Diagnostics.FileVersionInfo.dll_1 System.Diagnostics.Process.dll System.Diagnostics.Process.dll_1 System.Diagnostics.StackTrace.dll System.Diagnostics.StackTrace.dll_1 System.Diagnostics.TextWriterTraceListener.dll System.Diagnostics.Tools.dll System.Diagnostics.TraceSource.dll System.Diagnostics.Tracing.dll System.Drawing.Primitives.dll System.Dynamic.Runtime.dll System.Globalization.Calendars.dll System.Globalization.Extensions.dll System.Globalization.dll System.IO.Compression.ZipFile.dll System.IO.Compression.dll System.IO.Compression.dll_1 System.IO.FileSystem.DriveInfo.dll System.IO.FileSystem.DriveInfo.dll_1 System.IO.FileSystem.Primitives.dll System.IO.FileSystem.Primitives.dll_1 System.IO.FileSystem.Watcher.dll System.IO.FileSystem.dll System.IO.FileSystem.dll_1 System.IO.IsolatedStorage.dll System.IO.MemoryMappedFiles.dll System.IO.Pipes.dll System.IO.Pipes.dll_1 System.IO.UnmanagedMemoryStream.dll System.IO.dll System.IdentityModel.Tokens.Jwt.dll System.Linq.Expressions.dll System.Linq.Parallel.dll System.Linq.Queryable.dll System.Linq.dll System.Net.Http.Formatting.dll System.Net.Http.dll System.Net.NameResolution.dll System.Net.NetworkInformation.dll System.Net.Ping.dll System.Net.Primitives.dll System.Net.Requests.dll System.Net.Security.dll System.Net.Sockets.dll System.Net.WebHeaderCollection.dll System.Net.WebSockets.Client.dll System.Net.WebSockets.dll System.ObjectModel.dll System.Reactive.Core.dll System.Reactive.Interfaces.dll System.Reactive.Linq.dll System.Reactive.PlatformServices.dll System.Reactive.Windows.Threading.dll System.Reflection.Extensions.dll System.Reflection.Metadata.dll System.Reflection.Primitives.dll System.Reflection.dll System.Resources.Reader.dll System.Resources.ResourceManager.dll System.Resources.Writer.dll System.Runtime.CompilerServices.VisualC.dll System.Runtime.Extensions.dll System.Runtime.Handles.dll System.Runtime.InteropServices.RuntimeInformation.dll System.Runtime.InteropServices.dll System.Runtime.Numerics.dll System.Runtime.Serialization.Formatters.dll System.Runtime.Serialization.Json.dll System.Runtime.Serialization.Primitives.dll System.Runtime.Serialization.Xml.dll System.Runtime.dll System.Security.AccessControl.dll System.Security.Claims.dll System.Security.Claims.dll_1 System.Security.Cryptography.Algorithms.dll System.Security.Cryptography.Algorithms.dll_1 System.Security.Cryptography.Csp.dll System.Security.Cryptography.Encoding.dll System.Security.Cryptography.Encoding.dll_1 System.Security.Cryptography.Primitives.dll System.Security.Cryptography.Primitives.dll_1 System.Security.Cryptography.X509Certificates.dll System.Security.Cryptography.X509Certificates.dll_1 System.Security.Principal.Windows.dll System.Security.Principal.dll System.Security.SecureString.dll System.Spatial.dll System.Text.Encoding.CodePages.dll System.Text.Encoding.Extensions.dll System.Text.Encoding.dll System.Text.RegularExpressions.dll System.Threading.Overlapped.dll System.Threading.Tasks.Parallel.dll System.Threading.Tasks.dll System.Threading.Thread.dll System.Threading.Thread.dll_1 System.Threading.ThreadPool.dll System.Threading.Timer.dll System.Threading.dll System.ValueTuple.dll System.ValueTuple.dll_1 System.Web.Http.WebHost.dll System.Web.Http.dll System.Web.Razor.dll System.Windows.Interactivity.dll System.Xml.ReaderWriter.dll System.Xml.ReaderWriter.dll_1 System.Xml.XDocument.dll System.Xml.XPath.XDocument.dll System.Xml.XPath.XDocument.dll_1 System.Xml.XPath.dll System.Xml.XPath.dll_1 System.Xml.XmlDocument.dll System.Xml.XmlDocument.dll_1 System.Xml.XmlSerializer.dll Tango.AdvancedInstaller.dll Tango.AutoComplete.dll Tango.BL.dll Tango.BrushPicker.dll Tango.CSV.dll Tango.CircularGauge.dll Tango.CodeGeneration.dll Tango.ColorLib.dll Tango.ColorPicker.dll Tango.Core.dll Tango.DAL.Local.dll Tango.DAL.Remote.dll Tango.Documents.dll Tango.DragAndDrop.dll Tango.Editors.dll Tango.Embroidery.dll Tango.EmbroideryUI.dll Tango.Emulations.dll Tango.FirmwareUpdateLib.WPF.dll Tango.FirmwareUpdateLib.dll Tango.Hive.dll Tango.Integration.dll Tango.Logging.dll Tango.MachineStudio.ColorLab.dll Tango.MachineStudio.Common.dll Tango.MachineStudio.DB.dll Tango.MachineStudio.DataCapture.dll Tango.MachineStudio.Developer.dll Tango.MachineStudio.Dispensers.dll Tango.MachineStudio.HardwareDesigner.dll Tango.MachineStudio.Logging.dll Tango.MachineStudio.MachineDesigner.dll Tango.MachineStudio.RML.dll Tango.MachineStudio.Statistics.dll_1 Tango.MachineStudio.Storage.dll Tango.MachineStudio.Stubs.dll Tango.MachineStudio.Technician.dll Tango.MachineStudio.UI.exe Tango.MachineStudio.Updater.exe Tango.MachineStudio.UsersAndRoles.dll Tango.PMR.dll Tango.Scripting.dll Tango.Serialization.dll Tango.Settings.dll Tango.SharedUI.dll Tango.Stubs.dll Tango.Synchronization.dll Tango.TFS.dll Tango.Transport.dll Tango.Video.dll Tango.Visuals.dll Tango.Web.dll VBCSCompiler.exe WpfAnimatedGif.dll WriteableBitmapEx.Wpf.dll csc.exe csc.exe.config csi.exe fpgen.exe mscoree.dll msvcp140d.dll netstandard.dll protoc.exe protoc1.0M4.jar protocc.exe ucrtbased.dll vbc.exe vcruntime140.dll vcruntime140d.dll"/> <ATTRIBUTE name="CurrentFeature" value="MainFeature"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.MsiFilesComponent"> @@ -300,6 +342,7 @@ <ROW File="Dragablz.dll" Component_="Dragablz.dll" FileName="Dragablz.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Dragablz.dll" SelfReg="false" NextFile="Dragablz.pdb"/> <ROW File="Dragablz.pdb" Component_="Dragablz.dll" FileName="Dragablz.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Dragablz.pdb" SelfReg="false" NextFile="Dragablz.xml"/> <ROW File="Dragablz.xml" Component_="Dragablz.xml" FileName="Dragablz.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Dragablz.xml" SelfReg="false" NextFile="EntityFramework.dll"/> + <ROW File="EFCache.dll" Component_="EFCache.dll" FileName="EFCache.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\EFCache.dll" SelfReg="false" NextFile="protoc1.0M4.jar"/> <ROW File="EntityFramework.SqlServer.dll" Component_="EntityFramework.SqlServer.dll" FileName="ENTITY~2.DLL|EntityFramework.SqlServer.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\EntityFramework.SqlServer.dll" SelfReg="false" NextFile="EntityFramework.SqlServer.xml"/> <ROW File="EntityFramework.SqlServer.xml" Component_="Dragablz.xml" FileName="ENTITY~1.XML|EntityFramework.SqlServer.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\EntityFramework.SqlServer.xml" SelfReg="false" NextFile="EntityFramework.xml"/> <ROW File="EntityFramework.dll" Component_="EntityFramework.dll" FileName="ENTITY~1.DLL|EntityFramework.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\EntityFramework.dll" SelfReg="false" NextFile="EntityFramework.SqlServer.dll"/> @@ -329,12 +372,21 @@ <ROW File="MaterialDesignThemes.Wpf.pdb" Component_="MaterialDesignThemes.Wpf.dll" FileName="MATERI~1.PDB|MaterialDesignThemes.Wpf.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\MaterialDesignThemes.Wpf.pdb" SelfReg="false" NextFile="MaterialDesignThemes.Wpf.xml"/> <ROW File="MaterialDesignThemes.Wpf.xml" Component_="Dragablz.xml" FileName="MATERI~1.XML|MaterialDesignThemes.Wpf.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\MaterialDesignThemes.Wpf.xml" SelfReg="false" NextFile="Microsoft.IdentityModel.Clients.ActiveDirectory.dll"/> <ROW File="Microsoft.Azure.ActiveDirectory.GraphClient.dll" Component_="Microsoft.Azure.ActiveDirectory.GraphClient.dll" FileName="MICRO~23.DLL|Microsoft.Azure.ActiveDirectory.GraphClient.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.Azure.ActiveDirectory.GraphClient.dll" SelfReg="false" NextFile="Microsoft.Data.Edm.dll"/> + <ROW File="Microsoft.Build.Tasks.CodeAnalysis.dll" Component_="Microsoft.Build.Tasks.CodeAnalysis.dll" FileName="MICROS~1.DLL|Microsoft.Build.Tasks.CodeAnalysis.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\Microsoft.Build.Tasks.CodeAnalysis.dll" SelfReg="false" NextFile="Microsoft.CodeAnalysis.CSharp.dll"/> + <ROW File="Microsoft.CSharp.Core.targets" Component_="csc.exe.config" FileName="MICROS~1.TAR|Microsoft.CSharp.Core.targets" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\Microsoft.CSharp.Core.targets" SelfReg="false" NextFile="Microsoft.DiaSymReader.Native.amd64.dll"/> + <ROW File="Microsoft.CodeAnalysis.CSharp.Scripting.dll" Component_="Microsoft.CodeAnalysis.CSharp.Scripting.dll" FileName="MICROS~3.DLL|Microsoft.CodeAnalysis.CSharp.Scripting.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\Microsoft.CodeAnalysis.CSharp.Scripting.dll" SelfReg="false" NextFile="Microsoft.CodeAnalysis.dll"/> + <ROW File="Microsoft.CodeAnalysis.CSharp.dll" Component_="Microsoft.CodeAnalysis.CSharp.dll" FileName="MICROS~2.DLL|Microsoft.CodeAnalysis.CSharp.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\Microsoft.CodeAnalysis.CSharp.dll" SelfReg="false" NextFile="Microsoft.CodeAnalysis.CSharp.Scripting.dll"/> + <ROW File="Microsoft.CodeAnalysis.Scripting.dll" Component_="Microsoft.CodeAnalysis.Scripting.dll" FileName="MICROS~5.DLL|Microsoft.CodeAnalysis.Scripting.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\Microsoft.CodeAnalysis.Scripting.dll" SelfReg="false" NextFile="Microsoft.CodeAnalysis.VisualBasic.dll"/> + <ROW File="Microsoft.CodeAnalysis.VisualBasic.dll" Component_="Microsoft.CodeAnalysis.VisualBasic.dll" FileName="MICROS~6.DLL|Microsoft.CodeAnalysis.VisualBasic.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\Microsoft.CodeAnalysis.VisualBasic.dll" SelfReg="false" NextFile="Microsoft.CSharp.Core.targets"/> + <ROW File="Microsoft.CodeAnalysis.dll" Component_="Microsoft.CodeAnalysis.dll" FileName="MICROS~4.DLL|Microsoft.CodeAnalysis.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\Microsoft.CodeAnalysis.dll" SelfReg="false" NextFile="Microsoft.CodeAnalysis.Scripting.dll"/> <ROW File="Microsoft.Data.Edm.dll" Component_="Microsoft.Data.Edm.dll" FileName="MICRO~24.DLL|Microsoft.Data.Edm.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.Data.Edm.dll" SelfReg="false" NextFile="Microsoft.Data.Edm.xml"/> <ROW File="Microsoft.Data.Edm.xml" Component_="Dragablz.xml" FileName="MICRO~21.XML|Microsoft.Data.Edm.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.Data.Edm.xml" SelfReg="false" NextFile="Microsoft.Data.OData.dll"/> <ROW File="Microsoft.Data.OData.dll" Component_="Microsoft.Data.OData.dll" FileName="MICRO~25.DLL|Microsoft.Data.OData.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.Data.OData.dll" SelfReg="false" NextFile="Microsoft.Data.OData.xml"/> <ROW File="Microsoft.Data.OData.xml" Component_="Dragablz.xml" FileName="MICRO~22.XML|Microsoft.Data.OData.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.Data.OData.xml" SelfReg="false" NextFile="Microsoft.Data.Services.Client.dll"/> <ROW File="Microsoft.Data.Services.Client.dll" Component_="Microsoft.Data.Services.Client.dll" FileName="MICRO~26.DLL|Microsoft.Data.Services.Client.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.Data.Services.Client.dll" SelfReg="false" NextFile="Microsoft.Data.Services.Client.xml"/> <ROW File="Microsoft.Data.Services.Client.xml" Component_="Dragablz.xml" FileName="MICRO~23.XML|Microsoft.Data.Services.Client.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.Data.Services.Client.xml" SelfReg="false" NextFile="Microsoft.Practices.ServiceLocation.dll"/> + <ROW File="Microsoft.DiaSymReader.Native.amd64.dll" Component_="Microsoft.DiaSymReader.Native.amd64.dll" FileName="MICROS~7.DLL|Microsoft.DiaSymReader.Native.amd64.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\Microsoft.DiaSymReader.Native.amd64.dll" SelfReg="false" NextFile="Microsoft.DiaSymReader.Native.x86.dll"/> + <ROW File="Microsoft.DiaSymReader.Native.x86.dll" Component_="Microsoft.DiaSymReader.Native.x86.dll" FileName="MICROS~8.DLL|Microsoft.DiaSymReader.Native.x86.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\Microsoft.DiaSymReader.Native.x86.dll" SelfReg="false" NextFile="Microsoft.VisualBasic.Core.targets"/> <ROW File="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" Component_="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" FileName="MICROS~2.DLL|Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" SelfReg="false" NextFile="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.xml"/> <ROW File="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.xml" Component_="Dragablz.xml" FileName="MICROS~1.XML|Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.xml" SelfReg="false" NextFile="Microsoft.IdentityModel.Clients.ActiveDirectory.xml"/> <ROW File="Microsoft.IdentityModel.Clients.ActiveDirectory.dll" Component_="Microsoft.IdentityModel.Clients.ActiveDirectory.dll" FileName="MICROS~1.DLL|Microsoft.IdentityModel.Clients.ActiveDirectory.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.IdentityModel.Clients.ActiveDirectory.dll" SelfReg="false" NextFile="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll"/> @@ -381,6 +433,7 @@ <ROW File="Microsoft.TeamFoundation.WorkItemTracking.Proxy.xml" Component_="Dragablz.xml" FileName="MICRO~13.XML|Microsoft.TeamFoundation.WorkItemTracking.Proxy.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.TeamFoundation.WorkItemTracking.Proxy.xml" SelfReg="false" NextFile="Microsoft.TeamFoundation.WorkItemTracking.WebApi.dll"/> <ROW File="Microsoft.TeamFoundation.WorkItemTracking.WebApi.dll" Component_="Microsoft.TeamFoundation.WorkItemTracking.WebApi.dll" FileName="MICRO~14.DLL|Microsoft.TeamFoundation.WorkItemTracking.WebApi.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.TeamFoundation.WorkItemTracking.WebApi.dll" SelfReg="false" NextFile="Microsoft.TeamFoundation.WorkItemTracking.WebApi.xml"/> <ROW File="Microsoft.TeamFoundation.WorkItemTracking.WebApi.xml" Component_="Dragablz.xml" FileName="MICRO~14.XML|Microsoft.TeamFoundation.WorkItemTracking.WebApi.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.TeamFoundation.WorkItemTracking.WebApi.xml" SelfReg="false" NextFile="Microsoft.VisualStudio.Services.Client.Interactive.dll"/> + <ROW File="Microsoft.VisualBasic.Core.targets" Component_="csc.exe.config" FileName="MICROS~2.TAR|Microsoft.VisualBasic.Core.targets" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\Microsoft.VisualBasic.Core.targets" SelfReg="false" NextFile="Microsoft.Win32.Primitives.dll_1"/> <ROW File="Microsoft.VisualStudio.Services.Client.Interactive.dll" Component_="Microsoft.VisualStudio.Services.Client.Interactive.dll" FileName="MICRO~15.DLL|Microsoft.VisualStudio.Services.Client.Interactive.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.VisualStudio.Services.Client.Interactive.dll" SelfReg="false" NextFile="Microsoft.VisualStudio.Services.Client.Interactive.xml"/> <ROW File="Microsoft.VisualStudio.Services.Client.Interactive.xml" Component_="Dragablz.xml" FileName="MICRO~15.XML|Microsoft.VisualStudio.Services.Client.Interactive.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.VisualStudio.Services.Client.Interactive.xml" SelfReg="false" NextFile="Microsoft.VisualStudio.Services.Common.dll"/> <ROW File="Microsoft.VisualStudio.Services.Common.dll" Component_="Microsoft.VisualStudio.Services.Common.dll" FileName="MICRO~16.DLL|Microsoft.VisualStudio.Services.Common.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.VisualStudio.Services.Common.dll" SelfReg="false" NextFile="Microsoft.VisualStudio.Services.Common.xml"/> @@ -389,6 +442,7 @@ <ROW File="Microsoft.VisualStudio.Services.WebApi.xml" Component_="Dragablz.xml" FileName="MICRO~17.XML|Microsoft.VisualStudio.Services.WebApi.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.VisualStudio.Services.WebApi.xml" SelfReg="false" NextFile="Microsoft.WITDataStore32.dll"/> <ROW File="Microsoft.WITDataStore32.dll" Component_="Microsoft.WITDataStore32.dll" FileName="MICRO~18.DLL|Microsoft.WITDataStore32.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.WITDataStore32.dll" SelfReg="false" NextFile="mscoree.dll"/> <ROW File="Microsoft.Win32.Primitives.dll" Component_="Microsoft.Win32.Primitives.dll" FileName="MICRO~19.DLL|Microsoft.Win32.Primitives.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.Win32.Primitives.dll" SelfReg="false" NextFile="Microsoft.WindowsAPICodePack.dll"/> + <ROW File="Microsoft.Win32.Primitives.dll_1" Component_="Microsoft.Win32.Primitives.dll_1" FileName="MICROS~9.DLL|Microsoft.Win32.Primitives.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\Microsoft.Win32.Primitives.dll" SelfReg="false" NextFile="System.AppContext.dll_1"/> <ROW File="Microsoft.WindowsAPICodePack.Shell.dll" Component_="Microsoft.WindowsAPICodePack.Shell.dll" FileName="MICRO~21.DLL|Microsoft.WindowsAPICodePack.Shell.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.WindowsAPICodePack.Shell.dll" SelfReg="false" NextFile="Microsoft.WindowsAPICodePack.Shell.pdb"/> <ROW File="Microsoft.WindowsAPICodePack.Shell.pdb" Component_="Microsoft.WindowsAPICodePack.Shell.dll" FileName="MICROS~2.PDB|Microsoft.WindowsAPICodePack.Shell.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.WindowsAPICodePack.Shell.pdb" SelfReg="false" NextFile="Microsoft.WindowsAPICodePack.Shell.xml"/> <ROW File="Microsoft.WindowsAPICodePack.Shell.xml" Component_="Dragablz.xml" FileName="MICRO~18.XML|Microsoft.WindowsAPICodePack.Shell.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Microsoft.WindowsAPICodePack.Shell.xml" SelfReg="false" NextFile="Microsoft.WindowsAPICodePack.ShellExtensions.dll"/> @@ -413,7 +467,9 @@ <ROW File="SQLite.Interop.dll_1" Component_="SQLite.Interop.dll_1" FileName="SQLITE~1.DLL|SQLite.Interop.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\x86\SQLite.Interop.dll" SelfReg="false" NextFile="DocumentFormat.OpenXml.dll"/> <ROW File="SimpleValidator.dll" Component_="SimpleValidator.dll" FileName="SIMPLE~1.DLL|SimpleValidator.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\SimpleValidator.dll" SelfReg="false" NextFile="System.Data.SQLite.dll"/> <ROW File="System.AppContext.dll" Component_="System.AppContext.dll" FileName="SYSTE~13.DLL|System.AppContext.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.AppContext.dll" SelfReg="false" NextFile="System.Collections.Concurrent.dll"/> + <ROW File="System.AppContext.dll_1" Component_="System.AppContext.dll_1" FileName="SYSTEM~1.DLL|System.AppContext.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.AppContext.dll" SelfReg="false" NextFile="System.Collections.Immutable.dll"/> <ROW File="System.Collections.Concurrent.dll" Component_="System.Collections.Concurrent.dll" FileName="SYSTE~14.DLL|System.Collections.Concurrent.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Collections.Concurrent.dll" SelfReg="false" NextFile="System.Collections.dll"/> + <ROW File="System.Collections.Immutable.dll" Component_="System.Collections.Immutable.dll" FileName="SYSTEM~2.DLL|System.Collections.Immutable.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Collections.Immutable.dll" SelfReg="false" NextFile="System.Console.dll_1"/> <ROW File="System.Collections.NonGeneric.dll" Component_="System.Collections.NonGeneric.dll" FileName="SYSTE~16.DLL|System.Collections.NonGeneric.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Collections.NonGeneric.dll" SelfReg="false" NextFile="System.Collections.Specialized.dll"/> <ROW File="System.Collections.Specialized.dll" Component_="System.Collections.Specialized.dll" FileName="SYSTE~17.DLL|System.Collections.Specialized.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Collections.Specialized.dll" SelfReg="false" NextFile="System.ComponentModel.dll"/> <ROW File="System.Collections.dll" Component_="System.Collections.dll" FileName="SYSTE~15.DLL|System.Collections.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Collections.dll" SelfReg="false" NextFile="System.Collections.NonGeneric.dll"/> @@ -422,6 +478,7 @@ <ROW File="System.ComponentModel.TypeConverter.dll" Component_="System.ComponentModel.TypeConverter.dll" FileName="SYSTE~21.DLL|System.ComponentModel.TypeConverter.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.ComponentModel.TypeConverter.dll" SelfReg="false" NextFile="System.Console.dll"/> <ROW File="System.ComponentModel.dll" Component_="System.ComponentModel.dll" FileName="SYSTE~18.DLL|System.ComponentModel.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.ComponentModel.dll" SelfReg="false" NextFile="System.ComponentModel.EventBasedAsync.dll"/> <ROW File="System.Console.dll" Component_="System.Console.dll" FileName="SYSTE~22.DLL|System.Console.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Console.dll" SelfReg="false" NextFile="System.Data.Common.dll"/> + <ROW File="System.Console.dll_1" Component_="System.Console.dll_1" FileName="SYSTEM~3.DLL|System.Console.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Console.dll" SelfReg="false" NextFile="System.Diagnostics.FileVersionInfo.dll_1"/> <ROW File="System.Data.Common.dll" Component_="System.Data.Common.dll" FileName="SYSTE~23.DLL|System.Data.Common.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Data.Common.dll" SelfReg="false" NextFile="System.Diagnostics.Contracts.dll"/> <ROW File="System.Data.SQLite.EF6.dll" Component_="System.Data.SQLite.EF6.dll" FileName="SYSTEM~2.DLL|System.Data.SQLite.EF6.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Data.SQLite.EF6.dll" SelfReg="false" NextFile="System.Data.SQLite.Linq.dll"/> <ROW File="System.Data.SQLite.Linq.dll" Component_="System.Data.SQLite.Linq.dll" FileName="SYSTEM~3.DLL|System.Data.SQLite.Linq.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Data.SQLite.Linq.dll" SelfReg="false" NextFile="System.Data.SQLite.xml"/> @@ -431,8 +488,11 @@ <ROW File="System.Diagnostics.Contracts.dll" Component_="System.Diagnostics.Contracts.dll" FileName="SYSTE~24.DLL|System.Diagnostics.Contracts.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Diagnostics.Contracts.dll" SelfReg="false" NextFile="System.Diagnostics.Debug.dll"/> <ROW File="System.Diagnostics.Debug.dll" Component_="System.Diagnostics.Debug.dll" FileName="SYSTE~25.DLL|System.Diagnostics.Debug.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Diagnostics.Debug.dll" SelfReg="false" NextFile="System.Diagnostics.FileVersionInfo.dll"/> <ROW File="System.Diagnostics.FileVersionInfo.dll" Component_="System.Diagnostics.FileVersionInfo.dll" FileName="SYSTE~26.DLL|System.Diagnostics.FileVersionInfo.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Diagnostics.FileVersionInfo.dll" SelfReg="false" NextFile="System.Diagnostics.Process.dll"/> + <ROW File="System.Diagnostics.FileVersionInfo.dll_1" Component_="System.Diagnostics.FileVersionInfo.dll_1" FileName="SYSTEM~4.DLL|System.Diagnostics.FileVersionInfo.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Diagnostics.FileVersionInfo.dll" SelfReg="false" NextFile="System.Diagnostics.Process.dll_1"/> <ROW File="System.Diagnostics.Process.dll" Component_="System.Diagnostics.Process.dll" FileName="SYSTE~27.DLL|System.Diagnostics.Process.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Diagnostics.Process.dll" SelfReg="false" NextFile="System.Diagnostics.StackTrace.dll"/> + <ROW File="System.Diagnostics.Process.dll_1" Component_="System.Diagnostics.Process.dll_1" FileName="SYSTEM~5.DLL|System.Diagnostics.Process.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Diagnostics.Process.dll" SelfReg="false" NextFile="System.Diagnostics.StackTrace.dll_1"/> <ROW File="System.Diagnostics.StackTrace.dll" Component_="System.Diagnostics.StackTrace.dll" FileName="SYSTE~28.DLL|System.Diagnostics.StackTrace.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Diagnostics.StackTrace.dll" SelfReg="false" NextFile="System.Diagnostics.TextWriterTraceListener.dll"/> + <ROW File="System.Diagnostics.StackTrace.dll_1" Component_="System.Diagnostics.StackTrace.dll_1" FileName="SYSTEM~6.DLL|System.Diagnostics.StackTrace.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Diagnostics.StackTrace.dll" SelfReg="false" NextFile="System.IO.Compression.dll_1"/> <ROW File="System.Diagnostics.TextWriterTraceListener.dll" Component_="System.Diagnostics.TextWriterTraceListener.dll" FileName="SYSTE~29.DLL|System.Diagnostics.TextWriterTraceListener.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Diagnostics.TextWriterTraceListener.dll" SelfReg="false" NextFile="System.Diagnostics.Tools.dll"/> <ROW File="System.Diagnostics.Tools.dll" Component_="System.Diagnostics.Tools.dll" FileName="SYSTE~30.DLL|System.Diagnostics.Tools.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Diagnostics.Tools.dll" SelfReg="false" NextFile="System.Diagnostics.TraceSource.dll"/> <ROW File="System.Diagnostics.TraceSource.dll" Component_="System.Diagnostics.TraceSource.dll" FileName="SYSTE~31.DLL|System.Diagnostics.TraceSource.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Diagnostics.TraceSource.dll" SelfReg="false" NextFile="System.Diagnostics.Tracing.dll"/> @@ -444,13 +504,18 @@ <ROW File="System.Globalization.dll" Component_="System.Globalization.dll" FileName="SYSTE~36.DLL|System.Globalization.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Globalization.dll" SelfReg="false" NextFile="System.Globalization.Extensions.dll"/> <ROW File="System.IO.Compression.ZipFile.dll" Component_="System.IO.Compression.ZipFile.dll" FileName="SYSTE~39.DLL|System.IO.Compression.ZipFile.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.IO.Compression.ZipFile.dll" SelfReg="false" NextFile="System.IO.dll"/> <ROW File="System.IO.Compression.dll" Component_="System.IO.Compression.dll" FileName="SYSTE~38.DLL|System.IO.Compression.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.IO.Compression.dll" SelfReg="false" NextFile="System.IO.Compression.ZipFile.dll"/> + <ROW File="System.IO.Compression.dll_1" Component_="System.IO.Compression.dll_1" FileName="SYSTEM~7.DLL|System.IO.Compression.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.IO.Compression.dll" SelfReg="false" NextFile="System.IO.FileSystem.dll_1"/> <ROW File="System.IO.FileSystem.DriveInfo.dll" Component_="System.IO.FileSystem.DriveInfo.dll" FileName="SYSTE~42.DLL|System.IO.FileSystem.DriveInfo.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.IO.FileSystem.DriveInfo.dll" SelfReg="false" NextFile="System.IO.FileSystem.Primitives.dll"/> + <ROW File="System.IO.FileSystem.DriveInfo.dll_1" Component_="System.IO.FileSystem.DriveInfo.dll_1" FileName="SYSTEM~9.DLL|System.IO.FileSystem.DriveInfo.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.IO.FileSystem.DriveInfo.dll" SelfReg="false" NextFile="System.IO.FileSystem.Primitives.dll_1"/> <ROW File="System.IO.FileSystem.Primitives.dll" Component_="System.IO.FileSystem.Primitives.dll" FileName="SYSTE~43.DLL|System.IO.FileSystem.Primitives.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.IO.FileSystem.Primitives.dll" SelfReg="false" NextFile="System.IO.FileSystem.Watcher.dll"/> + <ROW File="System.IO.FileSystem.Primitives.dll_1" Component_="System.IO.FileSystem.Primitives.dll_1" FileName="SYSTE~10.DLL|System.IO.FileSystem.Primitives.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.IO.FileSystem.Primitives.dll" SelfReg="false" NextFile="System.IO.Pipes.dll_1"/> <ROW File="System.IO.FileSystem.Watcher.dll" Component_="System.IO.FileSystem.Watcher.dll" FileName="SYSTE~44.DLL|System.IO.FileSystem.Watcher.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.IO.FileSystem.Watcher.dll" SelfReg="false" NextFile="System.IO.IsolatedStorage.dll"/> <ROW File="System.IO.FileSystem.dll" Component_="System.IO.FileSystem.dll" FileName="SYSTE~41.DLL|System.IO.FileSystem.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.IO.FileSystem.dll" SelfReg="false" NextFile="System.IO.FileSystem.DriveInfo.dll"/> + <ROW File="System.IO.FileSystem.dll_1" Component_="System.IO.FileSystem.dll_1" FileName="SYSTEM~8.DLL|System.IO.FileSystem.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.IO.FileSystem.dll" SelfReg="false" NextFile="System.IO.FileSystem.DriveInfo.dll_1"/> <ROW File="System.IO.IsolatedStorage.dll" Component_="System.IO.IsolatedStorage.dll" FileName="SYSTE~45.DLL|System.IO.IsolatedStorage.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.IO.IsolatedStorage.dll" SelfReg="false" NextFile="System.IO.MemoryMappedFiles.dll"/> <ROW File="System.IO.MemoryMappedFiles.dll" Component_="System.IO.MemoryMappedFiles.dll" FileName="SYSTE~46.DLL|System.IO.MemoryMappedFiles.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.IO.MemoryMappedFiles.dll" SelfReg="false" NextFile="System.IO.Pipes.dll"/> <ROW File="System.IO.Pipes.dll" Component_="System.IO.Pipes.dll" FileName="SYSTE~47.DLL|System.IO.Pipes.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.IO.Pipes.dll" SelfReg="false" NextFile="System.IO.UnmanagedMemoryStream.dll"/> + <ROW File="System.IO.Pipes.dll_1" Component_="System.IO.Pipes.dll_1" FileName="SYSTE~11.DLL|System.IO.Pipes.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.IO.Pipes.dll" SelfReg="false" NextFile="System.Reflection.Metadata.dll"/> <ROW File="System.IO.UnmanagedMemoryStream.dll" Component_="System.IO.UnmanagedMemoryStream.dll" FileName="SYSTE~48.DLL|System.IO.UnmanagedMemoryStream.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.IO.UnmanagedMemoryStream.dll" SelfReg="false" NextFile="System.Linq.dll"/> <ROW File="System.IO.dll" Component_="System.IO.dll" FileName="SYSTE~40.DLL|System.IO.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.IO.dll" SelfReg="false" NextFile="System.IO.FileSystem.dll"/> <ROW File="System.IdentityModel.Tokens.Jwt.dll" Component_="System.IdentityModel.Tokens.Jwt.dll" FileName="SYSTEM~4.DLL|System.IdentityModel.Tokens.Jwt.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.IdentityModel.Tokens.Jwt.dll" SelfReg="false" NextFile="System.IdentityModel.Tokens.Jwt.pdb"/> @@ -485,6 +550,7 @@ <ROW File="System.Reactive.Windows.Threading.dll" Component_="System.Reactive.Windows.Threading.dll" FileName="SYSTE~10.DLL|System.Reactive.Windows.Threading.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Reactive.Windows.Threading.dll" SelfReg="false" NextFile="System.Reactive.Windows.Threading.xml"/> <ROW File="System.Reactive.Windows.Threading.xml" Component_="Dragablz.xml" FileName="SYSTEM~8.XML|System.Reactive.Windows.Threading.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Reactive.Windows.Threading.xml" SelfReg="false" NextFile="System.Web.Razor.dll"/> <ROW File="System.Reflection.Extensions.dll" Component_="System.Reflection.Extensions.dll" FileName="SYSTE~66.DLL|System.Reflection.Extensions.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Reflection.Extensions.dll" SelfReg="false" NextFile="System.Reflection.Primitives.dll"/> + <ROW File="System.Reflection.Metadata.dll" Component_="System.Reflection.Metadata.dll" FileName="SYSTE~12.DLL|System.Reflection.Metadata.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Reflection.Metadata.dll" SelfReg="false" NextFile="System.Security.AccessControl.dll"/> <ROW File="System.Reflection.Primitives.dll" Component_="System.Reflection.Primitives.dll" FileName="SYSTE~67.DLL|System.Reflection.Primitives.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Reflection.Primitives.dll" SelfReg="false" NextFile="System.Resources.Reader.dll"/> <ROW File="System.Reflection.dll" Component_="System.Reflection.dll" FileName="SYSTE~65.DLL|System.Reflection.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Reflection.dll" SelfReg="false" NextFile="System.Reflection.Extensions.dll"/> <ROW File="System.Resources.Reader.dll" Component_="System.Resources.Reader.dll" FileName="SYSTE~68.DLL|System.Resources.Reader.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Resources.Reader.dll" SelfReg="false" NextFile="System.Resources.ResourceManager.dll"/> @@ -501,16 +567,24 @@ <ROW File="System.Runtime.Serialization.Primitives.dll" Component_="System.Runtime.Serialization.Primitives.dll" FileName="SYSTE~80.DLL|System.Runtime.Serialization.Primitives.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Runtime.Serialization.Primitives.dll" SelfReg="false" NextFile="System.Runtime.Serialization.Xml.dll"/> <ROW File="System.Runtime.Serialization.Xml.dll" Component_="System.Runtime.Serialization.Xml.dll" FileName="SYSTE~81.DLL|System.Runtime.Serialization.Xml.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Runtime.Serialization.Xml.dll" SelfReg="false" NextFile="System.Security.Claims.dll"/> <ROW File="System.Runtime.dll" Component_="System.Runtime.dll" FileName="SYSTE~72.DLL|System.Runtime.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Runtime.dll" SelfReg="false" NextFile="System.Runtime.Extensions.dll"/> + <ROW File="System.Security.AccessControl.dll" Component_="System.Security.AccessControl.dll" FileName="SYSTE~13.DLL|System.Security.AccessControl.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Security.AccessControl.dll" SelfReg="false" NextFile="System.Security.Claims.dll_1"/> <ROW File="System.Security.Claims.dll" Component_="System.Security.Claims.dll" FileName="SYSTE~82.DLL|System.Security.Claims.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Security.Claims.dll" SelfReg="false" NextFile="System.Security.Cryptography.Algorithms.dll"/> + <ROW File="System.Security.Claims.dll_1" Component_="System.Security.Claims.dll_1" FileName="SYSTE~14.DLL|System.Security.Claims.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Security.Claims.dll" SelfReg="false" NextFile="System.Security.Cryptography.Algorithms.dll_1"/> <ROW File="System.Security.Cryptography.Algorithms.dll" Component_="System.Security.Cryptography.Algorithms.dll" FileName="SYSTE~83.DLL|System.Security.Cryptography.Algorithms.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Security.Cryptography.Algorithms.dll" SelfReg="false" NextFile="System.Security.Cryptography.Csp.dll"/> + <ROW File="System.Security.Cryptography.Algorithms.dll_1" Component_="System.Security.Cryptography.Algorithms.dll_1" FileName="SYSTE~15.DLL|System.Security.Cryptography.Algorithms.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Security.Cryptography.Algorithms.dll" SelfReg="false" NextFile="System.Security.Cryptography.Encoding.dll_1"/> <ROW File="System.Security.Cryptography.Csp.dll" Component_="System.Security.Cryptography.Csp.dll" FileName="SYSTE~84.DLL|System.Security.Cryptography.Csp.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Security.Cryptography.Csp.dll" SelfReg="false" NextFile="System.Security.Cryptography.Encoding.dll"/> <ROW File="System.Security.Cryptography.Encoding.dll" Component_="System.Security.Cryptography.Encoding.dll" FileName="SYSTE~85.DLL|System.Security.Cryptography.Encoding.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Security.Cryptography.Encoding.dll" SelfReg="false" NextFile="System.Security.Cryptography.Primitives.dll"/> + <ROW File="System.Security.Cryptography.Encoding.dll_1" Component_="System.Security.Cryptography.Encoding.dll_1" FileName="SYSTE~16.DLL|System.Security.Cryptography.Encoding.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Security.Cryptography.Encoding.dll" SelfReg="false" NextFile="System.Security.Cryptography.Primitives.dll_1"/> <ROW File="System.Security.Cryptography.Primitives.dll" Component_="System.Security.Cryptography.Primitives.dll" FileName="SYSTE~86.DLL|System.Security.Cryptography.Primitives.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Security.Cryptography.Primitives.dll" SelfReg="false" NextFile="System.Security.Cryptography.X509Certificates.dll"/> + <ROW File="System.Security.Cryptography.Primitives.dll_1" Component_="System.Security.Cryptography.Primitives.dll_1" FileName="SYSTE~17.DLL|System.Security.Cryptography.Primitives.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Security.Cryptography.Primitives.dll" SelfReg="false" NextFile="System.Security.Cryptography.X509Certificates.dll_1"/> <ROW File="System.Security.Cryptography.X509Certificates.dll" Component_="System.Security.Cryptography.X509Certificates.dll" FileName="SYSTE~87.DLL|System.Security.Cryptography.X509Certificates.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Security.Cryptography.X509Certificates.dll" SelfReg="false" NextFile="System.Security.Principal.dll"/> + <ROW File="System.Security.Cryptography.X509Certificates.dll_1" Component_="System.Security.Cryptography.X509Certificates.dll_1" FileName="SYSTE~18.DLL|System.Security.Cryptography.X509Certificates.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Security.Cryptography.X509Certificates.dll" SelfReg="false" NextFile="System.Security.Principal.Windows.dll"/> + <ROW File="System.Security.Principal.Windows.dll" Component_="System.Security.Principal.Windows.dll" FileName="SYSTE~19.DLL|System.Security.Principal.Windows.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Security.Principal.Windows.dll" SelfReg="false" NextFile="System.Text.Encoding.CodePages.dll"/> <ROW File="System.Security.Principal.dll" Component_="System.Security.Principal.dll" FileName="SYSTE~88.DLL|System.Security.Principal.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Security.Principal.dll" SelfReg="false" NextFile="System.Security.SecureString.dll"/> <ROW File="System.Security.SecureString.dll" Component_="System.Security.SecureString.dll" FileName="SYSTE~89.DLL|System.Security.SecureString.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Security.SecureString.dll" SelfReg="false" NextFile="System.Text.Encoding.dll"/> <ROW File="System.Spatial.dll" Component_="System.Spatial.dll" FileName="SYST~109.DLL|System.Spatial.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Spatial.dll" SelfReg="false" NextFile="System.Spatial.xml"/> <ROW File="System.Spatial.xml" Component_="Dragablz.xml" FileName="SYSTE~12.XML|System.Spatial.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Spatial.xml" SelfReg="false" NextFile="CommandLine.dll"/> + <ROW File="System.Text.Encoding.CodePages.dll" Component_="System.Text.Encoding.CodePages.dll" FileName="SYSTE~20.DLL|System.Text.Encoding.CodePages.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Text.Encoding.CodePages.dll" SelfReg="false" NextFile="System.Threading.Thread.dll_1"/> <ROW File="System.Text.Encoding.Extensions.dll" Component_="System.Text.Encoding.Extensions.dll" FileName="SYSTE~91.DLL|System.Text.Encoding.Extensions.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Text.Encoding.Extensions.dll" SelfReg="false" NextFile="System.Text.RegularExpressions.dll"/> <ROW File="System.Text.Encoding.dll" Component_="System.Text.Encoding.dll" FileName="SYSTE~90.DLL|System.Text.Encoding.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Text.Encoding.dll" SelfReg="false" NextFile="System.Text.Encoding.Extensions.dll"/> <ROW File="System.Text.RegularExpressions.dll" Component_="System.Text.RegularExpressions.dll" FileName="SYSTE~92.DLL|System.Text.RegularExpressions.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Text.RegularExpressions.dll" SelfReg="false" NextFile="System.Threading.dll"/> @@ -518,10 +592,12 @@ <ROW File="System.Threading.Tasks.Parallel.dll" Component_="System.Threading.Tasks.Parallel.dll" FileName="SYSTE~96.DLL|System.Threading.Tasks.Parallel.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Threading.Tasks.Parallel.dll" SelfReg="false" NextFile="System.Threading.Thread.dll"/> <ROW File="System.Threading.Tasks.dll" Component_="System.Threading.Tasks.dll" FileName="SYSTE~95.DLL|System.Threading.Tasks.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Threading.Tasks.dll" SelfReg="false" NextFile="System.Threading.Tasks.Parallel.dll"/> <ROW File="System.Threading.Thread.dll" Component_="System.Threading.Thread.dll" FileName="SYSTE~97.DLL|System.Threading.Thread.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Threading.Thread.dll" SelfReg="false" NextFile="System.Threading.ThreadPool.dll"/> + <ROW File="System.Threading.Thread.dll_1" Component_="System.Threading.Thread.dll_1" FileName="SYSTE~21.DLL|System.Threading.Thread.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Threading.Thread.dll" SelfReg="false" NextFile="System.ValueTuple.dll_1"/> <ROW File="System.Threading.ThreadPool.dll" Component_="System.Threading.ThreadPool.dll" FileName="SYSTE~98.DLL|System.Threading.ThreadPool.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Threading.ThreadPool.dll" SelfReg="false" NextFile="System.Threading.Timer.dll"/> <ROW File="System.Threading.Timer.dll" Component_="System.Threading.Timer.dll" FileName="SYSTE~99.DLL|System.Threading.Timer.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Threading.Timer.dll" SelfReg="false" NextFile="System.ValueTuple.dll"/> <ROW File="System.Threading.dll" Component_="System.Threading.dll" FileName="SYSTE~93.DLL|System.Threading.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Threading.dll" SelfReg="false" NextFile="System.Threading.Overlapped.dll"/> <ROW File="System.ValueTuple.dll" Component_="System.ValueTuple.dll" FileName="SYST~100.DLL|System.ValueTuple.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.ValueTuple.dll" SelfReg="false" NextFile="System.Xml.ReaderWriter.dll"/> + <ROW File="System.ValueTuple.dll_1" Component_="System.ValueTuple.dll_1" FileName="SYSTE~22.DLL|System.ValueTuple.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.ValueTuple.dll" SelfReg="false" NextFile="System.Xml.ReaderWriter.dll_1"/> <ROW File="System.Web.Http.WebHost.dll" Component_="System.Web.Http.WebHost.dll" FileName="SYST~108.DLL|System.Web.Http.WebHost.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Web.Http.WebHost.dll" SelfReg="false" NextFile="System.Web.Http.WebHost.xml"/> <ROW File="System.Web.Http.WebHost.xml" Component_="Dragablz.xml" FileName="SYSTE~10.XML|System.Web.Http.WebHost.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Web.Http.WebHost.xml" SelfReg="false" NextFile="System.Web.Http.xml"/> <ROW File="System.Web.Http.dll" Component_="System.Web.Http.dll" FileName="SYST~107.DLL|System.Web.Http.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Web.Http.dll" SelfReg="false" NextFile="System.Web.Http.WebHost.dll"/> @@ -530,13 +606,17 @@ <ROW File="System.Web.Razor.xml" Component_="Dragablz.xml" FileName="SYSTEM~9.XML|System.Web.Razor.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Web.Razor.xml" SelfReg="false" NextFile="System.Windows.Interactivity.dll"/> <ROW File="System.Windows.Interactivity.dll" Component_="System.Windows.Interactivity.dll" FileName="SYSTE~12.DLL|System.Windows.Interactivity.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Windows.Interactivity.dll" SelfReg="false" NextFile="Tango.AutoComplete.dll"/> <ROW File="System.Xml.ReaderWriter.dll" Component_="System.Xml.ReaderWriter.dll" FileName="SYST~101.DLL|System.Xml.ReaderWriter.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Xml.ReaderWriter.dll" SelfReg="false" NextFile="System.Xml.XDocument.dll"/> + <ROW File="System.Xml.ReaderWriter.dll_1" Component_="System.Xml.ReaderWriter.dll_1" FileName="SYSTE~23.DLL|System.Xml.ReaderWriter.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Xml.ReaderWriter.dll" SelfReg="false" NextFile="System.Xml.XmlDocument.dll_1"/> <ROW File="System.Xml.XDocument.dll" Component_="System.Xml.XDocument.dll" FileName="SYST~102.DLL|System.Xml.XDocument.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Xml.XDocument.dll" SelfReg="false" NextFile="System.Xml.XmlDocument.dll"/> <ROW File="System.Xml.XPath.XDocument.dll" Component_="System.Xml.XPath.XDocument.dll" FileName="SYST~106.DLL|System.Xml.XPath.XDocument.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Xml.XPath.XDocument.dll" SelfReg="false" NextFile="Tango.Documents.dll"/> + <ROW File="System.Xml.XPath.XDocument.dll_1" Component_="System.Xml.XPath.XDocument.dll_1" FileName="SYSTE~26.DLL|System.Xml.XPath.XDocument.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Xml.XPath.XDocument.dll" SelfReg="false" NextFile="vbc.exe"/> <ROW File="System.Xml.XPath.dll" Component_="System.Xml.XPath.dll" FileName="SYST~105.DLL|System.Xml.XPath.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Xml.XPath.dll" SelfReg="false" NextFile="System.Xml.XPath.XDocument.dll"/> + <ROW File="System.Xml.XPath.dll_1" Component_="System.Xml.XPath.dll_1" FileName="SYSTE~25.DLL|System.Xml.XPath.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Xml.XPath.dll" SelfReg="false" NextFile="System.Xml.XPath.XDocument.dll_1"/> <ROW File="System.Xml.XmlDocument.dll" Component_="System.Xml.XmlDocument.dll" FileName="SYST~103.DLL|System.Xml.XmlDocument.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Xml.XmlDocument.dll" SelfReg="false" NextFile="System.Xml.XmlSerializer.dll"/> + <ROW File="System.Xml.XmlDocument.dll_1" Component_="System.Xml.XmlDocument.dll_1" FileName="SYSTE~24.DLL|System.Xml.XmlDocument.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\System.Xml.XmlDocument.dll" SelfReg="false" NextFile="System.Xml.XPath.dll_1"/> <ROW File="System.Xml.XmlSerializer.dll" Component_="System.Xml.XmlSerializer.dll" FileName="SYST~104.DLL|System.Xml.XmlSerializer.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\System.Xml.XmlSerializer.dll" SelfReg="false" NextFile="System.Xml.XPath.dll"/> <ROW File="Tango.AdvancedInstaller.dll" Component_="Tango.AdvancedInstaller.dll" FileName="TANGOA~2.DLL|Tango.AdvancedInstaller.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Tango.AdvancedInstaller.dll" SelfReg="false" NextFile="Tango.AdvancedInstaller.pdb"/> - <ROW File="Tango.AdvancedInstaller.pdb" Component_="Tango.AdvancedInstaller.dll" FileName="TANGOA~2.PDB|Tango.AdvancedInstaller.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Tango.AdvancedInstaller.pdb" SelfReg="false"/> + <ROW File="Tango.AdvancedInstaller.pdb" Component_="Tango.AdvancedInstaller.dll" FileName="TANGOA~2.PDB|Tango.AdvancedInstaller.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Tango.AdvancedInstaller.pdb" SelfReg="false" NextFile="csc.exe"/> <ROW File="Tango.AutoComplete.dll" Component_="Tango.AutoComplete.dll" FileName="TANGOA~1.DLL|Tango.AutoComplete.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Tango.AutoComplete.dll" SelfReg="false" NextFile="Tango.AutoComplete.pdb"/> <ROW File="Tango.AutoComplete.pdb" Component_="Tango.AutoComplete.dll" FileName="TANGOA~1.PDB|Tango.AutoComplete.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Tango.AutoComplete.pdb" SelfReg="false" NextFile="Tango.BL.dll"/> <ROW File="Tango.BL.dll" Component_="Tango.BL.dll" FileName="TANGOB~1.DLL|Tango.BL.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Tango.BL.dll" SelfReg="false" NextFile="Tango.BL.dll.config"/> @@ -670,18 +750,32 @@ <ROW File="Tango.Web.dll" Component_="Tango.Web.dll" FileName="TANGOW~1.DLL|Tango.Web.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Tango.Web.dll" SelfReg="false" NextFile="Tango.Web.dll.config"/> <ROW File="Tango.Web.dll.config" Component_="Dragablz.xml" FileName="TANGOW~1.CON|Tango.Web.dll.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Tango.Web.dll.config" SelfReg="false" NextFile="Tango.Web.pdb"/> <ROW File="Tango.Web.pdb" Component_="Tango.Web.dll" FileName="TANGOW~1.PDB|Tango.Web.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\Tango.Web.pdb" SelfReg="false" NextFile="System.Spatial.dll"/> + <ROW File="VBCSCompiler.exe" Component_="VBCSCompiler.exe" FileName="VBCSCO~1.EXE|VBCSCompiler.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\VBCSCompiler.exe" SelfReg="false" NextFile="VBCSCompiler.exe.config" DigSign="true"/> + <ROW File="VBCSCompiler.exe.config" Component_="csc.exe.config" FileName="VBCSCO~1.CON|VBCSCompiler.exe.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\VBCSCompiler.exe.config" SelfReg="false" NextFile="EFCache.dll"/> <ROW File="WpfAnimatedGif.dll" Component_="WpfAnimatedGif.dll" FileName="WPFANI~1.DLL|WpfAnimatedGif.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\WpfAnimatedGif.dll" SelfReg="false" NextFile="WpfAnimatedGif.xml"/> <ROW File="WpfAnimatedGif.xml" Component_="Dragablz.xml" FileName="WPFANI~1.XML|WpfAnimatedGif.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\WpfAnimatedGif.xml" SelfReg="false" NextFile="WriteableBitmapEx.Wpf.dll"/> <ROW File="WriteableBitmapEx.Wpf.dll" Component_="WriteableBitmapEx.Wpf.dll" FileName="WRITEA~1.DLL|WriteableBitmapEx.Wpf.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\WriteableBitmapEx.Wpf.dll" SelfReg="false" NextFile="WriteableBitmapEx.Wpf.pdb"/> <ROW File="WriteableBitmapEx.Wpf.pdb" Component_="WriteableBitmapEx.Wpf.dll" FileName="WRITEA~1.PDB|WriteableBitmapEx.Wpf.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\WriteableBitmapEx.Wpf.pdb" SelfReg="false" NextFile="WriteableBitmapEx.Wpf.xml"/> <ROW File="WriteableBitmapEx.Wpf.xml" Component_="Dragablz.xml" FileName="WRITEA~1.XML|WriteableBitmapEx.Wpf.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\WriteableBitmapEx.Wpf.xml" SelfReg="false" NextFile="SQLite.Interop.dll"/> + <ROW File="csc.exe" Component_="csc.exe" FileName="csc.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\csc.exe" SelfReg="false" NextFile="csc.exe.config" DigSign="true"/> + <ROW File="csc.exe.config" Component_="csc.exe.config" FileName="CSCEXE~1.CON|csc.exe.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\csc.exe.config" SelfReg="false" NextFile="csc.rsp"/> + <ROW File="csc.rsp" Component_="csc.exe.config" FileName="csc.rsp" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\csc.rsp" SelfReg="false" NextFile="csi.exe"/> + <ROW File="csi.exe" Component_="csi.exe" FileName="csi.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\csi.exe" SelfReg="false" NextFile="csi.exe.config" DigSign="true"/> + <ROW File="csi.exe.config" Component_="csc.exe.config" FileName="CSIEXE~1.CON|csi.exe.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\csi.exe.config" SelfReg="false" NextFile="csi.rsp"/> + <ROW File="csi.rsp" Component_="csc.exe.config" FileName="csi.rsp" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\csi.rsp" SelfReg="false" NextFile="Microsoft.Build.Tasks.CodeAnalysis.dll"/> <ROW File="fpgen.exe" Component_="fpgen.exe" FileName="fpgen.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\fpgen.exe" SelfReg="false" NextFile="fpgen.exe.config" DigSign="true"/> <ROW File="fpgen.exe.config" Component_="Dragablz.xml" FileName="FPGENE~1.CON|fpgen.exe.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\fpgen.exe.config" SelfReg="false" NextFile="fpgen.pdb"/> <ROW File="fpgen.pdb" Component_="fpgen.exe" FileName="fpgen.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\fpgen.pdb" SelfReg="false" NextFile="Microsoft.SqlServer.AzureStorageEnum.dll"/> <ROW File="mscoree.dll" Component_="mscoree.dll" FileName="mscoree.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\mscoree.dll" SelfReg="false" NextFile="msvcp140d.dll"/> <ROW File="msvcp140d.dll" Component_="msvcp140d.dll" FileName="MSVCP1~1.DLL|msvcp140d.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\msvcp140d.dll" SelfReg="false" NextFile="Newtonsoft.Json.dll"/> <ROW File="netstandard.dll" Component_="netstandard.dll" FileName="NETSTA~1.DLL|netstandard.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\netstandard.dll" SelfReg="false" NextFile="RealTimeGraphX.dll"/> + <ROW File="protoc.exe" Component_="protoc.exe" FileName="protoc.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\ProtoCompilers\protoc.exe" SelfReg="false" DigSign="true"/> + <ROW File="protoc1.0M4.jar" Component_="protoc1.0M4.jar" FileName="PROTOC~1.JAR|protoc-1.0M4.jar" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\ProtoCompilers\protoc-1.0M4.jar" SelfReg="false" NextFile="protocc.exe"/> + <ROW File="protocc.exe" Component_="protocc.exe" FileName="protoc-c.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\ProtoCompilers\protoc-c.exe" SelfReg="false" NextFile="protoc.exe" DigSign="true"/> <ROW File="ucrtbased.dll" Component_="ucrtbased.dll" FileName="UCRTBA~1.DLL|ucrtbased.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\ucrtbased.dll" SelfReg="false" NextFile="vcruntime140.dll"/> + <ROW File="vbc.exe" Component_="vbc.exe" FileName="vbc.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\vbc.exe" SelfReg="false" NextFile="vbc.exe.config" DigSign="true"/> + <ROW File="vbc.exe.config" Component_="csc.exe.config" FileName="VBCEXE~1.CON|vbc.exe.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\vbc.exe.config" SelfReg="false" NextFile="vbc.rsp"/> + <ROW File="vbc.rsp" Component_="csc.exe.config" FileName="vbc.rsp" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\roslyn\vbc.rsp" SelfReg="false" NextFile="VBCSCompiler.exe"/> <ROW File="vcruntime140.dll" Component_="vcruntime140.dll" FileName="VCRUNT~1.DLL|vcruntime140.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\vcruntime140.dll" SelfReg="false" NextFile="vcruntime140d.dll"/> <ROW File="vcruntime140d.dll" Component_="vcruntime140d.dll" FileName="VCRUNT~2.DLL|vcruntime140d.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\Machine Studio\Release\vcruntime140d.dll" SelfReg="false" NextFile="WpfAnimatedGif.dll"/> </COMPONENT> @@ -699,7 +793,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\Machine Studio\Release" PackageFileName="Machine Studio Installer_v4.0.9" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Machine Studio Installer_v4.0.9"/> + <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\Machine Studio\Release" PackageFileName="Machine Studio Installer_v4.0.9" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Machine Studio Installer_v4.0.10"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent"> <ROW Path="<AI_DICTS>ui.ail"/> @@ -775,8 +869,6 @@ </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent"> <ROW Directory_="SHORTCUTDIR" Component_="SHORTCUTDIR" ManualDelete="false"/> - <ROW Directory_="ProtoCompilers_Dir" Component_="ProtoCompilers" ManualDelete="false"/> - <ROW Directory_="roslyn_Dir" Component_="roslyn" ManualDelete="false"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent"> <ROW Action="AI_AiRemoveFilesCommit" Type="11777" Source="ResourceCleaner.dll" Target="OnAiRemoveFilesCommit" WithoutSeq="true"/> @@ -809,7 +901,7 @@ <ROW Action="AI_RunFinishActions" Type="1" Source="aicustact.dll" Target="RunFinishActions" WithoutSeq="true"/> <ROW Action="AI_SHOW_LOG" Type="65" Source="aicustact.dll" Target="LaunchLogFile" WithoutSeq="true"/> <ROW Action="AI_STORE_LOCATION" Type="51" Source="ARPINSTALLLOCATION" Target="[APPDIR]"/> - <ROW Action="RemoveEfCache" Type="1" Source="PowerShellScriptLauncher.dll" Target="RunPowerShellScript" AdditionalSeq="AI_DATA_SETTER_1"/> + <ROW Action="RemoveEfCache" Type="65" Source="PowerShellScriptLauncher.dll" Target="RunPowerShellScript" AdditionalSeq="AI_DATA_SETTER_1"/> <ROW Action="SET_APPDIR" Type="307" Source="APPDIR" Target="[ProgramFilesFolder][Manufacturer]\[ProductName]"/> <ROW Action="SET_SHORTCUTDIR" Type="307" Source="SHORTCUTDIR" Target="[ProgramMenuFolder][ProductName]"/> <ROW Action="SET_TARGETDIR_TO_APPDIR" Type="51" Source="TARGETDIR" Target="[APPDIR]"/> @@ -835,8 +927,8 @@ <ROW Action="AI_ExtractFiles" Sequence="3998" Builds="DefaultBuild"/> <ROW Action="AI_DATA_SETTER" Sequence="3997"/> <ROW Action="AI_EstimateExtractFiles" Sequence="3999" Builds="DefaultBuild"/> - <ROW Action="RemoveEfCache" Condition="( NOT Installed ) AND ( (VersionNT > 501) OR (VersionNT = 501 AND ServicePackLevel >= 2) )" Sequence="5936"/> - <ROW Action="AI_DATA_SETTER_1" Condition="( NOT Installed ) AND ( (VersionNT > 501) OR (VersionNT = 501 AND ServicePackLevel >= 2) )" Sequence="5935"/> + <ROW Action="RemoveEfCache" Condition="(VersionNT > 501) OR (VersionNT = 501 AND ServicePackLevel >= 2)" Sequence="5936"/> + <ROW Action="AI_DATA_SETTER_1" Condition="(VersionNT > 501) OR (VersionNT = 501 AND ServicePackLevel >= 2)" Sequence="5935"/> <ROW Action="AI_AppSearchEx" Sequence="101"/> <ROW Action="AI_AiRemoveFilesImmediate" Sequence="3499"/> </COMPONENT> diff --git a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/part2/PPC Installer v1.0.31.cab b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/part2/PPC Installer v1.0.31.cab Binary files differindex d61184528..61adc62b2 100644 --- a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/part2/PPC Installer v1.0.31.cab +++ b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/part2/PPC Installer v1.0.31.cab diff --git a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/part2/output-info.ini b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/part2/output-info.ini Binary files differindex 4843c205f..45e7484f5 100644 --- a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/part2/output-info.ini +++ b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/part2/output-info.ini diff --git a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip index 1d309f495..747e6eae3 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:{FF4EC9EB-3C7B-408B-82C1-1258C66C7899} " Type="16"/> + <ROW Property="ProductCode" Value="1033:{B289A9BF-F662-4629-9647-EFE46E0A92F5} " Type="16"/> <ROW Property="ProductLanguage" Value="1033"/> <ROW Property="ProductName" Value="Tango"/> - <ROW Property="ProductVersion" Value="1.0.3.0" Type="32"/> + <ROW Property="ProductVersion" Value="1.0.5.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="-"/> @@ -57,6 +57,7 @@ <ROW Component="CommandLine.xml" ComponentId="{2D2D9AF9-1187-48F6-B569-25DB00665D1E}" Directory_="APPDIR" Attributes="0" KeyPath="CommandLine.xml" Type="0"/> <ROW Component="ControlzEx.dll" ComponentId="{794432AC-C11D-4D39-BE3B-453942B53CB0}" Directory_="APPDIR" Attributes="0" KeyPath="ControlzEx.dll"/> <ROW Component="DocumentFormat.OpenXml.dll" ComponentId="{DF22F9D3-CEF7-4D41-8D0D-1D45C509376E}" Directory_="APPDIR" Attributes="0" KeyPath="DocumentFormat.OpenXml.dll"/> + <ROW Component="EFCache.dll" ComponentId="{E15AE519-6E9A-4860-AE1B-36A611A2ACC2}" Directory_="APPDIR" Attributes="0" KeyPath="EFCache.dll"/> <ROW Component="EntityFramework.SqlServer.dll" ComponentId="{38839FC0-3C26-4FF6-B4F7-83CE250C9BA2}" Directory_="APPDIR" Attributes="0" KeyPath="EntityFramework.SqlServer.dll"/> <ROW Component="EntityFramework.dll" ComponentId="{84E4D21B-268D-488B-B890-EC2958C2FFBC}" Directory_="APPDIR" Attributes="0" KeyPath="EntityFramework.dll"/> <ROW Component="FluentFTP.dll" ComponentId="{212CBAE7-9A31-46CD-AA9C-2585FB7EC2E5}" Directory_="APPDIR" Attributes="0" KeyPath="FluentFTP.dll"/> @@ -72,17 +73,17 @@ <ROW Component="Microsoft.Azure.Common.NetFramework.dll" ComponentId="{894F089D-C807-489A-8523-388645F4D876}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Azure.Common.NetFramework.dll"/> <ROW Component="Microsoft.Azure.Common.dll" ComponentId="{4A8F7880-DE1E-4E8F-80E5-6DE1E14B4702}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Azure.Common.dll"/> <ROW Component="Microsoft.Azure.ResourceManager.dll" ComponentId="{A00E27AE-9ED8-413F-9975-8C0B2D4C7BBE}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Azure.ResourceManager.dll"/> - <ROW Component="Microsoft.Build.Tasks.CodeAnalysis.dll" ComponentId="{DDDACBD1-FCDF-47A0-B8F6-D1698F5E05B3}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.Build.Tasks.CodeAnalysis.dll"/> - <ROW Component="Microsoft.CodeAnalysis.CSharp.Scripting.dll" ComponentId="{86D7E633-7F31-4185-8EC4-6BDACE8FD18B}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.CSharp.Scripting.dll"/> - <ROW Component="Microsoft.CodeAnalysis.CSharp.dll" ComponentId="{6F6B9414-6A53-4067-9ED4-7A1698CE8315}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.CSharp.dll"/> - <ROW Component="Microsoft.CodeAnalysis.Scripting.dll" ComponentId="{0B0F9346-AF47-4A76-B7CF-647A7CD9053F}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.Scripting.dll"/> - <ROW Component="Microsoft.CodeAnalysis.VisualBasic.dll" ComponentId="{32B9A456-F782-4AAD-9CCC-AF24F21643A3}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.VisualBasic.dll"/> - <ROW Component="Microsoft.CodeAnalysis.dll" ComponentId="{12A144B7-0D4C-45FB-8059-0EF5D99B3756}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.dll"/> + <ROW Component="Microsoft.Build.Tasks.CodeAnalysis.dll" ComponentId="{22B95476-F17A-4085-B82B-BE68D9CD7D03}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.Build.Tasks.CodeAnalysis.dll"/> + <ROW Component="Microsoft.CodeAnalysis.CSharp.Scripting.dll" ComponentId="{CD015DD2-95B7-41E3-A865-B4BCB2512B2F}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.CSharp.Scripting.dll"/> + <ROW Component="Microsoft.CodeAnalysis.CSharp.dll" ComponentId="{EDAF9ADE-A4DA-4546-96FF-3A456D843351}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.CSharp.dll"/> + <ROW Component="Microsoft.CodeAnalysis.Scripting.dll" ComponentId="{0C642399-83B1-4FF1-B02C-8299DC298ACA}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.Scripting.dll"/> + <ROW Component="Microsoft.CodeAnalysis.VisualBasic.dll" ComponentId="{00B43D03-C458-4C24-8817-F2FF47E2B048}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.VisualBasic.dll"/> + <ROW Component="Microsoft.CodeAnalysis.dll" ComponentId="{1E3CAD3B-B284-4C68-B96D-9F8B61B42748}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.CodeAnalysis.dll"/> <ROW Component="Microsoft.Data.Edm.dll" ComponentId="{06A0456E-381C-4EF8-B5E7-31D1B7E7CD85}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Data.Edm.dll"/> <ROW Component="Microsoft.Data.OData.dll" ComponentId="{A06B5093-5096-4B70-8244-4563501A0529}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Data.OData.dll"/> <ROW Component="Microsoft.Data.Services.Client.dll" ComponentId="{CA6117B3-4B3F-4834-A9C1-C741BA6DA59F}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.Data.Services.Client.dll"/> - <ROW Component="Microsoft.DiaSymReader.Native.amd64.dll" ComponentId="{4A356250-5377-4016-B28B-8A3F0D7AC782}" Directory_="roslyn_Dir" Attributes="256" KeyPath="Microsoft.DiaSymReader.Native.amd64.dll"/> - <ROW Component="Microsoft.DiaSymReader.Native.x86.dll" ComponentId="{C0ABB753-12B6-4302-BAED-6D0028D91CB1}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.DiaSymReader.Native.x86.dll"/> + <ROW Component="Microsoft.DiaSymReader.Native.amd64.dll" ComponentId="{212CAE59-5576-4DF5-80C5-F8DD64E3BF31}" Directory_="roslyn_Dir" Attributes="256" KeyPath="Microsoft.DiaSymReader.Native.amd64.dll"/> + <ROW Component="Microsoft.DiaSymReader.Native.x86.dll" ComponentId="{87D9D38F-E007-46CF-9DBD-DC2AEF712A70}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.DiaSymReader.Native.x86.dll"/> <ROW Component="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" ComponentId="{0D9D4D27-F558-4BA4-9C3A-BCF0201A8342}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll"/> <ROW Component="Microsoft.IdentityModel.Clients.ActiveDirectory.dll" ComponentId="{4E807C1E-3E7D-4317-A035-1B27AD10B0B8}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.IdentityModel.Clients.ActiveDirectory.dll"/> <ROW Component="Microsoft.ServiceBus.dll" ComponentId="{E66AEAAE-74EA-4AAC-829A-61A0F319FC7C}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.ServiceBus.dll"/> @@ -109,7 +110,7 @@ <ROW Component="Microsoft.VisualStudio.Services.Client.Interactive.dll" ComponentId="{6C3540BE-3D48-41AB-90CD-161D2FC011B5}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.VisualStudio.Services.Client.Interactive.dll"/> <ROW Component="Microsoft.VisualStudio.Services.Common.dll" ComponentId="{B42A0E4C-1207-4D28-9814-B86D392D558B}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.VisualStudio.Services.Common.dll"/> <ROW Component="Microsoft.VisualStudio.Services.WebApi.dll" ComponentId="{50CBA0C0-C360-433D-B720-4BDF6BB89FAC}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.VisualStudio.Services.WebApi.dll"/> - <ROW Component="Microsoft.Win32.Primitives.dll" ComponentId="{19367A8E-BBA6-4868-96D4-D03B3300D546}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.Win32.Primitives.dll"/> + <ROW Component="Microsoft.Win32.Primitives.dll" ComponentId="{93E23434-B7B3-40ED-892C-0D921142626D}" Directory_="roslyn_Dir" Attributes="0" KeyPath="Microsoft.Win32.Primitives.dll"/> <ROW Component="Microsoft.WindowsAzure.Storage.dll" ComponentId="{7D9DF36E-5D83-49A3-A08B-4FC2A0557E0B}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.WindowsAzure.Storage.dll"/> <ROW Component="Newtonsoft.Json.dll" ComponentId="{E556628B-DB87-4249-AF5E-F5D0AC9E6C32}" Directory_="APPDIR" Attributes="0" KeyPath="Newtonsoft.Json.dll"/> <ROW Component="OverrideData.xml" ComponentId="{24820B41-EDB3-4974-B581-0C285A4AA675}" Directory_="Configurations_Dir" Attributes="0" KeyPath="OverrideData.xml" Type="0"/> @@ -129,46 +130,46 @@ <ROW Component="SQLite.Interop.dll" ComponentId="{564CD658-1365-436E-BF1F-8F616090B8FD}" Directory_="x64_Dir" Attributes="256" KeyPath="SQLite.Interop.dll"/> <ROW Component="SQLite.Interop.dll_1" ComponentId="{1FC59CC1-643E-46B6-9E5C-AE417128823A}" Directory_="x86_Dir" Attributes="0" KeyPath="SQLite.Interop.dll_1"/> <ROW Component="SimpleValidator.dll" ComponentId="{3B9AB784-0AFD-4667-A756-9B0A86ECCC2B}" Directory_="APPDIR" Attributes="0" KeyPath="SimpleValidator.dll"/> - <ROW Component="System.AppContext.dll" ComponentId="{2875B466-D3CD-447D-BF31-7959C1C0E57E}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.AppContext.dll"/> - <ROW Component="System.Collections.Immutable.dll" ComponentId="{4CA18BE7-4F6B-4AEB-AF89-2589D5C5E35C}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Collections.Immutable.dll"/> - <ROW Component="System.Console.dll" ComponentId="{F3BF7025-C8EA-466F-8836-C67F7E3500E6}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Console.dll"/> + <ROW Component="System.AppContext.dll" ComponentId="{F43128DA-2CFA-4F06-9689-8A63FBB336A0}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.AppContext.dll"/> + <ROW Component="System.Collections.Immutable.dll" ComponentId="{9303894C-1E2C-4645-96D3-B597ADC92828}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Collections.Immutable.dll"/> + <ROW Component="System.Console.dll" ComponentId="{EB027C42-992D-48B8-93CA-746418F9FCC6}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Console.dll"/> <ROW Component="System.Data.SQLite.EF6.dll" ComponentId="{77619618-AE0C-4A0A-A5E9-108FA3546A36}" Directory_="APPDIR" Attributes="0" KeyPath="System.Data.SQLite.EF6.dll"/> <ROW Component="System.Data.SQLite.Linq.dll" ComponentId="{A614D2D8-C390-4DE9-AAF4-B4E3111FE389}" Directory_="APPDIR" Attributes="0" KeyPath="System.Data.SQLite.Linq.dll"/> <ROW Component="System.Data.SQLite.dll" ComponentId="{B10ECB3B-FF56-4E95-9E10-A4D155ACCC10}" Directory_="APPDIR" Attributes="0" KeyPath="System.Data.SQLite.dll"/> - <ROW Component="System.Diagnostics.FileVersionInfo.dll" ComponentId="{D1123BA5-26EE-48A4-B515-1BA0D10617F7}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Diagnostics.FileVersionInfo.dll"/> - <ROW Component="System.Diagnostics.Process.dll" ComponentId="{22817DCA-7AB0-4AD0-94D2-B9D6EB2E743E}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Diagnostics.Process.dll"/> - <ROW Component="System.Diagnostics.StackTrace.dll" ComponentId="{5B701309-E52E-464A-99D4-901D008162E5}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Diagnostics.StackTrace.dll"/> + <ROW Component="System.Diagnostics.FileVersionInfo.dll" ComponentId="{0D582A88-0017-4555-9365-B4C6173E5725}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Diagnostics.FileVersionInfo.dll"/> + <ROW Component="System.Diagnostics.Process.dll" ComponentId="{481E76BA-DB3A-488D-B606-A2676AD0DE07}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Diagnostics.Process.dll"/> + <ROW Component="System.Diagnostics.StackTrace.dll" ComponentId="{B72DC662-82C2-4494-91A6-3AC96BA1DD40}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Diagnostics.StackTrace.dll"/> <ROW Component="System.IO.Compression.FileSystem.dll" ComponentId="{B9DD6F14-FAEA-4DB7-B535-6088091F3F04}" Directory_="APPDIR" Attributes="0" KeyPath="System.IO.Compression.FileSystem.dll"/> - <ROW Component="System.IO.Compression.dll" ComponentId="{1B672F81-95B2-4285-A311-9806D41F538E}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.Compression.dll"/> - <ROW Component="System.IO.FileSystem.DriveInfo.dll" ComponentId="{29930C57-72E7-4663-9AE4-027E1B99F7FC}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.FileSystem.DriveInfo.dll"/> - <ROW Component="System.IO.FileSystem.Primitives.dll" ComponentId="{F2A69331-0E9B-4483-A975-D23A99BEA67C}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.FileSystem.Primitives.dll"/> - <ROW Component="System.IO.FileSystem.dll" ComponentId="{DB51142E-D943-4F99-8954-CA3175E4530C}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.FileSystem.dll"/> - <ROW Component="System.IO.Pipes.dll" ComponentId="{E184CDD7-E7BE-46C4-9D6D-5CE119DFA043}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.Pipes.dll"/> + <ROW Component="System.IO.Compression.dll" ComponentId="{88EA3A08-32AB-46F5-8216-205209D275A6}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.Compression.dll"/> + <ROW Component="System.IO.FileSystem.DriveInfo.dll" ComponentId="{DCB445F7-2790-4CEB-9EBF-1D28545727EF}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.FileSystem.DriveInfo.dll"/> + <ROW Component="System.IO.FileSystem.Primitives.dll" ComponentId="{3229A0DF-6D1E-4F0D-BCD6-67E3A8D4D06B}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.FileSystem.Primitives.dll"/> + <ROW Component="System.IO.FileSystem.dll" ComponentId="{0EEC2550-225E-449D-B43C-5F773216B196}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.FileSystem.dll"/> + <ROW Component="System.IO.Pipes.dll" ComponentId="{08F13EB1-8E92-43FF-BF20-BF994C869A33}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.IO.Pipes.dll"/> <ROW Component="System.IdentityModel.Tokens.Jwt.dll" ComponentId="{E51E96FF-9C01-41D1-9B2B-081CBA0679DC}" Directory_="APPDIR" Attributes="0" KeyPath="System.IdentityModel.Tokens.Jwt.dll"/> <ROW Component="System.Net.Http.Formatting.dll" ComponentId="{B9C00657-DA03-4398-9011-FDE98CE5123A}" Directory_="APPDIR" Attributes="0" KeyPath="System.Net.Http.Formatting.dll"/> <ROW Component="System.Reactive.Core.dll" ComponentId="{5B105ACC-CCA6-4CBC-963E-63253E27E7B5}" Directory_="APPDIR" Attributes="0" KeyPath="System.Reactive.Core.dll"/> <ROW Component="System.Reactive.Interfaces.dll" ComponentId="{C23DD172-ACE0-4811-90D6-0C2F38B2C27E}" Directory_="APPDIR" Attributes="0" KeyPath="System.Reactive.Interfaces.dll"/> <ROW Component="System.Reactive.Linq.dll" ComponentId="{572F229C-22E6-4934-BDB9-68600F354F67}" Directory_="APPDIR" Attributes="0" KeyPath="System.Reactive.Linq.dll"/> <ROW Component="System.Reactive.PlatformServices.dll" ComponentId="{84B191EA-72B0-4FA8-B352-AEF6BBD48F31}" Directory_="APPDIR" Attributes="0" KeyPath="System.Reactive.PlatformServices.dll"/> - <ROW Component="System.Reflection.Metadata.dll" ComponentId="{2304BF1C-0B7C-4F1D-BC84-3DCDA6345FB0}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Reflection.Metadata.dll"/> - <ROW Component="System.Security.AccessControl.dll" ComponentId="{C8FB04CA-55E2-4C9C-811F-1E5D102378BD}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.AccessControl.dll"/> - <ROW Component="System.Security.Claims.dll" ComponentId="{9B8F078A-B671-4196-AC98-B859563E3553}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Claims.dll"/> - <ROW Component="System.Security.Cryptography.Algorithms.dll" ComponentId="{7C37C1D0-8D7C-426B-B30F-7A2608EAE366}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Cryptography.Algorithms.dll"/> - <ROW Component="System.Security.Cryptography.Encoding.dll" ComponentId="{12C69901-8798-4C89-A89E-D7C8A22E244C}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Cryptography.Encoding.dll"/> - <ROW Component="System.Security.Cryptography.Primitives.dll" ComponentId="{E19B639B-E943-46CE-9D03-401894FFF619}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Cryptography.Primitives.dll"/> - <ROW Component="System.Security.Cryptography.X509Certificates.dll" ComponentId="{A6C8AD80-DA89-4DBD-B105-80314C38AE8D}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Cryptography.X509Certificates.dll"/> - <ROW Component="System.Security.Principal.Windows.dll" ComponentId="{966BEA2B-F202-4CD1-B21B-473899244E13}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Principal.Windows.dll"/> + <ROW Component="System.Reflection.Metadata.dll" ComponentId="{268148C6-9EDB-4F21-99F9-526098C2EB73}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Reflection.Metadata.dll"/> + <ROW Component="System.Security.AccessControl.dll" ComponentId="{56F27615-AF94-4458-8A09-83E3B9AD50AE}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.AccessControl.dll"/> + <ROW Component="System.Security.Claims.dll" ComponentId="{BE3FE191-BB71-46A1-A08E-87C5AFC7A974}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Claims.dll"/> + <ROW Component="System.Security.Cryptography.Algorithms.dll" ComponentId="{80342B4E-20F3-4D82-971C-05CC8A7C66FF}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Cryptography.Algorithms.dll"/> + <ROW Component="System.Security.Cryptography.Encoding.dll" ComponentId="{CFEBEF15-410E-4510-A1EE-5CE7048C8B42}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Cryptography.Encoding.dll"/> + <ROW Component="System.Security.Cryptography.Primitives.dll" ComponentId="{BC9260EF-D7AF-40AC-B5C3-9009887681E5}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Cryptography.Primitives.dll"/> + <ROW Component="System.Security.Cryptography.X509Certificates.dll" ComponentId="{3CE5803E-F1F6-4D71-B2D5-4BFA6CCCF44B}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Cryptography.X509Certificates.dll"/> + <ROW Component="System.Security.Principal.Windows.dll" ComponentId="{993E2DC2-B114-4838-B123-99E95709A5F4}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Security.Principal.Windows.dll"/> <ROW Component="System.Spatial.dll" ComponentId="{5E31D7A5-2EC5-409E-B8F4-999D1349D46C}" Directory_="APPDIR" Attributes="0" KeyPath="System.Spatial.dll"/> - <ROW Component="System.Text.Encoding.CodePages.dll" ComponentId="{2DA6AB31-67EF-4D97-B7EE-520F72AEAAAB}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Text.Encoding.CodePages.dll"/> - <ROW Component="System.Threading.Thread.dll" ComponentId="{E5E9DC1C-3BAB-4796-975E-FACDFA1D19B6}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Threading.Thread.dll"/> - <ROW Component="System.ValueTuple.dll" ComponentId="{70D47CC7-B8F8-44DE-9AFD-9E2744E72B3A}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.ValueTuple.dll"/> + <ROW Component="System.Text.Encoding.CodePages.dll" ComponentId="{AC26FECD-1D43-45E7-863C-77070AD312F0}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Text.Encoding.CodePages.dll"/> + <ROW Component="System.Threading.Thread.dll" ComponentId="{848C91AE-DC1E-48E4-849F-19CC908E5EB7}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Threading.Thread.dll"/> + <ROW Component="System.ValueTuple.dll" ComponentId="{B863462D-CD6B-4F9F-A561-94570F697EFA}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.ValueTuple.dll"/> <ROW Component="System.Web.Http.WebHost.dll" ComponentId="{9F1DD6B2-3514-4C62-AACA-EE7368ECB36B}" Directory_="APPDIR" Attributes="0" KeyPath="System.Web.Http.WebHost.dll"/> <ROW Component="System.Web.Http.dll" ComponentId="{0ABCDC64-DE4A-4994-B4C8-3B0146F68F09}" Directory_="APPDIR" Attributes="0" KeyPath="System.Web.Http.dll"/> <ROW Component="System.Windows.Interactivity.dll" ComponentId="{4ACC2B8A-2454-4DAC-9326-5F8426C068F0}" Directory_="APPDIR" Attributes="0" KeyPath="System.Windows.Interactivity.dll"/> - <ROW Component="System.Xml.ReaderWriter.dll" ComponentId="{87CCD81E-7CDB-404F-89A7-C8A170AF544E}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Xml.ReaderWriter.dll"/> - <ROW Component="System.Xml.XPath.XDocument.dll" ComponentId="{CDF6CCCA-D8D1-4AA9-B553-B2FE5367EF74}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Xml.XPath.XDocument.dll"/> - <ROW Component="System.Xml.XPath.dll" ComponentId="{E78364FF-283C-426B-BB32-2A003F9B212D}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Xml.XPath.dll"/> - <ROW Component="System.Xml.XmlDocument.dll" ComponentId="{E68CB520-BD02-4DA4-91F7-68B74D13358B}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Xml.XmlDocument.dll"/> + <ROW Component="System.Xml.ReaderWriter.dll" ComponentId="{12ECFE83-2106-414E-AF23-ACC866CA7FEE}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Xml.ReaderWriter.dll"/> + <ROW Component="System.Xml.XPath.XDocument.dll" ComponentId="{71025BF8-02E0-4161-8761-9D59C41F749D}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Xml.XPath.XDocument.dll"/> + <ROW Component="System.Xml.XPath.dll" ComponentId="{B8564CAB-C1F3-4D98-99A4-558A3314676E}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Xml.XPath.dll"/> + <ROW Component="System.Xml.XmlDocument.dll" ComponentId="{A29247B9-003A-4AD2-924E-6DE45CA0269E}" Directory_="roslyn_Dir" Attributes="0" KeyPath="System.Xml.XmlDocument.dll"/> <ROW Component="Tango.AdvancedInstaller.dll" ComponentId="{5C51256D-50D1-46F5-A44F-73AF2E63EAF5}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.AdvancedInstaller.dll"/> <ROW Component="Tango.AnimatedGif.dll" ComponentId="{2DCBEDC8-EDA7-4C90-8852-39E0B13DABF7}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.AnimatedGif.dll"/> <ROW Component="Tango.BL.dll" ComponentId="{56D29CF3-E600-48A5-BF55-045EEE7CFDC6}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.BL.dll"/> @@ -190,7 +191,6 @@ <ROW Component="Tango.PPC.Jobs.dll" ComponentId="{33A3CD47-B643-4119-804A-814A7FACF534}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.PPC.Jobs.dll"/> <ROW Component="Tango.PPC.Logging.dll" ComponentId="{19DEF70A-19CD-45C2-9F0B-375FF6E81A2A}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.PPC.Logging.dll"/> <ROW Component="Tango.PPC.MachineSettings.dll" ComponentId="{1FD6EEEA-0DE3-4ED2-A3BB-033E5F0E1F4D}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.PPC.MachineSettings.dll"/> - <ROW Component="Tango.PPC.Power.dll" ComponentId="{C38764ED-E96F-4185-B966-70C5347E8F08}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.PPC.Power.dll"/> <ROW Component="Tango.PPC.Storage.dll" ComponentId="{5FDB1CE0-A29E-44F9-83E2-AD7A5FC7DF22}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.PPC.Storage.dll"/> <ROW Component="Tango.PPC.UI.exe" ComponentId="{ABCBFD0F-3957-42AF-A7E5-931A097E4814}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.PPC.UI.exe"/> <ROW Component="Tango.PPC.Updater.exe" ComponentId="{84BA158D-5726-4A12-A862-801C0A7D1220}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.PPC.Updater.exe"/> @@ -205,19 +205,19 @@ <ROW Component="Tango.Transport.dll" ComponentId="{757E4901-D269-42C1-A70E-7B8DABB66024}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.Transport.dll"/> <ROW Component="Tango.Web.dll" ComponentId="{131328BC-D68F-4CB8-8D8C-F89CF6F8486C}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.Web.dll"/> <ROW Component="Tango.WiFi.dll" ComponentId="{8082C9BD-5BDB-4C52-BCA6-E8604D4D232B}" Directory_="APPDIR" Attributes="0" KeyPath="Tango.WiFi.dll"/> - <ROW Component="VBCSCompiler.exe" ComponentId="{E4209F72-E303-44F0-A127-23D8DA03C16F}" Directory_="roslyn_Dir" Attributes="0" KeyPath="VBCSCompiler.exe"/> - <ROW Component="csc.exe" ComponentId="{DE09C13E-8094-45BD-BA59-28EE635D1298}" Directory_="roslyn_Dir" Attributes="0" KeyPath="csc.exe"/> - <ROW Component="csc.exe.config" ComponentId="{069FC138-252D-4862-98D6-9328922E3CC2}" Directory_="roslyn_Dir" Attributes="0" KeyPath="csc.exe.config" Type="0"/> - <ROW Component="csi.exe" ComponentId="{75F23B98-9D9A-4521-AF09-28A525F49E29}" Directory_="roslyn_Dir" Attributes="0" KeyPath="csi.exe"/> + <ROW Component="VBCSCompiler.exe" ComponentId="{D0C61B56-F6E8-4FB8-9C5D-85506FCBA57E}" Directory_="roslyn_Dir" Attributes="0" KeyPath="VBCSCompiler.exe"/> + <ROW Component="csc.exe" ComponentId="{CC216B4A-3874-4EB4-B3EF-A190CF9BBA34}" Directory_="roslyn_Dir" Attributes="0" KeyPath="csc.exe"/> + <ROW Component="csc.exe.config" ComponentId="{9E9193BA-6885-4530-B1B4-18DFF020664E}" Directory_="roslyn_Dir" Attributes="0" KeyPath="csc.exe.config" Type="0"/> + <ROW Component="csi.exe" ComponentId="{2006DB6D-8BA8-4652-B1F5-54F8A643F0EE}" Directory_="roslyn_Dir" Attributes="0" KeyPath="csi.exe"/> <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="ucrtbased.dll" ComponentId="{B8D025EA-CD16-4EE7-A3E7-713E2BE82BF3}" Directory_="APPDIR" Attributes="0" KeyPath="ucrtbased.dll"/> - <ROW Component="vbc.exe" ComponentId="{271403F0-30EB-47C7-9FE1-B8962CFFCB7E}" Directory_="roslyn_Dir" Attributes="0" KeyPath="vbc.exe"/> + <ROW Component="vbc.exe" ComponentId="{EAC93A93-09E7-4245-9D27-711D3B330AD6}" Directory_="roslyn_Dir" Attributes="0" KeyPath="vbc.exe"/> <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"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent"> - <ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0" Components="AI_CustomARPName AI_ExePath ColorMine.dll CommandLine.dll CommandLine.xml ControlzEx.dll DocumentFormat.OpenXml.dll EntityFramework.SqlServer.dll EntityFramework.dll FluentFTP.dll FontAwesome.WPF.dll Google.Protobuf.dll Hyak.Common.dll ICSharpCode.AvalonEdit.dll Interop.MSDASC.dll Ionic.Zip.dll JWT.dll License.lic Microsoft.Azure.ActiveDirectory.GraphClient.dll Microsoft.Azure.Common.NetFramework.dll Microsoft.Azure.Common.dll Microsoft.Azure.ResourceManager.dll Microsoft.Build.Tasks.CodeAnalysis.dll Microsoft.CodeAnalysis.CSharp.Scripting.dll Microsoft.CodeAnalysis.CSharp.dll Microsoft.CodeAnalysis.Scripting.dll Microsoft.CodeAnalysis.VisualBasic.dll Microsoft.CodeAnalysis.dll Microsoft.Data.Edm.dll Microsoft.Data.OData.dll Microsoft.Data.Services.Client.dll Microsoft.DiaSymReader.Native.amd64.dll Microsoft.DiaSymReader.Native.x86.dll Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll Microsoft.IdentityModel.Clients.ActiveDirectory.dll Microsoft.ServiceBus.dll Microsoft.SqlServer.AzureStorageEnum.dll Microsoft.SqlServer.ConnectionInfo.dll Microsoft.SqlServer.Diagnostics.STrace.dll Microsoft.SqlServer.Dmf.Common.dll Microsoft.SqlServer.Management.Sdk.Sfc.dll Microsoft.SqlServer.ServiceBrokerEnum.dll Microsoft.SqlServer.Smo.dll Microsoft.SqlServer.SqlClrProvider.dll Microsoft.SqlServer.SqlEnum.dll Microsoft.TeamFoundation.Client.dll Microsoft.TeamFoundation.Common.dll Microsoft.TeamFoundation.Core.WebApi.dll Microsoft.TeamFoundation.Diff.dll Microsoft.TeamFoundation.Work.WebApi.dll Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll Microsoft.TeamFoundation.WorkItemTracking.Client.QueryLanguage.dll Microsoft.TeamFoundation.WorkItemTracking.Client.dll Microsoft.TeamFoundation.WorkItemTracking.Common.dll Microsoft.TeamFoundation.WorkItemTracking.Proxy.dll Microsoft.TeamFoundation.WorkItemTracking.WebApi.dll Microsoft.VisualStudio.Services.Client.Interactive.dll Microsoft.VisualStudio.Services.Common.dll Microsoft.VisualStudio.Services.WebApi.dll Microsoft.Win32.Primitives.dll Microsoft.WindowsAzure.Storage.dll Newtonsoft.Json.dll OverrideData.xml ProductInformation ProtoCompilers SA.Binary.dll SA.CodeView.dll SA.CommonTypes.dll SA.CommonUI.dll SA.SCBaseProvider.dll SA.SQLDataExaminer.Engine.dll SA.SQLExaminer.Engine.dll SA.Utils.ErrorReporter.dll SHORTCUTDIR SQLDECmd.exe SQLECmd.exe SQLite.Interop.dll SQLite.Interop.dll_1 SimpleValidator.dll System.AppContext.dll System.Collections.Immutable.dll System.Console.dll System.Data.SQLite.EF6.dll System.Data.SQLite.Linq.dll System.Data.SQLite.dll System.Diagnostics.FileVersionInfo.dll System.Diagnostics.Process.dll System.Diagnostics.StackTrace.dll System.IO.Compression.FileSystem.dll System.IO.Compression.dll System.IO.FileSystem.DriveInfo.dll System.IO.FileSystem.Primitives.dll System.IO.FileSystem.dll System.IO.Pipes.dll System.IdentityModel.Tokens.Jwt.dll System.Net.Http.Formatting.dll System.Reactive.Core.dll System.Reactive.Interfaces.dll System.Reactive.Linq.dll System.Reactive.PlatformServices.dll System.Reflection.Metadata.dll System.Security.AccessControl.dll System.Security.Claims.dll System.Security.Cryptography.Algorithms.dll System.Security.Cryptography.Encoding.dll System.Security.Cryptography.Primitives.dll System.Security.Cryptography.X509Certificates.dll System.Security.Principal.Windows.dll System.Spatial.dll System.Text.Encoding.CodePages.dll System.Threading.Thread.dll System.ValueTuple.dll System.Web.Http.WebHost.dll System.Web.Http.dll System.Windows.Interactivity.dll System.Xml.ReaderWriter.dll System.Xml.XPath.XDocument.dll System.Xml.XPath.dll System.Xml.XmlDocument.dll Tango.AdvancedInstaller.dll Tango.AnimatedGif.dll Tango.BL.dll Tango.ColorLib.dll Tango.Core.dll Tango.Documents.dll Tango.DragAndDrop.dll Tango.Emulations.dll Tango.Explorer.dll Tango.FirmwareUpdateLib.WPF.dll Tango.FirmwareUpdateLib.dll Tango.Hive.dll Tango.Integration.dll Tango.Logging.dll Tango.PMR.dll Tango.PPC.BootScreen.exe Tango.PPC.Common.dll Tango.PPC.Events.dll Tango.PPC.Jobs.dll Tango.PPC.Logging.dll Tango.PPC.MachineSettings.dll Tango.PPC.Power.dll Tango.PPC.Storage.dll Tango.PPC.UI.exe Tango.PPC.Updater.exe Tango.PPC.WatchDog.exe Tango.SQLExaminer.dll Tango.Scripting.dll Tango.Serialization.dll Tango.Settings.dll Tango.SharedUI.dll Tango.TFS.dll Tango.Touch.dll Tango.Transport.dll Tango.Web.dll Tango.WiFi.dll VBCSCompiler.exe csc.exe csc.exe.config csi.exe mscoree.dll msvcp140d.dll ucrtbased.dll vbc.exe vcruntime140.dll vcruntime140d.dll"/> + <ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0" Components="AI_CustomARPName AI_ExePath ColorMine.dll CommandLine.dll CommandLine.xml ControlzEx.dll DocumentFormat.OpenXml.dll EFCache.dll EntityFramework.SqlServer.dll EntityFramework.dll FluentFTP.dll FontAwesome.WPF.dll Google.Protobuf.dll Hyak.Common.dll ICSharpCode.AvalonEdit.dll Interop.MSDASC.dll Ionic.Zip.dll JWT.dll License.lic Microsoft.Azure.ActiveDirectory.GraphClient.dll Microsoft.Azure.Common.NetFramework.dll Microsoft.Azure.Common.dll Microsoft.Azure.ResourceManager.dll Microsoft.Build.Tasks.CodeAnalysis.dll Microsoft.CodeAnalysis.CSharp.Scripting.dll Microsoft.CodeAnalysis.CSharp.dll Microsoft.CodeAnalysis.Scripting.dll Microsoft.CodeAnalysis.VisualBasic.dll Microsoft.CodeAnalysis.dll Microsoft.Data.Edm.dll Microsoft.Data.OData.dll Microsoft.Data.Services.Client.dll Microsoft.DiaSymReader.Native.amd64.dll Microsoft.DiaSymReader.Native.x86.dll Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll Microsoft.IdentityModel.Clients.ActiveDirectory.dll Microsoft.ServiceBus.dll Microsoft.SqlServer.AzureStorageEnum.dll Microsoft.SqlServer.ConnectionInfo.dll Microsoft.SqlServer.Diagnostics.STrace.dll Microsoft.SqlServer.Dmf.Common.dll Microsoft.SqlServer.Management.Sdk.Sfc.dll Microsoft.SqlServer.ServiceBrokerEnum.dll Microsoft.SqlServer.Smo.dll Microsoft.SqlServer.SqlClrProvider.dll Microsoft.SqlServer.SqlEnum.dll Microsoft.TeamFoundation.Client.dll Microsoft.TeamFoundation.Common.dll Microsoft.TeamFoundation.Core.WebApi.dll Microsoft.TeamFoundation.Diff.dll Microsoft.TeamFoundation.Work.WebApi.dll Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll Microsoft.TeamFoundation.WorkItemTracking.Client.QueryLanguage.dll Microsoft.TeamFoundation.WorkItemTracking.Client.dll Microsoft.TeamFoundation.WorkItemTracking.Common.dll Microsoft.TeamFoundation.WorkItemTracking.Proxy.dll Microsoft.TeamFoundation.WorkItemTracking.WebApi.dll Microsoft.VisualStudio.Services.Client.Interactive.dll Microsoft.VisualStudio.Services.Common.dll Microsoft.VisualStudio.Services.WebApi.dll Microsoft.Win32.Primitives.dll Microsoft.WindowsAzure.Storage.dll Newtonsoft.Json.dll OverrideData.xml ProductInformation ProtoCompilers SA.Binary.dll SA.CodeView.dll SA.CommonTypes.dll SA.CommonUI.dll SA.SCBaseProvider.dll SA.SQLDataExaminer.Engine.dll SA.SQLExaminer.Engine.dll SA.Utils.ErrorReporter.dll SHORTCUTDIR SQLDECmd.exe SQLECmd.exe SQLite.Interop.dll SQLite.Interop.dll_1 SimpleValidator.dll System.AppContext.dll System.Collections.Immutable.dll System.Console.dll System.Data.SQLite.EF6.dll System.Data.SQLite.Linq.dll System.Data.SQLite.dll System.Diagnostics.FileVersionInfo.dll System.Diagnostics.Process.dll System.Diagnostics.StackTrace.dll System.IO.Compression.FileSystem.dll System.IO.Compression.dll System.IO.FileSystem.DriveInfo.dll System.IO.FileSystem.Primitives.dll System.IO.FileSystem.dll System.IO.Pipes.dll System.IdentityModel.Tokens.Jwt.dll System.Net.Http.Formatting.dll System.Reactive.Core.dll System.Reactive.Interfaces.dll System.Reactive.Linq.dll System.Reactive.PlatformServices.dll System.Reflection.Metadata.dll System.Security.AccessControl.dll System.Security.Claims.dll System.Security.Cryptography.Algorithms.dll System.Security.Cryptography.Encoding.dll System.Security.Cryptography.Primitives.dll System.Security.Cryptography.X509Certificates.dll System.Security.Principal.Windows.dll System.Spatial.dll System.Text.Encoding.CodePages.dll System.Threading.Thread.dll System.ValueTuple.dll System.Web.Http.WebHost.dll System.Web.Http.dll System.Windows.Interactivity.dll System.Xml.ReaderWriter.dll System.Xml.XPath.XDocument.dll System.Xml.XPath.dll System.Xml.XmlDocument.dll Tango.AdvancedInstaller.dll Tango.AnimatedGif.dll Tango.BL.dll Tango.ColorLib.dll Tango.Core.dll Tango.Documents.dll Tango.DragAndDrop.dll Tango.Emulations.dll Tango.Explorer.dll Tango.FirmwareUpdateLib.WPF.dll Tango.FirmwareUpdateLib.dll Tango.Hive.dll Tango.Integration.dll Tango.Logging.dll Tango.PMR.dll Tango.PPC.BootScreen.exe Tango.PPC.Common.dll Tango.PPC.Events.dll Tango.PPC.Jobs.dll Tango.PPC.Logging.dll Tango.PPC.MachineSettings.dll Tango.PPC.Storage.dll Tango.PPC.UI.exe Tango.PPC.Updater.exe Tango.PPC.WatchDog.exe Tango.SQLExaminer.dll Tango.Scripting.dll Tango.Serialization.dll Tango.Settings.dll Tango.SharedUI.dll Tango.TFS.dll Tango.Touch.dll Tango.Transport.dll Tango.Web.dll Tango.WiFi.dll VBCSCompiler.exe csc.exe csc.exe.config csi.exe mscoree.dll msvcp140d.dll ucrtbased.dll vbc.exe vcruntime140.dll vcruntime140d.dll"/> <ATTRIBUTE name="CurrentFeature" value="MainFeature"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.MsiFilesComponent"> @@ -229,6 +229,7 @@ <ROW File="ControlzEx.pdb" Component_="ControlzEx.dll" FileName="CONTRO~1.PDB|ControlzEx.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\ControlzEx.pdb" SelfReg="false" NextFile="DocumentFormat.OpenXml.dll"/> <ROW File="DocumentFormat.OpenXml.dll" Component_="DocumentFormat.OpenXml.dll" FileName="DOCUME~1.DLL|DocumentFormat.OpenXml.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\DocumentFormat.OpenXml.dll" SelfReg="false" NextFile="DocumentFormat.OpenXml.xml"/> <ROW File="DocumentFormat.OpenXml.xml" Component_="CommandLine.xml" FileName="DOCUME~1.XML|DocumentFormat.OpenXml.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\DocumentFormat.OpenXml.xml" SelfReg="false" NextFile="EntityFramework.dll"/> + <ROW File="EFCache.dll" Component_="EFCache.dll" FileName="EFCache.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\EFCache.dll" SelfReg="false" NextFile="csc.exe"/> <ROW File="EntityFramework.SqlServer.dll" Component_="EntityFramework.SqlServer.dll" FileName="ENTITY~2.DLL|EntityFramework.SqlServer.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\EntityFramework.SqlServer.dll" SelfReg="false" NextFile="EntityFramework.SqlServer.xml"/> <ROW File="EntityFramework.SqlServer.xml" Component_="CommandLine.xml" FileName="ENTITY~1.XML|EntityFramework.SqlServer.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\EntityFramework.SqlServer.xml" SelfReg="false" NextFile="EntityFramework.xml"/> <ROW File="EntityFramework.dll" Component_="EntityFramework.dll" FileName="ENTITY~1.DLL|EntityFramework.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\EntityFramework.dll" SelfReg="false" NextFile="EntityFramework.SqlServer.dll"/> @@ -245,7 +246,7 @@ <ROW File="Interop.MSDASC.dll" Component_="Interop.MSDASC.dll" FileName="INTERO~1.DLL|Interop.MSDASC.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\SQLExaminer\Interop.MSDASC.dll" SelfReg="false" NextFile="License.lic"/> <ROW File="Ionic.Zip.dll" Component_="Ionic.Zip.dll" FileName="IONICZ~1.DLL|Ionic.Zip.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Ionic.Zip.dll" SelfReg="false" NextFile="Microsoft.Azure.ActiveDirectory.GraphClient.dll"/> <ROW File="JWT.dll" Component_="JWT.dll" FileName="JWT.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\JWT.dll" SelfReg="false" NextFile="JWT.xml"/> - <ROW File="JWT.xml" Component_="CommandLine.xml" FileName="JWT.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\JWT.xml" SelfReg="false" NextFile="csc.exe"/> + <ROW File="JWT.xml" Component_="CommandLine.xml" FileName="JWT.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\JWT.xml" SelfReg="false" NextFile="Tango.AdvancedInstaller.dll"/> <ROW File="License.lic" Component_="License.lic" FileName="License.lic" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\SQLExaminer\License.lic" SelfReg="false" NextFile="SA.Binary.dll"/> <ROW File="Microsoft.Azure.ActiveDirectory.GraphClient.dll" Component_="Microsoft.Azure.ActiveDirectory.GraphClient.dll" FileName="MICROS~1.DLL|Microsoft.Azure.ActiveDirectory.GraphClient.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Microsoft.Azure.ActiveDirectory.GraphClient.dll" SelfReg="false" NextFile="Microsoft.Azure.Common.dll"/> <ROW File="Microsoft.Azure.Common.NetFramework.dll" Component_="Microsoft.Azure.Common.NetFramework.dll" FileName="MICROS~3.DLL|Microsoft.Azure.Common.NetFramework.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Microsoft.Azure.Common.NetFramework.dll" SelfReg="false" NextFile="Microsoft.Azure.ResourceManager.dll"/> @@ -389,7 +390,7 @@ <ROW File="System.Xml.XPath.dll" Component_="System.Xml.XPath.dll" FileName="SYSTE~25.DLL|System.Xml.XPath.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\roslyn\System.Xml.XPath.dll" SelfReg="false" NextFile="System.Xml.XPath.XDocument.dll"/> <ROW File="System.Xml.XmlDocument.dll" Component_="System.Xml.XmlDocument.dll" FileName="SYSTE~24.DLL|System.Xml.XmlDocument.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\roslyn\System.Xml.XmlDocument.dll" SelfReg="false" NextFile="System.Xml.XPath.dll"/> <ROW File="Tango.AdvancedInstaller.dll" Component_="Tango.AdvancedInstaller.dll" FileName="TANGOA~2.DLL|Tango.AdvancedInstaller.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.AdvancedInstaller.dll" SelfReg="false" NextFile="Tango.AdvancedInstaller.pdb"/> - <ROW File="Tango.AdvancedInstaller.pdb" Component_="Tango.AdvancedInstaller.dll" FileName="TANGOA~2.PDB|Tango.AdvancedInstaller.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.AdvancedInstaller.pdb" SelfReg="false"/> + <ROW File="Tango.AdvancedInstaller.pdb" Component_="Tango.AdvancedInstaller.dll" FileName="TANGOA~2.PDB|Tango.AdvancedInstaller.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.AdvancedInstaller.pdb" SelfReg="false" NextFile="EFCache.dll"/> <ROW File="Tango.AnimatedGif.dll" Component_="Tango.AnimatedGif.dll" FileName="TANGOA~1.DLL|Tango.AnimatedGif.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.AnimatedGif.dll" SelfReg="false" NextFile="Tango.AnimatedGif.pdb"/> <ROW File="Tango.AnimatedGif.pdb" Component_="Tango.AnimatedGif.dll" FileName="TANGOA~1.PDB|Tango.AnimatedGif.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.AnimatedGif.pdb" SelfReg="false" NextFile="Tango.BL.dll"/> <ROW File="Tango.BL.dll" Component_="Tango.BL.dll" FileName="TANGOB~1.DLL|Tango.BL.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.BL.dll" SelfReg="false" NextFile="Tango.BL.dll.config"/> @@ -440,10 +441,7 @@ <ROW File="Tango.PPC.Logging.pdb" Component_="Tango.PPC.Logging.dll" FileName="TANGOP~6.PDB|Tango.PPC.Logging.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PPC.Logging.pdb" SelfReg="false" NextFile="Tango.PPC.MachineSettings.dll"/> <ROW File="Tango.PPC.MachineSettings.dll" Component_="Tango.PPC.MachineSettings.dll" FileName="TANGOP~6.DLL|Tango.PPC.MachineSettings.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PPC.MachineSettings.dll" SelfReg="false" NextFile="Tango.PPC.MachineSettings.dll.config"/> <ROW File="Tango.PPC.MachineSettings.dll.config" Component_="CommandLine.xml" FileName="TANGOP~6.CON|Tango.PPC.MachineSettings.dll.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PPC.MachineSettings.dll.config" SelfReg="false" NextFile="Tango.PPC.MachineSettings.pdb"/> - <ROW File="Tango.PPC.MachineSettings.pdb" Component_="Tango.PPC.MachineSettings.dll" FileName="TANGOP~7.PDB|Tango.PPC.MachineSettings.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PPC.MachineSettings.pdb" SelfReg="false" NextFile="Tango.PPC.Power.dll"/> - <ROW File="Tango.PPC.Power.dll" Component_="Tango.PPC.Power.dll" FileName="TANGOP~7.DLL|Tango.PPC.Power.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PPC.Power.dll" SelfReg="false" NextFile="Tango.PPC.Power.dll.config"/> - <ROW File="Tango.PPC.Power.dll.config" Component_="CommandLine.xml" FileName="TANGOP~7.CON|Tango.PPC.Power.dll.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PPC.Power.dll.config" SelfReg="false" NextFile="Tango.PPC.Power.pdb"/> - <ROW File="Tango.PPC.Power.pdb" Component_="Tango.PPC.Power.dll" FileName="TANGOP~8.PDB|Tango.PPC.Power.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PPC.Power.pdb" SelfReg="false" NextFile="Tango.PPC.Storage.dll"/> + <ROW File="Tango.PPC.MachineSettings.pdb" Component_="Tango.PPC.MachineSettings.dll" FileName="TANGOP~7.PDB|Tango.PPC.MachineSettings.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PPC.MachineSettings.pdb" SelfReg="false" NextFile="Tango.PPC.Storage.dll"/> <ROW File="Tango.PPC.Storage.dll" Component_="Tango.PPC.Storage.dll" FileName="TANGOP~8.DLL|Tango.PPC.Storage.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PPC.Storage.dll" SelfReg="false" NextFile="Tango.PPC.Storage.dll.config"/> <ROW File="Tango.PPC.Storage.dll.config" Component_="CommandLine.xml" FileName="TANGOP~8.CON|Tango.PPC.Storage.dll.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PPC.Storage.dll.config" SelfReg="false" NextFile="Tango.PPC.Storage.pdb"/> <ROW File="Tango.PPC.Storage.pdb" Component_="Tango.PPC.Storage.dll" FileName="TANGOP~9.PDB|Tango.PPC.Storage.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PPC.Storage.pdb" SelfReg="false" NextFile="Tango.PPC.UI.exe"/> @@ -485,7 +483,7 @@ <ROW File="UpdateMachine.xml" Component_="OverrideData.xml" FileName="UPDATE~1.XML|UpdateMachine.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\SQLExaminer\Configurations\UpdateMachine.xml" SelfReg="false" NextFile="UpdateTwineDB.xml"/> <ROW File="UpdateTwineDB.xml" Component_="OverrideData.xml" FileName="UPDATE~2.XML|UpdateTwineDB.xml" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\SQLExaminer\Configurations\UpdateTwineDB.xml" SelfReg="false" NextFile="Interop.MSDASC.dll"/> <ROW File="VBCSCompiler.exe" Component_="VBCSCompiler.exe" FileName="VBCSCO~1.EXE|VBCSCompiler.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\roslyn\VBCSCompiler.exe" SelfReg="false" NextFile="VBCSCompiler.exe.config" DigSign="true"/> - <ROW File="VBCSCompiler.exe.config" Component_="csc.exe.config" FileName="VBCSCO~1.CON|VBCSCompiler.exe.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\roslyn\VBCSCompiler.exe.config" SelfReg="false" NextFile="Tango.AdvancedInstaller.dll"/> + <ROW File="VBCSCompiler.exe.config" Component_="csc.exe.config" FileName="VBCSCO~1.CON|VBCSCompiler.exe.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\roslyn\VBCSCompiler.exe.config" SelfReg="false"/> <ROW File="csc.exe" Component_="csc.exe" FileName="csc.exe" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\roslyn\csc.exe" SelfReg="false" NextFile="csc.exe.config" DigSign="true"/> <ROW File="csc.exe.config" Component_="csc.exe.config" FileName="CSCEXE~1.CON|csc.exe.config" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\roslyn\csc.exe.config" SelfReg="false" NextFile="csc.rsp"/> <ROW File="csc.rsp" Component_="csc.exe.config" FileName="csc.rsp" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\roslyn\csc.rsp" SelfReg="false" NextFile="csi.exe"/> @@ -509,7 +507,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.0.3" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="PPC Installer_v1.0.3"/> + <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\PPC" PackageFileName="PPC Installer v1.0.3" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="PPC Installer_v1.0.5"/> </COMPONENT> <COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent"> <ROW Path="<AI_DICTS>ui.ail"/> diff --git a/Software/Visual_Studio/Build/Shortcuts/Machine Emulator.lnk b/Software/Visual_Studio/Build/Shortcuts/Machine Emulator.lnk Binary files differindex c1a7c4645..8e5483aaf 100644 --- a/Software/Visual_Studio/Build/Shortcuts/Machine Emulator.lnk +++ b/Software/Visual_Studio/Build/Shortcuts/Machine Emulator.lnk diff --git a/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk b/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk Binary files differindex 6351490f4..1fc56ba11 100644 --- a/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk +++ b/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk diff --git a/Software/Visual_Studio/Build/Shortcuts/Proto Compiler GUI.lnk b/Software/Visual_Studio/Build/Shortcuts/Proto Compiler GUI.lnk Binary files differindex 01ddb6f1d..15b821e21 100644 --- a/Software/Visual_Studio/Build/Shortcuts/Proto Compiler GUI.lnk +++ b/Software/Visual_Studio/Build/Shortcuts/Proto Compiler GUI.lnk diff --git a/Software/Visual_Studio/Build/Shortcuts/Stubs Execution GUI.lnk b/Software/Visual_Studio/Build/Shortcuts/Stubs Execution GUI.lnk Binary files differindex ad04a1368..4965e9917 100644 --- a/Software/Visual_Studio/Build/Shortcuts/Stubs Execution GUI.lnk +++ b/Software/Visual_Studio/Build/Shortcuts/Stubs Execution GUI.lnk diff --git a/Software/Visual_Studio/Build/Shortcuts/Transport Router.lnk b/Software/Visual_Studio/Build/Shortcuts/Transport Router.lnk Binary files differindex 20367c999..e979f10c5 100644 --- a/Software/Visual_Studio/Build/Shortcuts/Transport Router.lnk +++ b/Software/Visual_Studio/Build/Shortcuts/Transport Router.lnk diff --git a/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/ViewModels/MainViewVM.cs index 2bd7e16a0..4042f84ad 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/ViewModels/MainViewVM.cs @@ -180,6 +180,8 @@ namespace Tango.MachineStudio.Dispensers.ViewModels { await SelectedDispenser.Reload(_dbContext); } + + View.NavigateTo(DispensersNavigationView.DispensersView); } catch (Exception ex) { diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Tango.MachineStudio.ColorLab.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Tango.MachineStudio.ColorLab.csproj index da97050b7..8a6c16067 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Tango.MachineStudio.ColorLab.csproj +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Tango.MachineStudio.ColorLab.csproj @@ -164,10 +164,6 @@ <Project>{cb0b0aa2-bb24-4bca-a720-45e397684e12}</Project> <Name>Tango.MachineStudio.Common</Name> </ProjectReference> - <ProjectReference Include="..\Tango.MachineStudio.MachineDesigner\Tango.MachineStudio.MachineDesigner.csproj"> - <Project>{d0ce8122-077d-42a2-9490-028ae4769b52}</Project> - <Name>Tango.MachineStudio.MachineDesigner</Name> - </ProjectReference> </ItemGroup> <ItemGroup> <Page Include="Views\CalibrationDataView.xaml"> @@ -196,7 +192,7 @@ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <ProjectExtensions> <VisualStudio> - <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" /> + <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" /> </VisualStudio> </ProjectExtensions> </Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs index 6a89955d6..97af89253 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs @@ -232,6 +232,16 @@ namespace Tango.MachineStudio.ColorLab.ViewModels set { _selectedSuggestion = value; RaisePropertyChangedAuto(); OnSelectedSuggestionChanged(); } } + private bool _isHosted; + /// <summary> + /// Gets or sets a value indicating whether this instance is hosted in another view. + /// </summary> + public bool IsHosted + { + get { return _isHosted; } + set { _isHosted = value; RaisePropertyChangedAuto(); } + } + #endregion #region Commands @@ -383,6 +393,15 @@ namespace Tango.MachineStudio.ColorLab.ViewModels input.InputCoordinates.InputLiquids.Add(inputLiquid); } + foreach (var process in SelectedRML.ProcessParametersTablesGroups.Single().ProcessParametersTables) + { + input.ProcessRanges.Add(new ProcessRange() + { + MinInkUptake = process.MinInkUptake, + MaxInkUptake = process.MaxInkUptake, + }); + } + var output = TangoColorConverter.GetSuggestions(input); IsOutOfGamut = output.OutOfGamut; @@ -538,7 +557,7 @@ namespace Tango.MachineStudio.ColorLab.ViewModels if (LiquidsCalibrationData == null || _prevent_inverse_conversion) return; //TODO: This is temporary because of out of range volumes. - if (LiquidVolumes.Where(x => x.IdsPack.IdsPackFormula.Code == IdsPackFormulas.StandardColor.ToInt32()).Sum(x => x.Volume) > 100) + if (LiquidVolumes.Where(x => x.IdsPack.IdsPackFormula.Code == IdsPackFormulas.StandardColor.ToInt32()).Sum(x => x.Volume) > 200) { IsVolumesOutOfRange = true; return; @@ -576,6 +595,15 @@ namespace Tango.MachineStudio.ColorLab.ViewModels input.InputCoordinates.InputLiquids.Add(inputLiquid); } + foreach (var process in SelectedRML.ProcessParametersTablesGroups.Single().ProcessParametersTables) + { + input.ProcessRanges.Add(new ProcessRange() + { + MinInkUptake = process.MinInkUptake, + MaxInkUptake = process.MaxInkUptake, + }); + } + var output = TangoColorConverter.GetSuggestions(input); TargetColor = new RgbVM() @@ -608,10 +636,14 @@ namespace Tango.MachineStudio.ColorLab.ViewModels { using (_notification.PushTaskItem("Loading RML data...")) { - _dbContext.Adapter.GetConfiguration(x => x.Guid == SelectedMachine.ConfigurationGuid); + if (!IsHosted) + { + _dbContext.Adapter.GetConfiguration(x => x.Guid == SelectedMachine.ConfigurationGuid); + } _selectedRML = new RmlBuilder(_dbContext) - .Set(_selectedRML) + .Set(_selectedRML.Guid) + .WithActiveParametersGroup() .WithCAT(SelectedMachine.Guid) .WithCCT() .WithLiquidFactors().Build(); @@ -708,38 +740,7 @@ namespace Tango.MachineStudio.ColorLab.ViewModels { IsFree = false; - if (_isNewCCT) - { - _dbContext.Ccts.Add(CCT); - } - - await CCT.SaveAsync(_dbContext); - - foreach (var calDataVM in LiquidsCalibrationData) - { - var cat = calDataVM.IdsPack.LiquidType.Cats.FirstOrDefault(x => x.Machine == SelectedMachine && x.Rml == SelectedRML); - - if (cat == null) - { - cat = new Cat(); - cat.Name = "untitled"; - _dbContext.Cats.Add(cat); - } - - cat.Rml = SelectedRML; - cat.Machine = SelectedMachine; - cat.LiquidType = calDataVM.IdsPack.LiquidType; - - CalibrationData calData = new CalibrationData(); - calData.LiquidType = (PMR.ColorLab.LiquidType)cat.LiquidType.Code; - calData.CalibrationPoints.AddRange(calDataVM.CalibrationPoints.Select(x => new CalibrationPoint() { X = x.X, Y = x.Y })); - - cat.PutCalibrationData(calData); - - await cat.SaveAsync(_dbContext); - } - - InvalidateLiquidFactorsCalibrationData(); + await SaveChanges(); } catch (Exception ex) { @@ -752,6 +753,40 @@ namespace Tango.MachineStudio.ColorLab.ViewModels } } + public async Task SaveChanges() + { + if (_isNewCCT) + { + _dbContext.Ccts.Add(CCT); + } + + foreach (var calDataVM in LiquidsCalibrationData) + { + var cat = calDataVM.IdsPack.LiquidType.Cats.FirstOrDefault(x => x.Machine == SelectedMachine && x.Rml == SelectedRML); + + if (cat == null) + { + cat = new Cat(); + cat.Name = "untitled"; + _dbContext.Cats.Add(cat); + } + + cat.Rml = SelectedRML; + cat.Machine = SelectedMachine; + cat.LiquidType = calDataVM.IdsPack.LiquidType; + + CalibrationData calData = new CalibrationData(); + calData.LiquidType = (PMR.ColorLab.LiquidType)cat.LiquidType.Code; + calData.CalibrationPoints.AddRange(calDataVM.CalibrationPoints.Select(x => new CalibrationPoint() { X = x.X, Y = x.Y })); + + cat.PutCalibrationData(calData); + } + + await _dbContext.SaveChangesAsync(); + + InvalidateLiquidFactorsCalibrationData(); + } + #endregion #region Override Methods @@ -763,5 +798,21 @@ namespace Tango.MachineStudio.ColorLab.ViewModels } #endregion + + public void InitHost(ObservablesContext context, Machine machine, IEnumerable<Rml> rmls, Rml selectedRml) + { + _dbContext = context; + _selectedMachine = machine; + + Rmls = new ObservableCollection<Rml>(rmls); + _selectedRML = selectedRml; + + RaisePropertyChanged(nameof(SelectedMachine)); + RaisePropertyChanged(nameof(SelectedRML)); + HiveSuggestions = new List<ColorConversionSuggestion>(); + CalibrationDataViewVM = new CalibrationDataViewVM(_notification); + + InvalidateLiquidFactorsCalibrationData(); + } } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml index 19fa9ebe6..59a1a9058 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/MainView.xaml @@ -14,7 +14,6 @@ xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" xmlns:vm="clr-namespace:Tango.MachineStudio.ColorLab.ViewModels" xmlns:brushPicker="clr-namespace:Tango.BrushPicker;assembly=Tango.BrushPicker" - xmlns:designer="clr-namespace:Tango.MachineStudio.MachineDesigner.Views;assembly=Tango.MachineStudio.MachineDesigner" xmlns:global="clr-namespace:Tango.MachineStudio.ColorLab" xmlns:local="clr-namespace:Tango.MachineStudio.ColorLab.Views" mc:Ignorable="d" @@ -28,17 +27,39 @@ <converters:ObjectToObjectTypeConverter x:Key="ObjectToObjectTypeConverter" /> <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> <converters:BooleanInverseConverter x:Key="BooleanInverseConverter" /> + <converters:BooleanToVisibilityInverseConverter x:Key="BooleanToVisibilityInverseConverter" /> </UserControl.Resources> <Grid> + <Grid.Style> + <Style TargetType="Grid"> + <Setter Property="Margin" Value="0"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding IsHosted}" Value="True"> + <Setter Property="Margin" Value="-30 0 -10 0"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Grid.Style> + <Grid.ColumnDefinitions> <ColumnDefinition Width="500"/> <ColumnDefinition Width="1*"/> </Grid.ColumnDefinitions> - <Grid Background="#B1FFFFFF" IsEnabled="{Binding IsFree}"> + <Grid IsEnabled="{Binding IsFree}"> + <Grid.Style> + <Style TargetType="Grid"> + <Setter Property="Background" Value="#B1FFFFFF"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding IsHosted}" Value="True"> + <Setter Property="Background" Value="Transparent"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Grid.Style> <DockPanel> - <Grid DockPanel.Dock="Bottom" Margin="20"> + <Grid DockPanel.Dock="Bottom" Margin="20" Visibility="{Binding IsHosted,Converter={StaticResource BooleanToVisibilityInverseConverter}}"> <Button Height="60" Command="{Binding SaveCommand}" Width="200" HorizontalAlignment="Right"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon Width="20" Height="20" VerticalAlignment="Center" Kind="ContentSaveSettings"></materialDesign:PackIcon> @@ -48,18 +69,21 @@ </Grid> <StackPanel> - <TextBlock Margin="40 20" FontSize="30" FontWeight="SemiBold" FontStyle="Italic">TARGET MACHINE</TextBlock> - <ComboBox ItemsSource="{Binding Machines}" FontSize="20" SelectedItem="{Binding SelectedMachine}" materialDesign:HintAssist.Hint="Serial Number" Margin="40 0 40 0"> - <ComboBox.ItemTemplate> - <DataTemplate> - <StackPanel> - <TextBlock Text="{Binding SerialNumber}" FontWeight="Bold" FontStyle="Italic"></TextBlock> - <TextBlock FontSize="11" Text="{Binding Name}" Foreground="Gray"></TextBlock> - </StackPanel> - </DataTemplate> - </ComboBox.ItemTemplate> - </ComboBox> - <designer:MachineView Width="500" IsHitTestVisible="False" Margin="0 40 0 0" DataContext="{Binding SelectedMachine}" /> + <StackPanel Visibility="{Binding IsHosted,Converter={StaticResource BooleanToVisibilityInverseConverter}}"> + <TextBlock Margin="40 20" FontSize="30" FontWeight="SemiBold" FontStyle="Italic">TARGET MACHINE</TextBlock> + <ComboBox ItemsSource="{Binding Machines}" FontSize="20" SelectedItem="{Binding SelectedMachine}" materialDesign:HintAssist.Hint="Serial Number" Margin="40 0 40 0"> + <ComboBox.ItemTemplate> + <DataTemplate> + <StackPanel> + <TextBlock Text="{Binding SerialNumber}" FontWeight="Bold" FontStyle="Italic"></TextBlock> + <TextBlock FontSize="11" Text="{Binding Name}" Foreground="Gray"></TextBlock> + </StackPanel> + </DataTemplate> + </ComboBox.ItemTemplate> + </ComboBox> + </StackPanel> + + <commonControls:MachineView Width="500" Margin="0 40 0 0" DataContext="{Binding SelectedMachine}" /> <StackPanel Margin="40 40"> <TextBlock FontSize="16">MEDIA</TextBlock> <ComboBox ItemsSource="{Binding Rmls}" SelectedItem="{Binding SelectedRML}" FontSize="16" IsEnabled="{Binding SelectedMachine,Converter={StaticResource NullObjectToBooleanConverter}}"> @@ -109,13 +133,13 @@ <Grid Grid.Column="1"> <Grid> <Grid.RowDefinitions> - <RowDefinition Height="135" /> + <RowDefinition Height="Auto" /> <RowDefinition Height="Auto"/> <RowDefinition Height="1*" /> </Grid.RowDefinitions> <Grid> - <Grid Margin="10 10 10 0"> + <Grid Margin="10 10 10 0" Height="135" Visibility="{Binding IsHosted,Converter={StaticResource BooleanToVisibilityInverseConverter}}"> <StackPanel HorizontalAlignment="Left" Margin="20 0 0 0"> <TextBlock Margin="0 0 0 0" FontSize="20" TextAlignment="Left">COLOR ADJUSTMENT DATA</TextBlock> <Grid> @@ -123,7 +147,7 @@ <materialDesign:PackIcon Kind="ArrowLeftBoldHexagonOutline" VerticalAlignment="Center" Width="40" Height="40" /> <Image Source="../Images/data-table.png" Height="80" Opacity="0.8"></Image> <StackPanel VerticalAlignment="Center" Width="300" Margin="10 0 0 0"> - + <TextBox IsReadOnly="False" Margin="0 5 0 0" Text="{Binding CCT.ForwardFileName}" HorizontalContentAlignment="Center"></TextBox> <UniformGrid Columns="2" Margin="0 5 0 0" HorizontalAlignment="Right"> <Button Style="{StaticResource MaterialDesignFlatButton}" Padding="0" Command="{Binding ImportForwardDataCommand}"> @@ -145,7 +169,7 @@ </StackPanel> </Grid> - <Rectangle VerticalAlignment="Bottom" Stroke="Silver"></Rectangle> + <Rectangle VerticalAlignment="Bottom" Stroke="Silver" Visibility="{Binding IsHosted,Converter={StaticResource BooleanToVisibilityInverseConverter}}"></Rectangle> </Grid> <Grid Grid.Row="1" Margin="0 40 0 0" HorizontalAlignment="Center"> @@ -278,6 +302,19 @@ </hive:HexList.ItemTemplate> </hive:HexList> + <TextBlock FontSize="40" Foreground="#FF5F5F" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="2" Grid.Row="1" Text="NO INPUT"> + <TextBlock.Style> + <Style TargetType="TextBlock"> + <Setter Property="Visibility" Value="Collapsed"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding HiveSuggestions.Count}" Value="0"> + <Setter Property="Visibility" Value="Visible"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </TextBlock.Style> + </TextBlock> + <Image Source="../Images/arrow-long-right.png" Grid.Column="3" Grid.Row="1" Width="120" Stretch="Fill" Height="30" Opacity="0.8" Margin="20 0 20 0"></Image> <Grid Grid.Column="4" Grid.Row="1" IsHitTestVisible="False"> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs index 8ac8e6acd..35aca807c 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs @@ -65,7 +65,6 @@ namespace Tango.MachineStudio.Developer.ViewModels private DeveloperNavigationManager _navigation; private INavigationManager _msNavigation; private bool _blockInvalidateCommands; - private IAuthenticationProvider _authentication; private ObservablesContext _machineDbContext; private ObservablesContext _activeJobDbContext; private IEventLogger _eventLogger; @@ -549,6 +548,8 @@ namespace Tango.MachineStudio.Developer.ViewModels set { _enableColorConversion = value; RaisePropertyChangedAuto(); } } + public IAuthenticationProvider AuthenticationProvider { get; set; } + #endregion #region Commands @@ -707,7 +708,7 @@ namespace Tango.MachineStudio.Developer.ViewModels CanWork = true; EnableColorConversion = true; - _authentication = authentication; + AuthenticationProvider = authentication; _notification = notificationProvider; _speech = speech; @@ -2052,7 +2053,7 @@ namespace Tango.MachineStudio.Developer.ViewModels Job newJob = new Job(); newJob.Name = jobName; newJob.CreationDate = DateTime.UtcNow; - newJob.UserGuid = _authentication.CurrentUser.Guid; + newJob.UserGuid = AuthenticationProvider.CurrentUser.Guid; if (String.IsNullOrWhiteSpace(settings.DefaultJobRmlGuid)) { @@ -2255,7 +2256,7 @@ namespace Tango.MachineStudio.Developer.ViewModels job.Name = jobName; job.Name = jobName; job.CreationDate = DateTime.UtcNow; - job.UserGuid = _authentication.CurrentUser.Guid; + job.UserGuid = AuthenticationProvider.CurrentUser.Guid; job.Rml = _machineDbContext.Rmls.FirstOrDefault(); job.WindingMethod = _machineDbContext.WindingMethods.FirstOrDefault(); job.SpoolType = _machineDbContext.SpoolTypes.FirstOrDefault(); diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml index 4fba0cc0b..1057f7c84 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml @@ -20,6 +20,7 @@ xmlns:vm="clr-namespace:Tango.MachineStudio.Developer.ViewModels" xmlns:localConverters="clr-namespace:Tango.MachineStudio.Developer.Converters" xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" + xmlns:commonConverters="clr-namespace:Tango.MachineStudio.Common.Converters;assembly=Tango.MachineStudio.Common" xmlns:observables="clr-namespace:Tango.BL.Entities;assembly=Tango.BL" xmlns:editors="clr-namespace:Tango.SharedUI.Editors;assembly=Tango.SharedUI" xmlns:video="clr-namespace:Tango.Video.DirectCapture;assembly=Tango.Video" @@ -73,6 +74,8 @@ <converters:ObjectToObjectTypeConverter x:Key="ObjectToObjectTypeConverter" /> <converters:MathOperatorConverter x:Key="MathOperatorConverter" /> <localConverters:LiquidVolumesToLubricantLiquidVolume x:Key="LiquidVolumesToLubricantLiquidVolume" /> + <commonConverters:UserRoleToVisibilityConverter x:Key="UserRoleToVisibilityConverter" /> + <commonConverters:UserRoleToBooleanConverter x:Key="UserRoleToBooleanConverter" /> <ObjectDataProvider x:Key="dispenserDivisions" MethodName="GetValues" ObjectType="{x:Type sys:Enum}"> @@ -321,7 +324,7 @@ </Border> </StackPanel> </DataTemplate> - + <DataTemplate x:Key="RGB_Template"> <StackPanel> <StackPanel Orientation="Horizontal"> @@ -426,7 +429,7 @@ <ContentControl Style="{StaticResource colorPicker}"></ContentControl> </StackPanel> </DataTemplate> - + </UserControl.Resources> <Grid> @@ -496,7 +499,7 @@ </StackPanel> </Border> - <controls:MultiSelectListBox FocusVisualStyle="{x:Null}" x:Name="listBoxSegments" MouseEnter="listBoxSegments_MouseEnter" PreviewMouseDown="listBoxSegments_PreviewMouseDown" AutomationProperties.AutomationId="{x:Static automation:Developer.SegmentsListBox}" Style="{StaticResource {x:Type ListBox}}" SelectionMode="Extended" SelectionChanged="ListBox_SelectionChanged" ItemsSource="{Binding SegmentsCollectionView}" SelectedItem="{Binding SelectedSegment}" SelectedItemsList="{Binding SelectedSegments,Mode=TwoWay}" HorizontalContentAlignment="Stretch"> + <controls:MultiSelectListBox FocusVisualStyle="{x:Null}" x:Name="listBoxSegments" MouseEnter="listBoxSegments_MouseEnter" PreviewMouseDown="listBoxSegments_PreviewMouseDown" AutomationProperties.AutomationId="{x:Static automation:Developer.SegmentsListBox}" Style="{StaticResource {x:Type ListBox}}" SelectionMode="Extended" SelectionChanged="ListBox_SelectionChanged" ItemsSource="{Binding SegmentsCollectionView}" SelectedItem="{Binding SelectedSegment}" SelectedItemsList="{Binding SelectedSegments,Mode=TwoWay}" HorizontalContentAlignment="Stretch" Padding="0 0 0 0"> <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem" BasedOn="{StaticResource basicListBoxItem}"> <EventSetter Event="PreviewMouseDown" Handler="ListBoxItem_PreviewMouseDown"></EventSetter> @@ -505,7 +508,7 @@ <ListBox.ItemTemplate> <DataTemplate> <Grid Margin="5 10" Style="{StaticResource draggableDroppableGrid}" dragAndDrop:DragAndDropService.Drop="OnSegmentDrop"> - <Polygon Points="40,0 290,0 290,100 0,100 0,30" StrokeThickness="0.2" IsHitTestVisible="False"> + <Polygon Points="40,0 290,0 290,100 0,100 0,30" StrokeThickness="0.2" IsHitTestVisible="False" Stretch="Fill"> <Polygon.Effect> <DropShadowEffect Opacity="0.5" /> </Polygon.Effect> @@ -539,7 +542,7 @@ <Border Height="100" Padding="5" IsHitTestVisible="False"> <Grid> <Rectangle VerticalAlignment="Bottom" Height="8" Fill="{Binding SegmentBrush}"> - + </Rectangle> </Grid> </Border> @@ -748,11 +751,11 @@ </StackPanel> </Border> - <Grid Margin="0 0 0 0"> + <Grid Margin="20 10 0 0"> <StackPanel> <TextBlock>MEDIA</TextBlock> <StackPanel Orientation="Horizontal" DockPanel.Dock="Left"> - <ComboBox Width="200" ItemsSource="{Binding Rmls}" SelectedItem="{Binding SelectedRML}"> + <ComboBox Width="250" ItemsSource="{Binding Rmls}" SelectedItem="{Binding SelectedRML}"> <ComboBox.ItemTemplate> <DataTemplate> <StackPanel> @@ -763,12 +766,12 @@ </ComboBox.ItemTemplate> </ComboBox> - <Button Margin="20 30 0 0" Command="{Binding EditRMLCommand}" HorizontalAlignment="Right" Style="{StaticResource MaterialDesignFlatButton}"> + <!--<Button Margin="20 30 0 0" Command="{Binding EditRMLCommand}" HorizontalAlignment="Right" Style="{StaticResource MaterialDesignFlatButton}"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon VerticalAlignment="Center" Kind="Pencil"></materialDesign:PackIcon> <TextBlock Margin="10 0 0 0">EDIT MEDIA</TextBlock> </StackPanel> - </Button> + </Button>--> @@ -784,56 +787,48 @@ <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center" Orientation="Horizontal" Margin="0 40 40 0"> <materialDesign:PackIcon Kind="ChevronLeft" Width="24" Height="24" /> - <TextBlock Margin="10 -2 10 0" VerticalAlignment="Center"><Run>RML LIQUID FACTORS</Run> <Run FontSize="10" Foreground="DimGray">( Max Nanolitter/CM )</Run></TextBlock> + <TextBlock Margin="10 -2 10 0" VerticalAlignment="Center"><Run>SUPPORTED MEDIA LIQUID</Run> <Run FontSize="10" Foreground="DimGray">( Max Nanolitter/CM )</Run></TextBlock> <materialDesign:PackIcon Kind="ChevronRight" Width="24" Height="24" /> </StackPanel> - <Grid HorizontalAlignment="Right" Margin="0 0 0 0"> - <Grid> - <DockPanel> - <Grid> - <StackPanel HorizontalAlignment="Right" Margin="0 0 0 0"> - <StackPanel Margin="0 10 0 0" Orientation="Horizontal" VerticalAlignment="Center"> - <ItemsControl ItemsSource="{Binding LiquidTypesRmls}"> - <ItemsControl.ItemsPanel> - <ItemsPanelTemplate> - <WrapPanel IsItemsHost="True"></WrapPanel> - </ItemsPanelTemplate> - </ItemsControl.ItemsPanel> - <ItemsControl.ItemTemplate> - <DataTemplate DataType="{x:Type observables:LiquidTypesRml}"> - <StackPanel Margin="0 0 10 0"> - <TextBlock HorizontalAlignment="Center" FontSize="10" Foreground="DimGray" Text="{Binding LiquidType.Name}"></TextBlock> - <Grid Width="58" Height="48" Margin="0 5 0 0"> - <shapes:Hexagon StrokeThickness="1" Stroke="Gray"> - <shapes:Hexagon.Fill> - <LinearGradientBrush Opacity="0.7" > - <GradientStop Color="{Binding LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"/> - <GradientStop Color="White" Offset="1"/> - </LinearGradientBrush> - </shapes:Hexagon.Fill> - </shapes:Hexagon> + <Grid HorizontalAlignment="Right" Margin="0 0 0 0" IsEnabled="{Binding AuthenticationProvider.CurrentUser,Converter={StaticResource UserRoleToBooleanConverter},ConverterParameter='Researcher'}"> + <StackPanel HorizontalAlignment="Right" Margin="0 0 0 0"> + <StackPanel Margin="0 10 0 0" Orientation="Horizontal" VerticalAlignment="Center"> + <ItemsControl ItemsSource="{Binding LiquidTypesRmls}"> + <ItemsControl.ItemsPanel> + <ItemsPanelTemplate> + <WrapPanel IsItemsHost="True"></WrapPanel> + </ItemsPanelTemplate> + </ItemsControl.ItemsPanel> + <ItemsControl.ItemTemplate> + <DataTemplate DataType="{x:Type observables:LiquidTypesRml}"> + <StackPanel Margin="0 0 10 0"> + <TextBlock HorizontalAlignment="Center" FontSize="10" Foreground="DimGray" Text="{Binding LiquidType.Name}"></TextBlock> + <Grid Width="58" Height="48" Margin="0 5 0 0"> + <shapes:Hexagon StrokeThickness="1" Stroke="Gray"> + <shapes:Hexagon.Fill> + <LinearGradientBrush Opacity="0.7" > + <GradientStop Color="{Binding LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"/> + <GradientStop Color="White" Offset="1"/> + </LinearGradientBrush> + </shapes:Hexagon.Fill> + </shapes:Hexagon> - <TextBox Style="{x:Null}" Background="Transparent" Foreground="Black" BorderThickness="0" Text="{Binding MaxNlPerCm}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontWeight="Bold" FontStyle="Italic"></TextBox> - </Grid> - </StackPanel> - </DataTemplate> - </ItemsControl.ItemTemplate> - </ItemsControl> + <TextBox Style="{x:Null}" Background="Transparent" Foreground="Black" BorderThickness="0" Text="{Binding MaxNlPerCm}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontWeight="Bold" FontStyle="Italic"></TextBox> + </Grid> + </StackPanel> + </DataTemplate> + </ItemsControl.ItemTemplate> + </ItemsControl> - <Button Command="{Binding SaveLiquidFactorsCommand}" HorizontalAlignment="Right" Margin="0 20 0 0" Style="{StaticResource MaterialDesignFlatButton}"> - <StackPanel Orientation="Horizontal"> - <materialDesign:PackIcon VerticalAlignment="Center" Kind="Harddisk"></materialDesign:PackIcon> - <TextBlock Margin="10 0 0 0">SAVE FACTORS</TextBlock> - </StackPanel> - </Button> - </StackPanel> + <Button Command="{Binding SaveLiquidFactorsCommand}" HorizontalAlignment="Right" Margin="0 20 0 0" Style="{StaticResource MaterialDesignFlatButton}"> + <StackPanel Orientation="Horizontal"> + <materialDesign:PackIcon VerticalAlignment="Center" Kind="Harddisk"></materialDesign:PackIcon> + <TextBlock Margin="10 0 0 0">SAVE FACTORS</TextBlock> </StackPanel> - - - </Grid> - </DockPanel> - </Grid> + </Button> + </StackPanel> + </StackPanel> </Grid> </Grid> </Grid> @@ -965,7 +960,7 @@ <TextBlock Width="180" TextAlignment="Center" HorizontalAlignment="Center" FontSize="16"> <Run FontWeight="Bold" FontStyle="Italic" Text="OFFSET:" Foreground="#5E5E5E"></Run> <Run FontFamily="{StaticResource digital-7}" Text="{Binding OffsetPercent,StringFormat={}{0:F1}%}"></Run> - <Run Foreground="Gray" Text="{Binding OffsetMeters,Mode=OneWay,StringFormat={} ( {0:F1}m )}"></Run> + <Run FontSize="12" Foreground="Gray" Text="{Binding OffsetMeters,Mode=OneWay,StringFormat={} ( {0:F1}m )}"></Run> </TextBlock> <Slider ValueChanged="Offset_Slider_ValueChanged" Style="{StaticResource GradientOffsetSlider}" SmallChange="0.1" IsSnapToTickEnabled="True" TickFrequency="0.1" Margin="0 20 0 0" HorizontalAlignment="Center" Width="300" Value="{Binding OffsetPercent}" IsEnabled="{Binding IsMiddle}"> <Slider.Foreground> @@ -1529,7 +1524,7 @@ TEMP OFF </TextBlock> </Button> - <Button Height="40" Command="{Binding SaveProcessParametersCommand}" HorizontalAlignment="Left"> + <Button Height="40" Command="{Binding SaveProcessParametersCommand}" HorizontalAlignment="Left" IsEnabled="{Binding AuthenticationProvider.CurrentUser,Converter={StaticResource UserRoleToBooleanConverter},ConverterParameter='Researcher'}"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon VerticalAlignment="Center" Kind="ContentSave"></materialDesign:PackIcon> <TextBlock Margin="10 0 0 0">SAVE PARAMETERS</TextBlock> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Tango.MachineStudio.MachineDesigner.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Tango.MachineStudio.MachineDesigner.csproj index 6ae893e72..d5ad86e2a 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Tango.MachineStudio.MachineDesigner.csproj +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Tango.MachineStudio.MachineDesigner.csproj @@ -81,6 +81,9 @@ <Compile Include="ViewModels\MachineCreationDialogVM.cs" /> <Compile Include="ViewModels\MachineVersionDialogVM.cs" /> <Compile Include="ViewModels\MainViewVM.cs" /> + <Compile Include="Views\ColorCalibrationView.xaml.cs"> + <DependentUpon>ColorCalibrationView.xaml</DependentUpon> + </Compile> <Compile Include="Views\MachineCreationDialog.xaml.cs"> <DependentUpon>MachineCreationDialog.xaml</DependentUpon> </Compile> @@ -109,6 +112,10 @@ <Compile Include="Views\SpoolsView.xaml.cs"> <DependentUpon>SpoolsView.xaml</DependentUpon> </Compile> + <Page Include="Views\ColorCalibrationView.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> <Page Include="Views\MachineCreationDialog.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -230,6 +237,10 @@ <Project>{cb0b0aa2-bb24-4bca-a720-45e397684e12}</Project> <Name>Tango.MachineStudio.Common</Name> </ProjectReference> + <ProjectReference Include="..\Tango.MachineStudio.ColorLab\Tango.MachineStudio.ColorLab.csproj"> + <Project>{4d183aca-552b-4135-ae81-7c5a8e5fc3b1}</Project> + <Name>Tango.MachineStudio.ColorLab</Name> + </ProjectReference> </ItemGroup> <ItemGroup> <Resource Include="Images\machine-full-fx.png" /> @@ -276,7 +287,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/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs index 22bf03148..044217c62 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs @@ -112,6 +112,12 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels set { _selectedSpool = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } } + private ColorLab.ViewModels.MainViewVM _colorLabVM; + public ColorLab.ViewModels.MainViewVM ColorLabVM + { + get { return _colorLabVM; } + set { _colorLabVM = value; RaisePropertyChangedAuto(); } + } #endregion @@ -201,6 +207,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels public override async void OnApplicationReady() { MachinesAdapter.MachineVersions = (await MachinesAdapter.Context.MachineVersions.ToListAsync()).ToObservableCollection(); + ColorLabVM = new ColorLab.ViewModels.MainViewVM(_notification) { IsHosted = true }; } #endregion @@ -419,6 +426,8 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } } + ColorLabVM.InitHost(ActiveMachineAdapter.Context, ActiveMachine, ActiveMachineAdapter.Rmls, ActiveMachineAdapter.Rmls.FirstOrDefault()); + View.NavigateTo(MachineDesignerNavigationView.MachineDetailsView); } catch (Exception ex) @@ -561,6 +570,8 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels ActiveMachine.ProductionDate = DateTime.UtcNow; await ActiveMachineAdapter.Context.SaveChangesAsync(); + await ColorLabVM.SaveChanges(); + if (SelectedMachine != null) { await SelectedMachine.Reload(MachinesAdapter.Context); diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ColorCalibrationView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ColorCalibrationView.xaml new file mode 100644 index 000000000..e73c9661f --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ColorCalibrationView.xaml @@ -0,0 +1,20 @@ +<UserControl x:Class="Tango.MachineStudio.MachineDesigner.Views.ColorCalibrationView" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:local="clr-namespace:Tango.MachineStudio.MachineDesigner.Views" + xmlns:global="clr-namespace:Tango.MachineStudio.MachineDesigner" + xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls" + xmlns:observables="clr-namespace:Tango.BL.Entities;assembly=Tango.BL" + xmlns:vm="clr-namespace:Tango.MachineStudio.MachineDesigner.ViewModels" + xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" + xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" + xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" + xmlns:colorLab="clr-namespace:Tango.MachineStudio.ColorLab.Views;assembly=Tango.MachineStudio.ColorLab" + mc:Ignorable="d" + d:DesignHeight="1080" d:DesignWidth="1920" Background="Transparent" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> + <Grid> + <colorLab:MainView DataContext="{Binding ColorLabVM}" /> + </Grid> +</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ColorCalibrationView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ColorCalibrationView.xaml.cs new file mode 100644 index 000000000..d617df37f --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ColorCalibrationView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace Tango.MachineStudio.MachineDesigner.Views +{ + /// <summary> + /// Interaction logic for ColorCalibrationView.xaml + /// </summary> + public partial class ColorCalibrationView : UserControl + { + public ColorCalibrationView() + { + InitializeComponent(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineDetailsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineDetailsView.xaml index 31e7f535b..ce60ebf02 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineDetailsView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineDetailsView.xaml @@ -42,6 +42,9 @@ <Style TargetType="TabPanel"> <Setter Property="HorizontalAlignment" Value="Center"/> </Style> + <Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}"> + <Setter Property="Padding" Value="20,2"></Setter> + </Style> </TabControl.Resources> <TabItem Header="SETTINGS"> <local:MachineSettingsView/> @@ -52,6 +55,9 @@ <TabItem Header="SPOOLS"> <local:SpoolsView/> </TabItem> + <TabItem Header="COLOR CALIBRATION"> + <local:ColorCalibrationView/> + </TabItem> </TabControl> </Grid> </DockPanel> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MachineView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MachineView.xaml new file mode 100644 index 000000000..6f352f35c --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MachineView.xaml @@ -0,0 +1,268 @@ +<UserControl x:Class="Tango.MachineStudio.Common.Controls.MachineView" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" + xmlns:sharedConverters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" + xmlns:local="clr-namespace:Tango.MachineStudio.Common.Controls" + mc:Ignorable="d" + d:DesignHeight="720" d:DesignWidth="1280"> + + <UserControl.Resources> + <sharedConverters:ColorToIntegerConverter x:Key="ColorToIntegerConverter" /> + + <Style TargetType="Expander" BasedOn="{StaticResource {x:Type Expander}}"> + <Setter Property="HeaderTemplate"> + <Setter.Value> + <DataTemplate> + <TextBlock Text="{Binding}" FontSize="13"></TextBlock> + </DataTemplate> + </Setter.Value> + </Setter> + </Style> + </UserControl.Resources> + + <Grid> + <Viewbox MaxWidth="1200" Grid.Row="1" > + <Grid VerticalAlignment="Top"> + + <Image IsHitTestVisible="False" Source="../Images/machine-full-fx.png" MaxWidth="800" RenderOptions.BitmapScalingMode="Fant"> + <Image.Effect> + <DropShadowEffect ShadowDepth="0" BlurRadius="20" Opacity="1" RenderingBias="Performance" Color="DimGray"></DropShadowEffect> + </Image.Effect> + </Image> + + <Canvas ClipToBounds="False" x:Name="canvas"> + + <Grid x:Name="hardwareGrid" Width="118" Height="27" Canvas.Left="342" Canvas.Top="80" Background="#6B303030" IsHitTestVisible="True"> + <Border BorderBrush="#6C6C6C" BorderThickness="1" IsHitTestVisible="False"> + <StackPanel Orientation="Horizontal"> + <Image Source="../Images/hardware.png" Width="10" VerticalAlignment="Center" Margin="5" RenderOptions.BitmapScalingMode="Fant"></Image> + <TextBlock Padding="2 0 2 0" VerticalAlignment="Center" TextAlignment="Center" Foreground="Gainsboro" IsHitTestVisible="False" FontSize="6" TextWrapping="Wrap"> + <Run Text="{Binding Configuration.HardwareVersion.Name}"></Run> + <Run Text="{Binding Configuration.HardwareVersion.Version}"></Run> + </TextBlock> + </StackPanel> + </Border> + </Grid> + + <TextBlock Canvas.Left="532" FontStyle="Italic" Foreground="Gray" Canvas.Top="-22">Hardware</TextBlock> + <Grid Width="97" Height="90" Canvas.Left="431" Canvas.Top="-13"> + <Rectangle Stroke="Gray" VerticalAlignment="Top" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + <Rectangle Stroke="Gray" HorizontalAlignment="Left" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + </Grid> + + <UniformGrid Width="310" Canvas.Top="295" Canvas.Left="420" Rows="1" Columns="8" TextElement.FontSize="9"> + <TextBlock HorizontalAlignment="Center">1</TextBlock> + <TextBlock HorizontalAlignment="Center">2</TextBlock> + <TextBlock HorizontalAlignment="Center">3</TextBlock> + <TextBlock HorizontalAlignment="Center">4</TextBlock> + <TextBlock HorizontalAlignment="Center">5</TextBlock> + <TextBlock HorizontalAlignment="Center">6</TextBlock> + <TextBlock HorizontalAlignment="Center">7</TextBlock> + <TextBlock HorizontalAlignment="Center">8</TextBlock> + </UniformGrid> + + <Grid x:Name="gridIds" Width="310" Height="195" Canvas.Top="314" Canvas.Left="420"> + <ListBox ItemsSource="{Binding Configuration.IdsPacks}" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> + <ListBox.ItemContainerStyle> + <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}"> + <Setter Property="Padding" Value="0"></Setter> + <Setter Property="VerticalContentAlignment" Value="Stretch"></Setter> + <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> + </Style> + </ListBox.ItemContainerStyle> + <ItemsControl.ItemsPanel> + <ItemsPanelTemplate> + <UniformGrid Columns="8"></UniformGrid> + </ItemsPanelTemplate> + </ItemsControl.ItemsPanel> + <ItemsControl.ItemTemplate> + <DataTemplate> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="1*"/> + <RowDefinition Height="30"/> + </Grid.RowDefinitions> + <UniformGrid Columns="1" Rows="2"> + <Grid Margin="2"> + <Image IsHitTestVisible="False" Source="../Images/dispenser.png" RenderOptions.BitmapScalingMode="Fant"> + <Image.Style> + <Style TargetType="Image"> + <Style.Triggers> + <DataTrigger Binding="{Binding Dispenser}" Value="{x:Null}"> + <Setter Property="Opacity" Value="0.2"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Image.Style> + </Image> + <Rectangle IsHitTestVisible="False" Margin="14 25 13 34"> + <Rectangle.Fill> + <LinearGradientBrush StartPoint="0,0" EndPoint="0,0.8" Opacity="0.8"> + <GradientStop Offset="0" Color="Transparent" /> + <GradientStop Offset="1" Color="{Binding LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"/> + </LinearGradientBrush> + </Rectangle.Fill> + </Rectangle> + </Grid> + + <Grid Margin="2"> + <Image IsHitTestVisible="False" Stretch="Fill" Source="../Images/mid-tank.png" RenderOptions.BitmapScalingMode="Fant"> + <Image.Style> + <Style TargetType="Image"> + <Style.Triggers> + <DataTrigger Binding="{Binding MidTankType}" Value="{x:Null}"> + <Setter Property="Opacity" Value="0.2"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Image.Style> + </Image> + <Rectangle IsHitTestVisible="False" Margin="4 25 4 1"> + <Rectangle.Fill> + <LinearGradientBrush StartPoint="0,0" EndPoint="0,0.8" Opacity="0.8"> + <GradientStop Offset="0" Color="Transparent" /> + <GradientStop Offset="1" Color="{Binding LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"/> + </LinearGradientBrush> + </Rectangle.Fill> + </Rectangle> + </Grid> + </UniformGrid> + + <Grid Grid.Row="1" Margin="3" IsHitTestVisible="False"> + <Grid.Style> + <Style TargetType="Grid"> + <Style.Triggers> + <DataTrigger Binding="{Binding CartridgeType}" Value="{x:Null}"> + <Setter Property="Opacity" Value="0.2"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Grid.Style> + <Border BorderBrush="#252525" BorderThickness="1" CornerRadius="3"> + <Border.Background> + <LinearGradientBrush> + <GradientStop Color="#FF252525"/> + <GradientStop Color="#FF838383" Offset="1"/> + </LinearGradientBrush> + </Border.Background> + </Border> + <Border BorderBrush="#252525" BorderThickness="1" CornerRadius="3"> + <Border.Background> + <LinearGradientBrush Opacity="0.7"> + <GradientStop Offset="0" Color="Transparent" /> + <GradientStop Offset="1" Color="{Binding LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"/> + </LinearGradientBrush> + </Border.Background> + </Border> + </Grid> + </Grid> + </DataTemplate> + </ItemsControl.ItemTemplate> + </ListBox> + + <Grid Margin="0 50 0 0"> + <Grid.Style> + <Style TargetType="Grid"> + <Setter Property="Visibility" Value="Hidden"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding Configuration.IdsPacks.Count}" Value="0"> + <Setter Property="Visibility" Value="Visible"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Grid.Style> + <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" FontWeight="Bold" Foreground="Gainsboro">NO IDS PACKS</TextBlock> + </Grid> + + <Rectangle VerticalAlignment="Bottom" Stroke="DimGray" StrokeThickness="1"> + <Rectangle.Effect> + <DropShadowEffect ShadowDepth="1" Opacity="1" Color="Black" /> + </Rectangle.Effect> + </Rectangle> + </Grid> + + <Grid x:Name="gridEmbedded" Width="70" Height="100" Canvas.Left="80" Canvas.Top="331" IsHitTestVisible="True" SnapsToDevicePixels="True"> + <Image Source="../Images/ti-tm4c129x.png" RenderOptions.BitmapScalingMode="Fant"></Image> + </Grid> + + <Grid Width="61" IsHitTestVisible="True" SnapsToDevicePixels="True" ClipToBounds="True" Height="42" Canvas.Left="85" Canvas.Top="385"> + <Grid.RowDefinitions> + <RowDefinition Height="1*" /> + </Grid.RowDefinitions> + + <StackPanel Orientation="Horizontal"> + <Image Source="../Images/embedded.png" Width="10" VerticalAlignment="Center" Margin="1" RenderOptions.BitmapScalingMode="Fant"></Image> + <TextBlock VerticalAlignment="Center" Padding="1" Foreground="Gainsboro" IsHitTestVisible="False" FontSize="5" TextAlignment="Center" TextWrapping="Wrap" Height="15" Margin="0,6,0,0" Width="47"><Run Text="{Binding Configuration.EmbeddedFirmwareVersion.Name}"/><Run Text=" "/><Run Text="{Binding Configuration.EmbeddedFirmwareVersion.Version}"/></TextBlock> + </StackPanel> + </Grid> + + <TextBlock Canvas.Top="163" Canvas.Left="288" FontStyle="Italic" Foreground="Gray">Touch Panel</TextBlock> + <Grid Width="53" Height="55" Canvas.Top="184" Canvas.Left="279"> + <Rectangle Stroke="Gray" VerticalAlignment="Bottom" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + <Rectangle Stroke="Gray" HorizontalAlignment="Right" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + </Grid> + + <TextBlock Canvas.Top="441" Canvas.Left="156" FontStyle="Italic" Foreground="Gray">Embedded Firmware</TextBlock> + <Grid Width="82" Height="26" Canvas.Top="410" Canvas.Left="158"> + <Rectangle Stroke="Gray" VerticalAlignment="Top" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + <Rectangle Stroke="Gray" HorizontalAlignment="Right" StrokeThickness="1" StrokeDashArray="6" RenderTransformOrigin="0.5,0.5"/> + </Grid> + + <TextBlock Canvas.Top="310" Canvas.Left="340" FontStyle="Italic" Foreground="Gray">Dispensers</TextBlock> + <Grid Width="53" Height="20" Canvas.Top="331" Canvas.Left="377"> + <Rectangle Stroke="Gray" VerticalAlignment="Bottom" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + <Rectangle Stroke="Gray" HorizontalAlignment="Left" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + </Grid> + + <TextBlock Canvas.Top="395" Canvas.Left="331" FontStyle="Italic" Foreground="Gray">Mid Tanks</TextBlock> + <Grid Width="62" Height="29" Canvas.Top="418" Canvas.Left="357"> + <Rectangle Stroke="Gray" VerticalAlignment="Bottom" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + <Rectangle Stroke="Gray" HorizontalAlignment="Left" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + </Grid> + + <TextBlock Canvas.Top="469" Canvas.Left="304" FontStyle="Italic" Foreground="Gray">Cartridges</TextBlock> + <Grid Width="87" Height="10" Canvas.Top="487" Canvas.Left="332"> + <Rectangle Stroke="Gray" VerticalAlignment="Bottom" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + <Rectangle Stroke="Gray" HorizontalAlignment="Left" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/> + </Grid> + + <Grid x:Name="gridTablet" Width="67" IsHitTestVisible="True" SnapsToDevicePixels="True" ClipToBounds="True" Height="90" Canvas.Left="188" Canvas.Top="198"> + <Grid.RowDefinitions> + <RowDefinition Height="1*" /> + <RowDefinition Height="1*" /> + <RowDefinition Height="1*" /> + </Grid.RowDefinitions> + + <StackPanel> + <Image Source="../Images/tablet.png" Width="10" Margin="2" RenderOptions.BitmapScalingMode="Fant"></Image> + <TextBlock Padding="2 0 2 0" Foreground="Gainsboro" IsHitTestVisible="False" FontSize="6" TextAlignment="Center" TextWrapping="Wrap"> + <Run Text="{Binding Configuration.ApplicationDisplayPanelVersion.Name}"></Run> + <Run Text="{Binding Configuration.ApplicationDisplayPanelVersion.Version}"></Run> + </TextBlock> + </StackPanel> + + + <StackPanel Grid.Row="3" > + <Image Source="../Images/application-firmware.png" Width="10" Margin="2" RenderOptions.BitmapScalingMode="Fant"></Image> + <TextBlock Padding="2 0 2 0" IsHitTestVisible="False" Foreground="Gainsboro" FontSize="6" TextAlignment="Center" TextWrapping="Wrap"> + <Run Text="{Binding Configuration.ApplicationFirmwareVersion.Name}"></Run> + <Run Text="{Binding Configuration.ApplicationFirmwareVersion.Version}"></Run> + </TextBlock> + </StackPanel> + + <StackPanel Grid.Row="1" > + <Image Source="../Images/android.png" Width="10" Margin="2" RenderOptions.BitmapScalingMode="Fant"></Image> + <TextBlock Padding="2 0 2 0" IsHitTestVisible="False" Foreground="Gainsboro" FontSize="6" TextAlignment="Center" TextWrapping="Wrap"> + <Run Text="{Binding Configuration.ApplicationOsVersion.Name}"></Run> + <Run Text="{Binding Configuration.ApplicationOsVersion.Version}"></Run> + </TextBlock> + </StackPanel> + </Grid> + </Canvas> + </Grid> + </Viewbox> + </Grid> +</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MachineView.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MachineView.xaml.cs new file mode 100644 index 000000000..9d400549b --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MachineView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace Tango.MachineStudio.Common.Controls +{ + /// <summary> + /// Interaction logic for MachineView.xaml + /// </summary> + public partial class MachineView : UserControl + { + public MachineView() + { + InitializeComponent(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Converters/UserRoleToBooleanConverter.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Converters/UserRoleToBooleanConverter.cs new file mode 100644 index 000000000..87a4d621e --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Converters/UserRoleToBooleanConverter.cs @@ -0,0 +1,41 @@ +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 Tango.BL.Entities; +using Tango.BL.Enumerations; +using Tango.Core.DI; + +namespace Tango.MachineStudio.Common.Converters +{ + public class UserRoleToVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var user = value as User; + + if (user != null && parameter != null) + { + Roles role; + if (Enum.TryParse<Roles>(parameter.ToString(),out role)) + { + if (user.HasRole(role)) + { + return Visibility.Visible; + } + } + } + + return Visibility.Collapsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Converters/UserRoleToVisibilityConverter.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Converters/UserRoleToVisibilityConverter.cs new file mode 100644 index 000000000..7144d38be --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Converters/UserRoleToVisibilityConverter.cs @@ -0,0 +1,41 @@ +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 Tango.BL.Entities; +using Tango.BL.Enumerations; +using Tango.Core.DI; + +namespace Tango.MachineStudio.Common.Converters +{ + public class UserRoleToBooleanConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var user = value as User; + + if (user != null && parameter != null) + { + Roles role; + if (Enum.TryParse<Roles>(parameter.ToString(),out role)) + { + if (user.HasRole(role)) + { + return true; + } + } + } + + return false; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/android.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/android.png Binary files differnew file mode 100644 index 000000000..7fc5fbfe1 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/android.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/app.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/app.png Binary files differnew file mode 100644 index 000000000..9798ed866 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/app.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/application-firmware.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/application-firmware.png Binary files differnew file mode 100644 index 000000000..110ae36aa --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/application-firmware.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/cartridge.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/cartridge.png Binary files differnew file mode 100644 index 000000000..e3a9116fa --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/cartridge.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/dispenser.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/dispenser.png Binary files differnew file mode 100644 index 000000000..a070c94e0 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/dispenser.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/embedded-software.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/embedded-software.png Binary files differnew file mode 100644 index 000000000..b6a2087aa --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/embedded-software.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/embedded.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/embedded.png Binary files differnew file mode 100644 index 000000000..d0b917b44 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/embedded.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/formula.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/formula.png Binary files differnew file mode 100644 index 000000000..6f476e79c --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/formula.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/hardware.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/hardware.png Binary files differnew file mode 100644 index 000000000..856cf1ec7 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/hardware.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/injection.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/injection.png Binary files differnew file mode 100644 index 000000000..af1b3d575 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/injection.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/liquid.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/liquid.png Binary files differnew file mode 100644 index 000000000..7c5a4bceb --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/liquid.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/machine-full-fx.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/machine-full-fx.png Binary files differnew file mode 100644 index 000000000..b3c497546 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/machine-full-fx.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/mid-tank.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/mid-tank.png Binary files differnew file mode 100644 index 000000000..4da752a42 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/mid-tank.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/tablet.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/tablet.png Binary files differnew file mode 100644 index 000000000..1a09683eb --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/tablet.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/tank.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/tank.png Binary files differnew file mode 100644 index 000000000..59440e1e5 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/tank.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/ti-tm4c129x.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/ti-tm4c129x.png Binary files differnew file mode 100644 index 000000000..e414e3355 --- /dev/null +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/ti-tm4c129x.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs index f7c05c1a8..e5fe63d87 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; +using Tango.BL; using Tango.Logging; using Tango.PMR.Printing; using Tango.Settings; @@ -108,6 +109,16 @@ namespace Tango.MachineStudio.Common public bool ByPassEnvironmentVersionCheck { get; set; } /// <summary> + /// Gets or sets a value indicating whether to enable database entity caching. + /// </summary> + public ObservablesContextInMemoryCachingMode CachingMode { get; set; } + + /// <summary> + /// Gets or sets the maximum cache time for a single entity (when CachingMode is set Absolute or Relative). + /// </summary> + public TimeSpan MaximumCacheTime { get; set; } + + /// <summary> /// Gets the machine service address. /// </summary> public String MachineServiceAddress @@ -136,6 +147,8 @@ namespace Tango.MachineStudio.Common Environment = WorkingEnvironment.Remote; DeploymentSlot = DeploymentSlot.DEV; JobUploadStrategy = JobUploadStrategy.Default; + MaximumCacheTime = TimeSpan.FromMinutes(5); + CachingMode = ObservablesContextInMemoryCachingMode.None; } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Resources/GradientOffsetSlider.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Resources/GradientOffsetSlider.xaml index 28d29a727..4108e1cb6 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Resources/GradientOffsetSlider.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Resources/GradientOffsetSlider.xaml @@ -39,7 +39,7 @@ <Setter.Value> <ControlTemplate TargetType="Thumb"> <Canvas> - <materialDesign:PackIcon Kind="MapMarker" Width="24" Background="Transparent" Height="24" IsHitTestVisible="True" Margin="0 0 0 0" /> + <materialDesign:PackIcon Kind="MapMarker" Foreground="DimGray" Width="24" Background="Transparent" Height="24" IsHitTestVisible="True" Margin="0 0 0 0" /> </Canvas> </ControlTemplate> </Setter.Value> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj index 5d9c48cd4..4cf1855ca 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj @@ -84,6 +84,11 @@ <Link>GlobalVersionInfo.cs</Link> </Compile> <Compile Include="Authentication\AuthenticationLoginResult.cs" /> + <Compile Include="Controls\MachineView.xaml.cs"> + <DependentUpon>MachineView.xaml</DependentUpon> + </Compile> + <Compile Include="Converters\UserRoleToBooleanConverter.cs" /> + <Compile Include="Converters\UserRoleToVisibilityConverter.cs" /> <Compile Include="Web\LoginRequest.cs" /> <Compile Include="Web\LoginResponse.cs" /> <Compile Include="AutoComplete\MachinesProvider.cs" /> @@ -153,6 +158,10 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> + <Page Include="Controls\MachineView.xaml"> + <Generator>MSBuild:Compile</Generator> + <SubType>Designer</SubType> + </Page> <Page Include="Controls\MdiContainerControl.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -326,7 +335,54 @@ <EmbedInteropTypes>True</EmbedInteropTypes> </COMReference> </ItemGroup> - <ItemGroup /> + <ItemGroup> + <Resource Include="Images\android.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\app.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\application-firmware.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\cartridge.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\dispenser.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\embedded-software.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\embedded.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\formula.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\hardware.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\injection.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\liquid.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\machine-full-fx.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\mid-tank.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\tablet.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\tank.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\ti-tm4c129x.png" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <ProjectExtensions> <VisualStudio> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.xaml.cs index d4598867c..2e2b1a014 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.xaml.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.xaml.cs @@ -84,6 +84,26 @@ namespace Tango.MachineStudio.UI exceptionTrapper = new WpfGlobalExceptionTrapper(); exceptionTrapper.Initialize(this); exceptionTrapper.ApplicationCrashed += ExceptionTrapper_ApplicationCrashed; + + //Apply Caching + if (settings.CachingMode != ObservablesContextInMemoryCachingMode.None) + { + LogManager.Log("EF Caching is enabled."); + LogManager.Log($"EF Caching mode is: {settings.CachingMode}."); + LogManager.Log($"EF Caching timeout: {settings.MaximumCacheTime.ToString()}"); + try + { + ObservablesContext.EnableInMemoryCache(settings.MaximumCacheTime, settings.CachingMode); + } + catch (Exception ex) + { + LogManager.Log(ex, "Error while trying to activate EF caching."); + } + } + else + { + LogManager.Log("EF Caching is disabled"); + } } #region Global Exception Trapping diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Authentication/DefaultAuthenticationProvider.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Authentication/DefaultAuthenticationProvider.cs index d6fb50a8c..7aa9ae890 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Authentication/DefaultAuthenticationProvider.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Authentication/DefaultAuthenticationProvider.cs @@ -84,7 +84,15 @@ namespace Tango.MachineStudio.UI.Authentication ObservablesContext.OverrideSettingsDataSource(response.DataSource); } - ObservablesStaticCollections.Instance.Initialize(); + try + { + ObservablesStaticCollections.Instance.Initialize(); + } + catch (System.Data.Entity.Core.MetadataException) + { + ObservablesContext.ClearModelStore(); + ObservablesStaticCollections.Instance.Initialize(); + } using (ObservablesContext db = ObservablesContext.CreateDefault()) { diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs index f313e9073..8440c88b2 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs @@ -4,5 +4,5 @@ using System.Runtime.InteropServices; [assembly: System.Windows.ThemeInfo(System.Windows.ResourceDictionaryLocation.None, System.Windows.ResourceDictionaryLocation.SourceAssembly)] [assembly: AssemblyTitle("Tango - Machine Studio")] -[assembly: AssemblyVersion("4.0.9.0")] +[assembly: AssemblyVersion("4.0.10.0")] [assembly: ComVisible(false)]
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/AboutView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/AboutView.xaml index 640c3c1df..54a8349e6 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/AboutView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/AboutView.xaml @@ -6,6 +6,7 @@ xmlns:vm="clr-namespace:Tango.MachineStudio.UI.ViewModels" xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" + xmlns:bl="clr-namespace:Tango.BL;assembly=Tango.BL" xmlns:local="clr-namespace:Tango.MachineStudio.UI.Views" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" Width="600" Height="700" Background="White" d:DataContext="{d:DesignInstance Type=vm:AboutViewVM, IsDesignTimeCreatable=False}" DataContext="{Binding AboutViewVM, Source={StaticResource Locator}}"> @@ -13,6 +14,7 @@ <UserControl.Resources> <converters:VersionToShortVersionConverter x:Key="VersionToShortVersionConverter" /> <converters:EnumToDescriptionConverter x:Key="EnumToDescriptionConverter" /> + <converters:EnumToItemsSourceConverter x:Key="EnumToItemsSourceConverter" /> </UserControl.Resources> <Grid> @@ -60,6 +62,11 @@ <TextBlock><Run Text="{Binding DataSource.Address,Mode=OneWay}"></Run> <Run>(</Run><Run Foreground="Gray" Text="{Binding DataSource.Catalog,Mode=OneWay}"></Run><Run>)</Run> </TextBlock> + <TextBlock FontWeight="SemiBold">Caching Mode:</TextBlock> + <DockPanel> + <ComboBox Width="150" DockPanel.Dock="Left" ItemsSource="{Binding Source={x:Type bl:ObservablesContextInMemoryCachingMode},Converter={StaticResource EnumToItemsSourceConverter}}" SelectedValue="{Binding MachineStudioSettings.CachingMode}" SelectedValuePath="Value" DisplayMemberPath="DisplayName"></ComboBox> + <TextBlock Margin="20 0 0 0" Foreground="Gray" VerticalAlignment="Center">(Requires restart)</TextBlock> + </DockPanel> </controls:TableGrid> <DockPanel Margin="0 0 0 0"> diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Events/EventsModule.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Events/EventsModule.cs index e1e5c93ec..0ad826546 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Events/EventsModule.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Events/EventsModule.cs @@ -47,7 +47,7 @@ namespace Tango.PPC.Events { get { - return ResourceHelper.GetImageFromResources("Images/events-module.png"); + return ResourceHelper.GetImageFromResources("Images/events.png"); } } diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Events/Images/events.png b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Events/Images/events.png Binary files differnew file mode 100644 index 000000000..53a767f8e --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Events/Images/events.png diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Events/Tango.PPC.Events.csproj b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Events/Tango.PPC.Events.csproj index fa7583e85..815223834 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Events/Tango.PPC.Events.csproj +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Events/Tango.PPC.Events.csproj @@ -164,10 +164,13 @@ <ItemGroup> <Resource Include="Images\event_demo.png" /> </ItemGroup> + <ItemGroup> + <Resource Include="Images\events.png" /> + </ItemGroup> <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.Jobs/AppButtons/StopPrintingButton.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/AppButtons/StopPrintingButton.cs index 8c3b444b3..d9ef86861 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/AppButtons/StopPrintingButton.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/AppButtons/StopPrintingButton.cs @@ -9,7 +9,7 @@ namespace Tango.PPC.Jobs.AppButtons { public class StopPrintingButton : AppButton { - public StopPrintingButton() : base("STOP DYEING", true) + public StopPrintingButton() : base("STOP", true) { } diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Converters/ColorSpaceToImageConverter.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Converters/ColorSpaceToImageConverter.cs new file mode 100644 index 000000000..a74a87d28 --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Converters/ColorSpaceToImageConverter.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Data; +using Tango.BL.Enumerations; +using Tango.SharedUI.Helpers; + +namespace Tango.PPC.Jobs.Converters +{ + public class ColorSpaceToImageConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value != null) + { + ColorSpaces colorSpace = (ColorSpaces)value; + + switch (colorSpace) + { + case ColorSpaces.RGB: + return ResourceHelper.GetImageFromResources("Images/NewJob/rgb.png"); + case ColorSpaces.LAB: + return ResourceHelper.GetImageFromResources("Images/NewJob/lab.png"); + case ColorSpaces.Twine: + return ResourceHelper.GetImageFromResources("Images/NewJob/twine.png"); + default: + return ResourceHelper.GetImageFromResources("Images/NewJob/coats.png"); + } + } + return null; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Dialogs/JobCreationView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Dialogs/JobCreationView.xaml index 1f48474aa..0e4f6e38c 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Dialogs/JobCreationView.xaml +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Dialogs/JobCreationView.xaml @@ -9,26 +9,29 @@ xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:touch="clr-namespace:Tango.Touch.Controls;assembly=Tango.Touch" mc:Ignorable="d" - Background="{StaticResource TangoPrimaryBackgroundBrush}" d:DesignHeight="555" d:DesignWidth="560" Width="550" Height="750" d:DataContext="{d:DesignInstance Type=local:JobCreationViewVM, IsDesignTimeCreatable=False}"> + Background="{StaticResource TangoPrimaryBackgroundBrush}" d:DesignHeight="555" d:DesignWidth="560" Width="570" Height="700" d:DataContext="{d:DesignInstance Type=local:JobCreationViewVM, IsDesignTimeCreatable=False}"> <UserControl.Resources> <converters:JobTypeToImageConverter x:Key="JobTypeToImageConverter" /> + <converters:ColorSpaceToImageConverter x:Key="ColorSpaceToImageConverter" /> </UserControl.Resources> <Grid Margin="20"> <DockPanel> - <StackPanel DockPanel.Dock="Bottom" HorizontalAlignment="Right" Orientation="Horizontal"> - <touch:TouchButton Command="{Binding CloseCommand}" Style="{StaticResource TangoMessageBoxButton}" DockPanel.Dock="Right" Width="120" Height="50" VerticalAlignment="Bottom">CANCEL</touch:TouchButton> - <touch:TouchButton Command="{Binding OKCommand}" Style="{StaticResource TangoMessageBoxButton}" DockPanel.Dock="Right" Width="120" Height="50" VerticalAlignment="Bottom">CREATE</touch:TouchButton> + <Grid DockPanel.Dock="Bottom"> + <touch:TouchButton HorizontalAlignment="Left" CornerRadius="25" Command="{Binding CloseCommand}" Style="{StaticResource TangoHollowButton}" Width="150" Height="50" VerticalAlignment="Bottom">CANCEL</touch:TouchButton> + <touch:TouchButton HorizontalAlignment="Right" CornerRadius="25" Command="{Binding OKCommand}" Style="{StaticResource TangoHollowButton}" Width="150" Height="50" VerticalAlignment="Bottom">CREATE</touch:TouchButton> + </Grid> + + <StackPanel DockPanel.Dock="Top"> + <TextBlock HorizontalAlignment="Left" Margin="0 10 0 0" FontSize="{StaticResource TangoHeaderFontSize}">New Job</TextBlock> + <TextBlock Margin="0 30 100 0" HorizontalAlignment="Left" TextWrapping="Wrap" FontSize="{StaticResource TangoTitleFontSize}">Please select the job application and color space/catalog and press 'create'.</TextBlock> </StackPanel> - <StackPanel> - <touch:TouchIcon HorizontalAlignment="Center" Icon="PlusCircle" Foreground="{StaticResource TangoSuccessBrush}" Height="80" /> - <TextBlock HorizontalAlignment="Center" Margin="0 20 0 0" FontSize="{StaticResource TangoHeaderFontSize}">NEW JOB</TextBlock> - <TextBlock Margin="20 20" HorizontalAlignment="Center" TextWrapping="Wrap" TextAlignment="Center">Please select the job application and color space/catalog and press 'CREATE'.</TextBlock> - <touch:TouchStaticListBox Margin="20" ItemsSource="{Binding SupportedJobTypes}" SelectedItem="{Binding SelectedJobType,Mode=TwoWay}"> + <UniformGrid Rows="2" Margin="0 40 0 0" VerticalAlignment="Center" TextElement.FontWeight="Normal"> + <touch:TouchStaticListBox Margin="20" VerticalAlignment="Center" Width="480" ItemsSource="{Binding SupportedJobTypes}" SelectedItem="{Binding SelectedJobType,Mode=TwoWay}"> <touch:TouchStaticListBox.ItemsPanel> <ItemsPanelTemplate> <UniformGrid Rows="1" /> @@ -36,10 +39,16 @@ </touch:TouchStaticListBox.ItemsPanel> <touch:TouchStaticListBox.ItemContainerStyle> <Style TargetType="touch:TouchStaticListBoxItem"> - <Setter Property="Opacity" Value="0.5"></Setter> + <Setter Property="BorderBrush" Value="{StaticResource TangoPrimaryAccentBrush}"></Setter> + <Setter Property="BorderThickness" Value="0"></Setter> + <Setter Property="CornerRadius" Value="5"></Setter> + <Setter Property="Padding" Value="0 10"></Setter> + <Setter Property="Margin" Value="25"></Setter> + <Setter Property="Background" Value="Transparent"></Setter> + <Setter Property="Width" Value="110"></Setter> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> - <Setter Property="Opacity" Value="1"></Setter> + <Setter Property="BorderThickness" Value="2"></Setter> </Trigger> </Style.Triggers> </Style> @@ -48,37 +57,50 @@ <DataTemplate> <StackPanel Orientation="Vertical" HorizontalAlignment="Center"> <Image Stretch="Fill" Width="60" RenderOptions.BitmapScalingMode="Fant" Height="60" Source="{Binding Converter={StaticResource JobTypeToImageConverter}}"></Image> - <TextBlock HorizontalAlignment="Center" Margin="0 5 0 0" Text="{Binding Converter={StaticResource EnumToDescriptionConverter}}" FontSize="{StaticResource TangoButtonFontSize}"></TextBlock> + <TextBlock HorizontalAlignment="Center" Margin="0 10 0 0" Text="{Binding Converter={StaticResource EnumToDescriptionConverter}}" ></TextBlock> </StackPanel> </DataTemplate> </touch:TouchStaticListBox.ItemTemplate> </touch:TouchStaticListBox> - - <touch:TouchStaticListBox Margin="20 100 20 20" ItemsSource="{Binding SupportedColorSpaces}" SelectedItem="{Binding SelectedColorSpace,Mode=TwoWay}"> - <touch:TouchStaticListBox.ItemsPanel> - <ItemsPanelTemplate> - <UniformGrid Rows="1" /> - </ItemsPanelTemplate> - </touch:TouchStaticListBox.ItemsPanel> - <touch:TouchStaticListBox.ItemContainerStyle> - <Style TargetType="touch:TouchStaticListBoxItem"> - <Setter Property="Opacity" Value="0.5"></Setter> - <Style.Triggers> - <Trigger Property="IsSelected" Value="True"> - <Setter Property="Opacity" Value="1"></Setter> - </Trigger> - </Style.Triggers> - </Style> - </touch:TouchStaticListBox.ItemContainerStyle> - <touch:TouchStaticListBox.ItemTemplate> - <DataTemplate> - <Border BorderBrush="{StaticResource TangoLightBorderBrush}" BorderThickness="1" Padding="20" Margin="5" Background="Transparent"> - <TextBlock HorizontalAlignment="Center" Text="{Binding}" FontSize="{StaticResource TangoDefaultFontSize}"></TextBlock> - </Border> - </DataTemplate> - </touch:TouchStaticListBox.ItemTemplate> - </touch:TouchStaticListBox> - </StackPanel> + + <Grid> + <Rectangle HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="70 0" StrokeThickness="1" Stroke="{StaticResource TangoDividerBrush}" /> + <touch:TouchStaticListBox Margin="0 -40 0 0" VerticalAlignment="Center" Width="440" ItemsSource="{Binding SupportedColorSpaces}" SelectedItem="{Binding SelectedColorSpace,Mode=TwoWay}"> + <touch:TouchStaticListBox.ItemsPanel> + <ItemsPanelTemplate> + <UniformGrid Rows="1" /> + </ItemsPanelTemplate> + </touch:TouchStaticListBox.ItemsPanel> + <touch:TouchStaticListBox.ItemContainerStyle> + <Style TargetType="touch:TouchStaticListBoxItem"> + <Setter Property="BorderBrush" Value="{StaticResource TangoPrimaryAccentBrush}"></Setter> + <Setter Property="BorderThickness" Value="0"></Setter> + <Setter Property="CornerRadius" Value="5"></Setter> + <Setter Property="Padding" Value="0 10"></Setter> + <Setter Property="Margin" Value="10"></Setter> + <Setter Property="Width" Value="90"></Setter> + <Setter Property="Background" Value="Transparent"></Setter> + <Style.Triggers> + <Trigger Property="IsSelected" Value="True"> + <Setter Property="BorderThickness" Value="2"></Setter> + </Trigger> + </Style.Triggers> + </Style> + </touch:TouchStaticListBox.ItemContainerStyle> + <touch:TouchStaticListBox.ItemTemplate> + <DataTemplate> + <StackPanel Orientation="Vertical" HorizontalAlignment="Center"> + <Image Stretch="Fill" Width="32" Height="32" RenderOptions.BitmapScalingMode="Fant" Source="{Binding Converter={StaticResource ColorSpaceToImageConverter}}"></Image> + <TextBlock HorizontalAlignment="Center" Margin="0 10 0 0" Text="{Binding}"></TextBlock> + </StackPanel> + </DataTemplate> + </touch:TouchStaticListBox.ItemTemplate> + </touch:TouchStaticListBox> + </Grid> + </UniformGrid> </DockPanel> </Grid> </UserControl> + + +
\ No newline at end of file diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/NewJob/coats.png b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/NewJob/coats.png Binary files differnew file mode 100644 index 000000000..d6cd3ecf2 --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/NewJob/coats.png diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/NewJob/lab.png b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/NewJob/lab.png Binary files differnew file mode 100644 index 000000000..607afd980 --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/NewJob/lab.png diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/NewJob/rgb.png b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/NewJob/rgb.png Binary files differnew file mode 100644 index 000000000..dfdf32c8d --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/NewJob/rgb.png diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/NewJob/twine.png b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/NewJob/twine.png Binary files differnew file mode 100644 index 000000000..b1d3da8c5 --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/NewJob/twine.png diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/jobs.png b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/jobs.png Binary files differnew file mode 100644 index 000000000..eb668ad03 --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/jobs.png diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/length.png b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/length.png Binary files differnew file mode 100644 index 000000000..bad870dcb --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Images/length.png diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/JobsModule.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/JobsModule.cs index f15aad70c..b9e121f86 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/JobsModule.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/JobsModule.cs @@ -47,7 +47,7 @@ namespace Tango.PPC.Jobs { get { - return ResourceHelper.GetImageFromResources("Images/jobs-module.png"); + return ResourceHelper.GetImageFromResources("Images/jobs.png"); } } diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Messages/NavigatedToJobsModuleMessage.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Messages/NavigatedToJobsModuleMessage.cs new file mode 100644 index 000000000..3f2be3f89 --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Messages/NavigatedToJobsModuleMessage.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.PPC.Jobs.Messages +{ + public class NavigatedToJobsModuleMessage + { + } +} diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Tango.PPC.Jobs.csproj b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Tango.PPC.Jobs.csproj index 34c4861ab..e9ec35811 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Tango.PPC.Jobs.csproj +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Tango.PPC.Jobs.csproj @@ -155,6 +155,7 @@ <Compile Include="Controls\TwineCatalogViewer.xaml.cs"> <DependentUpon>TwineCatalogViewer.xaml</DependentUpon> </Compile> + <Compile Include="Converters\ColorSpaceToImageConverter.cs" /> <Compile Include="Converters\JobProgressToPositionConverter.cs" /> <Compile Include="Converters\JobsCategoryToVisibilityConverter.cs" /> <Compile Include="Converters\JobToPieImageConverter.cs" /> @@ -186,6 +187,7 @@ <Compile Include="JobsModule.cs" /> <Compile Include="JobsModuleSettings.cs" /> <Compile Include="Messages\JobSelectedMessage.cs" /> + <Compile Include="Messages\NavigatedToJobsModuleMessage.cs" /> <Compile Include="NavigationObjects\JobNavigationObject.cs" /> <Compile Include="Properties\AssemblyInfo.cs"> <SubType>Code</SubType> @@ -390,10 +392,22 @@ <Resource Include="Images\color_approved_small_gray.png" /> <Resource Include="Images\sample_approved_small_gray.png" /> </ItemGroup> + <ItemGroup> + <Resource Include="Images\NewJob\coats.png" /> + <Resource Include="Images\NewJob\lab.png" /> + <Resource Include="Images\NewJob\rgb.png" /> + <Resource Include="Images\NewJob\twine.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\length.png" /> + </ItemGroup> + <ItemGroup> + <Resource Include="Images\jobs.png" /> + </ItemGroup> <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.Jobs/ViewModels/JobSummeryViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobSummeryViewVM.cs index 46c6d7ffd..cd7308afb 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobSummeryViewVM.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobSummeryViewVM.cs @@ -32,6 +32,18 @@ namespace Tango.PPC.Jobs.ViewModels set { _job = value; RaisePropertyChangedAuto(); } } + private TimeSpan _estimatedDuration; + /// <summary> + /// Gets or sets the duration of the estimated. + /// </summary> + + public TimeSpan EstimatedDuration + { + get { return _estimatedDuration; } + set { _estimatedDuration = value; RaisePropertyChangedAuto(); } + } + + /// <summary> /// Gets or sets the dye command. /// </summary> @@ -57,10 +69,25 @@ namespace Tango.PPC.Jobs.ViewModels /// Handles the job selected message. /// </summary> /// <param name="message">The message.</param> - private void HandleJobSelectedMessage(JobSelectedMessage message) + private async void HandleJobSelectedMessage(JobSelectedMessage message) { _context = message.Context; Job = message.Job; + + Job = await new JobBuilder(_context).Set(Job.Guid) + .WithConfiguration() + .WithRML() + .WithUser() + .WithSegments() + .WithBrushStops() + .BuildAsync(); + + + try + { + EstimatedDuration = await Job.GetEstimatedDuration(); + } + catch { } } /// <summary> @@ -81,16 +108,8 @@ namespace Tango.PPC.Jobs.ViewModels { LogManager.Log("Start job command pressed. Starting job and navigating to job progress view..."); - Job = await new JobBuilder(_context).Set(Job.Guid) - .WithConfiguration() - .WithRML() - .WithUser() - .WithSegments() - .WithBrushStops() - .BuildAsync(); - PrintingManager.Print(Job, _context); - await NavigationManager.NavigateTo<JobsModule>(nameof(JobProgressView)); + await NavigationManager.NavigateTo<JobsModule>(false, nameof(JobProgressView)); } catch (Exception ex) { diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs index 6d4a4ef55..f0cf87079 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs @@ -486,6 +486,22 @@ namespace Tango.PPC.Jobs.ViewModels { LogManager.Log("Saving job..."); + if (!String.IsNullOrWhiteSpace(CustomersFilter)) + { + if (!Customers.Exists(x => x.Name == CustomersFilter)) + { + var newCustomer = new Customer() + { + OrganizationGuid = MachineProvider.Machine.OrganizationGuid, + Name = CustomersFilter, + }; + + _db.Customers.Add(newCustomer); + + Job.Customer = newCustomer; + } + } + await _db.SaveChangesAsync(); RaiseMessage(new JobSavedMessage() { Job = Job }); @@ -1035,6 +1051,16 @@ namespace Tango.PPC.Jobs.ViewModels public override void OnApplicationStarted() { base.OnApplicationStarted(); + + MachineProvider.MachineOperator.PrintingEnded += MachineOperator_PrintingEnded; + } + + private void MachineOperator_PrintingEnded(object sender, Integration.Operation.PrintingEventArgs e) + { + if (IsVisible) + { + _start_printing_btn.Push(); + } } /// <summary> @@ -1042,7 +1068,10 @@ namespace Tango.PPC.Jobs.ViewModels /// </summary> public override void OnNavigatedTo() { - _start_printing_btn.Push(); + if (MachineProvider.MachineOperator.Status != Integration.Operation.MachineStatuses.Printing) + { + _start_printing_btn.Push(); + } base.OnNavigatedTo(); LoadJob(); diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobsViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobsViewVM.cs index a2927660f..961901d2c 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobsViewVM.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobsViewVM.cs @@ -127,6 +127,7 @@ namespace Tango.PPC.Jobs.ViewModels _selectedCategoryIndex = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(SelectedCategory)); + Filter = null; } } @@ -138,10 +139,24 @@ namespace Tango.PPC.Jobs.ViewModels get { return (JobsCategory)SelectedCategoryIndex; } set { - SelectedCategoryIndex = value.ToInt32(); + if (SelectedCategoryIndex != value.ToInt32()) + { + SelectedCategoryIndex = value.ToInt32(); + Filter = null; + } } } + private String _filter; + /// <summary> + /// Gets or sets the search filter. + /// </summary> + public String Filter + { + get { return _filter; } + set { _filter = value; RaisePropertyChangedAuto(); OnFilterChanged(); } + } + #endregion #region Commands @@ -210,6 +225,7 @@ namespace Tango.PPC.Jobs.ViewModels RegisterForMessage<JobRemovedMessage>(HandleJobRemovedMessage); RegisterForMessage<JobSavedMessage>(HandleJobSavedMessage); + RegisterForMessage<NavigatedToJobsModuleMessage>((x) => Filter = null); } #endregion @@ -256,7 +272,7 @@ namespace Tango.PPC.Jobs.ViewModels { LogManager.Log($"Job '{job.Name}' selected."); - if (!directlyToEdit) + if (!directlyToEdit && MachineProvider.MachineOperator.Status == Integration.Operation.MachineStatuses.ReadyToDye) { await NavigationManager.NavigateTo<JobsModule>(nameof(JobSummeryView)); } @@ -284,19 +300,43 @@ namespace Tango.PPC.Jobs.ViewModels _db = ObservablesContext.CreateDefault(); - var jobs = new JobsCollectionBuilder(_db).Set(x => x.MachineGuid == MachineProvider.Machine.Guid).WithSegments().WithBrushStops().Build(); + var jobs = new JobsCollectionBuilder(_db).Set(x => x.MachineGuid == MachineProvider.Machine.Guid).WithSegments().WithBrushStops().WithCustomer().Build(); InvokeUI(() => { Jobs = jobs; DraftJobsCollectionView = new ListCollectionView(Jobs); DraftJobsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Job.LastUpdated), ListSortDirection.Descending)); - DraftJobsCollectionView.Filter = new Predicate<object>(x => (x as Job).JobStatus == JobStatuses.Draft); + DraftJobsCollectionView.Filter = new Predicate<object>(x => + { + var job = x as Job; + + if (String.IsNullOrWhiteSpace(Filter)) + { + return job.JobStatus == JobStatuses.Draft; + } + else + { + return job.JobStatus == JobStatuses.Draft && (job.Name.ToLower().StartsWith(Filter) || (job.Customer != null && job.Customer.Name.ToLower().StartsWith(Filter))); + } + }); HistoryJobsCollectionView = new ListCollectionView(Jobs); HistoryJobsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Job.LastUpdated), ListSortDirection.Descending)); - HistoryJobsCollectionView.Filter = new Predicate<object>(x => (x as Job).JobStatus != JobStatuses.Draft); + HistoryJobsCollectionView.Filter = new Predicate<object>(x => + { + var job = x as Job; + + if (String.IsNullOrWhiteSpace(Filter)) + { + return job.JobStatus != JobStatuses.Draft; + } + else + { + return job.JobStatus != JobStatuses.Draft && (job.Name.ToLower().StartsWith(Filter) || (job.Customer != null && job.Customer.Name.ToLower().StartsWith(Filter))); + } + }); IsLoadingJobs = false; LogManager.Log("Machine jobs loaded!"); @@ -357,7 +397,7 @@ namespace Tango.PPC.Jobs.ViewModels vm.SelectedColorSpace = space.IsUserSpace() ? space : ColorSpaces.Twine; } - if (machine.SupportedJobTypes.Count != 1 && machine.SupportedColorSpaces.Count != 1) + if (machine.SupportedJobTypes.Count != 1 || machine.SupportedColorSpaces.Count != 1) { vm = await NotificationProvider.ShowDialog<JobCreationViewVM>(vm); if (!vm.DialogResult) return; @@ -485,6 +525,24 @@ namespace Tango.PPC.Jobs.ViewModels } } + /// <summary> + /// Called when the search filter has been changed + /// </summary> + private void OnFilterChanged() + { + if (DraftJobsCollectionView != null && HistoryJobsCollectionView != null) + { + if (SelectedCategory == JobsCategory.Draft) + { + DraftJobsCollectionView.Refresh(); + } + else if (SelectedCategory == JobsCategory.History) + { + HistoryJobsCollectionView.Refresh(); + } + } + } + #endregion #region Message Handling @@ -536,6 +594,12 @@ namespace Tango.PPC.Jobs.ViewModels StorageProvider.RegisterFileHandler(ExplorerFileDefinition.Job.Extension, HandleJobFileLoaded); } + public override void OnNavigatedTo() + { + base.OnNavigatedTo(); + Filter = null; + } + #endregion #region Job Export diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/MainViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/MainViewVM.cs index 5b4a3e403..7026a6ebc 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/MainViewVM.cs @@ -9,6 +9,7 @@ using Tango.Integration.Operation; using Tango.PPC.Common; using Tango.PPC.Common.Notifications; using Tango.PPC.Common.Notifications.NotificationItems; +using Tango.PPC.Jobs.Messages; using Tango.PPC.Jobs.NavigationObjects; using Tango.PPC.Jobs.Views; @@ -79,5 +80,11 @@ namespace Tango.PPC.Jobs.ViewModels })); } } + + public override void OnNavigatedTo() + { + base.OnNavigatedTo(); + RaiseMessage<NavigatedToJobsModuleMessage>(); + } } } diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobSummeryView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobSummeryView.xaml index 27c3cb93a..ac2d5b3be 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobSummeryView.xaml +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobSummeryView.xaml @@ -26,39 +26,76 @@ </Border> <Grid Grid.Row="1"> - <DockPanel> - <Grid DockPanel.Dock="Bottom" Height="350"> - <StackPanel Margin="50 0 50 0"> - <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0 60 0 0"> - <touch:TouchButton FontSize="{StaticResource TangoExpanderHeaderFontSize}" Command="{Binding EditCommand}" BorderThickness="2" BorderBrush="{StaticResource TangoPrimaryAccentBrush}" RippleBrush="{StaticResource TangoRippleDarkBrush}" Background="Transparent" EnableDropShadow="False" Height="80" Padding="0" Width="270" Foreground="{StaticResource TangoPrimaryAccentBrush}" CornerRadius="40" BlurRadius="20" HorizontalAlignment="Right"> - <StackPanel Orientation="Horizontal"> - <fa:ImageAwesome Icon="Pencil" Width="24" Foreground="{StaticResource TangoPrimaryAccentBrush}" /> - <TextBlock Margin="20 0 0 0" VerticalAlignment="Center">EDIT</TextBlock> - </StackPanel> - </touch:TouchButton> - <touch:TouchButton IsEnabled="{Binding MachineProvider.MachineOperator.CanPrint}" FontSize="{StaticResource TangoExpanderHeaderFontSize}" Margin="20 0 0 0" Height="80" Padding="0" Width="270" CornerRadius="40" BlurRadius="20" HorizontalAlignment="Right" DelayCommand="{Binding DyeCommand}" DelayCommandDuration="00:00:0.3"> - <StackPanel Orientation="Horizontal"> - <TextBlock VerticalAlignment="Center">DYE</TextBlock> - <touch:TouchIcon Margin="20 0 0 0" Icon="ChevronRight" Width="14" /> - </StackPanel> - </touch:TouchButton> - </StackPanel> - </StackPanel> - </Grid> + <Border Padding="50"> + <DockPanel> + <Grid DockPanel.Dock="Bottom"> + <StackPanel> + <Grid> + <touch:TouchButton HorizontalAlignment="Left" FontSize="{StaticResource TangoExpanderHeaderFontSize}" Command="{Binding EditCommand}" BorderThickness="2" BorderBrush="{StaticResource TangoPrimaryAccentBrush}" RippleBrush="{StaticResource TangoRippleDarkBrush}" Background="Transparent" EnableDropShadow="False" Height="80" Padding="0" Width="270" Foreground="{StaticResource TangoPrimaryAccentBrush}" CornerRadius="40" BlurRadius="20"> + <StackPanel Orientation="Horizontal"> + <fa:ImageAwesome Icon="Pencil" Width="24" Foreground="{StaticResource TangoPrimaryAccentBrush}" /> + <TextBlock Margin="20 0 0 0" VerticalAlignment="Center">EDIT</TextBlock> + </StackPanel> + </touch:TouchButton> + <touch:TouchButton IsEnabled="{Binding MachineProvider.MachineOperator.CanPrint}" FontSize="{StaticResource TangoExpanderHeaderFontSize}" Margin="20 0 0 0" Height="80" Padding="0" Width="270" CornerRadius="40" BlurRadius="20" HorizontalAlignment="Right" DelayCommand="{Binding DyeCommand}" DelayCommandDuration="00:00:0.3"> + <StackPanel Orientation="Horizontal"> + <TextBlock VerticalAlignment="Center">DYE</TextBlock> + <touch:TouchIcon Margin="20 0 0 0" Icon="ChevronRight" Width="14" /> + </StackPanel> + </touch:TouchButton> + </Grid> + </StackPanel> + </Grid> - <Grid> - <StackPanel VerticalAlignment="Center" Margin="50 0"> - <Image Source="../Images/pantone.png" Width="256" /> - <TextBlock FontSize="{StaticResource TangoHeaderFontSize}" Margin="0 30 0 0"> - <Run>'</Run><Run Text="{Binding Job.Name,FallbackValue='Name'}"></Run><Run>'</Run> - <Run>is ready!</Run> - </TextBlock> - <TextBlock Margin="40 10 0 0" FontSize="{StaticResource TangoTitleFontSize}">Tap 'DYE' to start the dying process...</TextBlock> - </StackPanel> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="60*"/> + <RowDefinition Height="400*"/> + <RowDefinition Height="300*"/> + </Grid.RowDefinitions> - <controls:JobSummeryViewer Height="50" DataContext="{Binding Job}" VerticalAlignment="Bottom" Margin="20 0" /> - </Grid> - </DockPanel> + <TextBlock FontSize="{StaticResource TangoHeaderFontSize}" Text="{Binding Job.Name}" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock> + + <Grid Grid.Row="1" Width="360" Height="360"> + <touch:TouchBusyIndicator Opacity="0.6" IsIndeterminate="False" Foreground="{StaticResource TangoGrayBrush}" StrokeThickness="10" Minimum="0" Maximum="100" Value="99.999" Width="Auto" Height="Auto"> + + </touch:TouchBusyIndicator> + + <UniformGrid Rows="2"> + <Grid> + <StackPanel VerticalAlignment="Center"> + <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0 15 0 0"> + <Image Source="../Images/length.png" Stretch="None" /> + <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" FontSize="{StaticResource TangoTitleFontSize}">Length</TextBlock> + </StackPanel> + + <TextBlock FontSize="40" Margin="0 10 0 0" HorizontalAlignment="Center"> + <Run Text="{Binding Job.LengthIncludingNumberOfUnits,Mode=OneWay,StringFormat=0,FallbackValue=0}"/> + <Run FontSize="16">m</Run> + </TextBlock> + </StackPanel> + </Grid> + <Grid> + <Rectangle Margin="40 0" Stroke="{StaticResource TangoDividerBrush}" VerticalAlignment="Top" /> + <StackPanel VerticalAlignment="Center" Margin="0 -40 0 0"> + <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0 15 0 0"> + <Image Source="../Images/JobProgressView/clock.png" Stretch="None" /> + <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" FontSize="{StaticResource TangoTitleFontSize}">Time</TextBlock> + </StackPanel> + + <TextBlock FontSize="40" Margin="0 10 0 0" HorizontalAlignment="Center"> + <Run Text="{Binding EstimatedDuration,Mode=OneWay,Converter={StaticResource TimeSpanToTwoDigitsTimeConverter},FallbackValue=5}"></Run> + <Run FontSize="16" Text="{Binding EstimatedDuration,Mode=OneWay,Converter={StaticResource TimeSpanToLabelConverter},FallbackValue=min}"></Run> + </TextBlock> + </StackPanel> + </Grid> + </UniformGrid> + </Grid> + + <controls:JobSummeryViewer Height="50" DataContext="{Binding Job}" VerticalAlignment="Center" Margin="20 0" Grid.Row="2" /> + </Grid> + </DockPanel> + </Border> </Grid> </Grid> </UserControl> diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml index 9a977ad35..b6dcad145 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml @@ -216,7 +216,7 @@ </Style.Triggers> </Style> </DockPanel.Style> - <TextBlock VerticalAlignment="Center" DockPanel.Dock="Left" Text="Color code:"></TextBlock> + <TextBlock VerticalAlignment="Bottom" DockPanel.Dock="Left" Text="Color code:"></TextBlock> <Grid DockPanel.Dock="Right" DataContext="{Binding BrushStops[0]}"> <StackPanel> @@ -262,7 +262,7 @@ <TextBlock Canvas.Top="2" Foreground="{StaticResource TangoErrorBrush}" FontSize="{StaticResource TangoSmallFontSize}" Text="Color is out of gamut. Modify color or select an alternative."></TextBlock> </Canvas> <DockPanel LastChildFill="False" Margin="0 20 0 0"> - <TextBlock VerticalAlignment="Center" DockPanel.Dock="Left" Text="Length (m):"></TextBlock> + <TextBlock VerticalAlignment="Bottom" DockPanel.Dock="Left" Text="Length (m):"></TextBlock> <touch:TouchNumericTextBox Width="180" DockPanel.Dock="Right" Value="{Binding Length}" StringFormat="0.0" AutoCalculateJogStep="False" HasDecimalPoint="True" Minimum="1" Maximum="100000" KeyboardContainer="{Binding ElementName=Container}" /> </DockPanel> </StackPanel> @@ -388,13 +388,13 @@ <touch:TouchTextBox Text="{Binding Job.Name,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True,ValidatesOnNotifyDataErrors=True}" KeyboardMode="AlphaNumeric" FocusSelectionMode="SelectAll" KeyboardAction="Next" KeyboardContainer="{Binding ElementName=Container}" /> <TextBlock>Customer:</TextBlock> - <touch:TouchAutoComplete Text="{Binding CustomersFilter}" ItemsSource="{Binding Customers}" SelectedItem="{Binding Job.Customer}" DisplayMemberPath="Name" AutoCompleteProvider="{Binding CustomersAutoCompleteProvider}" KeyboardMode="AlphaNumeric" KeyboardAction="Next" KeyboardContainer="{Binding ElementName=Container}" /> + <touch:TouchAutoComplete ForceItemSelection="False" Text="{Binding CustomersFilter}" ItemsSource="{Binding Customers}" SelectedItem="{Binding Job.Customer}" DisplayMemberPath="Name" AutoCompleteProvider="{Binding CustomersAutoCompleteProvider}" KeyboardMode="AlphaNumeric" KeyboardAction="Next" KeyboardContainer="{Binding ElementName=Container}" /> <TextBlock>Thread type:</TextBlock> <touch:TouchComboBox ItemsSource="{Binding Rmls}" SelectedItem="{Binding Job.Rml}" DisplayMemberPath="Name" Title="Select Thread" /> <TextBlock>Comment:</TextBlock> - <TextBox Margin="20 0 0 -42" Text="{Binding Job.Description}" FocusVisualStyle="{x:Null}" BorderBrush="{StaticResource TangoDividerBrush}" Foreground="{StaticResource TangoDarkForegroundBrush}" AcceptsReturn="True" TextWrapping="Wrap" Height="60" Padding="5"> + <TextBox Margin="20 0 0 -42" Text="{Binding Job.Description}" FocusVisualStyle="{x:Null}" BorderBrush="{StaticResource TangoDividerBrush}" Foreground="{StaticResource TangoDarkForegroundBrush}" AcceptsReturn="True" TextWrapping="Wrap" Height="60" Padding="5" keyboard:KeyboardView.Container="{Binding ElementName=Container}" keyboard:KeyboardView.Mode="AlphaNumeric"> </TextBox> </controls:TableGrid> @@ -507,13 +507,13 @@ <DockPanel LastChildFill="False"> <touch:TouchCheckBox DockPanel.Dock="Left" HorizontalAlignment="Left" IsChecked="{Binding Job.EnableInterSegment}">Include white gap between segments</touch:TouchCheckBox> <StackPanel DockPanel.Dock="Right" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0 0 5 0"> - <TextBlock Margin="0 3 0 0" Foreground="{StaticResource TangoGrayTextBrush}"> + <TextBlock Margin="0 3 0 0" Foreground="{StaticResource TangoGrayTextBrush}" VerticalAlignment="Bottom"> <Run Text="Length (m):"></Run> </TextBlock> <touch:TouchNumericTextBox Foreground="{StaticResource TangoGrayTextBrush}" Margin="5 0 0 0" Width="50" HorizontalContentAlignment="Center" Minimum="1" Maximum="1000" Value="{Binding Job.InterSegmentLength}" KeyboardContainer="{Binding ElementName=Container}" StringFormat="0" FocusSelectionMode="SelectAll" /> - <Image Margin="10 0 0 0" Source="../Images/JobView/settings.png" /> + <Image Margin="10 0 0 0" Source="../Images/JobView/settings.png" VerticalAlignment="Bottom" /> </StackPanel> </DockPanel> </StackPanel> @@ -573,15 +573,15 @@ </StackPanel> <StackPanel DockPanel.Dock="Right" Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0 0 5 0"> - <TextBlock Margin="0 3 0 0" Foreground="{StaticResource TangoGrayTextBrush}"> + <TextBlock Margin="0 3 0 0" Foreground="{StaticResource TangoGrayTextBrush}" VerticalAlignment="Bottom"> <Run Text="Factor: +"></Run> </TextBlock> - <touch:TouchNumericTextBox Foreground="{StaticResource TangoGrayTextBrush}" Margin="5 0 0 0" Width="30" HorizontalContentAlignment="Center" Maximum="100" Minimum="0" Value="{Binding Job.LengthPercentageFactor}" KeyboardContainer="{Binding ElementName=Container}" StringFormat="0" FocusSelectionMode="SelectAll" /> + <touch:TouchNumericTextBox Foreground="{StaticResource TangoGrayTextBrush}" Margin="5 0 0 0" Width="50" HorizontalContentAlignment="Center" Maximum="100" Minimum="0" Value="{Binding Job.LengthPercentageFactor}" KeyboardContainer="{Binding ElementName=Container}" StringFormat="0" FocusSelectionMode="SelectAll" /> - <TextBlock VerticalAlignment="Center" Foreground="{StaticResource TangoGrayTextBrush}">%</TextBlock> + <TextBlock VerticalAlignment="Bottom" Foreground="{StaticResource TangoGrayTextBrush}">%</TextBlock> - <Image Margin="10 0 0 0" Source="../Images/JobView/settings.png" /> + <Image Margin="10 0 0 0" Source="../Images/JobView/settings.png" VerticalAlignment="Bottom" /> </StackPanel> </DockPanel> </StackPanel> diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobsView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobsView.xaml index b02de80fc..ace1d38af 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobsView.xaml +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobsView.xaml @@ -54,8 +54,38 @@ <RowDefinition Height="1*"/> </Grid.RowDefinitions> - <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0 -28 30 0"> - <StackPanel Orientation="Horizontal" Height="58" Visibility="{Binding ElementName=dataGridJobs,Path=IsMultiSelecting,Converter={StaticResource BooleanToVisibilityConverter}}"> + <Grid HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0 -28 30 0"> + <StackPanel Orientation="Horizontal" Height="58" RenderTransformOrigin="0.5,0.5"> + <StackPanel.Style> + <Style TargetType="StackPanel"> + <Setter Property="Opacity" Value="0"></Setter> + <Setter Property="RenderTransform"> + <Setter.Value> + <TranslateTransform X="100" /> + </Setter.Value> + </Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding IsMultiSelecting}" Value="True"> + <DataTrigger.EnterActions> + <BeginStoryboard> + <Storyboard> + <DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="00:00:0.2"></DoubleAnimation> + <DoubleAnimation Storyboard.TargetProperty="RenderTransform.X" To="0" Duration="00:00:0.2"></DoubleAnimation> + </Storyboard> + </BeginStoryboard> + </DataTrigger.EnterActions> + <DataTrigger.ExitActions> + <BeginStoryboard> + <Storyboard> + <DoubleAnimation Storyboard.TargetProperty="Opacity" To="0" Duration="00:00:0.2"></DoubleAnimation> + <DoubleAnimation Storyboard.TargetProperty="RenderTransform.X" To="100" Duration="00:00:0.2"></DoubleAnimation> + </Storyboard> + </BeginStoryboard> + </DataTrigger.ExitActions> + </DataTrigger> + </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.Style> <Style TargetType="touch:TouchIconButton" BasedOn="{StaticResource TangoRoundTouchIconButton}"> @@ -85,23 +115,32 @@ <touch:TouchIconButton Command="{Binding CloneJobsCommand}" Margin="0 0 30 0" Padding="20" Icon="CopyRegular" Style="{StaticResource TangoRoundTouchIconButton}"></touch:TouchIconButton> <touch:TouchIconButton Command="{Binding DeleteJobsCommand}" Padding="20" Icon="TrashAltRegular" Style="{StaticResource TangoRoundTouchIconButton}"></touch:TouchIconButton> </StackPanel> - <touch:TouchIconButton Command="{Binding AddJobCommand}" Visibility="{Binding IsMultiSelecting,Converter={StaticResource BooleanToVisibilityInverseConverter}}" Margin="0 -15 0 0" Padding="20" Height="80" Icon="Plus"> + <touch:TouchIconButton Command="{Binding AddJobCommand}" RenderTransformOrigin="0.5,0.5" Margin="0 -15 0 0" Padding="20" Height="80" Icon="Plus" HorizontalAlignment="Right"> <touch:TouchIconButton.Style> <Style TargetType="touch:TouchIconButton" BasedOn="{StaticResource TangoRoundTouchIconButton}"> - <Setter Property="IconAngle" Value="0"></Setter> + <Setter Property="Opacity" Value="1"></Setter> + <Setter Property="RenderTransform"> + <Setter.Value> + <ScaleTransform ScaleX="1" ScaleY="1" /> + </Setter.Value> + </Setter> <Style.Triggers> <DataTrigger Binding="{Binding IsMultiSelecting}" Value="True"> <DataTrigger.EnterActions> <BeginStoryboard> <Storyboard> - <DoubleAnimation Storyboard.TargetProperty="IconAngle" To="360" Duration="00:00:00"></DoubleAnimation> + <DoubleAnimation Storyboard.TargetProperty="Opacity" To="0" Duration="00:00:0.2"></DoubleAnimation> + <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="0.5" Duration="00:00:0.2"></DoubleAnimation> + <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="0.5" Duration="00:00:0.2"></DoubleAnimation> </Storyboard> </BeginStoryboard> </DataTrigger.EnterActions> <DataTrigger.ExitActions> <BeginStoryboard> <Storyboard> - <DoubleAnimation Storyboard.TargetProperty="IconAngle" To="0" Duration="00:00:0.2"></DoubleAnimation> + <DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="00:00:0.2"></DoubleAnimation> + <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="1" Duration="00:00:0.2"></DoubleAnimation> + <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="1" Duration="00:00:0.2"></DoubleAnimation> </Storyboard> </BeginStoryboard> </DataTrigger.ExitActions> @@ -110,12 +149,22 @@ </Style> </touch:TouchIconButton.Style> </touch:TouchIconButton> - </StackPanel> + </Grid> + + <DockPanel> + <touch:TouchNavigationLinks DockPanel.Dock="Left" x:Name="navigationLinks" SelectionChanged="TouchNavigationLinks_SelectionChanged" SelectedIndex="{Binding SelectedCategoryIndex,Mode=TwoWay}" IsEnabled="{Binding IsMultiSelecting,Converter={StaticResource BooleanInverseConverter}}" VerticalAlignment="Bottom" Margin="20" FontSize="{StaticResource TangoNavigationLinksFontSize}"> + <TextBlock>DRAFT</TextBlock> + <TextBlock>HISTORY</TextBlock> + </touch:TouchNavigationLinks> - <touch:TouchNavigationLinks x:Name="navigationLinks" SelectionChanged="TouchNavigationLinks_SelectionChanged" SelectedIndex="{Binding SelectedCategoryIndex,Mode=TwoWay}" IsEnabled="{Binding IsMultiSelecting,Converter={StaticResource BooleanInverseConverter}}" VerticalAlignment="Bottom" Margin="20" FontSize="{StaticResource TangoNavigationLinksFontSize}"> - <TextBlock>DRAFT</TextBlock> - <TextBlock>HISTORY</TextBlock> - </touch:TouchNavigationLinks> + <Grid VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0 5 0 0"> + <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> + </DockPanel> + </Grid> + </DockPanel> <Grid Grid.Row="1" x:Name="moveGrid"> <touch:TouchLoadingPanel IsLoading="{Binding IsLoadingJobs}" Visibility="{Binding SelectedCategory,Converter={StaticResource JobsCategoryToVisibilityConverter},ConverterParameter='Draft'}"> diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Images/settings.png b/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Images/settings.png Binary files differnew file mode 100644 index 000000000..fa268e53a --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Images/settings.png diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/MachineSettingsModule.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/MachineSettingsModule.cs index 53321b799..477340357 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/MachineSettingsModule.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/MachineSettingsModule.cs @@ -47,7 +47,7 @@ namespace Tango.PPC.MachineSettings { get { - return ResourceHelper.GetImageFromResources("Images/settings-module.png"); + return ResourceHelper.GetImageFromResources("Images/settings.png"); } } diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Tango.PPC.MachineSettings.csproj b/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Tango.PPC.MachineSettings.csproj index 2b89c1e9b..00cc18382 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Tango.PPC.MachineSettings.csproj +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/Tango.PPC.MachineSettings.csproj @@ -160,10 +160,13 @@ <ItemGroup> <Resource Include="Images\settings-module.png" /> </ItemGroup> + <ItemGroup> + <Resource Include="Images\settings.png" /> + </ItemGroup> <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.MachineSettings/ViewModels/MainViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/ViewModels/MainViewVM.cs index 7896367ec..c858e982e 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.MachineSettings/ViewModels/MainViewVM.cs @@ -119,7 +119,7 @@ namespace Tango.PPC.MachineSettings.ViewModels { Machine.SupportedJobTypes = SelectedJobTypes.SynchedSource.ToList(); Machine.SupportedColorSpaces = SelectedColorSpaces.SynchedSource.ToList(); - Machine.ShallowCopyTo(MachineProvider.Machine); + Machine.MapPrimitivesWithStrings(MachineProvider.Machine); Settings.EnableHotSpot = EnableHotSpot; Settings.HotSpotPassword = HotSpotPassword; @@ -149,8 +149,8 @@ namespace Tango.PPC.MachineSettings.ViewModels { base.OnNavigatedTo(); - Machine = new Machine(); - MachineProvider.Machine.ShallowCopyTo(Machine); + Machine = MachineProvider.Machine.ShallowClone(); + RaisePropertyChanged(nameof(Machine)); _enableHotSpot = HotSpotProvider.IsEnabled; 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 d1de12664..8ba06eb43 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 @@ -119,8 +119,8 @@ </ItemsControl.ItemTemplate> </ItemsControl> - <TextBlock VerticalAlignment="Bottom">Default Media</TextBlock> - <touch:TouchComboBox HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="200" ItemsSource="{Binding Adapter.Rmls}" SelectedItem="{Binding Machine.DefaultRml}" DisplayMemberPath="Name"></touch:TouchComboBox> + <TextBlock VerticalAlignment="Bottom">Default Thread Type</TextBlock> + <touch:TouchComboBox HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="200" ItemsSource="{Binding Adapter.Rmls}" SelectedItem="{Binding Machine.DefaultRml}" DisplayMemberPath="Name" ValuePath="Guid"></touch:TouchComboBox> <!--<TextBlock VerticalAlignment="Bottom">Default Spool</TextBlock> <touch:TouchComboBox HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="200" ItemsSource="{Binding Adapter.SpoolTypes}" SelectedItem="{Binding Machine.DefaultSpoolType}" DisplayMemberPath="Name"></touch:TouchComboBox>--> diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Storage/Images/storage.png b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Storage/Images/storage.png Binary files differnew file mode 100644 index 000000000..619d9de34 --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Storage/Images/storage.png diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Storage/StorageModule.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Storage/StorageModule.cs index 6133ebb3c..b3553e666 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Storage/StorageModule.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Storage/StorageModule.cs @@ -47,7 +47,7 @@ namespace Tango.PPC.Storage { get { - return ResourceHelper.GetImageFromResources("Images/storage-module.png"); + return ResourceHelper.GetImageFromResources("Images/storage.png"); } } diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Storage/Tango.PPC.Storage.csproj b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Storage/Tango.PPC.Storage.csproj index b25af0348..e541c472b 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Storage/Tango.PPC.Storage.csproj +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Storage/Tango.PPC.Storage.csproj @@ -137,5 +137,8 @@ <ItemGroup> <Resource Include="Images\storage-module.png" /> </ItemGroup> + <ItemGroup> + <Resource Include="Images\storage.png" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> </Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs index 95912e1ea..9a7e29bb7 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/DefaultMachineProvider.cs @@ -32,6 +32,7 @@ namespace Tango.PPC.Common.Connection { private bool _isInitialized; private Thread _connection_thread; + private ObservablesContext _context; private Machine _machine; /// <summary> @@ -165,7 +166,7 @@ namespace Tango.PPC.Common.Connection /// <summary> /// Initializes this machine provider start machine port scanning and connection. /// </summary> - public void Init(Machine machine) + public void Init(Machine machine, ObservablesContext context) { if (!_isInitialized) { @@ -175,6 +176,7 @@ namespace Tango.PPC.Common.Connection LogManager.Log("Retrieving first machine database entry..."); + _context = context; Machine = machine; if (Machine != null) @@ -209,7 +211,8 @@ namespace Tango.PPC.Common.Connection /// <returns></returns> public async Task SaveMachine() { - await Machine.GetDbContext().SaveChangesAsync(); + await _context.SaveChangesAsync(); + Machine = await new MachineBuilder(_context).SetFirst().WithSettings().BuildAsync(); TangoMessenger.Default.Send(new MachineSettingsSavedMessage() { Machine = Machine }); } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/IMachineProvider.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/IMachineProvider.cs index 43a6c290e..10180b9cc 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/IMachineProvider.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Connection/IMachineProvider.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Tango.BL; using Tango.BL.Entities; using Tango.Integration.ExternalBridge; using Tango.Integration.Operation; @@ -27,7 +28,7 @@ namespace Tango.PPC.Common.Connection /// <summary> /// Initializes this machine provider start machine port scanning and connection. /// </summary> - void Init(Machine machine); + void Init(Machine machine, ObservablesContext context); /// <summary> /// Saves the machine settings. diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Notifications/NotificationItems/MessageNotificationItemView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.Common/Notifications/NotificationItems/MessageNotificationItemView.xaml index efb6a5447..63350a9e6 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Notifications/NotificationItems/MessageNotificationItemView.xaml +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Notifications/NotificationItems/MessageNotificationItemView.xaml @@ -6,62 +6,113 @@ xmlns:touch="clr-namespace:Tango.Touch.Controls;assembly=Tango.Touch" xmlns:local="clr-namespace:Tango.PPC.Common.Notifications.NotificationItems" mc:Ignorable="d" - d:DesignHeight="60" d:DesignWidth="800" d:DataContext="{d:DesignInstance Type=local:MessageNotificationItem, IsDesignTimeCreatable=False}" MinHeight="60" Height="60" MaxHeight="150"> + d:DesignHeight="60" d:DesignWidth="800" d:DataContext="{d:DesignInstance Type=local:MessageNotificationItem, IsDesignTimeCreatable=False}" MinHeight="90" Height="90" MaxHeight="150" Background="White"> - <ContentControl> - <ContentControl.Style> - <Style TargetType="ContentControl"> - <Setter Property="Foreground" Value="{StaticResource TangoLightForegroundBrush}"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding MessageType}" Value="Info"> - <Setter Property="Foreground" Value="{StaticResource TangoLightForegroundBrush}"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding MessageType}" Value="Success"> - <Setter Property="Foreground" Value="{StaticResource TangoSuccessBrush}"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding MessageType}" Value="Warning"> - <Setter Property="Foreground" Value="{StaticResource TangoWarningBrush}"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding MessageType}" Value="Error"> - <Setter Property="Foreground" Value="{StaticResource TangoErrorBrush}"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding MessageType}" Value="Critical"> - <Setter Property="Foreground" Value="{StaticResource TangoErrorBrush}"></Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </ContentControl.Style> - <DockPanel> - <touch:TouchIcon Margin="15" DockPanel.Dock="Left" MaxHeight="50"> - <touch:TouchIcon.Style> - <Style TargetType="touch:TouchIcon"> - <Setter Property="Icon" Value="Information"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding MessageType}" Value="Info"> - <Setter Property="Icon" Value="Information"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding MessageType}" Value="Success"> - <Setter Property="Icon" Value="Check"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding MessageType}" Value="Warning"> - <Setter Property="Icon" Value="AlertCircleOutline"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding MessageType}" Value="Error"> - <Setter Property="Icon" Value="AlertCircleOutline"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding MessageType}" Value="Critical"> - <Setter Property="Icon" Value="Alert"></Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </touch:TouchIcon.Style> - </touch:TouchIcon> - <StackPanel Margin="10 0 0 0" VerticalAlignment="Center"> - <TextBlock Text="{Binding Message}" TextTrimming="CharacterEllipsis" TextWrapping="Wrap"></TextBlock> + <Grid> + <Border BorderThickness="0 0 0 2"> + <Border.Style> + <Style TargetType="Border"> + <Style.Triggers> + <DataTrigger Binding="{Binding MessageType}" Value="Info"> + <Setter Property="Background"> + <Setter.Value> + <SolidColorBrush Color="{StaticResource TangoPrimaryAccentColor}" Opacity="0.2"></SolidColorBrush> + </Setter.Value> + </Setter> + <Setter Property="BorderBrush" Value="{StaticResource TangoPrimaryAccentBrush}"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding MessageType}" Value="Success"> + <Setter Property="Background"> + <Setter.Value> + <SolidColorBrush Color="{StaticResource TangoSuccessColor}" Opacity="0.2"></SolidColorBrush> + </Setter.Value> + </Setter> + <Setter Property="BorderBrush" Value="{StaticResource TangoSuccessBrush}"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding MessageType}" Value="Warning"> + <Setter Property="Background"> + <Setter.Value> + <SolidColorBrush Color="{StaticResource TangoWarningColor}" Opacity="0.2"></SolidColorBrush> + </Setter.Value> + </Setter> + <Setter Property="BorderBrush" Value="{StaticResource TangoWarningBrush}"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding MessageType}" Value="Error"> + <Setter Property="Background"> + <Setter.Value> + <SolidColorBrush Color="{StaticResource TangoErrorColor}" Opacity="0.2"></SolidColorBrush> + </Setter.Value> + </Setter> + <Setter Property="BorderBrush" Value="{StaticResource TangoErrorBrush}"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding MessageType}" Value="Critical"> + <Setter Property="Background"> + <Setter.Value> + <SolidColorBrush Color="{StaticResource TangoErrorColor}" Opacity="0.2"></SolidColorBrush> + </Setter.Value> + </Setter> + <Setter Property="BorderBrush" Value="{StaticResource TangoErrorBrush}"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Border.Style> + </Border> + <ContentControl> + <ContentControl.Style> + <Style TargetType="ContentControl"> + <Setter Property="Foreground" Value="{StaticResource TangoLightForegroundBrush}"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding MessageType}" Value="Info"> + <Setter Property="Foreground" Value="{StaticResource TangoLightForegroundBrush}"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding MessageType}" Value="Success"> + <Setter Property="Foreground" Value="{StaticResource TangoSuccessBrush}"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding MessageType}" Value="Warning"> + <Setter Property="Foreground" Value="{StaticResource TangoWarningBrush}"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding MessageType}" Value="Error"> + <Setter Property="Foreground" Value="{StaticResource TangoErrorBrush}"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding MessageType}" Value="Critical"> + <Setter Property="Foreground" Value="{StaticResource TangoErrorBrush}"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </ContentControl.Style> + <DockPanel> + <touch:TouchIcon Margin="15" DockPanel.Dock="Left" MaxHeight="40"> + <touch:TouchIcon.Style> + <Style TargetType="touch:TouchIcon"> + <Setter Property="Icon" Value="Information"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding MessageType}" Value="Info"> + <Setter Property="Icon" Value="Information"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding MessageType}" Value="Success"> + <Setter Property="Icon" Value="Check"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding MessageType}" Value="Warning"> + <Setter Property="Icon" Value="AlertCircleOutline"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding MessageType}" Value="Error"> + <Setter Property="Icon" Value="AlertCircleOutline"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding MessageType}" Value="Critical"> + <Setter Property="Icon" Value="Alert"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </touch:TouchIcon.Style> + </touch:TouchIcon> - <TextBlock Margin="5 20 0 0" Foreground="{StaticResource TangoGrayTextBrush}" Text="{Binding ExpandedMessage}" TextWrapping="Wrap" Visibility="{Binding IsExpanded,Converter={StaticResource BooleanToVisibilityConverter}}"></TextBlock> - </StackPanel> - </DockPanel> - </ContentControl> + <StackPanel Margin="10 0 0 0" VerticalAlignment="Center"> + <TextBlock Text="{Binding Message}" TextTrimming="CharacterEllipsis" TextWrapping="Wrap" Foreground="Black"></TextBlock> + + <TextBlock Margin="0 10 0 0" Foreground="{StaticResource TangoDarkForegroundBrush}" Text="{Binding ExpandedMessage}" TextWrapping="Wrap" Visibility="{Binding IsExpanded,Converter={StaticResource BooleanToVisibilityConverter}}"></TextBlock> + </StackPanel> + </DockPanel> + </ContentControl> + </Grid> </UserControl> diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultOperationSystemManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultOperationSystemManager.cs index 9e44a5028..cfbc6d752 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultOperationSystemManager.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultOperationSystemManager.cs @@ -131,6 +131,25 @@ namespace Tango.PPC.Common.OS { CmdCommand cmd = new CmdCommand("tzutil", $"/s \"{timeZone.Id}\""); await cmd.Run(); + + try + { + cmd = new CmdCommand("sc.exe", "config W32Time start=auto"); + cmd.Timeout = TimeSpan.FromSeconds(10); + await cmd.Run(); + + try + { + cmd = new CmdCommand("net", "start W32Time"); + cmd.Timeout = TimeSpan.FromSeconds(10); + await cmd.Run(); + } + catch { } + + cmd = new CmdCommand("w32tm", $"/resync"); + await cmd.Run(); + } + catch { } } /// <summary> diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCViewModel.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCViewModel.cs index b9a0d8483..5e584f891 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCViewModel.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCViewModel.cs @@ -177,6 +177,15 @@ namespace Tango.PPC.Common } /// <summary> + /// Raises the specified message using the default <see cref="TangoMessenger"/>. + /// </summary> + /// <typeparam name="T"></typeparam> + protected void RaiseMessage<T>() where T : class + { + TangoMessenger.Default.Send<T>(Activator.CreateInstance<T>()); + } + + /// <summary> /// Registers a message handle for the specified message type T. /// </summary> /// <typeparam name="T"></typeparam> diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj b/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj index 07ea6c5d1..62874d9cb 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj @@ -147,6 +147,7 @@ <Compile Include="Publish\PublishProgressEventArgs.cs" /> <Compile Include="Publish\SequenceItem.cs" /> <Compile Include="Publish\SynchronizationOptions.cs" /> + <Compile Include="UWF\AlternativeUnifiedWriteFilterManager.cs" /> <Compile Include="Web\CheckForUpdateRequest.cs" /> <Compile Include="Web\CheckForUpdateResponse.cs" /> <Compile Include="MachineUpdate\DbCompareResult.cs" /> @@ -371,7 +372,7 @@ </Target> <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/Tango.PPC.Common/UWF/AlternativeUnifiedWriteFilterManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/AlternativeUnifiedWriteFilterManager.cs new file mode 100644 index 000000000..5fb74b2fe --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/AlternativeUnifiedWriteFilterManager.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Tango.Core.Components; + +namespace Tango.PPC.Common.UWF +{ + public class AlternativeUnifiedWriteFilterManager : IUnifiedWriteFilterManager + { + private const string UWF_PATH = "C:\\Windows\\Sysnative\\uwfmgr.exe"; + + /// <summary> + /// Gets a value indicating whether UWF if currently enabled on the system. + /// </summary> + public bool IsEnabled { get; private set; } + + /// <summary> + /// Installs and configures the service (requires restart). + /// </summary> + /// <returns></returns> + public Task Setup() + { + return Enable(); + } + + /// <summary> + /// Enables the UWF service (requires restart). + /// </summary> + /// <returns></returns> + public async Task Enable() + { + CmdCommand command = null; + try + { + + command = new CmdCommand(UWF_PATH, $"filter disable"); + command.OutputEncoding = CmdCommand.OutEncoding.Unicode; + await command.Run(); + + } + catch { } + + command = new CmdCommand(UWF_PATH, $"filter enable"); + command.OutputEncoding = CmdCommand.OutEncoding.Unicode; + await command.Run(); + + command = new CmdCommand("wmic", $"computersystem where name=\"%computername%\" set AutomaticManagedPagefile=False"); + await command.Run(); + + command = new CmdCommand("wmic", $"pagefileset create name=\"p:\\pagefile.sys\""); + await command.Run(); + + command = new CmdCommand("wmic", $"pagefileset where name=\"p:\\\\pagefile.sys\" set InitialSize=16,MaximumSize=3870"); + await command.Run(); + } + + /// <summary> + /// Disables the UWF service (requires restart). + /// </summary> + /// <returns></returns> + public async Task Disable() + { + CmdCommand command = new CmdCommand(UWF_PATH, $"filter disable"); + command.OutputEncoding = CmdCommand.OutEncoding.Unicode; + await command.Run(); + } + } +} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/App.config b/Software/Visual_Studio/PPC/Tango.PPC.UI/App.config index ea49af905..9a0087c43 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/App.config +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/App.config @@ -11,6 +11,7 @@ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + </assemblyBinding> </runtime> <entityFramework> diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Menu/power.png b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Menu/power.png Binary files differnew file mode 100644 index 000000000..1f42d43a1 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Menu/power.png diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Menu/update.png b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Menu/update.png Binary files differnew file mode 100644 index 000000000..45f4608c9 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/Menu/update.png 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 9c9eb4abf..b49838e37 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/Images/power-machine.png b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/power-machine.png Binary files differnew file mode 100644 index 000000000..5c8608b61 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/power-machine.png diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/power-tablet.png b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/power-tablet.png Binary files differnew file mode 100644 index 000000000..34191593c --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Images/power-tablet.png diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/MainWindow.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/MainWindow.xaml index 5c358610f..9907a7c2c 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/MainWindow.xaml +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/MainWindow.xaml @@ -6,7 +6,7 @@ xmlns:local="clr-namespace:Tango.PPC.UI" xmlns:views="clr-namespace:Tango.PPC.UI.Views" mc:Ignorable="d" - Title="MainWindow" Height="1000" Stylus.IsTapFeedbackEnabled="False" Stylus.IsPressAndHoldEnabled="False" Stylus.IsTouchFeedbackEnabled="False" Width="800" WindowStyle="SingleBorderWindow" ResizeMode="CanResize" WindowStartupLocation="CenterScreen" + Title="Tango - PPC" Height="1000" Stylus.IsTapFeedbackEnabled="False" Stylus.IsPressAndHoldEnabled="False" Stylus.IsTouchFeedbackEnabled="False" Width="800" WindowStyle="SingleBorderWindow" ResizeMode="CanResize" WindowStartupLocation="CenterScreen" FontFamily="{StaticResource TangoFlexoFontFamily}" FontSize="{StaticResource TangoDefaultFontSize}" Foreground="{StaticResource TangoDarkForegroundBrush}" diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Notifications/DefaultNotificationProvider.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Notifications/DefaultNotificationProvider.cs index 9cd34e67c..d7dca484e 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Notifications/DefaultNotificationProvider.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Notifications/DefaultNotificationProvider.cs @@ -29,6 +29,7 @@ namespace Tango.PPC.UI.Notifications { private ConcurrentQueue<PendingNotification<MessageBoxVM, bool>> _pendingMessageBoxes; private ConcurrentQueue<PendingNotification<DialogAndView, DialogViewVM>> _pendingDialogs; + private List<AppButton> _appButtons; private bool _notificationsVisible; /// <summary> @@ -60,6 +61,7 @@ namespace Tango.PPC.UI.Notifications TaskBarItems = new ObservableCollection<TaskBarItem>(); _pendingMessageBoxes = new ConcurrentQueue<PendingNotification<MessageBoxVM, bool>>(); _pendingDialogs = new ConcurrentQueue<PendingNotification<DialogAndView, DialogViewVM>>(); + _appButtons = new List<AppButton>(); PopNotificationCommand = new RelayCommand<NotificationItem>((x) => PopNotification(x)); @@ -521,6 +523,7 @@ namespace Tango.PPC.UI.Notifications /// <param name="appButton">The app button.</param> public void PushAppButton(AppButton appButton) { + _appButtons.Insert(0, appButton); CurrentAppButton = appButton; } @@ -530,10 +533,9 @@ namespace Tango.PPC.UI.Notifications /// <param name="appButton">The app button.</param> public void PopAppButton(AppButton appButton) { - if (CurrentAppButton == appButton) - { - CurrentAppButton = null; - } + _appButtons.RemoveAll(x => x == appButton); + + CurrentAppButton = _appButtons.FirstOrDefault(); } } } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs index f7711318f..788d2b178 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs @@ -46,6 +46,7 @@ namespace Tango.PPC.UI.PPCApplication private IPPCModuleLoader _moduleLoader; private INotificationProvider _notificationProvider; private WatchDogServer _watchdogServer; + private ObservablesContext _machineContext; /// <summary> /// Occurs when a system restart is required. @@ -203,7 +204,8 @@ namespace Tango.PPC.UI.PPCApplication LogManager.Log("Initializing ObservablesStaticCollections..."); ObservablesStaticCollections.Instance.Initialize(); LogManager.Log("Loading machine from database..."); - _machine = new MachineBuilder(ObservablesContext.CreateDefault()).SetFirst().WithOrganization().WithConfiguration().WithSpools().Build(); + _machineContext = ObservablesContext.CreateDefault(); + _machine = new MachineBuilder(_machineContext).SetFirst().WithSettings().WithOrganization().WithConfiguration().WithSpools().WithCats().Build(); } initialized = true; @@ -301,7 +303,7 @@ namespace Tango.PPC.UI.PPCApplication LogManager.Log("Finalizing application initialization..."); LogManager.Log("Initializing Machine Provider..."); - _machineProvider.Init(_machine); + _machineProvider.Init(_machine, _machineContext); LogManager.Log("Applications initialization completed!"); 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 b7c1f4eff..19e758a19 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.0.3.0")] +[assembly: AssemblyVersion("1.0.5.0")] 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 1891139e9..1201c4ab0 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 @@ -274,6 +274,10 @@ </EmbeddedResource> <None Include="app.manifest" /> <Resource Include="Images\machine.png" /> + <Resource Include="Images\power-machine.png" /> + <Resource Include="Images\power-tablet.png" /> + <Resource Include="Images\Menu\power.png" /> + <Resource Include="Images\Menu\update.png" /> <Content Include="Manifests\release.xml" /> <Content Include="Manifests\debug.xml" /> <None Include="packages.config" /> @@ -370,10 +374,6 @@ <Project>{91b70e9b-66a7-4873-ae10-400e71cf404f}</Project> <Name>Tango.PPC.MachineSettings</Name> </ProjectReference> - <ProjectReference Include="..\Modules\Tango.PPC.Power\Tango.PPC.Power.csproj"> - <Project>{1d0f15b7-c1f3-4b9e-b0bc-a5b9e50c91d0}</Project> - <Name>Tango.PPC.Power</Name> - </ProjectReference> <ProjectReference Include="..\Modules\Tango.PPC.Storage\Tango.PPC.Storage.csproj"> <Project>{04febb02-f782-4b96-b47d-f6902afa43be}</Project> <Name>Tango.PPC.Storage</Name> @@ -509,7 +509,7 @@ del "$(TargetDir)firmware_package.tfp"</PostBuildEvent> </PropertyGroup> <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/Tango.PPC.UI/ViewModelLocator.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModelLocator.cs index 018c9b223..3517abbb2 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModelLocator.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModelLocator.cs @@ -91,7 +91,7 @@ namespace Tango.PPC.UI TangoIOC.Default.Register<IConnectivityProvider, DefaultConnectivityProvider>(); TangoIOC.Default.Register<IHotSpotProvider, DefaultHotSpotProvider>(); TangoIOC.Default.Register<IStorageProvider, DefaultStorageProvider>(); - TangoIOC.Default.Register<IUnifiedWriteFilterManager, DefaultUnifiedWriteFilterManager>(); + TangoIOC.Default.Register<IUnifiedWriteFilterManager, AlternativeUnifiedWriteFilterManager>(); TangoIOC.Default.Register<IOperationSystemManager, DefaultOperationSystemManager>(); //TangoIOC.Default.Register<TeamFoundationServiceExtendedClient>(new TeamFoundationServiceExtendedClient("https://twinetfs.visualstudio.com", String.Empty, "szzfokrceo4rhd4eqi5qpmxn3pa5iwl3q7tlqd36l2m7smz2ynoa")); diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs index 52f0fb403..1c1eeca5e 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LayoutViewVM.cs @@ -38,7 +38,15 @@ namespace Tango.PPC.UI.ViewModels public bool IsMenuOpened { get { return _isMenuOpened; } - set { _isMenuOpened = value; RaisePropertyChangedAuto(); } + set + { + _isMenuOpened = value; RaisePropertyChangedAuto(); + + if (!_isMenuOpened) + { + IsPowerOpened = false; + } + } } private bool _isNotificationsOpened; @@ -48,7 +56,20 @@ namespace Tango.PPC.UI.ViewModels public bool IsNotificationsOpened { get { return _isNotificationsOpened; } - set { _isNotificationsOpened = value; RaisePropertyChangedAuto(); } + set + { + _isNotificationsOpened = value; RaisePropertyChangedAuto(); + } + } + + private bool _isPowerOpened; + /// <summary> + /// Gets or sets a value indicating whether the power area is opened. + /// </summary> + public bool IsPowerOpened + { + get { return _isPowerOpened; } + set { _isPowerOpened = value; RaisePropertyChangedAuto(); } } #endregion @@ -90,6 +111,10 @@ namespace Tango.PPC.UI.ViewModels /// </summary> public RelayCommand UpdateCommand { get; set; } + /// <summary> + /// Gets or sets the power command. + /// </summary> + public RelayCommand PowerCommand { get; set; } #endregion #region Constructors @@ -106,12 +131,14 @@ namespace Tango.PPC.UI.ViewModels StopPrintingCommand = new RelayCommand(StopPrinting); SignOutCommand = new RelayCommand(SignOut); - UpdateCommand = new RelayCommand(() => + UpdateCommand = new RelayCommand(() => { NavigationManager.NavigateTo(NavigationView.MachineUpdateView); TangoIOC.Default.GetInstance<MachineUpdateViewVM>().CheckForUpdates(); IsMenuOpened = false; }); + + PowerCommand = new RelayCommand(() => IsPowerOpened = true); } #endregion diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml index bf3a85543..5d4428989 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml @@ -23,38 +23,38 @@ </UserControl.Resources> <Grid> - <touch:TouchSideMenu x:Name="menu" IsOpened="{Binding IsMenuOpened,Mode=TwoWay}" Grid.Row="1"> + <touch:TouchSideMenu x:Name="menu" IsOpened="{Binding IsMenuOpened,Mode=TwoWay}" Grid.Row="1" > <touch:TouchSideMenu.MenuContent> - <Border Width="400" x:Name="border" BorderThickness="0 0 1 0" BorderBrush="{StaticResource TangoDarkForegroundBrush}" TextElement.Foreground="{StaticResource TangoDarkForegroundBrush}"> + <Border TextElement.FontSize="{StaticResource TangoMenuItemFontSize}" TextElement.FontFamily="{StaticResource TangoFlexoFontFamily}" Width="450" x:Name="border" BorderThickness="0 0 1 0" BorderBrush="{StaticResource TangoDarkForegroundBrush}" TextElement.Foreground="{StaticResource TangoDarkForegroundBrush}"> <DockPanel LastChildFill="False" Background="{StaticResource TangoPrimaryBackgroundBrush}"> <StackPanel MinWidth="300" DockPanel.Dock="Top"> - <Border BorderBrush="{StaticResource TangoDividerBrush}" BorderThickness="0 0 0 1"> - <Grid Background="{StaticResource TangoMidBackgroundBrush}"> - <Image Source="/Images/logo.png" Stretch="Uniform" Margin="20 50 50 50"></Image> - <touch:TouchToggleButton Style="{StaticResource TangoTouchToggleButtonHamburger}" + <Border BorderBrush="{StaticResource TangoDividerBrush}" BorderThickness="0 0 0 1" Height="320"> + <Grid> + <Image Source="/Images/logo.png" Stretch="Uniform" HorizontalAlignment="Left" Margin="40 0 0 0" Width="320"></Image> + <touch:TouchToggleButton Width="70" Height="70" Padding="15" Style="{StaticResource TangoTouchToggleButtonHamburger}" VerticalAlignment="Top" - HorizontalAlignment="Right" Margin="16" - IsChecked="{Binding ElementName=menu,Path=IsOpened}" /> + HorizontalAlignment="Right" + IsChecked="{Binding ElementName=menu,Path=IsOpened}" Foreground="{StaticResource TangoPrimaryAccentBrush}" /> </Grid> </Border> - <StackPanel Margin="0 5 0 0"> - <touch:TouchButton Style="{StaticResource TangoFlatButton}" Padding="30" Foreground="{StaticResource TangoDarkForegroundBrush}" Command="{Binding HomeCommand}" FontSize="{StaticResource TangoHeaderFontSize}"> + <!--<StackPanel Margin="0 5 0 0"> + <touch:TouchButton Style="{StaticResource TangoFlatButton}" Padding="30" Foreground="{StaticResource TangoDarkForegroundBrush}" Command="{Binding HomeCommand}" FontSize="{StaticResource TangoHeaderFontSize}" FontWeight="Normal"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> - <Image Source="/Images/home.png" VerticalAlignment="Center" Width="48" Height="48"></Image> - <TextBlock VerticalAlignment="Center" Margin="20 0 0 0">Home</TextBlock> + <Image Source="/Images/home.png" VerticalAlignment="Center" Width="32" Height="32"></Image> + <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" Foreground="{StaticResource TangoPrimaryAccentBrush}">Home</TextBlock> </StackPanel> </touch:TouchButton> - </StackPanel> + </StackPanel>--> <ItemsControl ItemsSource="{Binding ModuleLoader.UserModules}"> <ItemsControl.ItemTemplate> <DataTemplate> <Border Visibility="{Binding DockToBottom,Converter={StaticResource BooleanToVisibilityInverseConverter}}"> - <Border BorderBrush="{StaticResource TangoDividerBrush}" BorderThickness="0 1 0 0" Visibility="{Binding IsVisibleInMenu,Converter={StaticResource BooleanToVisibilityConverter}}"> - <touch:TouchButton Margin="0 0 0 0" Padding="30" Foreground="{StaticResource TangoDarkForegroundBrush}" Style="{StaticResource TangoFlatButton}" FontSize="{StaticResource TangoHeaderFontSize}" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.ModuleNavigationCommand}" CommandParameter="{Binding Name}"> + <Border BorderBrush="{StaticResource TangoDividerBrush}" BorderThickness="0 0 0 1" Visibility="{Binding IsVisibleInMenu,Converter={StaticResource BooleanToVisibilityConverter}}"> + <touch:TouchButton Margin="0 0 0 0" Padding="40 25" Foreground="{StaticResource TangoDarkForegroundBrush}" Style="{StaticResource TangoFlatButton}" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.ModuleNavigationCommand}" CommandParameter="{Binding Name}"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> - <Image VerticalAlignment="Center" Source="{Binding Image}" Width="48" Height="48"></Image> - <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" Text="{Binding Name}"></TextBlock> + <Image VerticalAlignment="Center" Source="{Binding Image}" Width="32" Height="32"></Image> + <TextBlock VerticalAlignment="Center" Margin="40 0 0 0" Text="{Binding Name}" Foreground="{StaticResource TangoPrimaryAccentBrush}"></TextBlock> </StackPanel> </touch:TouchButton> </Border> @@ -64,20 +64,18 @@ </ItemsControl> <StackPanel Margin="0 5 0 0"> - - <Border BorderBrush="{StaticResource TangoDividerBrush}" BorderThickness="0 1 0 0"> - <touch:TouchButton Style="{StaticResource TangoFlatButton}" Padding="30" Foreground="{StaticResource TangoDarkForegroundBrush}" Command="{Binding UpdateCommand}" FontSize="{StaticResource TangoHeaderFontSize}"> + <Border BorderBrush="{StaticResource TangoDividerBrush}" BorderThickness="0 0 0 1"> + <touch:TouchButton Style="{StaticResource TangoFlatButton}" Padding="40 25" Foreground="{StaticResource TangoDarkForegroundBrush}" Command="{Binding UpdateCommand}"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> - <Image Source="/Images/right-arrow-64.png" VerticalAlignment="Center" Width="48" Height="48"></Image> - <TextBlock VerticalAlignment="Center" Margin="20 0 0 0">Update</TextBlock> + <Image Source="/Images/Menu/update.png" VerticalAlignment="Center" Width="32" Height="32"></Image> + <TextBlock VerticalAlignment="Center" Margin="40 0 0 0" Foreground="{StaticResource TangoPrimaryAccentBrush}">Update</TextBlock> </StackPanel> </touch:TouchButton> </Border> </StackPanel> </StackPanel> - <StackPanel DockPanel.Dock="Bottom"> - <Separator Margin="0 10 0 0" Background="{StaticResource TangoDividerBrush}" /> + <Grid DockPanel.Dock="Bottom"> <!--<touch:TouchButton Style="{StaticResource TangoFlatButton}" Padding="30" Command="{Binding SignOutCommand}" FontSize="{StaticResource TangoHeaderFontSize}" Foreground="{StaticResource TangoDarkForegroundBrush}"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> <touch:TouchIcon VerticalAlignment="Center" Angle="180" Icon="Logout" Width="32" Height="32"></touch:TouchIcon> @@ -85,7 +83,7 @@ </StackPanel> </touch:TouchButton>--> - <ItemsControl ItemsSource="{Binding ModuleLoader.UserModules}"> + <!--<ItemsControl ItemsSource="{Binding ModuleLoader.UserModules}"> <ItemsControl.ItemTemplate> <DataTemplate> <Border Visibility="{Binding DockToBottom,Converter={StaticResource BooleanToVisibilityConverter}}"> @@ -100,8 +98,107 @@ </Border> </DataTemplate> </ItemsControl.ItemTemplate> - </ItemsControl> - </StackPanel> + </ItemsControl>--> + + + <Border Background="{StaticResource TangoPowerMenuOpenedBackgroundBrush}" Height="350" Padding="20" RenderTransformOrigin="0.5,1" VerticalAlignment="Bottom"> + <Border.Style> + <Style TargetType="Border"> + <Setter Property="RenderTransform"> + <Setter.Value> + <ScaleTransform ScaleX="1" ScaleY="0" /> + </Setter.Value> + </Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding IsPowerOpened}" Value="True"> + <DataTrigger.EnterActions> + <BeginStoryboard> + <Storyboard> + <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="1" Duration="00:00:0.2" /> + </Storyboard> + </BeginStoryboard> + </DataTrigger.EnterActions> + <DataTrigger.ExitActions> + <BeginStoryboard> + <Storyboard> + <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="0" Duration="00:00:0.2" /> + </Storyboard> + </BeginStoryboard> + </DataTrigger.ExitActions> + </DataTrigger> + </Style.Triggers> + </Style> + </Border.Style> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="1*"/> + <RowDefinition Height="1*"/> + </Grid.RowDefinitions> + + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="188*"/> + <ColumnDefinition Width="261*"/> + </Grid.ColumnDefinitions> + + <Image Source="/Images/power-machine.png" Margin="30" /> + + <UniformGrid Grid.Column="1" Rows="2"> + <touch:TouchButton HorizontalAlignment="Left" VerticalAlignment="Center" Padding="50 20" Height="Auto" Style="{StaticResource TangoLinkButton}" FontSize="{StaticResource TangoTitleFontSize}" Foreground="{StaticResource TangoPrimaryBackgroundBrush}">Turn Off</touch:TouchButton> + <touch:TouchButton HorizontalAlignment="Left" VerticalAlignment="Center" Padding="50 20" Height="Auto" Style="{StaticResource TangoLinkButton}" FontSize="{StaticResource TangoTitleFontSize}" Foreground="{StaticResource TangoPrimaryBackgroundBrush}">Stand By</touch:TouchButton> + </UniformGrid> + </Grid> + + <Rectangle HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="25 0" Opacity="0.3" StrokeThickness="1" Stroke="{StaticResource TangoDividerBrush}" /> + + <Grid Grid.Row="1"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="188*"/> + <ColumnDefinition Width="261*"/> + </Grid.ColumnDefinitions> + <Image Source="/Images/power-tablet.png" Margin="30" /> + + <touch:TouchButton Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Center" Padding="50 20" Height="Auto" Style="{StaticResource TangoLinkButton}" Foreground="{StaticResource TangoPrimaryBackgroundBrush}" FontSize="{StaticResource TangoTitleFontSize}">Restart</touch:TouchButton> + </Grid> + </Grid> + </Border> + + <Border Background="{StaticResource TangoMidBackgroundBrush}" RenderTransformOrigin="0.5,1" VerticalAlignment="Bottom"> + <Border.Style> + <Style TargetType="Border"> + <Setter Property="RenderTransform"> + <Setter.Value> + <ScaleTransform ScaleX="1" ScaleY="1" /> + </Setter.Value> + </Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding IsPowerOpened}" Value="True"> + <DataTrigger.EnterActions> + <BeginStoryboard> + <Storyboard> + <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="0" Duration="00:00:0.2" /> + </Storyboard> + </BeginStoryboard> + </DataTrigger.EnterActions> + <DataTrigger.ExitActions> + <BeginStoryboard> + <Storyboard> + <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="1" Duration="00:00:0.2" /> + </Storyboard> + </BeginStoryboard> + </DataTrigger.ExitActions> + </DataTrigger> + </Style.Triggers> + </Style> + </Border.Style> + <touch:TouchButton Style="{StaticResource TangoFlatButton}" Padding="40 25" Foreground="{StaticResource TangoDarkForegroundBrush}" Command="{Binding PowerCommand}"> + <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> + <Image Source="/Images/menu/power.png" VerticalAlignment="Center" Width="32" Height="32"></Image> + <TextBlock VerticalAlignment="Center" Margin="40 0 0 0" Foreground="{StaticResource TangoPrimaryAccentBrush}">Power</TextBlock> + </StackPanel> + </touch:TouchButton> + </Border> + </Grid> </DockPanel> </Border> </touch:TouchSideMenu.MenuContent> @@ -111,7 +208,7 @@ <DockPanel> <Border BorderThickness="0 0 1 0" BorderBrush="{StaticResource TangoDividerBrush}"> <touch:TouchHamburgerButton Width="100" Height="100" Padding="15" Command="{Binding MenuOrBackCommand}" EnableDropShadow="False" Foreground="{StaticResource TangoPrimaryAccentBrush}" IsBack="{Binding NavigationManager.CanNavigateBack}"> - + </touch:TouchHamburgerButton> </Border> <Grid DockPanel.Dock="Right" Margin="0 0 20 0"> @@ -141,7 +238,7 @@ <TextBlock Margin="0 10 0 0" Text="{Binding MachineProvider.MachineOperator.Status,Converter={StaticResource EnumToDescriptionConverter}}"></TextBlock> </StackPanel> - <touch:TouchButton Margin="40 0 0 0" Height="54" Padding="50 0" MinWidth="184" CornerRadius="30" BlurRadius="20" Command="{Binding NotificationProvider.CurrentAppButton.Command}" IsEnabled="{Binding NotificationProvider.CurrentAppButton.IsEnabled}" Content="{Binding NotificationProvider.CurrentAppButton.Text}" Visibility="{Binding NotificationProvider.CurrentAppButton,Converter={StaticResource IsNullToVisibilityConverter}}"></touch:TouchButton> + <touch:TouchButton Margin="40 0 0 0" Height="65" Padding="50 0" MinWidth="200" CornerRadius="35" BlurRadius="20" Command="{Binding NotificationProvider.CurrentAppButton.Command}" IsEnabled="{Binding NotificationProvider.CurrentAppButton.IsEnabled}" Content="{Binding NotificationProvider.CurrentAppButton.Text}" Visibility="{Binding NotificationProvider.CurrentAppButton,Converter={StaticResource IsNullToVisibilityConverter}}"></touch:TouchButton> </StackPanel> </Grid> <Grid> diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MainView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MainView.xaml index c6e3fa6ea..e4c107049 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MainView.xaml +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MainView.xaml @@ -32,10 +32,10 @@ <touch:TouchPanel.NotificationTemplate> <DataTemplate> <touch:TouchButton Style="{StaticResource TangoFlatButton}" Padding="0" Command="{Binding PressedCommand}" components:TransformationHelper.TransformWhenPressed="False"> - <DockPanel> - <touch:TouchIconButton Visibility="{Binding CanClose,Converter={StaticResource BooleanToVisibilityConverter}}" DockPanel.Dock="Right" Background="Transparent" Padding="20" Style="{StaticResource TangoRoundTouchIconButton}" Command="{Binding CloseCommand}" CommandParameter="{Binding}" HorizontalAlignment="Right" MaxHeight="60" Width="{Binding RelativeSource={RelativeSource Self},Path=ActualHeight}" Icon="Close" Foreground="White" /> + <Grid> <ContentControl Content="{Binding Converter={StaticResource ItemBaseConverter}}"/> - </DockPanel> + <touch:TouchIconButton Visibility="{Binding CanClose,Converter={StaticResource BooleanToVisibilityConverter}}" DockPanel.Dock="Right" Background="Transparent" Padding="35" Style="{StaticResource TangoRoundTouchIconButton}" Command="{Binding CloseCommand}" CommandParameter="{Binding}" HorizontalAlignment="Right" MaxHeight="90" Width="{Binding RelativeSource={RelativeSource Self},Path=ActualHeight}" Icon="Close" Foreground="{StaticResource TangoDarkForegroundBrush}" /> + </Grid> </touch:TouchButton> </DataTemplate> </touch:TouchPanel.NotificationTemplate> diff --git a/Software/Visual_Studio/PPC/Tango.PPC.WatchDog/MainWindowVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.WatchDog/MainWindowVM.cs index 0693b0931..f12678054 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.WatchDog/MainWindowVM.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.WatchDog/MainWindowVM.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; +using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -16,6 +17,9 @@ namespace Tango.PPC.WatchDog { public class MainWindowVM : ViewModel { + [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)] + static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName); + private const String tango_process_name = "Tango.PPC.UI"; private WatchDogClient _watchdog; public TextController Log { get; set; } @@ -109,16 +113,16 @@ namespace Tango.PPC.WatchDog { var process = Process.Start(Path.Combine(AssemblyHelper.GetCurrentAssemblyFolder(), tango_process_name + ".exe")); LogManager.Log("PPC application started."); - LogManager.Log("Waiting for the application to enter an idle state...."); - if (process.WaitForInputIdle((int)TimeSpan.FromMinutes(1).TotalMilliseconds)) + LogManager.Log("Waiting for the application main window...."); + if (WaitForPPCWindow(TimeSpan.FromSeconds(5), TimeSpan.FromMinutes(1))) { - LogManager.Log("Application is in idle state. waiting another 10 seconds..."); + LogManager.Log("Application main window opened. waiting another 10 seconds..."); Thread.Sleep(TimeSpan.FromSeconds(10)); _watchdog.Start(); } else { - LogManager.Log("The PPC application did not enter to an idle state within 1 minute. The Watchdog will not start again!"); + LogManager.Log("The PPC application main window has failed to open within 1 minute. The Watchdog will not start again!"); } } catch (Exception ex) @@ -126,5 +130,21 @@ namespace Tango.PPC.WatchDog LogManager.Log(ex, "Error starting PPC application."); } } + + private bool WaitForPPCWindow(TimeSpan interval, TimeSpan timeout) + { + for (TimeSpan time = TimeSpan.Zero; time < timeout; time = time.Add(interval)) + { + IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, "Tango - PPC"); + if (windowPtr != IntPtr.Zero) + { + return true; + } + + Thread.Sleep(interval); + } + + return false; + } } } diff --git a/Software/Visual_Studio/Tango.BL/Builders/JobsCollectionBuilder.cs b/Software/Visual_Studio/Tango.BL/Builders/JobsCollectionBuilder.cs index 5750f8c1c..0d0b555ee 100644 --- a/Software/Visual_Studio/Tango.BL/Builders/JobsCollectionBuilder.cs +++ b/Software/Visual_Studio/Tango.BL/Builders/JobsCollectionBuilder.cs @@ -15,6 +15,14 @@ namespace Tango.BL.Builders } + public virtual JobsCollectionBuilder WithCustomer() + { + return AddQueryStep(1, (query) => + { + return query.Include(x => x.Customer); + }); + } + public virtual JobsCollectionBuilder WithSegments() { return AddStep(1, () => diff --git a/Software/Visual_Studio/Tango.BL/Builders/MachineBuilder.cs b/Software/Visual_Studio/Tango.BL/Builders/MachineBuilder.cs index 2f1ad47b5..832fdb2ca 100644 --- a/Software/Visual_Studio/Tango.BL/Builders/MachineBuilder.cs +++ b/Software/Visual_Studio/Tango.BL/Builders/MachineBuilder.cs @@ -15,6 +15,14 @@ namespace Tango.BL.Builders } + public virtual MachineBuilder WithSettings() + { + return AddQueryStep(1, (query) => + { + return query.Include(x => x.DefaultColorSpace).Include(x => x.DefaultRml).Include(x => x.DefaultSpoolType); + }); + } + public virtual MachineBuilder WithOrganization() { return AddStep(1, () => diff --git a/Software/Visual_Studio/Tango.BL/ColorConversion/TangoColorConverter.cs b/Software/Visual_Studio/Tango.BL/ColorConversion/TangoColorConverter.cs index e94dd851b..d44859413 100644 --- a/Software/Visual_Studio/Tango.BL/ColorConversion/TangoColorConverter.cs +++ b/Software/Visual_Studio/Tango.BL/ColorConversion/TangoColorConverter.cs @@ -184,7 +184,7 @@ namespace Tango.BL.ColorConversion min_standard = standard_stops.Select(x => GetSuggestions(x)).Select(x => x.SingleCoordinates).Min(x => x.ProcessParametersTableIndex); } - if (color_catalog_stops.Count() > 0) + if (color_catalog_stops.Where(x => x.ColorCatalog != null).Count() > 0) { min_catalog = color_catalog_stops.Where(x => x.ColorCatalog != null).Min(x => x.ColorCatalog.ProcessParametersTableIndex); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs b/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs index ca724a730..bc4ab2786 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs @@ -404,6 +404,7 @@ namespace Tango.BL.Entities { if (Segment != null) { + RaisePropertyChanged(nameof(OffsetMeters)); Segment.RaiseSegmentBrushChanged(); } } diff --git a/Software/Visual_Studio/Tango.BL/Entities/BrushStopBase.cs b/Software/Visual_Studio/Tango.BL/Entities/BrushStopBase.cs index 69658bab6..a6dcad6a9 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/BrushStopBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/BrushStopBase.cs @@ -110,6 +110,7 @@ namespace Tango.BL.Entities if (_segmentguid != value) { _segmentguid = value; + } } } @@ -135,6 +136,7 @@ namespace Tango.BL.Entities if (_colorspaceguid != value) { _colorspaceguid = value; + } } } @@ -943,6 +945,7 @@ namespace Tango.BL.Entities if (_colorcatalogguid != value) { _colorcatalogguid = value; + } } } @@ -968,6 +971,11 @@ namespace Tango.BL.Entities { _colorcatalog = value; + if (ColorCatalog != null) + { + ColorCatalogGuid = ColorCatalog.Guid; + } + OnColorCatalogChanged(value); } @@ -995,6 +1003,11 @@ namespace Tango.BL.Entities { _colorspace = value; + if (ColorSpace != null) + { + ColorSpaceGuid = ColorSpace.Guid; + } + OnColorSpaceChanged(value); } @@ -1022,6 +1035,11 @@ namespace Tango.BL.Entities { _segment = value; + if (Segment != null) + { + SegmentGuid = Segment.Guid; + } + OnSegmentChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/CatBase.cs b/Software/Visual_Studio/Tango.BL/Entities/CatBase.cs index 3ea654919..3805844b5 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/CatBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/CatBase.cs @@ -83,6 +83,7 @@ namespace Tango.BL.Entities if (_machineguid != value) { _machineguid = value; + } } } @@ -108,6 +109,7 @@ namespace Tango.BL.Entities if (_rmlguid != value) { _rmlguid = value; + } } } @@ -133,6 +135,7 @@ namespace Tango.BL.Entities if (_liquidtypeguid != value) { _liquidtypeguid = value; + } } } @@ -185,6 +188,11 @@ namespace Tango.BL.Entities { _liquidtype = value; + if (LiquidType != null) + { + LiquidTypeGuid = LiquidType.Guid; + } + OnLiquidTypeChanged(value); } @@ -212,6 +220,11 @@ namespace Tango.BL.Entities { _machine = value; + if (Machine != null) + { + MachineGuid = Machine.Guid; + } + OnMachineChanged(value); } @@ -239,6 +252,11 @@ namespace Tango.BL.Entities { _rml = value; + if (Rml != null) + { + RmlGuid = Rml.Guid; + } + OnRmlChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/CctBase.cs b/Software/Visual_Studio/Tango.BL/Entities/CctBase.cs index 11319a38a..2eacd5057 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/CctBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/CctBase.cs @@ -251,6 +251,7 @@ namespace Tango.BL.Entities if (_rmlguid != value) { _rmlguid = value; + } } } @@ -276,6 +277,11 @@ namespace Tango.BL.Entities { _rml = value; + if (Rml != null) + { + RmlGuid = Rml.Guid; + } + OnRmlChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/ColorCatalogBase.cs b/Software/Visual_Studio/Tango.BL/Entities/ColorCatalogBase.cs index 6438c6332..362b812aa 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/ColorCatalogBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/ColorCatalogBase.cs @@ -80,6 +80,7 @@ namespace Tango.BL.Entities if (_rmlguid != value) { _rmlguid = value; + } } } @@ -105,6 +106,7 @@ namespace Tango.BL.Entities if (_colorspaceguid != value) { _colorspaceguid = value; + } } } @@ -533,6 +535,11 @@ namespace Tango.BL.Entities { _colorspace = value; + if (ColorSpace != null) + { + ColorSpaceGuid = ColorSpace.Guid; + } + OnColorSpaceChanged(value); } @@ -560,6 +567,11 @@ namespace Tango.BL.Entities { _rml = value; + if (Rml != null) + { + RmlGuid = Rml.Guid; + } + OnRmlChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/ConfigurationBase.cs b/Software/Visual_Studio/Tango.BL/Entities/ConfigurationBase.cs index f2adc67e7..c8c9471f7 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/ConfigurationBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/ConfigurationBase.cs @@ -60,6 +60,7 @@ namespace Tango.BL.Entities if (_applicationosversionguid != value) { _applicationosversionguid = value; + } } } @@ -85,6 +86,7 @@ namespace Tango.BL.Entities if (_applicationfirmwareversionguid != value) { _applicationfirmwareversionguid = value; + } } } @@ -110,6 +112,7 @@ namespace Tango.BL.Entities if (_applicationdisplaypanelversionguid != value) { _applicationdisplaypanelversionguid = value; + } } } @@ -135,6 +138,7 @@ namespace Tango.BL.Entities if (_embeddedfirmwareversionguid != value) { _embeddedfirmwareversionguid = value; + } } } @@ -160,6 +164,7 @@ namespace Tango.BL.Entities if (_hardwareversionguid != value) { _hardwareversionguid = value; + } } } @@ -185,6 +190,11 @@ namespace Tango.BL.Entities { _applicationdisplaypanelversion = value; + if (ApplicationDisplayPanelVersion != null) + { + ApplicationDisplayPanelVersionGuid = ApplicationDisplayPanelVersion.Guid; + } + OnApplicationDisplayPanelVersionChanged(value); } @@ -212,6 +222,11 @@ namespace Tango.BL.Entities { _applicationfirmwareversion = value; + if (ApplicationFirmwareVersion != null) + { + ApplicationFirmwareVersionGuid = ApplicationFirmwareVersion.Guid; + } + OnApplicationFirmwareVersionChanged(value); } @@ -239,6 +254,11 @@ namespace Tango.BL.Entities { _applicationosversion = value; + if (ApplicationOsVersion != null) + { + ApplicationOsVersionGuid = ApplicationOsVersion.Guid; + } + OnApplicationOsVersionChanged(value); } @@ -266,6 +286,11 @@ namespace Tango.BL.Entities { _embeddedfirmwareversion = value; + if (EmbeddedFirmwareVersion != null) + { + EmbeddedFirmwareVersionGuid = EmbeddedFirmwareVersion.Guid; + } + OnEmbeddedFirmwareVersionChanged(value); } @@ -293,6 +318,11 @@ namespace Tango.BL.Entities { _hardwareversion = value; + if (HardwareVersion != null) + { + HardwareVersionGuid = HardwareVersion.Guid; + } + OnHardwareVersionChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/CustomerBase.cs b/Software/Visual_Studio/Tango.BL/Entities/CustomerBase.cs index 89a8e8cf7..4c802446b 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/CustomerBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/CustomerBase.cs @@ -52,6 +52,7 @@ namespace Tango.BL.Entities if (_organizationguid != value) { _organizationguid = value; + } } } @@ -104,6 +105,11 @@ namespace Tango.BL.Entities { _organization = value; + if (Organization != null) + { + OrganizationGuid = Organization.Guid; + } + OnOrganizationChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/DispenserBase.cs b/Software/Visual_Studio/Tango.BL/Entities/DispenserBase.cs index 591ae2155..986ecd683 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/DispenserBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/DispenserBase.cs @@ -91,6 +91,7 @@ namespace Tango.BL.Entities if (_dispensertypeguid != value) { _dispensertypeguid = value; + } } } @@ -278,6 +279,11 @@ namespace Tango.BL.Entities { _dispensertype = value; + if (DispenserType != null) + { + DispenserTypeGuid = DispenserType.Guid; + } + OnDispenserTypeChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/HardwareBlowerBase.cs b/Software/Visual_Studio/Tango.BL/Entities/HardwareBlowerBase.cs index 62925b51f..457de376e 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/HardwareBlowerBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/HardwareBlowerBase.cs @@ -58,6 +58,7 @@ namespace Tango.BL.Entities if (_hardwareblowertypeguid != value) { _hardwareblowertypeguid = value; + } } } @@ -83,6 +84,7 @@ namespace Tango.BL.Entities if (_hardwareversionguid != value) { _hardwareversionguid = value; + } } } @@ -216,6 +218,11 @@ namespace Tango.BL.Entities { _hardwareblowertype = value; + if (HardwareBlowerType != null) + { + HardwareBlowerTypeGuid = HardwareBlowerType.Guid; + } + OnHardwareBlowerTypeChanged(value); } @@ -243,6 +250,11 @@ namespace Tango.BL.Entities { _hardwareversion = value; + if (HardwareVersion != null) + { + HardwareVersionGuid = HardwareVersion.Guid; + } + OnHardwareVersionChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/HardwareBreakSensorBase.cs b/Software/Visual_Studio/Tango.BL/Entities/HardwareBreakSensorBase.cs index 799f0f783..2ea472ddb 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/HardwareBreakSensorBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/HardwareBreakSensorBase.cs @@ -56,6 +56,7 @@ namespace Tango.BL.Entities if (_hardwarebreaksensortypeguid != value) { _hardwarebreaksensortypeguid = value; + } } } @@ -81,6 +82,7 @@ namespace Tango.BL.Entities if (_hardwareversionguid != value) { _hardwareversionguid = value; + } } } @@ -187,6 +189,11 @@ namespace Tango.BL.Entities { _hardwarebreaksensortype = value; + if (HardwareBreakSensorType != null) + { + HardwareBreakSensorTypeGuid = HardwareBreakSensorType.Guid; + } + OnHardwareBreakSensorTypeChanged(value); } @@ -214,6 +221,11 @@ namespace Tango.BL.Entities { _hardwareversion = value; + if (HardwareVersion != null) + { + HardwareVersionGuid = HardwareVersion.Guid; + } + OnHardwareVersionChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/HardwareDancerBase.cs b/Software/Visual_Studio/Tango.BL/Entities/HardwareDancerBase.cs index 2ff924d88..50e94ed33 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/HardwareDancerBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/HardwareDancerBase.cs @@ -72,6 +72,7 @@ namespace Tango.BL.Entities if (_hardwaredancertypeguid != value) { _hardwaredancertypeguid = value; + } } } @@ -97,6 +98,7 @@ namespace Tango.BL.Entities if (_hardwareversionguid != value) { _hardwareversionguid = value; + } } } @@ -419,6 +421,11 @@ namespace Tango.BL.Entities { _hardwaredancertype = value; + if (HardwareDancerType != null) + { + HardwareDancerTypeGuid = HardwareDancerType.Guid; + } + OnHardwareDancerTypeChanged(value); } @@ -446,6 +453,11 @@ namespace Tango.BL.Entities { _hardwareversion = value; + if (HardwareVersion != null) + { + HardwareVersionGuid = HardwareVersion.Guid; + } + OnHardwareVersionChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/HardwareMotorBase.cs b/Software/Visual_Studio/Tango.BL/Entities/HardwareMotorBase.cs index 495951553..5929037df 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/HardwareMotorBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/HardwareMotorBase.cs @@ -105,6 +105,7 @@ namespace Tango.BL.Entities if (_hardwaremotortypeguid != value) { _hardwaremotortypeguid = value; + } } } @@ -130,6 +131,7 @@ namespace Tango.BL.Entities if (_hardwareversionguid != value) { _hardwareversionguid = value; + } } } @@ -830,6 +832,11 @@ namespace Tango.BL.Entities { _hardwaremotortype = value; + if (HardwareMotorType != null) + { + HardwareMotorTypeGuid = HardwareMotorType.Guid; + } + OnHardwareMotorTypeChanged(value); } @@ -857,6 +864,11 @@ namespace Tango.BL.Entities { _hardwareversion = value; + if (HardwareVersion != null) + { + HardwareVersionGuid = HardwareVersion.Guid; + } + OnHardwareVersionChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/HardwarePidControlBase.cs b/Software/Visual_Studio/Tango.BL/Entities/HardwarePidControlBase.cs index 0dbeb4c43..14b6b746c 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/HardwarePidControlBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/HardwarePidControlBase.cs @@ -90,6 +90,7 @@ namespace Tango.BL.Entities if (_hardwarepidcontroltypeguid != value) { _hardwarepidcontroltypeguid = value; + } } } @@ -115,6 +116,7 @@ namespace Tango.BL.Entities if (_hardwareversionguid != value) { _hardwareversionguid = value; + } } } @@ -680,6 +682,11 @@ namespace Tango.BL.Entities { _hardwarepidcontroltype = value; + if (HardwarePidControlType != null) + { + HardwarePidControlTypeGuid = HardwarePidControlType.Guid; + } + OnHardwarePidControlTypeChanged(value); } @@ -707,6 +714,11 @@ namespace Tango.BL.Entities { _hardwareversion = value; + if (HardwareVersion != null) + { + HardwareVersionGuid = HardwareVersion.Guid; + } + OnHardwareVersionChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/HardwareSpeedSensorBase.cs b/Software/Visual_Studio/Tango.BL/Entities/HardwareSpeedSensorBase.cs index 36a74c15b..4399c8557 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/HardwareSpeedSensorBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/HardwareSpeedSensorBase.cs @@ -56,6 +56,7 @@ namespace Tango.BL.Entities if (_hardwarespeedsensortypeguid != value) { _hardwarespeedsensortypeguid = value; + } } } @@ -81,6 +82,7 @@ namespace Tango.BL.Entities if (_hardwareversionguid != value) { _hardwareversionguid = value; + } } } @@ -187,6 +189,11 @@ namespace Tango.BL.Entities { _hardwarespeedsensortype = value; + if (HardwareSpeedSensorType != null) + { + HardwareSpeedSensorTypeGuid = HardwareSpeedSensorType.Guid; + } + OnHardwareSpeedSensorTypeChanged(value); } @@ -214,6 +221,11 @@ namespace Tango.BL.Entities { _hardwareversion = value; + if (HardwareVersion != null) + { + HardwareVersionGuid = HardwareVersion.Guid; + } + OnHardwareVersionChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/HardwareWinderBase.cs b/Software/Visual_Studio/Tango.BL/Entities/HardwareWinderBase.cs index e0ec1edeb..2213e8956 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/HardwareWinderBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/HardwareWinderBase.cs @@ -54,6 +54,7 @@ namespace Tango.BL.Entities if (_hardwarewindertypeguid != value) { _hardwarewindertypeguid = value; + } } } @@ -79,6 +80,7 @@ namespace Tango.BL.Entities if (_hardwareversionguid != value) { _hardwareversionguid = value; + } } } @@ -158,6 +160,11 @@ namespace Tango.BL.Entities { _hardwareversion = value; + if (HardwareVersion != null) + { + HardwareVersionGuid = HardwareVersion.Guid; + } + OnHardwareVersionChanged(value); } @@ -185,6 +192,11 @@ namespace Tango.BL.Entities { _hardwarewindertype = value; + if (HardwareWinderType != null) + { + HardwareWinderTypeGuid = HardwareWinderType.Guid; + } + OnHardwareWinderTypeChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/IdsPackBase.cs b/Software/Visual_Studio/Tango.BL/Entities/IdsPackBase.cs index 451dafbc9..6c2ac7cba 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/IdsPackBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/IdsPackBase.cs @@ -62,6 +62,7 @@ namespace Tango.BL.Entities if (_configurationguid != value) { _configurationguid = value; + } } } @@ -87,6 +88,7 @@ namespace Tango.BL.Entities if (_dispenserguid != value) { _dispenserguid = value; + } } } @@ -112,6 +114,7 @@ namespace Tango.BL.Entities if (_liquidtypeguid != value) { _liquidtypeguid = value; + } } } @@ -137,6 +140,7 @@ namespace Tango.BL.Entities if (_cartridgetypeguid != value) { _cartridgetypeguid = value; + } } } @@ -162,6 +166,7 @@ namespace Tango.BL.Entities if (_midtanktypeguid != value) { _midtanktypeguid = value; + } } } @@ -187,6 +192,7 @@ namespace Tango.BL.Entities if (_idspackformulaguid != value) { _idspackformulaguid = value; + } } } @@ -266,6 +272,11 @@ namespace Tango.BL.Entities { _cartridgetype = value; + if (CartridgeType != null) + { + CartridgeTypeGuid = CartridgeType.Guid; + } + OnCartridgeTypeChanged(value); } @@ -293,6 +304,11 @@ namespace Tango.BL.Entities { _configuration = value; + if (Configuration != null) + { + ConfigurationGuid = Configuration.Guid; + } + OnConfigurationChanged(value); } @@ -320,6 +336,11 @@ namespace Tango.BL.Entities { _dispenser = value; + if (Dispenser != null) + { + DispenserGuid = Dispenser.Guid; + } + OnDispenserChanged(value); } @@ -347,6 +368,11 @@ namespace Tango.BL.Entities { _idspackformula = value; + if (IdsPackFormula != null) + { + IdsPackFormulaGuid = IdsPackFormula.Guid; + } + OnIdsPackFormulaChanged(value); } @@ -374,6 +400,11 @@ namespace Tango.BL.Entities { _liquidtype = value; + if (LiquidType != null) + { + LiquidTypeGuid = LiquidType.Guid; + } + OnLiquidTypeChanged(value); } @@ -401,6 +432,11 @@ namespace Tango.BL.Entities { _midtanktype = value; + if (MidTankType != null) + { + MidTankTypeGuid = MidTankType.Guid; + } + OnMidTankTypeChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/Job.cs b/Software/Visual_Studio/Tango.BL/Entities/Job.cs index 77f151fbc..d28f00613 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/Job.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/Job.cs @@ -464,6 +464,19 @@ namespace Tango.BL.Entities } /// <summary> + /// Gets the duration estimation for this job. + /// </summary> + /// <returns></returns> + public Task<TimeSpan> GetEstimatedDuration() + { + return Task.Factory.StartNew<TimeSpan>(() => + { + var process = GetRecommendedProcessParameters().Result; + return GetEstimatedDuration(process); + }); + } + + /// <summary> /// Translates the job progress to time. /// </summary> /// <param name="progress">The progress.</param> @@ -497,6 +510,22 @@ namespace Tango.BL.Entities }; } + public Task<ProcessParametersTable> GetRecommendedProcessParameters() + { + return Task.Factory.StartNew<ProcessParametersTable>(() => + { + try + { + int index = ColorConversion.TangoColorConverter.GetLeastCommonProcessParametersTableIndex(Segments.SelectMany(x => x.BrushStops)); + return Rml.GetActiveProcessGroup().ProcessParametersTables[index]; + } + catch (Exception ex) + { + throw new InvalidOperationException("Could not calculate the recommended process parameters for the job.", ex); + } + }); + } + public Task<JobFile> ToJobFile() { return Task.Factory.StartNew<JobFile>(() => diff --git a/Software/Visual_Studio/Tango.BL/Entities/JobBase.cs b/Software/Visual_Studio/Tango.BL/Entities/JobBase.cs index 55c06beff..363349a4a 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/JobBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/JobBase.cs @@ -173,6 +173,7 @@ namespace Tango.BL.Entities if (_machineguid != value) { _machineguid = value; + } } } @@ -198,6 +199,7 @@ namespace Tango.BL.Entities if (_userguid != value) { _userguid = value; + } } } @@ -223,6 +225,7 @@ namespace Tango.BL.Entities if (_rmlguid != value) { _rmlguid = value; + } } } @@ -248,6 +251,7 @@ namespace Tango.BL.Entities if (_windingmethodguid != value) { _windingmethodguid = value; + } } } @@ -273,6 +277,7 @@ namespace Tango.BL.Entities if (_spooltypeguid != value) { _spooltypeguid = value; + } } } @@ -625,6 +630,7 @@ namespace Tango.BL.Entities if (_colorspaceguid != value) { _colorspaceguid = value; + } } } @@ -705,6 +711,7 @@ namespace Tango.BL.Entities if (_customerguid != value) { _customerguid = value; + } } } @@ -980,6 +987,11 @@ namespace Tango.BL.Entities { _colorspace = value; + if (ColorSpace != null) + { + ColorSpaceGuid = ColorSpace.Guid; + } + OnColorSpaceChanged(value); } @@ -1007,6 +1019,11 @@ namespace Tango.BL.Entities { _customer = value; + if (Customer != null) + { + CustomerGuid = Customer.Guid; + } + OnCustomerChanged(value); } @@ -1059,6 +1076,11 @@ namespace Tango.BL.Entities { _machine = value; + if (Machine != null) + { + MachineGuid = Machine.Guid; + } + OnMachineChanged(value); } @@ -1086,6 +1108,11 @@ namespace Tango.BL.Entities { _rml = value; + if (Rml != null) + { + RmlGuid = Rml.Guid; + } + OnRmlChanged(value); } @@ -1113,6 +1140,11 @@ namespace Tango.BL.Entities { _spooltype = value; + if (SpoolType != null) + { + SpoolTypeGuid = SpoolType.Guid; + } + OnSpoolTypeChanged(value); } @@ -1140,6 +1172,11 @@ namespace Tango.BL.Entities { _user = value; + if (User != null) + { + UserGuid = User.Guid; + } + OnUserChanged(value); } @@ -1167,6 +1204,11 @@ namespace Tango.BL.Entities { _windingmethod = value; + if (WindingMethod != null) + { + WindingMethodGuid = WindingMethod.Guid; + } + OnWindingMethodChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/JobRunBase.cs b/Software/Visual_Studio/Tango.BL/Entities/JobRunBase.cs index 2cb5025a8..ca534fff1 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/JobRunBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/JobRunBase.cs @@ -63,6 +63,7 @@ namespace Tango.BL.Entities if (_jobguid != value) { _jobguid = value; + } } } @@ -225,6 +226,11 @@ namespace Tango.BL.Entities { _job = value; + if (Job != null) + { + JobGuid = Job.Guid; + } + OnJobChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/LiquidTypesRmlBase.cs b/Software/Visual_Studio/Tango.BL/Entities/LiquidTypesRmlBase.cs index cc5f702e4..30ea371d7 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/LiquidTypesRmlBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/LiquidTypesRmlBase.cs @@ -54,6 +54,7 @@ namespace Tango.BL.Entities if (_liquidtypeguid != value) { _liquidtypeguid = value; + } } } @@ -79,6 +80,7 @@ namespace Tango.BL.Entities if (_rmlguid != value) { _rmlguid = value; + } } } @@ -158,6 +160,11 @@ namespace Tango.BL.Entities { _liquidtype = value; + if (LiquidType != null) + { + LiquidTypeGuid = LiquidType.Guid; + } + OnLiquidTypeChanged(value); } @@ -185,6 +192,11 @@ namespace Tango.BL.Entities { _rml = value; + if (Rml != null) + { + RmlGuid = Rml.Guid; + } + OnRmlChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/MachineBase.cs b/Software/Visual_Studio/Tango.BL/Entities/MachineBase.cs index 892f535d5..d4a915a66 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/MachineBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/MachineBase.cs @@ -177,6 +177,7 @@ namespace Tango.BL.Entities if (_organizationguid != value) { _organizationguid = value; + } } } @@ -202,6 +203,7 @@ namespace Tango.BL.Entities if (_machineversionguid != value) { _machineversionguid = value; + } } } @@ -227,6 +229,7 @@ namespace Tango.BL.Entities if (_configurationguid != value) { _configurationguid = value; + } } } @@ -252,6 +255,7 @@ namespace Tango.BL.Entities if (_defaultrmlguid != value) { _defaultrmlguid = value; + } } } @@ -276,6 +280,7 @@ namespace Tango.BL.Entities if (_loadedrmlguid != value) { _loadedrmlguid = value; + } } } @@ -355,6 +360,7 @@ namespace Tango.BL.Entities if (_defaultcolorspaceguid != value) { _defaultcolorspaceguid = value; + } } } @@ -407,6 +413,7 @@ namespace Tango.BL.Entities if (_defaultspooltypeguid != value) { _defaultspooltypeguid = value; + } } } @@ -700,6 +707,11 @@ namespace Tango.BL.Entities { _defaultcolorspace = value; + if (DefaultColorSpace != null) + { + DefaultColorSpaceGuid = DefaultColorSpace.Guid; + } + OnDefaultColorSpaceChanged(value); } @@ -727,6 +739,11 @@ namespace Tango.BL.Entities { _configuration = value; + if (Configuration != null) + { + ConfigurationGuid = Configuration.Guid; + } + OnConfigurationChanged(value); } @@ -779,6 +796,11 @@ namespace Tango.BL.Entities { _machineversion = value; + if (MachineVersion != null) + { + MachineVersionGuid = MachineVersion.Guid; + } + OnMachineVersionChanged(value); } @@ -831,6 +853,11 @@ namespace Tango.BL.Entities { _organization = value; + if (Organization != null) + { + OrganizationGuid = Organization.Guid; + } + OnOrganizationChanged(value); } @@ -858,6 +885,11 @@ namespace Tango.BL.Entities { _defaultrml = value; + if (DefaultRml != null) + { + DefaultRmlGuid = DefaultRml.Guid; + } + OnDefaultRmlChanged(value); } @@ -885,6 +917,11 @@ namespace Tango.BL.Entities { _defaultspooltype = value; + if (DefaultSpoolType != null) + { + DefaultSpoolTypeGuid = DefaultSpoolType.Guid; + } + OnDefaultSpoolTypeChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/MachineStudioVersionBase.cs b/Software/Visual_Studio/Tango.BL/Entities/MachineStudioVersionBase.cs index edbddb240..29d916bc6 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/MachineStudioVersionBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/MachineStudioVersionBase.cs @@ -164,6 +164,7 @@ namespace Tango.BL.Entities if (_userguid != value) { _userguid = value; + } } } @@ -189,6 +190,11 @@ namespace Tango.BL.Entities { _user = value; + if (User != null) + { + UserGuid = User.Guid; + } + OnUserChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/MachinesEventBase.cs b/Software/Visual_Studio/Tango.BL/Entities/MachinesEventBase.cs index ac300b9b9..3940cc919 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/MachinesEventBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/MachinesEventBase.cs @@ -85,6 +85,7 @@ namespace Tango.BL.Entities if (_machineguid != value) { _machineguid = value; + } } } @@ -110,6 +111,7 @@ namespace Tango.BL.Entities if (_eventtypeguid != value) { _eventtypeguid = value; + } } } @@ -135,6 +137,7 @@ namespace Tango.BL.Entities if (_userguid != value) { _userguid = value; + } } } @@ -214,6 +217,11 @@ namespace Tango.BL.Entities { _eventtype = value; + if (EventType != null) + { + EventTypeGuid = EventType.Guid; + } + OnEventTypeChanged(value); } @@ -241,6 +249,11 @@ namespace Tango.BL.Entities { _machine = value; + if (Machine != null) + { + MachineGuid = Machine.Guid; + } + OnMachineChanged(value); } @@ -268,6 +281,11 @@ namespace Tango.BL.Entities { _user = value; + if (User != null) + { + UserGuid = User.Guid; + } + OnUserChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/OrganizationBase.cs b/Software/Visual_Studio/Tango.BL/Entities/OrganizationBase.cs index 1d2fea8d0..37d44e100 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/OrganizationBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/OrganizationBase.cs @@ -85,6 +85,7 @@ namespace Tango.BL.Entities if (_contactguid != value) { _contactguid = value; + } } } @@ -110,6 +111,7 @@ namespace Tango.BL.Entities if (_addressguid != value) { _addressguid = value; + } } } @@ -135,6 +137,11 @@ namespace Tango.BL.Entities { _address = value; + if (Address != null) + { + AddressGuid = Address.Guid; + } + OnAddressChanged(value); } @@ -162,6 +169,11 @@ namespace Tango.BL.Entities { _contact = value; + if (Contact != null) + { + ContactGuid = Contact.Guid; + } + OnContactChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/ProcessParametersTableBase.cs b/Software/Visual_Studio/Tango.BL/Entities/ProcessParametersTableBase.cs index 09c79064d..94ae5b20a 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/ProcessParametersTableBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/ProcessParametersTableBase.cs @@ -630,6 +630,7 @@ namespace Tango.BL.Entities if (_processparameterstablesgroupguid != value) { _processparameterstablesgroupguid = value; + } } } @@ -682,6 +683,11 @@ namespace Tango.BL.Entities { _processparameterstablesgroup = value; + if (ProcessParametersTablesGroup != null) + { + ProcessParametersTablesGroupGuid = ProcessParametersTablesGroup.Guid; + } + OnProcessParametersTablesGroupChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/ProcessParametersTablesGroupBase.cs b/Software/Visual_Studio/Tango.BL/Entities/ProcessParametersTablesGroupBase.cs index 586d4bcc7..09edc7012 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/ProcessParametersTablesGroupBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/ProcessParametersTablesGroupBase.cs @@ -56,6 +56,7 @@ namespace Tango.BL.Entities if (_rmlguid != value) { _rmlguid = value; + } } } @@ -187,6 +188,11 @@ namespace Tango.BL.Entities { _rml = value; + if (Rml != null) + { + RmlGuid = Rml.Guid; + } + OnRmlChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/Rml.cs b/Software/Visual_Studio/Tango.BL/Entities/Rml.cs index f79fb6c5b..fd8f3d2d1 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/Rml.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/Rml.cs @@ -50,5 +50,10 @@ namespace Tango.BL.Entities return Color.FromRgb((byte)rgb.R, (byte)rgb.G, (byte)rgb.B); } } + + public ProcessParametersTablesGroup GetActiveProcessGroup() + { + return ProcessParametersTablesGroups.FirstOrDefault(x => x.Active); + } } } diff --git a/Software/Visual_Studio/Tango.BL/Entities/RmlBase.cs b/Software/Visual_Studio/Tango.BL/Entities/RmlBase.cs index 97fee9558..91862b7c7 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/RmlBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/RmlBase.cs @@ -270,6 +270,7 @@ namespace Tango.BL.Entities if (_mediamaterialguid != value) { _mediamaterialguid = value; + } } } @@ -295,6 +296,7 @@ namespace Tango.BL.Entities if (_mediapurposeguid != value) { _mediapurposeguid = value; + } } } @@ -320,6 +322,7 @@ namespace Tango.BL.Entities if (_mediaconditionguid != value) { _mediaconditionguid = value; + } } } @@ -345,6 +348,7 @@ namespace Tango.BL.Entities if (_linearmassdensityunitguid != value) { _linearmassdensityunitguid = value; + } } } @@ -370,6 +374,7 @@ namespace Tango.BL.Entities if (_fibershapeguid != value) { _fibershapeguid = value; + } } } @@ -395,6 +400,7 @@ namespace Tango.BL.Entities if (_fibersynthguid != value) { _fibersynthguid = value; + } } } @@ -819,6 +825,11 @@ namespace Tango.BL.Entities { _fibershape = value; + if (FiberShape != null) + { + FiberShapeGuid = FiberShape.Guid; + } + OnFiberShapeChanged(value); } @@ -846,6 +857,11 @@ namespace Tango.BL.Entities { _fibersynth = value; + if (FiberSynth != null) + { + FiberSynthGuid = FiberSynth.Guid; + } + OnFiberSynthChanged(value); } @@ -898,6 +914,11 @@ namespace Tango.BL.Entities { _linearmassdensityunit = value; + if (LinearMassDensityUnit != null) + { + LinearMassDensityUnitGuid = LinearMassDensityUnit.Guid; + } + OnLinearMassDensityUnitChanged(value); } @@ -975,6 +996,11 @@ namespace Tango.BL.Entities { _mediacondition = value; + if (MediaCondition != null) + { + MediaConditionGuid = MediaCondition.Guid; + } + OnMediaConditionChanged(value); } @@ -1002,6 +1028,11 @@ namespace Tango.BL.Entities { _mediamaterial = value; + if (MediaMaterial != null) + { + MediaMaterialGuid = MediaMaterial.Guid; + } + OnMediaMaterialChanged(value); } @@ -1029,6 +1060,11 @@ namespace Tango.BL.Entities { _mediapurpose = value; + if (MediaPurpose != null) + { + MediaPurposeGuid = MediaPurpose.Guid; + } + OnMediaPurposeChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/RolesPermissionBase.cs b/Software/Visual_Studio/Tango.BL/Entities/RolesPermissionBase.cs index 5c6c605a2..aa46ba8ce 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/RolesPermissionBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/RolesPermissionBase.cs @@ -50,6 +50,7 @@ namespace Tango.BL.Entities if (_roleguid != value) { _roleguid = value; + } } } @@ -75,6 +76,7 @@ namespace Tango.BL.Entities if (_permissionguid != value) { _permissionguid = value; + } } } @@ -100,6 +102,11 @@ namespace Tango.BL.Entities { _permission = value; + if (Permission != null) + { + PermissionGuid = Permission.Guid; + } + OnPermissionChanged(value); } @@ -127,6 +134,11 @@ namespace Tango.BL.Entities { _role = value; + if (Role != null) + { + RoleGuid = Role.Guid; + } + OnRoleChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/SegmentBase.cs b/Software/Visual_Studio/Tango.BL/Entities/SegmentBase.cs index d6d16a580..07c7a09e0 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/SegmentBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/SegmentBase.cs @@ -83,6 +83,7 @@ namespace Tango.BL.Entities if (_jobguid != value) { _jobguid = value; + } } } @@ -187,6 +188,11 @@ namespace Tango.BL.Entities { _job = value; + if (Job != null) + { + JobGuid = Job.Guid; + } + OnJobChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/SpoolBase.cs b/Software/Visual_Studio/Tango.BL/Entities/SpoolBase.cs index 1f9eae25f..fd10b4f90 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/SpoolBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/SpoolBase.cs @@ -58,6 +58,7 @@ namespace Tango.BL.Entities if (_spooltypeguid != value) { _spooltypeguid = value; + } } } @@ -83,6 +84,7 @@ namespace Tango.BL.Entities if (_machineguid != value) { _machineguid = value; + } } } @@ -216,6 +218,11 @@ namespace Tango.BL.Entities { _machine = value; + if (Machine != null) + { + MachineGuid = Machine.Guid; + } + OnMachineChanged(value); } @@ -243,6 +250,11 @@ namespace Tango.BL.Entities { _spooltype = value; + if (SpoolType != null) + { + SpoolTypeGuid = SpoolType.Guid; + } + OnSpoolTypeChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/TangoVersionBase.cs b/Software/Visual_Studio/Tango.BL/Entities/TangoVersionBase.cs index 7f198017e..581bd85d7 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/TangoVersionBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/TangoVersionBase.cs @@ -166,6 +166,7 @@ namespace Tango.BL.Entities if (_userguid != value) { _userguid = value; + } } } @@ -191,6 +192,7 @@ namespace Tango.BL.Entities if (_machineversionguid != value) { _machineversionguid = value; + } } } @@ -216,6 +218,11 @@ namespace Tango.BL.Entities { _machineversion = value; + if (MachineVersion != null) + { + MachineVersionGuid = MachineVersion.Guid; + } + OnMachineVersionChanged(value); } @@ -243,6 +250,11 @@ namespace Tango.BL.Entities { _user = value; + if (User != null) + { + UserGuid = User.Guid; + } + OnUserChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/UserBase.cs b/Software/Visual_Studio/Tango.BL/Entities/UserBase.cs index 3872dbeee..641041560 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/UserBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/UserBase.cs @@ -151,6 +151,7 @@ namespace Tango.BL.Entities if (_organizationguid != value) { _organizationguid = value; + } } } @@ -176,6 +177,7 @@ namespace Tango.BL.Entities if (_contactguid != value) { _contactguid = value; + } } } @@ -201,6 +203,7 @@ namespace Tango.BL.Entities if (_addressguid != value) { _addressguid = value; + } } } @@ -253,6 +256,11 @@ namespace Tango.BL.Entities { _address = value; + if (Address != null) + { + AddressGuid = Address.Guid; + } + OnAddressChanged(value); } @@ -280,6 +288,11 @@ namespace Tango.BL.Entities { _contact = value; + if (Contact != null) + { + ContactGuid = Contact.Guid; + } + OnContactChanged(value); } @@ -382,6 +395,11 @@ namespace Tango.BL.Entities { _organization = value; + if (Organization != null) + { + OrganizationGuid = Organization.Guid; + } + OnOrganizationChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Entities/UsersRoleBase.cs b/Software/Visual_Studio/Tango.BL/Entities/UsersRoleBase.cs index b852916e0..eac6f79d3 100644 --- a/Software/Visual_Studio/Tango.BL/Entities/UsersRoleBase.cs +++ b/Software/Visual_Studio/Tango.BL/Entities/UsersRoleBase.cs @@ -50,6 +50,7 @@ namespace Tango.BL.Entities if (_userguid != value) { _userguid = value; + } } } @@ -75,6 +76,7 @@ namespace Tango.BL.Entities if (_roleguid != value) { _roleguid = value; + } } } @@ -100,6 +102,11 @@ namespace Tango.BL.Entities { _role = value; + if (Role != null) + { + RoleGuid = Role.Guid; + } + OnRoleChanged(value); } @@ -127,6 +134,11 @@ namespace Tango.BL.Entities { _user = value; + if (User != null) + { + UserGuid = User.Guid; + } + OnUserChanged(value); } diff --git a/Software/Visual_Studio/Tango.BL/Enumerations/TechMonitors.cs b/Software/Visual_Studio/Tango.BL/Enumerations/TechMonitors.cs index bc654b424..1f3aa6a97 100644 --- a/Software/Visual_Studio/Tango.BL/Enumerations/TechMonitors.cs +++ b/Software/Visual_Studio/Tango.BL/Enumerations/TechMonitors.cs @@ -170,6 +170,18 @@ namespace Tango.BL.Enumerations DispensersPressure = 24, /// <summary> + /// (Drier Zone1 Heater Current) + /// </summary> + [Description("Drier Zone1 Heater Current")] + DrierZone1HeaterCurrent = 56, + + /// <summary> + /// (Drier Zone 2 Heater Current) + /// </summary> + [Description("Drier Zone 2 Heater Current")] + DrierZone2HeaterCurrent = 57, + + /// <summary> /// (Dryer Air Flow) /// </summary> [Description("Dryer Air Flow")] @@ -224,30 +236,60 @@ namespace Tango.BL.Enumerations HeadAirFlow = 13, /// <summary> + /// (Head Zone 1 Heater Current) + /// </summary> + [Description("Head Zone 1 Heater Current")] + HeadZone1HeaterCurrent = 58, + + /// <summary> /// (Head Zone 1) /// </summary> [Description("Head Zone 1")] HeadZone1Temperature = 10, /// <summary> + /// (Head Zone 2 Heater Current) + /// </summary> + [Description("Head Zone 2 Heater Current")] + HeadZone2HeaterCurrent = 59, + + /// <summary> /// (Head Zone 2) /// </summary> [Description("Head Zone 2")] HeadZone2Temperature = 11, /// <summary> + /// (Head Zone 3 Heater Current) + /// </summary> + [Description("Head Zone 3 Heater Current")] + HeadZone3HeaterCurrent = 80, + + /// <summary> /// (Head Zone 3) /// </summary> [Description("Head Zone 3")] HeadZone3Temperature = 12, /// <summary> + /// (Head Zone 4 Heater Current) + /// </summary> + [Description("Head Zone 4 Heater Current")] + HeadZone4HeaterCurrent = 81, + + /// <summary> /// (Head Zone 4) /// </summary> [Description("Head Zone 4")] HeadZone4Temperature = 36, /// <summary> + /// (Head Zone 5-6 Heater Current) + /// </summary> + [Description("Head Zone 5-6 Heater Current")] + HeadZone5_6HeaterCurrent = 82, + + /// <summary> /// (Head Zone 5) /// </summary> [Description("Head Zone 5")] @@ -308,6 +350,12 @@ namespace Tango.BL.Enumerations MidTank8Level = 55, /// <summary> + /// (Mixer 1 Heater Current) + /// </summary> + [Description("Mixer 1 Heater Current")] + Mixer1HeaterCurrent = 83, + + /// <summary> /// (Mixer) /// </summary> [Description("Mixer")] diff --git a/Software/Visual_Studio/Tango.BL/ObservablesContextExtension.cs b/Software/Visual_Studio/Tango.BL/ObservablesContextExtension.cs index 94d751482..05484d67c 100644 --- a/Software/Visual_Studio/Tango.BL/ObservablesContextExtension.cs +++ b/Software/Visual_Studio/Tango.BL/ObservablesContextExtension.cs @@ -1,4 +1,5 @@ -using System; +using EFCache; +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data.Entity; @@ -228,5 +229,24 @@ namespace Tango.BL { ObservablesContextConfiguration.ClearModelStore(); } + + /// <summary> + /// Enables the in memory cache. + /// </summary> + /// <param name="cacheTime">Maximum cache time to preserve a single entity cache.</param> + public static void EnableInMemoryCache(TimeSpan cacheTime, ObservablesContextInMemoryCachingMode mode) + { + if (mode != ObservablesContextInMemoryCachingMode.None) + { + var cache = new ObservablesContextInMemoryCache() { Expiration = cacheTime }; + + if (mode == ObservablesContextInMemoryCachingMode.Relative) + { + cache.ResetAccessTimeOnAccess = true; + } + + EntityFrameworkCache.Initialize(cache); + } + } } } diff --git a/Software/Visual_Studio/Tango.BL/ObservablesContextInMemoryCache.cs b/Software/Visual_Studio/Tango.BL/ObservablesContextInMemoryCache.cs new file mode 100644 index 000000000..39e6d7d9a --- /dev/null +++ b/Software/Visual_Studio/Tango.BL/ObservablesContextInMemoryCache.cs @@ -0,0 +1,221 @@ +using EFCache; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.BL +{ + public class ObservablesContextInMemoryCache : ICache + { + private readonly Dictionary<string, CacheEntry> _cache = new Dictionary<string, CacheEntry>(); + private readonly Dictionary<string, HashSet<string>> _entitySetToKey = new Dictionary<string, HashSet<string>>(); + + public TimeSpan Expiration { get; set; } + public bool ResetAccessTimeOnAccess { get; set; } + + public bool GetItem(string key, out object value) + { + if (key == null) + { + throw new ArgumentNullException("key"); + } + + value = null; + + lock (_cache) + { + var now = DateTimeOffset.Now; + + CacheEntry entry; + if (_cache.TryGetValue(key, out entry)) + { + if (EntryExpired(entry, now)) + { + InvalidateItem(key); + } + else + { + if (ResetAccessTimeOnAccess) + { + entry.LastAccess = now; + } + value = entry.Value; + return true; + } + } + } + + return false; + } + + public void PutItem(string key, object value, IEnumerable<string> dependentEntitySets, TimeSpan slidingExpiration, DateTimeOffset absoluteExpiration) + { + if (key == null) + { + throw new ArgumentNullException("key"); + } + + if (dependentEntitySets == null) + { + throw new ArgumentNullException("dependentEntitySets"); + } + + lock (_cache) + { + var entitySets = dependentEntitySets.ToArray(); + + _cache[key] = new CacheEntry(value, entitySets, slidingExpiration, absoluteExpiration); + + foreach (var entitySet in entitySets) + { + HashSet<string> keys; + + if (!_entitySetToKey.TryGetValue(entitySet, out keys)) + { + keys = new HashSet<string>(); + _entitySetToKey[entitySet] = keys; + } + + keys.Add(key); + } + } + } + + public void InvalidateSets(IEnumerable<string> entitySets) + { + if (entitySets == null) + { + throw new ArgumentNullException("entitySets"); + } + + lock (_cache) + { + var itemsToInvalidate = new HashSet<string>(); + + foreach (var entitySet in entitySets) + { + HashSet<string> keys; + + if (_entitySetToKey.TryGetValue(entitySet, out keys)) + { + itemsToInvalidate.UnionWith(keys); + + _entitySetToKey.Remove(entitySet); + } + } + + foreach (var key in itemsToInvalidate) + { + InvalidateItem(key); + } + } + } + + public void InvalidateItem(string key) + { + if (key == null) + { + throw new ArgumentNullException("key"); + } + + lock (_cache) + { + CacheEntry entry; + + if (_cache.TryGetValue(key, out entry)) + { + _cache.Remove(key); + + foreach (var set in entry.EntitySets) + { + HashSet<string> keys; + if (_entitySetToKey.TryGetValue(set, out keys)) + { + keys.Remove(key); + } + } + } + } + } + + public void Purge() + { + Purge(false); + } + + public void Purge(bool removeUnexpiredItems) + { + lock (_cache) + { + var now = DateTimeOffset.Now; + var itemsToRemove = new HashSet<string>(); + + foreach (var item in _cache) + { + if (removeUnexpiredItems || EntryExpired(item.Value, now)) + { + itemsToRemove.Add(item.Key); + } + } + + foreach (var key in itemsToRemove) + { + InvalidateItem(key); + } + } + } + + public int Count + { + get { return _cache.Count; } + } + + private bool EntryExpired(CacheEntry entry, DateTimeOffset now) + { + return entry.AbsoluteExpiration < now || (now - entry.LastAccess) > Expiration; + } + + private class CacheEntry + { + private readonly object _value; + private readonly string[] _entitySets; + private readonly TimeSpan _slidingExpiration; + private readonly DateTimeOffset _absoluteExpiration; + private readonly DateTime _created; + + public CacheEntry(object value, string[] entitySets, TimeSpan slidingExpiration, + DateTimeOffset absoluteExpiration) + { + _value = value; + _entitySets = entitySets; + _slidingExpiration = slidingExpiration; + _absoluteExpiration = absoluteExpiration; + LastAccess = DateTimeOffset.Now; + } + + public object Value + { + get { return _value; } + } + + public string[] EntitySets + { + get { return _entitySets; } + } + + public TimeSpan SlidingExpiration + { + get { return _slidingExpiration; } + } + + public DateTimeOffset AbsoluteExpiration + { + get { return _absoluteExpiration; } + } + + public DateTimeOffset LastAccess { get; set; } + } + } +} diff --git a/Software/Visual_Studio/Tango.BL/ObservablesContextInMemoryCachingMode.cs b/Software/Visual_Studio/Tango.BL/ObservablesContextInMemoryCachingMode.cs new file mode 100644 index 000000000..e0611a1de --- /dev/null +++ b/Software/Visual_Studio/Tango.BL/ObservablesContextInMemoryCachingMode.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.BL +{ + public enum ObservablesContextInMemoryCachingMode + { + None, + Absolute, + Relative + } +} diff --git a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj index 61118b6b0..043a598c8 100644 --- a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj +++ b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj @@ -33,6 +33,9 @@ <WarningLevel>4</WarningLevel> </PropertyGroup> <ItemGroup> + <Reference Include="EFCache, Version=1.1.3.0, Culture=neutral, PublicKeyToken=46c4868af4307d2c, processorArchitecture=MSIL"> + <HintPath>..\packages\EntityFramework.Cache.1.1.3\lib\net45\EFCache.dll</HintPath> + </Reference> <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <HintPath>..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll</HintPath> </Reference> @@ -460,6 +463,8 @@ <Compile Include="ObservablesContextAdapter.cs" /> <Compile Include="ObservablesContextConfiguration.cs" /> <Compile Include="ObservablesContextExtension.cs" /> + <Compile Include="ObservablesContextInMemoryCache.cs" /> + <Compile Include="ObservablesContextInMemoryCachingMode.cs" /> <Compile Include="ObservablesEntitiesAdapter.cs" /> <Compile Include="ObservablesEntitiesAdapterExtension.cs" /> <Compile Include="Serialization\EntitySerializationFlags.cs" /> @@ -545,7 +550,7 @@ </Target> <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/Tango.BL/packages.config b/Software/Visual_Studio/Tango.BL/packages.config index 408466746..0811e4b17 100644 --- a/Software/Visual_Studio/Tango.BL/packages.config +++ b/Software/Visual_Studio/Tango.BL/packages.config @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <packages> <package id="EntityFramework" version="6.2.0" targetFramework="net461" /> + <package id="EntityFramework.Cache" version="1.1.3" targetFramework="net461" /> <package id="Google.Protobuf" version="3.4.1" targetFramework="net46" /> <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" /> <package id="SimpleValidator" version="0.6.1.0" targetFramework="net46" /> diff --git a/Software/Visual_Studio/Tango.CodeGeneration/Templates/EntityCodeFile.cshtml b/Software/Visual_Studio/Tango.CodeGeneration/Templates/EntityCodeFile.cshtml index 698a79b34..b5d47edab 100644 --- a/Software/Visual_Studio/Tango.CodeGeneration/Templates/EntityCodeFile.cshtml +++ b/Software/Visual_Studio/Tango.CodeGeneration/Templates/EntityCodeFile.cshtml @@ -74,12 +74,23 @@ namespace Tango.BL.Entities if (_@(prop.Name.ToLower()) != value) { _@(prop.Name.ToLower()) = value; + + @if (prop.Complex) + { + <div> + if (@(prop.Name) != null) + { + @(prop.Name)Guid = @(prop.Name).Guid; + } + </div> + } + @if (!prop.Name.EndsWith("Guid")) { <div> On@(prop.Name)Changed(value); </div> - } + } } } } diff --git a/Software/Visual_Studio/Tango.Core/ExtensionMethods/ObjectExtensions.cs b/Software/Visual_Studio/Tango.Core/ExtensionMethods/ObjectExtensions.cs index 0ce3e8369..ce907b57b 100644 --- a/Software/Visual_Studio/Tango.Core/ExtensionMethods/ObjectExtensions.cs +++ b/Software/Visual_Studio/Tango.Core/ExtensionMethods/ObjectExtensions.cs @@ -97,6 +97,26 @@ public static class ObjectExtensions } /// <summary> + /// Maps the object properties values to the destination object including strings and without assigning null string values from the source. + /// </summary> + /// <param name="source">The source.</param> + /// <param name="destination">The destination.</param> + public static void MapPrimitivesWithStrings(this object source, object destination) + { + foreach (var prop in source.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(x => x.PropertyType.IsPrimitive || x.PropertyType == typeof(String))) + { + var desProp = destination.GetType().GetProperty(prop.Name, BindingFlags.Public | BindingFlags.Instance); + + if (desProp != null && (desProp.PropertyType.IsPrimitive || desProp.PropertyType == typeof(String)) && desProp.SetMethod != null) + { + var value = prop.GetValue(source); + + desProp.SetValue(destination, value); + } + } + } + + /// <summary> /// Maps the object properties values to the destination object. /// </summary> /// <param name="source">The source.</param> diff --git a/Software/Visual_Studio/Tango.Core/ExtensionMethods/StringExtensions.cs b/Software/Visual_Studio/Tango.Core/ExtensionMethods/StringExtensions.cs index 7a03b8ae4..78bb693f6 100644 --- a/Software/Visual_Studio/Tango.Core/ExtensionMethods/StringExtensions.cs +++ b/Software/Visual_Studio/Tango.Core/ExtensionMethods/StringExtensions.cs @@ -238,7 +238,7 @@ public static class StringExtensions { if (!String.IsNullOrWhiteSpace(str)) { - return str.Split(splitChar).Select(x => (T)Convert.ChangeType(int.Parse(x),typeof(T))).ToList(); + return str.Split(splitChar).Select(x => (T)(object)int.Parse(x)).ToList(); } else { diff --git a/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs index e371708e3..992323c6d 100644 --- a/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs +++ b/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs @@ -96,6 +96,11 @@ namespace Tango.Integration.Operation event EventHandler<PrintingEventArgs> PrintingCompleted; /// <summary> + /// Occurs when a printing process has ended. + /// </summary> + event EventHandler<PrintingEventArgs> PrintingEnded; + + /// <summary> /// Occurs when the machine operator has detected that a job is in progress after connecting to the machine. /// </summary> event EventHandler<ResumingJobEventArgs> ResumingJob; diff --git a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs index e170b2fb8..c13961191 100644 --- a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs +++ b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs @@ -164,6 +164,11 @@ namespace Tango.Integration.Operation public event EventHandler<PrintingEventArgs> PrintingAborted; /// <summary> + /// Occurs when a printing process has ended. + /// </summary> + public event EventHandler<PrintingEventArgs> PrintingEnded; + + /// <summary> /// Occurs when the machine operator has detected that a job is in progress after connecting to the machine. /// </summary> public event EventHandler<ResumingJobEventArgs> ResumingJob; @@ -812,6 +817,7 @@ namespace Tango.Integration.Operation { var result = await SendRequest<AbortJobRequest, AbortJobResponse>(new AbortJobRequest()); PrintingAborted?.Invoke(this, new PrintingEventArgs(handler, originalJob)); + PrintingEnded?.Invoke(this, new PrintingEventArgs(handler, originalJob)); handler.RaiseCanceled(); } catch (Exception ex) @@ -850,6 +856,7 @@ namespace Tango.Integration.Operation if (!handler.IsCanceled) { PrintingFailed?.Invoke(this, new PrintingFailedEventArgs(handler, originalJob, ex)); + PrintingEnded?.Invoke(this, new PrintingEventArgs(handler, originalJob)); handler.RaiseFailed(ex); LogRequestFailed(request, ex); } @@ -862,6 +869,7 @@ namespace Tango.Integration.Operation { Status = MachineStatuses.ReadyToDye; PrintingCompleted?.Invoke(this, new PrintingEventArgs(handler, originalJob)); + PrintingEnded?.Invoke(this, new PrintingEventArgs(handler, originalJob)); handler.RaiseCompleted(); }); @@ -1020,6 +1028,7 @@ namespace Tango.Integration.Operation if (!handler.IsCanceled) { PrintingFailed?.Invoke(this, new PrintingFailedEventArgs(handler, handler.Job, ex)); + PrintingEnded?.Invoke(this, new PrintingEventArgs(handler, handler.Job)); handler.RaiseFailed(ex); LogRequestFailed(request, ex); } @@ -1034,6 +1043,7 @@ namespace Tango.Integration.Operation { Status = MachineStatuses.ReadyToDye; PrintingCompleted?.Invoke(this, new PrintingEventArgs(handler, handler.Job)); + PrintingEnded?.Invoke(this, new PrintingEventArgs(handler, handler.Job)); handler.RaiseCompleted(); } else @@ -1044,6 +1054,7 @@ namespace Tango.Integration.Operation }, () => { PrintingAborted?.Invoke(this, new PrintingEventArgs(handler, handler.Job)); + PrintingEnded?.Invoke(this, new PrintingEventArgs(handler, handler.Job)); Status = MachineStatuses.ReadyToDye; handler.RaiseCanceled(); }); @@ -1275,6 +1286,7 @@ namespace Tango.Integration.Operation { var result = await SendRequest<AbortJobRequest, AbortJobResponse>(new AbortJobRequest()); PrintingAborted?.Invoke(this, new PrintingEventArgs(handler, originalJob)); + PrintingEnded?.Invoke(this, new PrintingEventArgs(handler, originalJob)); handler.RaiseCanceled(); } catch (Exception ex) @@ -1350,6 +1362,7 @@ namespace Tango.Integration.Operation if (!handler.IsCanceled) { PrintingFailed?.Invoke(this, new PrintingFailedEventArgs(handler, originalJob, ex)); + PrintingEnded?.Invoke(this, new PrintingEventArgs(handler, originalJob)); handler.RaiseFailed(ex); LogRequestFailed(request, ex); } @@ -1362,6 +1375,7 @@ namespace Tango.Integration.Operation { Status = MachineStatuses.ReadyToDye; PrintingCompleted?.Invoke(this, new PrintingEventArgs(handler, originalJob)); + PrintingEnded?.Invoke(this, new PrintingEventArgs(handler, originalJob)); handler.RaiseCompleted(); }); }); @@ -1532,6 +1546,7 @@ namespace Tango.Integration.Operation { var result = await SendRequest<StubAbortJobRequest, StubAbortJobResponse>(new StubAbortJobRequest()); PrintingAborted?.Invoke(this, new PrintingEventArgs(handler, originalJob)); + PrintingEnded?.Invoke(this, new PrintingEventArgs(handler, originalJob)); handler.RaiseCanceled(); } catch (Exception ex) @@ -1569,6 +1584,7 @@ namespace Tango.Integration.Operation if (!handler.IsCanceled) { PrintingFailed?.Invoke(this, new PrintingFailedEventArgs(handler, originalJob, ex)); + PrintingEnded?.Invoke(this, new PrintingEventArgs(handler, originalJob)); handler.RaiseFailed(ex); LogRequestFailed(request, ex); } @@ -1581,6 +1597,7 @@ namespace Tango.Integration.Operation { Status = MachineStatuses.ReadyToDye; PrintingCompleted?.Invoke(this, new PrintingEventArgs(handler, originalJob)); + PrintingEnded?.Invoke(this, new PrintingEventArgs(handler, originalJob)); handler.RaiseCompleted(); }); @@ -2031,10 +2048,13 @@ namespace Tango.Integration.Operation { bool cancel = false; ZipFile zip = null; + Action abortAction = null; var upgradeHandler = new FirmwareUpgradeHandler(() => { cancel = true; + + abortAction?.Invoke(); }); try @@ -2044,8 +2064,6 @@ namespace Tango.Integration.Operation throw LogManager.Log(new InvalidOperationException($"Could not perform firmware upgrade while operator status is '{Status}'.")); } - Status = MachineStatuses.Upgrading; - var package_info = await GetFirmwarePackageInfo(tfpStream); tfpStream.Position = 0; @@ -2077,6 +2095,13 @@ namespace Tango.Integration.Operation Action activate = null; Action postActivation = null; + Status = MachineStatuses.Upgrading; + + abortAction = new Action(() => + { + Status = MachineStatuses.ReadyToDye; + }); + upgradeDFU = new Action(() => { try @@ -2134,6 +2159,7 @@ namespace Tango.Integration.Operation } catch (Exception ex) { + Status = MachineStatuses.ReadyToDye; upgradeHandler.RaiseFailed(ex); return; } @@ -2153,9 +2179,9 @@ namespace Tango.Integration.Operation var handler = storage.UploadFile(Path.Combine(package_folder, entry.FileName), reader).Result; handlers.Add(handler); - handler.Canceled += (_, __) => { upgradeHandler.RaiseCanceled(); cancel = true; }; + handler.Canceled += (_, __) => { upgradeHandler.RaiseCanceled(); cancel = true; abortAction(); }; handler.Completed += (_, __) => uploadNext(); - handler.Failed += (_, failedEx) => { upgradeHandler.RaiseFailed(failedEx); cancel = true; }; + handler.Failed += (_, failedEx) => { upgradeHandler.RaiseFailed(failedEx); cancel = true; abortAction(); }; handler.Progress += (_, e) => { if (cancel) @@ -2169,6 +2195,7 @@ namespace Tango.Integration.Operation } catch (Exception ex) { + abortAction(); upgradeHandler.RaiseFailed(ex); } } diff --git a/Software/Visual_Studio/Tango.PMR/Diagnostics/DiagnosticsMonitors.cs b/Software/Visual_Studio/Tango.PMR/Diagnostics/DiagnosticsMonitors.cs index c2e1b538f..a5c2d4c07 100644 --- a/Software/Visual_Studio/Tango.PMR/Diagnostics/DiagnosticsMonitors.cs +++ b/Software/Visual_Studio/Tango.PMR/Diagnostics/DiagnosticsMonitors.cs @@ -23,7 +23,7 @@ namespace Tango.PMR.Diagnostics { byte[] descriptorData = global::System.Convert.FromBase64String( string.Concat( "ChlEaWFnbm9zdGljc01vbml0b3JzLnByb3RvEhVUYW5nby5QTVIuRGlhZ25v", - "c3RpY3MaEURvdWJsZUFycmF5LnByb3RvIoQNChNEaWFnbm9zdGljc01vbml0", + "c3RpY3MaEURvdWJsZUFycmF5LnByb3RvIoUPChNEaWFnbm9zdGljc01vbml0", "b3JzEhQKDERhbmNlcjFBbmdsZRgBIAMoARIUCgxEYW5jZXIyQW5nbGUYAiAD", "KAESFAoMRGFuY2VyM0FuZ2xlGAMgAygBEhwKFEZlZWRlck1vdG9yRnJlcXVl", "bmN5GAQgAygBEhIKCkRyeWVyTW90b3IYBSADKAESEwoLUG9sbGVyTW90b3IY", @@ -60,12 +60,18 @@ namespace Tango.PMR.Diagnostics { "IAMoARIVCg1NaWRUYW5rMkxldmVsGDEgAygBEhUKDU1pZFRhbmszTGV2ZWwY", "MiADKAESFQoNTWlkVGFuazRMZXZlbBgzIAMoARIVCg1NaWRUYW5rNUxldmVs", "GDQgAygBEhUKDU1pZFRhbms2TGV2ZWwYNSADKAESFQoNTWlkVGFuazdMZXZl", - "bBg2IAMoARIVCg1NaWRUYW5rOExldmVsGDcgAygBQiEKH2NvbS50d2luZS50", - "YW5nby5wbXIuZGlhZ25vc3RpY3NiBnByb3RvMw==")); + "bBg2IAMoARIVCg1NaWRUYW5rOExldmVsGDcgAygBEh8KF0RyaWVyWm9uZTFI", + "ZWF0ZXJDdXJyZW50GDggAygBEh8KF0RyaWVyWm9uZTJIZWF0ZXJDdXJyZW50", + "GDkgAygBEh4KFkhlYWRab25lMUhlYXRlckN1cnJlbnQYOiADKAESHgoWSGVh", + "ZFpvbmUySGVhdGVyQ3VycmVudBg7IAMoARIeChZIZWFkWm9uZTNIZWF0ZXJD", + "dXJyZW50GDwgAygBEh4KFkhlYWRab25lNEhlYXRlckN1cnJlbnQYPSADKAES", + "IAoYSGVhZFpvbmU1XzZIZWF0ZXJDdXJyZW50GD4gAygBEhsKE01peGVyMUhl", + "YXRlckN1cnJlbnQYPyADKAFCIQofY29tLnR3aW5lLnRhbmdvLnBtci5kaWFn", + "bm9zdGljc2IGcHJvdG8z")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { global::Tango.PMR.Diagnostics.DoubleArrayReflection.Descriptor, }, new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { - new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.DiagnosticsMonitors), global::Tango.PMR.Diagnostics.DiagnosticsMonitors.Parser, new[]{ "Dancer1Angle", "Dancer2Angle", "Dancer3Angle", "FeederMotorFrequency", "DryerMotor", "PollerMotor", "WinderMotor", "ScrewMotor", "ThreadSpeed", "MixerTemperature", "HeadZone1Temperature", "HeadZone2Temperature", "HeadZone3Temperature", "HeadAirFlow", "FeederTension", "PullerTension", "DryerZone1Temperature", "DryerZone2Temperature", "DryerZone3Temperature", "DryerAirFlow", "WinderTension", "DispensersMotorsFrequency", "DispensersAngularEncoders", "DispensersLinearPositions", "DispensersPressure", "FilterDeltaPressure", "ChillerTemperature", "Dispenser1MotorFrequency", "Dispenser2MotorFrequency", "Dispenser3MotorFrequency", "Dispenser4MotorFrequency", "Dispenser5MotorFrequency", "Dispenser6MotorFrequency", "Dispenser7MotorFrequency", "Dispenser8MotorFrequency", "HeadZone4Temperature", "HeadZone5Temperature", "HeadZone6Temperature", "BlowerVoltage", "Dispenser1Pressure", "Dispenser2Pressure", "Dispenser3Pressure", "Dispenser4Pressure", "Dispenser5Pressure", "Dispenser6Pressure", "Dispenser7Pressure", "Dispenser8Pressure", "MidTank1Level", "MidTank2Level", "MidTank3Level", "MidTank4Level", "MidTank5Level", "MidTank6Level", "MidTank7Level", "MidTank8Level" }, null, null, null) + new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.DiagnosticsMonitors), global::Tango.PMR.Diagnostics.DiagnosticsMonitors.Parser, new[]{ "Dancer1Angle", "Dancer2Angle", "Dancer3Angle", "FeederMotorFrequency", "DryerMotor", "PollerMotor", "WinderMotor", "ScrewMotor", "ThreadSpeed", "MixerTemperature", "HeadZone1Temperature", "HeadZone2Temperature", "HeadZone3Temperature", "HeadAirFlow", "FeederTension", "PullerTension", "DryerZone1Temperature", "DryerZone2Temperature", "DryerZone3Temperature", "DryerAirFlow", "WinderTension", "DispensersMotorsFrequency", "DispensersAngularEncoders", "DispensersLinearPositions", "DispensersPressure", "FilterDeltaPressure", "ChillerTemperature", "Dispenser1MotorFrequency", "Dispenser2MotorFrequency", "Dispenser3MotorFrequency", "Dispenser4MotorFrequency", "Dispenser5MotorFrequency", "Dispenser6MotorFrequency", "Dispenser7MotorFrequency", "Dispenser8MotorFrequency", "HeadZone4Temperature", "HeadZone5Temperature", "HeadZone6Temperature", "BlowerVoltage", "Dispenser1Pressure", "Dispenser2Pressure", "Dispenser3Pressure", "Dispenser4Pressure", "Dispenser5Pressure", "Dispenser6Pressure", "Dispenser7Pressure", "Dispenser8Pressure", "MidTank1Level", "MidTank2Level", "MidTank3Level", "MidTank4Level", "MidTank5Level", "MidTank6Level", "MidTank7Level", "MidTank8Level", "DrierZone1HeaterCurrent", "DrierZone2HeaterCurrent", "HeadZone1HeaterCurrent", "HeadZone2HeaterCurrent", "HeadZone3HeaterCurrent", "HeadZone4HeaterCurrent", "HeadZone56HeaterCurrent", "Mixer1HeaterCurrent" }, null, null, null) })); } #endregion @@ -151,6 +157,14 @@ namespace Tango.PMR.Diagnostics { midTank6Level_ = other.midTank6Level_.Clone(); midTank7Level_ = other.midTank7Level_.Clone(); midTank8Level_ = other.midTank8Level_.Clone(); + drierZone1HeaterCurrent_ = other.drierZone1HeaterCurrent_.Clone(); + drierZone2HeaterCurrent_ = other.drierZone2HeaterCurrent_.Clone(); + headZone1HeaterCurrent_ = other.headZone1HeaterCurrent_.Clone(); + headZone2HeaterCurrent_ = other.headZone2HeaterCurrent_.Clone(); + headZone3HeaterCurrent_ = other.headZone3HeaterCurrent_.Clone(); + headZone4HeaterCurrent_ = other.headZone4HeaterCurrent_.Clone(); + headZone56HeaterCurrent_ = other.headZone56HeaterCurrent_.Clone(); + mixer1HeaterCurrent_ = other.mixer1HeaterCurrent_.Clone(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -873,6 +887,110 @@ namespace Tango.PMR.Diagnostics { get { return midTank8Level_; } } + /// <summary>Field number for the "DrierZone1HeaterCurrent" field.</summary> + public const int DrierZone1HeaterCurrentFieldNumber = 56; + private static readonly pb::FieldCodec<double> _repeated_drierZone1HeaterCurrent_codec + = pb::FieldCodec.ForDouble(450); + private readonly pbc::RepeatedField<double> drierZone1HeaterCurrent_ = new pbc::RepeatedField<double>(); + /// <summary> + ///Drier Zone1 Heater Current (Min = 0, Max = 100, PPF = 1) + /// </summary> + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField<double> DrierZone1HeaterCurrent { + get { return drierZone1HeaterCurrent_; } + } + + /// <summary>Field number for the "DrierZone2HeaterCurrent" field.</summary> + public const int DrierZone2HeaterCurrentFieldNumber = 57; + private static readonly pb::FieldCodec<double> _repeated_drierZone2HeaterCurrent_codec + = pb::FieldCodec.ForDouble(458); + private readonly pbc::RepeatedField<double> drierZone2HeaterCurrent_ = new pbc::RepeatedField<double>(); + /// <summary> + ///Drier Zone 2 Heater Current (Min = 0, Max = 100, PPF = 1) + /// </summary> + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField<double> DrierZone2HeaterCurrent { + get { return drierZone2HeaterCurrent_; } + } + + /// <summary>Field number for the "HeadZone1HeaterCurrent" field.</summary> + public const int HeadZone1HeaterCurrentFieldNumber = 58; + private static readonly pb::FieldCodec<double> _repeated_headZone1HeaterCurrent_codec + = pb::FieldCodec.ForDouble(466); + private readonly pbc::RepeatedField<double> headZone1HeaterCurrent_ = new pbc::RepeatedField<double>(); + /// <summary> + ///Head Zone 1 Heater Current (Min = 0, Max = 100, PPF = 1) + /// </summary> + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField<double> HeadZone1HeaterCurrent { + get { return headZone1HeaterCurrent_; } + } + + /// <summary>Field number for the "HeadZone2HeaterCurrent" field.</summary> + public const int HeadZone2HeaterCurrentFieldNumber = 59; + private static readonly pb::FieldCodec<double> _repeated_headZone2HeaterCurrent_codec + = pb::FieldCodec.ForDouble(474); + private readonly pbc::RepeatedField<double> headZone2HeaterCurrent_ = new pbc::RepeatedField<double>(); + /// <summary> + ///Head Zone 2 Heater Current (Min = 0, Max = 100, PPF = 1) + /// </summary> + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField<double> HeadZone2HeaterCurrent { + get { return headZone2HeaterCurrent_; } + } + + /// <summary>Field number for the "HeadZone3HeaterCurrent" field.</summary> + public const int HeadZone3HeaterCurrentFieldNumber = 60; + private static readonly pb::FieldCodec<double> _repeated_headZone3HeaterCurrent_codec + = pb::FieldCodec.ForDouble(482); + private readonly pbc::RepeatedField<double> headZone3HeaterCurrent_ = new pbc::RepeatedField<double>(); + /// <summary> + ///Head Zone 3 Heater Current (Min = 0, Max = 100, PPF = 1) + /// </summary> + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField<double> HeadZone3HeaterCurrent { + get { return headZone3HeaterCurrent_; } + } + + /// <summary>Field number for the "HeadZone4HeaterCurrent" field.</summary> + public const int HeadZone4HeaterCurrentFieldNumber = 61; + private static readonly pb::FieldCodec<double> _repeated_headZone4HeaterCurrent_codec + = pb::FieldCodec.ForDouble(490); + private readonly pbc::RepeatedField<double> headZone4HeaterCurrent_ = new pbc::RepeatedField<double>(); + /// <summary> + ///Head Zone 4 Heater Current (Min = 0, Max = 100, PPF = 1) + /// </summary> + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField<double> HeadZone4HeaterCurrent { + get { return headZone4HeaterCurrent_; } + } + + /// <summary>Field number for the "HeadZone5_6HeaterCurrent" field.</summary> + public const int HeadZone56HeaterCurrentFieldNumber = 62; + private static readonly pb::FieldCodec<double> _repeated_headZone56HeaterCurrent_codec + = pb::FieldCodec.ForDouble(498); + private readonly pbc::RepeatedField<double> headZone56HeaterCurrent_ = new pbc::RepeatedField<double>(); + /// <summary> + ///Head Zone 5-6 Heater Current (Min = 0, Max = 100, PPF = 1) + /// </summary> + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField<double> HeadZone56HeaterCurrent { + get { return headZone56HeaterCurrent_; } + } + + /// <summary>Field number for the "Mixer1HeaterCurrent" field.</summary> + public const int Mixer1HeaterCurrentFieldNumber = 63; + private static readonly pb::FieldCodec<double> _repeated_mixer1HeaterCurrent_codec + = pb::FieldCodec.ForDouble(506); + private readonly pbc::RepeatedField<double> mixer1HeaterCurrent_ = new pbc::RepeatedField<double>(); + /// <summary> + ///Mixer 1 Heater Current (Min = 0, Max = 100, PPF = 1) + /// </summary> + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField<double> Mixer1HeaterCurrent { + get { return mixer1HeaterCurrent_; } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public override bool Equals(object other) { return Equals(other as DiagnosticsMonitors); @@ -941,6 +1059,14 @@ namespace Tango.PMR.Diagnostics { if(!midTank6Level_.Equals(other.midTank6Level_)) return false; if(!midTank7Level_.Equals(other.midTank7Level_)) return false; if(!midTank8Level_.Equals(other.midTank8Level_)) return false; + if(!drierZone1HeaterCurrent_.Equals(other.drierZone1HeaterCurrent_)) return false; + if(!drierZone2HeaterCurrent_.Equals(other.drierZone2HeaterCurrent_)) return false; + if(!headZone1HeaterCurrent_.Equals(other.headZone1HeaterCurrent_)) return false; + if(!headZone2HeaterCurrent_.Equals(other.headZone2HeaterCurrent_)) return false; + if(!headZone3HeaterCurrent_.Equals(other.headZone3HeaterCurrent_)) return false; + if(!headZone4HeaterCurrent_.Equals(other.headZone4HeaterCurrent_)) return false; + if(!headZone56HeaterCurrent_.Equals(other.headZone56HeaterCurrent_)) return false; + if(!mixer1HeaterCurrent_.Equals(other.mixer1HeaterCurrent_)) return false; return true; } @@ -1002,6 +1128,14 @@ namespace Tango.PMR.Diagnostics { hash ^= midTank6Level_.GetHashCode(); hash ^= midTank7Level_.GetHashCode(); hash ^= midTank8Level_.GetHashCode(); + hash ^= drierZone1HeaterCurrent_.GetHashCode(); + hash ^= drierZone2HeaterCurrent_.GetHashCode(); + hash ^= headZone1HeaterCurrent_.GetHashCode(); + hash ^= headZone2HeaterCurrent_.GetHashCode(); + hash ^= headZone3HeaterCurrent_.GetHashCode(); + hash ^= headZone4HeaterCurrent_.GetHashCode(); + hash ^= headZone56HeaterCurrent_.GetHashCode(); + hash ^= mixer1HeaterCurrent_.GetHashCode(); return hash; } @@ -1067,6 +1201,14 @@ namespace Tango.PMR.Diagnostics { midTank6Level_.WriteTo(output, _repeated_midTank6Level_codec); midTank7Level_.WriteTo(output, _repeated_midTank7Level_codec); midTank8Level_.WriteTo(output, _repeated_midTank8Level_codec); + drierZone1HeaterCurrent_.WriteTo(output, _repeated_drierZone1HeaterCurrent_codec); + drierZone2HeaterCurrent_.WriteTo(output, _repeated_drierZone2HeaterCurrent_codec); + headZone1HeaterCurrent_.WriteTo(output, _repeated_headZone1HeaterCurrent_codec); + headZone2HeaterCurrent_.WriteTo(output, _repeated_headZone2HeaterCurrent_codec); + headZone3HeaterCurrent_.WriteTo(output, _repeated_headZone3HeaterCurrent_codec); + headZone4HeaterCurrent_.WriteTo(output, _repeated_headZone4HeaterCurrent_codec); + headZone56HeaterCurrent_.WriteTo(output, _repeated_headZone56HeaterCurrent_codec); + mixer1HeaterCurrent_.WriteTo(output, _repeated_mixer1HeaterCurrent_codec); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -1127,6 +1269,14 @@ namespace Tango.PMR.Diagnostics { size += midTank6Level_.CalculateSize(_repeated_midTank6Level_codec); size += midTank7Level_.CalculateSize(_repeated_midTank7Level_codec); size += midTank8Level_.CalculateSize(_repeated_midTank8Level_codec); + size += drierZone1HeaterCurrent_.CalculateSize(_repeated_drierZone1HeaterCurrent_codec); + size += drierZone2HeaterCurrent_.CalculateSize(_repeated_drierZone2HeaterCurrent_codec); + size += headZone1HeaterCurrent_.CalculateSize(_repeated_headZone1HeaterCurrent_codec); + size += headZone2HeaterCurrent_.CalculateSize(_repeated_headZone2HeaterCurrent_codec); + size += headZone3HeaterCurrent_.CalculateSize(_repeated_headZone3HeaterCurrent_codec); + size += headZone4HeaterCurrent_.CalculateSize(_repeated_headZone4HeaterCurrent_codec); + size += headZone56HeaterCurrent_.CalculateSize(_repeated_headZone56HeaterCurrent_codec); + size += mixer1HeaterCurrent_.CalculateSize(_repeated_mixer1HeaterCurrent_codec); return size; } @@ -1190,6 +1340,14 @@ namespace Tango.PMR.Diagnostics { midTank6Level_.Add(other.midTank6Level_); midTank7Level_.Add(other.midTank7Level_); midTank8Level_.Add(other.midTank8Level_); + drierZone1HeaterCurrent_.Add(other.drierZone1HeaterCurrent_); + drierZone2HeaterCurrent_.Add(other.drierZone2HeaterCurrent_); + headZone1HeaterCurrent_.Add(other.headZone1HeaterCurrent_); + headZone2HeaterCurrent_.Add(other.headZone2HeaterCurrent_); + headZone3HeaterCurrent_.Add(other.headZone3HeaterCurrent_); + headZone4HeaterCurrent_.Add(other.headZone4HeaterCurrent_); + headZone56HeaterCurrent_.Add(other.headZone56HeaterCurrent_); + mixer1HeaterCurrent_.Add(other.mixer1HeaterCurrent_); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -1471,6 +1629,46 @@ namespace Tango.PMR.Diagnostics { midTank8Level_.AddEntriesFrom(input, _repeated_midTank8Level_codec); break; } + case 450: + case 449: { + drierZone1HeaterCurrent_.AddEntriesFrom(input, _repeated_drierZone1HeaterCurrent_codec); + break; + } + case 458: + case 457: { + drierZone2HeaterCurrent_.AddEntriesFrom(input, _repeated_drierZone2HeaterCurrent_codec); + break; + } + case 466: + case 465: { + headZone1HeaterCurrent_.AddEntriesFrom(input, _repeated_headZone1HeaterCurrent_codec); + break; + } + case 474: + case 473: { + headZone2HeaterCurrent_.AddEntriesFrom(input, _repeated_headZone2HeaterCurrent_codec); + break; + } + case 482: + case 481: { + headZone3HeaterCurrent_.AddEntriesFrom(input, _repeated_headZone3HeaterCurrent_codec); + break; + } + case 490: + case 489: { + headZone4HeaterCurrent_.AddEntriesFrom(input, _repeated_headZone4HeaterCurrent_codec); + break; + } + case 498: + case 497: { + headZone56HeaterCurrent_.AddEntriesFrom(input, _repeated_headZone56HeaterCurrent_codec); + break; + } + case 506: + case 505: { + mixer1HeaterCurrent_.AddEntriesFrom(input, _repeated_mixer1HeaterCurrent_codec); + break; + } } } } diff --git a/Software/Visual_Studio/Tango.PMR/EmbeddedParameters/ConfigurationParameters.cs b/Software/Visual_Studio/Tango.PMR/EmbeddedParameters/ConfigurationParameters.cs index 7f6f2d2c0..83861aef0 100644 --- a/Software/Visual_Studio/Tango.PMR/EmbeddedParameters/ConfigurationParameters.cs +++ b/Software/Visual_Studio/Tango.PMR/EmbeddedParameters/ConfigurationParameters.cs @@ -23,7 +23,7 @@ namespace Tango.PMR.EmbeddedParameters { byte[] descriptorData = global::System.Convert.FromBase64String( string.Concat( "Ch1Db25maWd1cmF0aW9uUGFyYW1ldGVycy5wcm90bxIcVGFuZ28uUE1SLkVt", - "YmVkZGVkUGFyYW1ldGVycyL3BAoXQ29uZmlndXJhdGlvblBhcmFtZXRlcnMS", + "YmVkZGVkUGFyYW1ldGVycyLXBQoXQ29uZmlndXJhdGlvblBhcmFtZXRlcnMS", "GAoQQnJlYWtTZW5zb3JMaW1pdBgBIAEoDRIhChlEaWFnbm9zdGljQ29sbGVj", "dGlvbkxpbWl0GAIgASgNEhoKEk92ZXJIZWF0Q291bnRMaW1pdBgDIAEoDRIb", "ChNVbmRlckhlYXRDb3VudExpbWl0GAQgASgNEhkKEUNsb3NlVmFsdmVUaW1l", @@ -37,12 +37,14 @@ namespace Tango.PMR.EmbeddedParameters { "GA4gASgNEiQKHEFDSGVhdGVyc1VwcGVyT3BlcmF0aW9uTGltaXQYDyABKA0S", "JAocRENIZWF0ZXJzTG93ZXJPcGVyYXRpb25MaW1pdBgQIAEoDRIkChxEQ0hl", "YXRlcnNVcHBlck9wZXJhdGlvbkxpbWl0GBEgASgNEiEKGU1pZFRhbmtQcmVz", - "c3VyZUNvcnJlY3Rpb24YEiABKAFCKAomY29tLnR3aW5lLnRhbmdvLnBtci5l", - "bWJlZGRlZHBhcmFtZXRlcnNiBnByb3RvMw==")); + "c3VyZUNvcnJlY3Rpb24YEiABKAESHwoXRGlzcGVuc2VyUHJlc2VnbWVudFdG", + "Q0YYEyABKAESIgoaU3RhcnRIZWF0aW5nT25Jbml0U2VxdWVuY2UYFCABKAgS", + "GQoRR2VuZXJhbFBhcmFtZXRlcnMYFSADKAFCKAomY29tLnR3aW5lLnRhbmdv", + "LnBtci5lbWJlZGRlZHBhcmFtZXRlcnNiBnByb3RvMw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { - new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.EmbeddedParameters.ConfigurationParameters), global::Tango.PMR.EmbeddedParameters.ConfigurationParameters.Parser, new[]{ "BreakSensorLimit", "DiagnosticCollectionLimit", "OverHeatCountLimit", "UnderHeatCountLimit", "CloseValveTimeout", "OpenValveTimeout", "InitialDispenserPressure", "InitialDispenserTimeout", "InitialDispenserTimeLag", "DispenserBuildPressureSpeed", "DispenserBuildPressureLimit", "DispenserBuildPressureTimeout", "DispenserBuildPressureLag", "ACHeatersLowerOperationLimit", "ACHeatersUpperOperationLimit", "DCHeatersLowerOperationLimit", "DCHeatersUpperOperationLimit", "MidTankPressureCorrection" }, null, null, null) + new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.EmbeddedParameters.ConfigurationParameters), global::Tango.PMR.EmbeddedParameters.ConfigurationParameters.Parser, new[]{ "BreakSensorLimit", "DiagnosticCollectionLimit", "OverHeatCountLimit", "UnderHeatCountLimit", "CloseValveTimeout", "OpenValveTimeout", "InitialDispenserPressure", "InitialDispenserTimeout", "InitialDispenserTimeLag", "DispenserBuildPressureSpeed", "DispenserBuildPressureLimit", "DispenserBuildPressureTimeout", "DispenserBuildPressureLag", "ACHeatersLowerOperationLimit", "ACHeatersUpperOperationLimit", "DCHeatersLowerOperationLimit", "DCHeatersUpperOperationLimit", "MidTankPressureCorrection", "DispenserPresegmentWFCF", "StartHeatingOnInitSequence", "GeneralParameters" }, null, null, null) })); } #endregion @@ -91,6 +93,9 @@ namespace Tango.PMR.EmbeddedParameters { dCHeatersLowerOperationLimit_ = other.dCHeatersLowerOperationLimit_; dCHeatersUpperOperationLimit_ = other.dCHeatersUpperOperationLimit_; midTankPressureCorrection_ = other.midTankPressureCorrection_; + dispenserPresegmentWFCF_ = other.dispenserPresegmentWFCF_; + startHeatingOnInitSequence_ = other.startHeatingOnInitSequence_; + generalParameters_ = other.generalParameters_.Clone(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -283,6 +288,9 @@ namespace Tango.PMR.EmbeddedParameters { /// <summary>Field number for the "ACHeatersLowerOperationLimit" field.</summary> public const int ACHeatersLowerOperationLimitFieldNumber = 14; private uint aCHeatersLowerOperationLimit_; + /// <summary> + ///sets the temperature frame for approving job start - in promil above and beyond target temperatures + /// </summary> [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public uint ACHeatersLowerOperationLimit { get { return aCHeatersLowerOperationLimit_; } @@ -335,6 +343,47 @@ namespace Tango.PMR.EmbeddedParameters { } } + /// <summary>Field number for the "DispenserPresegmentWFCF" field.</summary> + public const int DispenserPresegmentWFCFFieldNumber = 19; + private double dispenserPresegmentWFCF_; + /// <summary> + ///Waste Flow Correction Factor + /// </summary> + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double DispenserPresegmentWFCF { + get { return dispenserPresegmentWFCF_; } + set { + dispenserPresegmentWFCF_ = value; + } + } + + /// <summary>Field number for the "StartHeatingOnInitSequence" field.</summary> + public const int StartHeatingOnInitSequenceFieldNumber = 20; + private bool startHeatingOnInitSequence_; + /// <summary> + ///disable heating start on init + /// </summary> + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool StartHeatingOnInitSequence { + get { return startHeatingOnInitSequence_; } + set { + startHeatingOnInitSequence_ = value; + } + } + + /// <summary>Field number for the "GeneralParameters" field.</summary> + public const int GeneralParametersFieldNumber = 21; + private static readonly pb::FieldCodec<double> _repeated_generalParameters_codec + = pb::FieldCodec.ForDouble(170); + private readonly pbc::RepeatedField<double> generalParameters_ = new pbc::RepeatedField<double>(); + /// <summary> + /// general storage for parameters that do not have a specific name updated + /// </summary> + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField<double> GeneralParameters { + get { return generalParameters_; } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public override bool Equals(object other) { return Equals(other as ConfigurationParameters); @@ -366,6 +415,9 @@ namespace Tango.PMR.EmbeddedParameters { if (DCHeatersLowerOperationLimit != other.DCHeatersLowerOperationLimit) return false; if (DCHeatersUpperOperationLimit != other.DCHeatersUpperOperationLimit) return false; if (MidTankPressureCorrection != other.MidTankPressureCorrection) return false; + if (DispenserPresegmentWFCF != other.DispenserPresegmentWFCF) return false; + if (StartHeatingOnInitSequence != other.StartHeatingOnInitSequence) return false; + if(!generalParameters_.Equals(other.generalParameters_)) return false; return true; } @@ -390,6 +442,9 @@ namespace Tango.PMR.EmbeddedParameters { if (DCHeatersLowerOperationLimit != 0) hash ^= DCHeatersLowerOperationLimit.GetHashCode(); if (DCHeatersUpperOperationLimit != 0) hash ^= DCHeatersUpperOperationLimit.GetHashCode(); if (MidTankPressureCorrection != 0D) hash ^= MidTankPressureCorrection.GetHashCode(); + if (DispenserPresegmentWFCF != 0D) hash ^= DispenserPresegmentWFCF.GetHashCode(); + if (StartHeatingOnInitSequence != false) hash ^= StartHeatingOnInitSequence.GetHashCode(); + hash ^= generalParameters_.GetHashCode(); return hash; } @@ -472,6 +527,15 @@ namespace Tango.PMR.EmbeddedParameters { output.WriteRawTag(145, 1); output.WriteDouble(MidTankPressureCorrection); } + if (DispenserPresegmentWFCF != 0D) { + output.WriteRawTag(153, 1); + output.WriteDouble(DispenserPresegmentWFCF); + } + if (StartHeatingOnInitSequence != false) { + output.WriteRawTag(160, 1); + output.WriteBool(StartHeatingOnInitSequence); + } + generalParameters_.WriteTo(output, _repeated_generalParameters_codec); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -531,6 +595,13 @@ namespace Tango.PMR.EmbeddedParameters { if (MidTankPressureCorrection != 0D) { size += 2 + 8; } + if (DispenserPresegmentWFCF != 0D) { + size += 2 + 8; + } + if (StartHeatingOnInitSequence != false) { + size += 2 + 1; + } + size += generalParameters_.CalculateSize(_repeated_generalParameters_codec); return size; } @@ -593,6 +664,13 @@ namespace Tango.PMR.EmbeddedParameters { if (other.MidTankPressureCorrection != 0D) { MidTankPressureCorrection = other.MidTankPressureCorrection; } + if (other.DispenserPresegmentWFCF != 0D) { + DispenserPresegmentWFCF = other.DispenserPresegmentWFCF; + } + if (other.StartHeatingOnInitSequence != false) { + StartHeatingOnInitSequence = other.StartHeatingOnInitSequence; + } + generalParameters_.Add(other.generalParameters_); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -675,6 +753,19 @@ namespace Tango.PMR.EmbeddedParameters { MidTankPressureCorrection = input.ReadDouble(); break; } + case 153: { + DispenserPresegmentWFCF = input.ReadDouble(); + break; + } + case 160: { + StartHeatingOnInitSequence = input.ReadBool(); + break; + } + case 170: + case 169: { + generalParameters_.AddEntriesFrom(input, _repeated_generalParameters_codec); + break; + } } } } diff --git a/Software/Visual_Studio/Tango.Pulse/Properties/AssemblyInfo.cs b/Software/Visual_Studio/Tango.Pulse/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..f05da7191 --- /dev/null +++ b/Software/Visual_Studio/Tango.Pulse/Properties/AssemblyInfo.cs @@ -0,0 +1,7 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("Tango - Pulse TWN format library")] +[assembly: AssemblyVersion("2.0.29.1608")] +[assembly: ComVisible(false)]
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Pulse/SpoolingMethods.cs b/Software/Visual_Studio/Tango.Pulse/SpoolingMethods.cs new file mode 100644 index 000000000..3677e0ce7 --- /dev/null +++ b/Software/Visual_Studio/Tango.Pulse/SpoolingMethods.cs @@ -0,0 +1,15 @@ +namespace Tango.Pulse +{ + /// <summary> + /// Represents a twn file spooling method. + /// </summary> + public enum SpoolingMethods + { + //Spool per segment. (default) + SpoolPerSegment = 0, + //Spool per copy. + SpoolPerCopy = 1, + //Single spool for all segments. + SingleSpool = 2, + } +} diff --git a/Software/Visual_Studio/Tango.Pulse/Tango.Pulse.csproj b/Software/Visual_Studio/Tango.Pulse/Tango.Pulse.csproj new file mode 100644 index 000000000..fe041bd58 --- /dev/null +++ b/Software/Visual_Studio/Tango.Pulse/Tango.Pulse.csproj @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProjectGuid>{8435223D-DB6B-45E3-A08B-45B7416F8481}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>Tango.Pulse</RootNamespace> + <AssemblyName>Tango.Pulse</AssemblyName> + <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <Deterministic>true</Deterministic> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>..\Build\Core\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>..\Build\Core\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Core" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.Xml.Linq" /> + <Reference Include="System.Data.DataSetExtensions" /> + <Reference Include="Microsoft.CSharp" /> + <Reference Include="System.Data" /> + <Reference Include="System.Net.Http" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="..\Versioning\GlobalVersionInfo.cs"> + <Link>GlobalVersionInfo.cs</Link> + </Compile> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="TwnSegment.cs" /> + <Compile Include="SpoolingMethods.cs" /> + <Compile Include="TwnStop.cs" /> + <Compile Include="TwnFile.cs" /> + <Compile Include="TwnFileReader.cs" /> + <Compile Include="TwnFileWriter.cs" /> + </ItemGroup> + <ItemGroup> + <None Include="Twine TWN Spec.pdf" /> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> +</Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Pulse/Twine TWN Spec.pdf b/Software/Visual_Studio/Tango.Pulse/Twine TWN Spec.pdf Binary files differnew file mode 100644 index 000000000..bc38981a4 --- /dev/null +++ b/Software/Visual_Studio/Tango.Pulse/Twine TWN Spec.pdf diff --git a/Software/Visual_Studio/Tango.Pulse/TwnFile.cs b/Software/Visual_Studio/Tango.Pulse/TwnFile.cs new file mode 100644 index 000000000..75653c03e --- /dev/null +++ b/Software/Visual_Studio/Tango.Pulse/TwnFile.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Pulse +{ + /// <summary> + /// Represents a Pulse, twn embroidery file. + /// </summary> + public class TwnFile + { + /// <summary> + /// Format Version (Default is 1.0). + /// </summary> + public float Version { get; set; } + + /// <summary> + /// The name of the design or other labeling information as UTF-8 text. + /// </summary> + public String Name { get; set; } + + /// <summary> + /// Number of copies. (The number 0 will be treated as 1, so the default is 0) + /// </summary> + public int NumberOfCopies { get; set; } + + /// <summary> + /// 0 - Spool per segment. (default) + /// 1 - Spool per copy. + /// 2 - Single spool for all segments. + /// </summary> + public SpoolingMethods SpoolingMethod { get; set; } + + /// <summary> + /// A unique code representing an optional media ID from Twine’s recommended media list + /// </summary> + public int MediaID { get; set; } + + /// <summary> + /// 3 ASCII characters representing the embedded embroidery file extension (e.g dst, pes). + /// </summary> + public String EmbroideryFileFormat { get; set; } + + /// <summary> + /// preview image in + /// PNG format(transparent background). The size of the PNG byte array must be defined in the header. + /// Recommended image width is 1280 pixels while maintaining aspect ratio. + /// </summary> + public Bitmap Thumbnail { get; set; } + + /// <summary> + /// Array of Brush Segment. The number of brush segments must be defined in the header. + /// </summary> + public List<TwnSegment> Segments { get; set; } + + /// <summary> + /// Byte array representing the standard embroidery file which can be extracted and inserted into an embroidery machine. + /// </summary> + public byte[] EmbroideryFile { get; set; } + + /// <summary> + /// Initializes a new instance of the <see cref="TwnFile"/> class. + /// </summary> + public TwnFile() + { + Version = 1.0f; + Segments = new List<TwnSegment>(); + } + + /// <summary> + /// Writes the <see cref="TwnFile"/> to the specified output stream. + /// </summary> + /// <param name="output">The output stream.</param> + public void ToStream(Stream output) + { + new TwnFileWriter().Write(this, output); + } + + /// <summary> + /// Writes the <see cref="TwnFile"/> to the specified file path. + /// </summary> + /// <param name="filePath">The file path.</param> + public void ToFile(String filePath) + { + using (FileStream fs = new FileStream(filePath, FileMode.Create)) + { + ToStream(fs); + } + } + + /// <summary> + /// Loads a <see cref="TwnFile"/> from the specified stream. + /// </summary> + /// <param name="twnStream">The TWN stream.</param> + /// <returns></returns> + public static TwnFile FromStream(Stream twnStream) + { + return new TwnFileReader().Read(twnStream); + } + + /// <summary> + /// Loads a <see cref="TwnFile"/> from the specified file path. + /// </summary> + /// <param name="twnFilePath">The TWN file path.</param> + /// <returns></returns> + public static TwnFile FromFile(String twnFilePath) + { + using (FileStream fs = new FileStream(twnFilePath, FileMode.Open)) + { + return FromStream(fs); + } + } + } +} diff --git a/Software/Visual_Studio/Tango.Pulse/TwnFileReader.cs b/Software/Visual_Studio/Tango.Pulse/TwnFileReader.cs new file mode 100644 index 000000000..2efa94936 --- /dev/null +++ b/Software/Visual_Studio/Tango.Pulse/TwnFileReader.cs @@ -0,0 +1,109 @@ +using System; +using System.Drawing; +using System.IO; +using System.Text; + +namespace Tango.Pulse +{ + /// <summary> + /// Represents a Pulse, twn file reader. + /// </summary> + public class TwnFileReader + { + /// <summary> + /// Reads the specified TWN stream. + /// </summary> + /// <param name="twnStream">The TWN stream.</param> + /// <returns></returns> + public TwnFile Read(Stream twnStream) + { + TwnFile twnFile = new TwnFile(); + + BinaryReader reader = new BinaryReader(twnStream); + + //Format Version (Default is 1.0). + twnFile.Version = reader.ReadSingle(); + + + //The name of the design or other labeling information as UTF - 8 text padded with white spaces and limited to 50 bytes. + twnFile.Name = Encoding.UTF8.GetString(reader.ReadBytes(50)).Trim(); + + + //The embedded preview image size in byte length as a 32 bit unsigned integer. + UInt32 thumbnail_size = reader.ReadUInt32(); + + + //The total number of brush segments as a 32 bit unsigned integer. + UInt32 segments_count = reader.ReadUInt32(); + + + //Number of copies. (The number 0 will be treated as 1, so the default is 0) + twnFile.NumberOfCopies = (int)reader.ReadUInt32(); + + + //0 - Spool per segment. (default) + //1 - Spool per copy. + //2 - Single spool for all segments. + twnFile.SpoolingMethod = (SpoolingMethods)(int)reader.ReadByte(); + + + //A unique code representing an optional media ID from Twine’s recommended media list. + twnFile.MediaID = (int)reader.ReadUInt32(); + + + //3 ASCII characters representing the embedded embroidery file extension (e.g dst, pes). + twnFile.EmbroideryFileFormat = Encoding.ASCII.GetString(reader.ReadBytes(3)); + + + //The byte array length of the embedded embroidery file. + UInt32 emb_file_size = reader.ReadUInt32(); + + + //Array of bytes representing the design preview image in PNG format(transparent background). + //The size of the PNG byte array must be defined in the header. Recommended image width is 1280 + //pixels while maintaining aspect ratio. + MemoryStream ms = new MemoryStream(reader.ReadBytes((int)thumbnail_size)); + twnFile.Thumbnail = new Bitmap(ms); + + + //Array of Brush Segment. The number of brush segments must be defined in the header. + for (int i = 0; i < segments_count; i++) + { + TwnSegment segment = new TwnSegment(); + + //Required thread length in centimeters. + segment.Length = reader.ReadSingle(); + + //Number of brush stops. + UInt32 stop_count = reader.ReadUInt32(); + + //Array of brush stops. + for (int j = 0; j < stop_count; j++) + { + TwnStop stop = new TwnStop(); + + //The RGB red component. + stop.R = reader.ReadByte(); + + //The RGB green component. + stop.G = reader.ReadByte(); + + //The RGB blue component. + stop.B = reader.ReadByte(); + + //The Brush stop offset position within the parent brush length in percentage (0-1). + stop.Offset = reader.ReadSingle(); + + segment.BrushStops.Add(stop); + } + + twnFile.Segments.Add(segment); + } + + //Byte array representing the standard embroidery file which can be extracted and inserted into an embroidery machine. + twnFile.EmbroideryFile = reader.ReadBytes((int)emb_file_size); + + return twnFile; + } + } +} diff --git a/Software/Visual_Studio/Tango.Pulse/TwnFileWriter.cs b/Software/Visual_Studio/Tango.Pulse/TwnFileWriter.cs new file mode 100644 index 000000000..1b173851a --- /dev/null +++ b/Software/Visual_Studio/Tango.Pulse/TwnFileWriter.cs @@ -0,0 +1,128 @@ +using System; +using System.Drawing.Imaging; +using System.IO; +using System.Text; + +namespace Tango.Pulse +{ + /// <summary> + /// Represents a Pulse, twn file writer. + /// </summary> + public class TwnFileWriter + { + /// <summary> + /// Writes the specified TWN file. + /// </summary> + /// <param name="twnFile">The TWN file.</param> + /// <param name="output">The output.</param> + /// <exception cref="System.ArgumentOutOfRangeException">Invalid design name length.</exception> + /// <exception cref="System.NullReferenceException"> + /// Thumbnail image is null. + /// or + /// Could not serialize a null embroidery file. + /// </exception> + /// <exception cref="System.ArgumentException">The embroidery format must contain exactly 3 characters.</exception> + public void Write(TwnFile twnFile, Stream output) + { + BinaryWriter writer = new BinaryWriter(output); + + //Format Version (Default is 1.0). + writer.Write(twnFile.Version); + + + //The name of the design or other labeling information as UTF - 8 text padded with white spaces and limited to 50 bytes. + byte[] nameBytes = Encoding.UTF8.GetBytes(twnFile.Name.PadRight(50, ' ')); + + if (nameBytes.Length < 50) + { + throw new ArgumentOutOfRangeException("Invalid design name length."); + } + writer.Write(nameBytes, 0, 50); + + + //The embedded preview image size in byte length as a 32 bit unsigned integer. + if (twnFile.Thumbnail == null) + { + throw new NullReferenceException("Thumbnail image is null."); + } + + byte[] thumbnailBytes = null; //For later use. + using (MemoryStream ms = new MemoryStream()) + { + twnFile.Thumbnail.Save(ms, ImageFormat.Png); + writer.Write((UInt32)ms.Length); + thumbnailBytes = ms.ToArray(); + } + + //The total number of brush segments as a 32 bit unsigned integer. + writer.Write((UInt32)twnFile.Segments.Count); + + + //Number of copies. (The number 0 will be treated as 1, so the default is 0) + writer.Write((UInt32)twnFile.NumberOfCopies); + + + //0 - Spool per segment. (default) + //1 - Spool per copy. + //2 - Single spool for all segments. + writer.Write((byte)twnFile.SpoolingMethod); + + + //A unique code representing an optional media ID from Twine’s recommended media list. + writer.Write((UInt32)twnFile.MediaID); + + + //3 ASCII characters representing the embedded embroidery file extension (e.g dst, pes). + if (twnFile.EmbroideryFileFormat.Length != 3) + { + throw new ArgumentException("The embroidery format must contain exactly 3 characters."); + } + writer.Write(Encoding.ASCII.GetBytes(twnFile.EmbroideryFileFormat)); + + + //The byte array length of the embedded embroidery file. + if (twnFile.EmbroideryFile == null) + { + throw new NullReferenceException("Could not serialize a null embroidery file."); + } + writer.Write((UInt32)twnFile.EmbroideryFile.Length); + + + //Array of bytes representing the design preview image in PNG format(transparent background). + //The size of the PNG byte array must be defined in the header. Recommended image width is 1280 + //pixels while maintaining aspect ratio. + writer.Write(thumbnailBytes); + + + //Array of Brush Segment. The number of brush segments must be defined in the header. + foreach (var segment in twnFile.Segments) + { + //Required thread length in centimeters. + writer.Write(segment.Length); + + //Number of brush stops. + writer.Write((UInt32)segment.BrushStops.Count); + + //Array of brush stops. + foreach (var stop in segment.BrushStops) + { + //The RGB red component. + writer.Write(stop.R); + + //The RGB green component. + writer.Write(stop.G); + + //The RGB blue component. + writer.Write(stop.B); + + //The Brush stop offset position within the parent brush length in percentage (0-1). + writer.Write(stop.Offset); + } + } + + + //Byte array representing the standard embroidery file which can be extracted and inserted into an embroidery machine. + writer.Write(twnFile.EmbroideryFile); + } + } +} diff --git a/Software/Visual_Studio/Tango.Pulse/TwnSegment.cs b/Software/Visual_Studio/Tango.Pulse/TwnSegment.cs new file mode 100644 index 000000000..07d4368d5 --- /dev/null +++ b/Software/Visual_Studio/Tango.Pulse/TwnSegment.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; + +namespace Tango.Pulse +{ + /// <summary> + /// Represents a twn file brush segment. + /// </summary> + /// <remarks> + /// The “Brush Segment” structure supports + /// both solid and gradient segments. + /// Solid segments are defined using a “Brush + /// Segment” with a single “Brush Stop” with + /// zero offset. + /// </remarks> + public class TwnSegment + { + /// <summary> + /// Required thread length in centimeters. + /// </summary> + public float Length { get; set; } + + /// <summary> + /// Array of brush stops. + /// </summary> + public List<TwnStop> BrushStops { get; set; } + + /// <summary> + /// Initializes a new instance of the <see cref="TwnSegment"/> class. + /// </summary> + public TwnSegment() + { + BrushStops = new List<TwnStop>(); + } + } +} diff --git a/Software/Visual_Studio/Tango.Pulse/TwnStop.cs b/Software/Visual_Studio/Tango.Pulse/TwnStop.cs new file mode 100644 index 000000000..af50531cc --- /dev/null +++ b/Software/Visual_Studio/Tango.Pulse/TwnStop.cs @@ -0,0 +1,67 @@ +using System.Drawing; + +namespace Tango.Pulse +{ + /// <summary> + /// Represents a twn file brush stop. + /// </summary> + public class TwnStop + { + /// <summary> + /// The RGB red component. + /// </summary> + public byte R { get; set; } + + /// <summary> + /// The RGB green component. + /// </summary> + public byte G { get; set; } + + /// <summary> + /// The RGB blue component. + /// </summary> + public byte B { get; set; } + + /// <summary> + /// The Brush stop offset position within the parent brush length in percentage (0-1). + /// </summary> + public float Offset { get; set; } + + /// <summary> + /// Gets or sets the stop color. + /// </summary> + public Color Color + { + get { return Color.FromArgb(R, G, B); } + set + { + R = value.R; + G = value.G; + B = value.B; + } + } + + /// <summary> + /// Initializes a new instance of the <see cref="TwnStop"/> class. + /// </summary> + public TwnStop() + { + + } + + /// <summary> + /// Initializes a new instance of the <see cref="TwnStop"/> class. + /// </summary> + /// <param name="r">Red.</param> + /// <param name="g">Green.</param> + /// <param name="b">Blue.</param> + /// <param name="offset">Offset.</param> + public TwnStop(byte r, byte g, byte b, float offset) : this() + { + R = r; + G = g; + B = b; + Offset = offset; + } + } +} diff --git a/Software/Visual_Studio/Tango.SharedUI/Converters/IsEqualConverter.cs b/Software/Visual_Studio/Tango.SharedUI/Converters/IsEqualConverter.cs index c5de0a83f..901ff2e1b 100644 --- a/Software/Visual_Studio/Tango.SharedUI/Converters/IsEqualConverter.cs +++ b/Software/Visual_Studio/Tango.SharedUI/Converters/IsEqualConverter.cs @@ -14,7 +14,7 @@ namespace Tango.SharedUI.Converters { if (values != null && values.Length > 0) { - return values.All(x => x.Equals(values.First())); + return values.All(x => x != null && x.Equals(values.First())); } return false; diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.cs index fd8f17367..a684cbf5a 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.cs +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.cs @@ -105,6 +105,16 @@ namespace Tango.Touch.Controls public static readonly DependencyProperty PopupHeightProperty = DependencyProperty.Register("PopupHeight", typeof(double), typeof(TouchAutoComplete), new PropertyMetadata(200.0)); + public bool ForceItemSelection + { + get { return (bool)GetValue(ForceItemSelectionProperty); } + set { SetValue(ForceItemSelectionProperty, value); } + } + public static readonly DependencyProperty ForceItemSelectionProperty = + DependencyProperty.Register("ForceItemSelection", typeof(bool), typeof(TouchAutoComplete), new PropertyMetadata(true)); + + + public TouchAutoComplete() { //AutoCompleteProvider = new AutoCompleteProvider<Object>((obj, filter) => { return obj.ToString().ToLower().StartsWith(filter.ToLower()); }); @@ -137,15 +147,18 @@ namespace Tango.Touch.Controls { _popup.IsOpen = false; - if (EffectiveItemsSource != null && EffectiveItemsSource.Count > 0 && SelectedItem == null) + if (ForceItemSelection) { - SelectedItem = EffectiveItemsSource[0]; + if (EffectiveItemsSource != null && EffectiveItemsSource.Count > 0 && SelectedItem == null) + { + SelectedItem = EffectiveItemsSource[0]; - var binding = BindingOperations.GetBindingExpressionBase(this, SelectedItemProperty); + var binding = BindingOperations.GetBindingExpressionBase(this, SelectedItemProperty); - if (binding != null) - { - binding.UpdateSource(); + if (binding != null) + { + binding.UpdateSource(); + } } } } diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.xaml index 94efc967f..da8580488 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.xaml +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.xaml @@ -28,6 +28,8 @@ <Setter Property="keyboard:KeyboardView.Action" Value="{Binding RelativeSource={RelativeSource Self},Path=KeyboardAction}"></Setter> <Setter Property="keyboard:KeyboardView.Container" Value="{Binding RelativeSource={RelativeSource Self},Path=KeyboardContainer}"></Setter> <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"></Setter> + <Setter Property="VerticalContentAlignment" Value="Bottom"></Setter> + <Setter Property="MinHeight" Value="40"></Setter> <Setter Property="ItemTemplate"> <Setter.Value> <DataTemplate> @@ -101,8 +103,8 @@ <Grid> <components:Ripple RippleBrush="{StaticResource TangoRippleDarkBrush}" RippleFactor="15"> <Grid> - <TextBox Foreground="{TemplateBinding Foreground}" VerticalContentAlignment="Bottom" Padding="0 0 0 4" CaretBrush="{StaticResource TangoPrimaryAccentBrush}" FocusVisualStyle="{x:Null}" x:Name="PART_TextBox" Text="{Binding RelativeSource={RelativeSource AncestorType=local:TouchAutoComplete},Path=Text,UpdateSourceTrigger=PropertyChanged}" BorderThickness="0" Background="Transparent"></TextBox> - <TextBlock IsHitTestVisible="False" Text="{TemplateBinding Watermark}" Foreground="{StaticResource TangoTextWatermarkBrush}"> + <TextBox Foreground="{TemplateBinding Foreground}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" Padding="0 0 0 4" CaretBrush="{StaticResource TangoPrimaryAccentBrush}" FocusVisualStyle="{x:Null}" x:Name="PART_TextBox" Text="{Binding RelativeSource={RelativeSource AncestorType=local:TouchAutoComplete},Path=Text,UpdateSourceTrigger=PropertyChanged}" BorderThickness="0" Background="Transparent"></TextBox> + <TextBlock IsHitTestVisible="False" Text="{TemplateBinding Watermark}" Foreground="{StaticResource TangoTextWatermarkBrush}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> <TextBlock.Style> <Style TargetType="TextBlock"> <Setter Property="Visibility" Value="Hidden"></Setter> diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchCheckBox.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchCheckBox.xaml index ec5d48294..2e16aadd0 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchCheckBox.xaml +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchCheckBox.xaml @@ -17,15 +17,15 @@ <Setter Property="Foreground" Value="{StaticResource TangoPrimaryAccentBrush}"></Setter> <Setter Property="BorderThickness" Value="1"></Setter> <Setter Property="BorderBrush" Value="{StaticResource TangoGrayBrush}"></Setter> - <Setter Property="Height" Value="30"></Setter> <Setter Property="FocusVisualStyle" Value="{x:Null}"></Setter> + <Setter Property="MinHeight" Value="40"></Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:TouchCheckBox}"> <Border Padding="{TemplateBinding Padding}" Background="Transparent"> - <components:Ripple RippleBrush="{StaticResource TangoRippleDarkBrush}" RippleFactor="20"> + <components:Ripple RippleBrush="{StaticResource TangoRippleDarkBrush}" RippleFactor="20" > <DockPanel> - <Border Width="{Binding RelativeSource={RelativeSource Self},Path=ActualHeight}" DockPanel.Dock="Left" Padding="5" CornerRadius="2" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}"> + <Border Width="30" Height="30" DockPanel.Dock="Left" Padding="5" CornerRadius="2" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}"> <local:TouchIcon Icon="Check" Visibility="{Binding RelativeSource={RelativeSource AncestorType=local:TouchCheckBox},Path=IsChecked,Converter={StaticResource BooleanToVisibilityConverter}}" Foreground="{TemplateBinding Foreground}"/> </Border> <ContentPresenter TextElement.Foreground="{StaticResource TangoDarkForegroundBrush}" Margin="10 0 0 0" VerticalAlignment="Center" Content="{TemplateBinding Content}"></ContentPresenter> diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchComboBox.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchComboBox.cs index 438d22272..7a7c23b91 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchComboBox.cs +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchComboBox.cs @@ -96,6 +96,16 @@ namespace Tango.Touch.Controls public static readonly DependencyProperty DisplayMemberPathProperty = DependencyProperty.Register("DisplayMemberPath", typeof(String), typeof(TouchComboBox), new PropertyMetadata(null)); + public String ValuePath + { + get { return (String)GetValue(ValuePathProperty); } + set { SetValue(ValuePathProperty, value); } + } + public static readonly DependencyProperty ValuePathProperty = + DependencyProperty.Register("ValuePath", typeof(String), typeof(TouchComboBox), new PropertyMetadata(null)); + + + public TouchComboBox() { this.RegisterForPreviewMouseOrTouchDown(OnMouseDown); diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchComboBox.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchComboBox.xaml index 8e29231af..738fe6a3c 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchComboBox.xaml +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchComboBox.xaml @@ -7,6 +7,7 @@ <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="../Resources/Colors.xaml" /> + <ResourceDictionary Source="../Resources/Fonts.xaml" /> <ResourceDictionary> <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> @@ -23,15 +24,17 @@ <Setter Property="MinPopupHeight" Value="400"></Setter> <Setter Property="MinPopupWidth" Value="500"></Setter> <Setter Property="Title" Value="Select a value"></Setter> + <Setter Property="VerticalContentAlignment" Value="Bottom"></Setter> + <Setter Property="MinHeight" Value="40"></Setter> <Setter Property="ItemTemplate"> <Setter.Value> <DataTemplate> - <Border Padding="10"> + <Border> <DockPanel> - <Ellipse DockPanel.Dock="Left" Width="16" Height="16" StrokeThickness="1" Stroke="{StaticResource TangoPrimaryAccentBrush}" VerticalAlignment="Center"> - <Ellipse.Style> - <Style TargetType="Ellipse"> - <Setter Property="Fill" Value="Transparent"></Setter> + <Label VerticalAlignment="Center" Padding="30" FontSize="{StaticResource TangoComboBoxItemFontSize}"> + <Label.Style> + <Style TargetType="Label"> + <Setter Property="Background" Value="Transparent"></Setter> <Style.Triggers> <DataTrigger Value="True"> <DataTrigger.Binding> @@ -40,13 +43,12 @@ <Binding RelativeSource="{RelativeSource AncestorType=local:TouchListBox}" Path="DataContext.SelectedItem" /> </MultiBinding> </DataTrigger.Binding> - <Setter Property="Fill" Value="{StaticResource TangoPrimaryAccentBrush}"></Setter> + <Setter Property="Background" Value="{StaticResource TangoMidBackgroundBrush}"></Setter> + <Setter Property="Foreground" Value="{StaticResource TangoPrimaryAccentBrush}"></Setter> </DataTrigger> </Style.Triggers> </Style> - </Ellipse.Style> - </Ellipse> - <Label VerticalAlignment="Center" Margin="10 0 0 0" FontWeight="Normal"> + </Label.Style> <Label.Content> <MultiBinding Converter="{StaticResource DisplayMemberPathConverter}"> <Binding Path="." /> @@ -62,7 +64,7 @@ <Setter Property="SelectedItemTemplate"> <Setter.Value> <DataTemplate> - <Label VerticalAlignment="Center"> + <Label VerticalAlignment="Center" Padding="5 5 5 2"> <Label.Content> <MultiBinding Converter="{StaticResource DisplayMemberPathConverter}"> <Binding Path="." /> @@ -161,8 +163,8 @@ </local:TouchIcon> <Grid> - <ContentControl Padding="0 0 0 4" FocusVisualStyle="{x:Null}" Content="{Binding RelativeSource={RelativeSource AncestorType=local:TouchComboBox},Path=SelectedItem}" ContentTemplate="{TemplateBinding SelectedItemTemplate}" Background="Transparent"></ContentControl> - <TextBlock IsHitTestVisible="False" Text="{TemplateBinding Watermark}" Foreground="{StaticResource TangoTextWatermarkBrush}"> + <ContentControl VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Padding="0 0 0 2" FocusVisualStyle="{x:Null}" Content="{Binding RelativeSource={RelativeSource AncestorType=local:TouchComboBox},Path=SelectedItem}" ContentTemplate="{TemplateBinding SelectedItemTemplate}" Background="Transparent"></ContentControl> + <TextBlock VerticalAlignment="{TemplateBinding VerticalContentAlignment}" IsHitTestVisible="False" Text="{TemplateBinding Watermark}" Foreground="{StaticResource TangoTextWatermarkBrush}"> <TextBlock.Style> <Style TargetType="TextBlock"> <Setter Property="Visibility" Value="Hidden"></Setter> @@ -191,4 +193,5 @@ </Setter> </Style> -</ResourceDictionary>
\ No newline at end of file +</ResourceDictionary> +
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchExpander.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchExpander.xaml index 81878de66..7a03fe31e 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchExpander.xaml +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchExpander.xaml @@ -62,7 +62,16 @@ </Grid> </local:TouchToggleButton> - <ContentPresenter Content="{TemplateBinding Header}" /> + <ToggleButton IsChecked="{Binding RelativeSource={RelativeSource AncestorType=local:TouchExpander},Path=IsExpanded,Mode=TwoWay}"> + <ToggleButton.Template> + <ControlTemplate TargetType="ToggleButton"> + <ContentPresenter/> + </ControlTemplate> + </ToggleButton.Template> + <Border Background="Transparent"> + <ContentPresenter Content="{TemplateBinding Header}" /> + </Border> + </ToggleButton> </DockPanel> <Grid Grid.Row="1"> @@ -78,7 +87,7 @@ <DataTrigger.EnterActions> <BeginStoryboard> <Storyboard> - <DoubleAnimation Storyboard.TargetProperty="(Grid.LayoutTransform).(ScaleTransform.ScaleY)" Duration="00:00:0.2" To="1" /> + <DoubleAnimation Storyboard.TargetProperty="(Grid.LayoutTransform).(ScaleTransform.ScaleY)" Duration="00:00:0.2" To="1" /> </Storyboard> </BeginStoryboard> </DataTrigger.EnterActions> @@ -101,5 +110,5 @@ </Setter.Value> </Setter> </Style> - + </ResourceDictionary>
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchListBox.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchListBox.cs index a64a70e4e..57afcb943 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchListBox.cs +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchListBox.cs @@ -138,6 +138,17 @@ namespace Tango.Touch.Controls DependencyProperty.Register("ScrollBarVisibility", typeof(Visibility), typeof(TouchListBox), new PropertyMetadata(Visibility.Visible)); + + public String ValuePath + { + get { return (String)GetValue(ValuePathProperty); } + set { SetValue(ValuePathProperty, value); } + } + public static readonly DependencyProperty ValuePathProperty = + DependencyProperty.Register("ValuePath", typeof(String), typeof(TouchListBox), new PropertyMetadata(null)); + + + public TouchListBox() { _awaitingSelectionItems = new List<TouchListBoxItem>(); @@ -315,7 +326,17 @@ namespace Tango.Touch.Controls { var items = GetItems(); items.ForEach(x => x.IsSelected = false); - var item = items.FirstOrDefault(x => x.DataContext.Equals(SelectedItem)); + + TouchListBoxItem item = null; + + if (String.IsNullOrWhiteSpace(ValuePath) || SelectedItem == null) + { + item = items.FirstOrDefault(x => x.DataContext.Equals(SelectedItem)); + } + else + { + item = items.FirstOrDefault(x => x.DataContext.GetPropertyValueByPath(ValuePath).Equals(SelectedItem.GetPropertyValueByPath(ValuePath))); + } if (item != null) { diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchNavigationLinks.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchNavigationLinks.xaml index 7aec7b17d..b771e6130 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchNavigationLinks.xaml +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchNavigationLinks.xaml @@ -28,13 +28,14 @@ <Setter Property="Padding" Value="0"/> <Setter Property="Stylus.IsPressAndHoldEnabled" Value="False"></Setter> <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> - <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> + <Setter Property="VerticalContentAlignment" Value="Bottom"/> <Setter Property="Background" Value="Transparent"/> <Setter Property="components:TransformationHelper.TransformWhenPressed" Value="True"></Setter> <Setter Property="BorderBrush" Value="Transparent"/> <Setter Property="FontWeight" Value="Normal"></Setter> <Setter Property="Margin" Value="0 0 10 0"></Setter> <Setter Property="BorderThickness" Value="1"/> + <Setter Property="MinHeight" Value="40"></Setter> <Setter Property="FocusVisualStyle" Value="{x:Null}"/> <Setter Property="Template"> <Setter.Value> @@ -43,7 +44,7 @@ <components:Ripple CornerRadius="5" RippleBrush="{StaticResource TangoRippleDarkBrush}"> <StackPanel Orientation="Horizontal"> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> - <Rectangle HorizontalAlignment="Right" VerticalAlignment="Stretch" Margin="10 0 10 0" StrokeThickness="1" Stroke="{StaticResource TangoDividerBrush}"> + <Rectangle HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="20 0 10 0" Height="25" StrokeThickness="1" Stroke="{StaticResource TangoDividerBrush}"> <Rectangle.Style> <Style TargetType="Rectangle"> <Setter Property="Visibility" Value="Visible"></Setter> @@ -75,7 +76,7 @@ <ControlTemplate TargetType="{x:Type ItemsControl}"> <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> <StackPanel> - <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> + <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> <Line x:Name="PART_Rectangle" X1="0" X2="0" Y1="0" Y2="0" Margin="0 5 0 0" HorizontalAlignment="Left" Stroke="{StaticResource TangoPrimaryAccentBrush}" StrokeThickness="3"></Line> </StackPanel> </Border> diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchNotificationBar.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchNotificationBar.xaml index 4fd2e9f8e..d097aa2bb 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchNotificationBar.xaml +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchNotificationBar.xaml @@ -38,7 +38,7 @@ <ItemsControl x:Name="PART_ItemsControl" ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Notifications}"> <ItemsControl.ItemTemplate> <DataTemplate> - <Border Background="{StaticResource TangoNotificationBackgroundBrush}" BorderBrush="{StaticResource TangoNotificationBorderBrush}" BorderThickness="0 0 0 5"> + <Border Background="{StaticResource TangoNotificationBackgroundBrush}" BorderBrush="{StaticResource TangoNotificationBorderBrush}" BorderThickness="0 0 0 0"> <i:Interaction.Triggers> <i:EventTrigger EventName="PreviewMouseUp"> <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource AncestorType=local:TouchNotificationBar},Path=NotificationPressedCommand}" /> @@ -53,7 +53,7 @@ </Border> </Border> - <Grid x:Name="PART_NotificationCounterGrid" Canvas.Left="85" Canvas.Top="45" Width="32" Height="32" HorizontalAlignment="Left" VerticalAlignment="Bottom" IsHitTestVisible="False"> + <Grid x:Name="PART_NotificationCounterGrid" Canvas.Left="41" Canvas.Top="19" Width="24" Height="24" HorizontalAlignment="Left" VerticalAlignment="Bottom" IsHitTestVisible="False"> <Grid> <Grid.Style> <Style TargetType="Grid"> @@ -67,7 +67,7 @@ </Grid.Style> <Ellipse Fill="White" StrokeThickness="1" Stroke="{StaticResource TangoPrimaryAccentBrush}"> </Ellipse> - <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource AncestorType=local:TouchNotificationBar},Path=Notifications.Count}"></TextBlock> + <TextBlock HorizontalAlignment="Center" FontSize="12" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource AncestorType=local:TouchNotificationBar},Path=Notifications.Count}"></TextBlock> </Grid> </Grid> </Canvas> diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.xaml index c8b8bac34..ba2efa52d 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.xaml +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.xaml @@ -28,6 +28,8 @@ <Setter Property="keyboard:KeyboardView.Action" Value="{Binding RelativeSource={RelativeSource Self},Path=KeyboardAction}"></Setter> <Setter Property="keyboard:KeyboardView.Container" Value="{Binding RelativeSource={RelativeSource Self},Path=KeyboardContainer}"></Setter> <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"></Setter> + <Setter Property="VerticalContentAlignment" Value="Bottom"></Setter> + <Setter Property="MinHeight" Value="40"></Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:TouchNumericTextBox}"> @@ -86,7 +88,7 @@ <Grid> <components:Ripple RippleBrush="{StaticResource TangoRippleDarkBrush}" RippleFactor="15"> <Grid> - <TextBox 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 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> <Style TargetType="TextBox"> <Setter Property="Opacity" Value="0"></Setter> @@ -98,7 +100,7 @@ </Style> </TextBox.Style> </TextBox> - <TextBlock x:Name="PART_TextDisplay" IsHitTestVisible="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Foreground="{TemplateBinding Foreground}" Padding="0 0 0 4" FocusVisualStyle="{x:Null}" Visibility="{Binding ElementName=PART_TextBox,Path=IsFocused,Converter={StaticResource BooleanToVisibilityInverseConverter}}"></TextBlock> + <TextBlock x:Name="PART_TextDisplay" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" IsHitTestVisible="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Foreground="{TemplateBinding Foreground}" Padding="0 0 0 4" FocusVisualStyle="{x:Null}" Visibility="{Binding ElementName=PART_TextBox,Path=IsFocused,Converter={StaticResource BooleanToVisibilityInverseConverter}}"></TextBlock> </Grid> </components:Ripple> diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.cs index 54906c7a6..6c29e4652 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.cs +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.cs @@ -19,6 +19,7 @@ namespace Tango.Touch.Controls { private TouchListBox _combobox_list; private Grid _combobox_grid; + private TouchIconButton _comboBoxCloseButton; private TouchCalendar _calendar; private Grid _calendar_grid; @@ -66,9 +67,11 @@ namespace Tango.Touch.Controls _combobox_list = GetTemplateChild("PART_ComboBoxList") as TouchListBox; _combobox_grid = GetTemplateChild("PART_combobox_grid") as Grid; + _comboBoxCloseButton = GetTemplateChild("PART_comboboxCloseButton") as TouchIconButton; _calendar_grid = GetTemplateChild("PART_datepicker_grid") as Grid; _calendar = GetTemplateChild("PART_calendar") as TouchCalendar; + _comboBoxCloseButton.RegisterForPreviewMouseOrTouchUp(OnComboBoxClose); _combobox_grid.RegisterForMouseOrTouchDown(OnComboBoxGridDown); _calendar_grid.RegisterForMouseOrTouchDown(OnCalendarGridDown); @@ -98,6 +101,11 @@ namespace Tango.Touch.Controls } } + private void OnComboBoxClose(object sender, MouseOrTouchEventArgs e) + { + CurrentComboBox = null; + } + private async void OnCurrentComboBoxChanged() { if (CurrentComboBox != null) diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.xaml index c9d6bd466..43b27e174 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.xaml +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchPanel.xaml @@ -9,6 +9,7 @@ <ResourceDictionary Source="../Resources/Colors.xaml" /> <ResourceDictionary Source="../Resources/Fonts.xaml" /> <ResourceDictionary Source="../Styles/TouchButton.xaml" /> + <ResourceDictionary Source="../Styles/TouchIconButton.xaml" /> <ResourceDictionary> <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> @@ -64,17 +65,20 @@ </Grid.Style> <Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent},Path=CurrentComboBox}" VerticalAlignment="Center" HorizontalAlignment="Center"> - <Border Background="{StaticResource TangoPrimaryBackgroundBrush}" CornerRadius="5" Margin="10" Padding="{Binding Padding}"> + <Border Background="{StaticResource TangoPrimaryBackgroundBrush}" CornerRadius="5" Margin="10"> <Border.Effect> <DropShadowEffect BlurRadius="10" /> </Border.Effect> <Grid ClipToBounds="True"> <DockPanel> - <Border DockPanel.Dock="Top" BorderBrush="{StaticResource TangoDividerBrush}" BorderThickness="0 0 0 1" Padding="10 10 10 15"> - <TextBlock DockPanel.Dock="Top" Text="{Binding Title}" FontSize="{StaticResource TangoTitleFontSize}"></TextBlock> + <Grid DockPanel.Dock="Top"> + <Border CornerRadius="5 5 0 0" Background="{StaticResource TangoComboBoxPopupTitleBackgroundBrush}" BorderBrush="{StaticResource TangoDividerBrush}" BorderThickness="0 0 0 1" Padding="30"> + <TextBlock DockPanel.Dock="Top" Text="{Binding Title}" FontSize="{StaticResource TangoComboBoxTitleFontSize}" FontWeight="SemiBold"></TextBlock> </Border> - <local:TouchListBox x:Name="PART_ComboBoxList" Margin="0 10 0 0" Width="{Binding MinPopupWidth}" Height="{Binding MinPopupHeight}" ItemSelectedCommand="{Binding RelativeSource={RelativeSource AncestorType=local:TouchPanel},Path=ComboBoxPickedCommand}" ItemsSource="{Binding ItemsSource}" SelectedItem="{Binding SelectedItem,Mode=TwoWay}" SelectionMode="None" ItemTemplate="{Binding ItemTemplate}" VerticalAlignment="Top"> + <local:TouchIconButton x:Name="PART_comboboxCloseButton" Background="Transparent" Padding="35" Style="{StaticResource TangoRoundTouchIconButton}" Command="{Binding CloseCommand}" CommandParameter="{Binding}" HorizontalAlignment="Right" MaxHeight="90" Width="{Binding RelativeSource={RelativeSource Self},Path=ActualHeight}" Icon="Close" Foreground="{StaticResource TangoDarkForegroundBrush}" Opacity="0.5" /> + </Grid> + <local:TouchListBox x:Name="PART_ComboBoxList" Width="{Binding MinPopupWidth}" Height="{Binding MinPopupHeight}" ItemSelectedCommand="{Binding RelativeSource={RelativeSource AncestorType=local:TouchPanel},Path=ComboBoxPickedCommand}" ItemsSource="{Binding ItemsSource}" SelectedItem="{Binding SelectedItem,Mode=TwoWay}" SelectionMode="None" ItemTemplate="{Binding ItemTemplate}" ValuePath="{Binding ValuePath}" VerticalAlignment="Top" > </local:TouchListBox> </DockPanel> diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchTextBox.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchTextBox.cs index 6f8297a5e..777e53ed0 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchTextBox.cs +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchTextBox.cs @@ -68,9 +68,24 @@ namespace Tango.Touch.Controls get { return (Object)GetValue(TapCommandParameterProperty); } set { SetValue(TapCommandParameterProperty, value); } } + public static readonly DependencyProperty TapCommandParameterProperty = DependencyProperty.Register("TapCommandParameter", typeof(Object), typeof(TouchTextBox), new PropertyMetadata(null)); + public int CaretIndex + { + get + { + return _text_box != null ? _text_box.CaretIndex : 0; + } + set + { + if (_text_box != null) + { + _text_box.CaretIndex = value; + } + } + } static TouchTextBox() { diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchTextBox.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchTextBox.xaml index a64d9e89e..c00bd40b9 100644 --- a/Software/Visual_Studio/Tango.Touch/Controls/TouchTextBox.xaml +++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchTextBox.xaml @@ -28,6 +28,8 @@ <Setter Property="keyboard:KeyboardView.Action" Value="{Binding RelativeSource={RelativeSource Self},Path=KeyboardAction}"></Setter> <Setter Property="keyboard:KeyboardView.Container" Value="{Binding RelativeSource={RelativeSource Self},Path=KeyboardContainer}"></Setter> <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"></Setter> + <Setter Property="VerticalContentAlignment" Value="Bottom"></Setter> + <Setter Property="MinHeight" Value="40"></Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:TouchTextBox}"> @@ -102,9 +104,9 @@ <Grid> <components:Ripple RippleBrush="{StaticResource TangoRippleDarkBrush}" RippleFactor="15"> <Grid> - <TextBox IsReadOnly="{TemplateBinding IsReadOnly}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Foreground="{TemplateBinding Foreground}" Padding="0 0 0 4" CaretBrush="{StaticResource TangoPrimaryAccentBrush}" FocusVisualStyle="{x:Null}" x:Name="PART_TextBox" Text="{Binding RelativeSource={RelativeSource AncestorType=local:TouchTextBox},Path=Text,UpdateSourceTrigger=PropertyChanged}" BorderThickness="0" Background="Transparent" Visibility="{Binding RelativeSource={RelativeSource AncestorType=local:TouchTextBox},Path=IsPassword,Converter={StaticResource BooleanToVisibilityInverseConverter}}"></TextBox> - <PasswordBox Foreground="{TemplateBinding Foreground}" helpers:PasswordHelper.Attach="True" helpers:PasswordHelper.Password="{Binding RelativeSource={RelativeSource AncestorType=local:TouchTextBox},Path=Text,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Padding="0 0 0 4" CaretBrush="{StaticResource TangoPrimaryAccentBrush}" FocusVisualStyle="{x:Null}" x:Name="PART_PasswordBox" BorderThickness="0" Background="Transparent" Visibility="{Binding RelativeSource={RelativeSource AncestorType=local:TouchTextBox},Path=IsPassword,Converter={StaticResource BooleanToVisibilityConverter}}"></PasswordBox> - <TextBlock IsHitTestVisible="False" Text="{TemplateBinding Watermark}" Foreground="{StaticResource TangoTextWatermarkBrush}"> + <TextBox IsReadOnly="{TemplateBinding IsReadOnly}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Foreground="{TemplateBinding Foreground}" Padding="0 0 0 4" CaretBrush="{StaticResource TangoPrimaryAccentBrush}" FocusVisualStyle="{x:Null}" x:Name="PART_TextBox" Text="{Binding RelativeSource={RelativeSource AncestorType=local:TouchTextBox},Path=Text,UpdateSourceTrigger=PropertyChanged}" BorderThickness="0" Background="Transparent" Visibility="{Binding RelativeSource={RelativeSource AncestorType=local:TouchTextBox},Path=IsPassword,Converter={StaticResource BooleanToVisibilityInverseConverter}}"></TextBox> + <PasswordBox Foreground="{TemplateBinding Foreground}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" helpers:PasswordHelper.Attach="True" helpers:PasswordHelper.Password="{Binding RelativeSource={RelativeSource AncestorType=local:TouchTextBox},Path=Text,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Padding="0 0 0 4" CaretBrush="{StaticResource TangoPrimaryAccentBrush}" FocusVisualStyle="{x:Null}" x:Name="PART_PasswordBox" BorderThickness="0" Background="Transparent" Visibility="{Binding RelativeSource={RelativeSource AncestorType=local:TouchTextBox},Path=IsPassword,Converter={StaticResource BooleanToVisibilityConverter}}"></PasswordBox> + <TextBlock IsHitTestVisible="False" Text="{TemplateBinding Watermark}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Foreground="{StaticResource TangoTextWatermarkBrush}"> <TextBlock.Style> <Style TargetType="TextBlock"> <Setter Property="Visibility" Value="Hidden"></Setter> @@ -132,7 +134,7 @@ </Grid> </components:Ripple> - <Canvas VerticalAlignment="Top" IsHitTestVisible="False" Margin="0 -4 0 0"> + <!--<Canvas VerticalAlignment="Top" IsHitTestVisible="False" Margin="0 -4 0 0" Visibility="Collapsed"> <Canvas.Style> <Style TargetType="Canvas"> <Setter Property="Visibility" Value="Hidden"></Setter> @@ -174,7 +176,7 @@ </Style> </TextBlock.Style> </TextBlock> - </Canvas> + </Canvas>--> </Grid> </DockPanel> </DockPanel> diff --git a/Software/Visual_Studio/Tango.Touch/Keyboard/KeyboardView.cs b/Software/Visual_Studio/Tango.Touch/Keyboard/KeyboardView.cs index cddb289f1..81b77b6ce 100644 --- a/Software/Visual_Studio/Tango.Touch/Keyboard/KeyboardView.cs +++ b/Software/Visual_Studio/Tango.Touch/Keyboard/KeyboardView.cs @@ -16,6 +16,7 @@ using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Tango.Core.EventArguments; +using Tango.Touch.Controls; namespace Tango.Touch.Keyboard { diff --git a/Software/Visual_Studio/Tango.Touch/Keyboard/TouchKeyboard.cs b/Software/Visual_Studio/Tango.Touch/Keyboard/TouchKeyboard.cs index ae6602e31..e9938efc8 100644 --- a/Software/Visual_Studio/Tango.Touch/Keyboard/TouchKeyboard.cs +++ b/Software/Visual_Studio/Tango.Touch/Keyboard/TouchKeyboard.cs @@ -49,6 +49,7 @@ namespace Tango.Touch.Keyboard private bool _isInitialized; public event EventHandler<KeyboardActionKeyMode> ActionKeyPressed; + public event EventHandler<String> KeyPressed; public bool IsSpecialCharactersOn { @@ -486,21 +487,85 @@ namespace Tango.Touch.Keyboard } - Task.Factory.StartNew(() => + if (key.Length > 1 || (isSpecialChar && definition.KeysLinesDefinitions.SelectMany(x => x.KeyDefinitions).Select(x => x.StandardText).Contains(key))) { - _soundPlayer.Play(); - - if (isSpecialChar && definition.KeysLinesDefinitions.SelectMany(x => x.KeyDefinitions).Select(x => x.StandardText).Contains(key)) + Core.Threading.ThreadFactory.StartNew(() => { - Forms.SendKeys.SendWait("{" + key + "}"); - } - else + if (key.Contains("{")) + { + Forms.SendKeys.SendWait(key); + } + else + { + Forms.SendKeys.SendWait("{" + key + "}"); + } + + Forms.SendKeys.Flush(); + }); + } + else + { + //Forms.SendKeys.SendWait(key); + + var text = key; + var target = FocusManager.GetFocusedElement(Application.Current.MainWindow) as UIElement; + + Key k = Key.None; + Enum.TryParse<Key>(key, out k); + + RaiseKeyUp(target, k); + + var routedEvent = TextCompositionManager.TextInputEvent; + + target.RaiseEvent(new TextCompositionEventArgs(InputManager.Current.PrimaryKeyboardDevice, + new TextComposition(InputManager.Current, target, text)) { - Forms.SendKeys.SendWait(key); + RoutedEvent = routedEvent } + ); + } + + _soundPlayer.Play(); + } + + private void RaiseKeyDown(UIElement target, Key key) + { + target.RaiseEvent( + new KeyEventArgs( + System.Windows.Input.Keyboard.PrimaryDevice, + PresentationSource.FromVisual(target), + 0, + key) + { RoutedEvent = System.Windows.Input.Keyboard.PreviewKeyDownEvent }); + + target.RaiseEvent( + new KeyEventArgs( + System.Windows.Input.Keyboard.PrimaryDevice, + PresentationSource.FromVisual(target), + 0, + key) + { RoutedEvent = System.Windows.Input.Keyboard.KeyDownEvent }); + + } + + private void RaiseKeyUp(UIElement target, Key key) + { + target.RaiseEvent( +new KeyEventArgs( +System.Windows.Input.Keyboard.PrimaryDevice, +PresentationSource.FromVisual(target), +0, +key) +{ RoutedEvent = System.Windows.Input.Keyboard.PreviewKeyUpEvent }); - Forms.SendKeys.Flush(); - }); + target.RaiseEvent( + new KeyEventArgs( + System.Windows.Input.Keyboard.PrimaryDevice, + PresentationSource.FromVisual(target), + 0, + key) + { RoutedEvent = System.Windows.Input.Keyboard.KeyUpEvent } + ); } public static void PressCtrl() diff --git a/Software/Visual_Studio/Tango.Touch/Resources/Colors.xaml b/Software/Visual_Studio/Tango.Touch/Resources/Colors.xaml index 38e03cb0a..1a77b76be 100644 --- a/Software/Visual_Studio/Tango.Touch/Resources/Colors.xaml +++ b/Software/Visual_Studio/Tango.Touch/Resources/Colors.xaml @@ -14,7 +14,7 @@ <Color x:Key="TangoDarkForegroundColor">#3b3e4a</Color> <Color x:Key="TangoLightForegroundColor">#FFFFFF</Color> - <Color x:Key="TangoDividerColor">#c8cbd4</Color> + <Color x:Key="TangoDividerColor">#E7E8E9</Color> <Color x:Key="TangoLightBorderColor">#dbe0e8</Color> <Color x:Key="TangoDisabledBackgroundColor">#B8B8B8</Color> @@ -44,13 +44,17 @@ <Color x:Key="TangoRedColor">#FF6767</Color> <Color x:Key="TangoSuccessColor">#56da6c</Color> - <Color x:Key="TangoWarningColor">#FF7505</Color> + <Color x:Key="TangoWarningColor">#EE9523</Color> <Color x:Key="TangoErrorColor">#fa1555</Color> <Color x:Key="TangoNotificationBarMaskColor">#96000000</Color> <Color x:Key="TangoNotificationBarBottomBorderColor">Silver</Color> <Color x:Key="TangoNotificationBorderColor">#757373</Color> - <Color x:Key="TangoNotificationBarBackgroundColor">#202020</Color> + <Color x:Key="TangoNotificationBarBackgroundColor">#C3F2F5FA</Color> + + <Color x:Key="TangoComboBoxPopupTitleBackgroundColor">#DDE7FD</Color> + + <Color x:Key="TangoPowerMenuOpenedBackgroundColor">#4E5470</Color> <!--Brushes--> <SolidColorBrush x:Key="TangoPrimaryBackgroundBrush" Color="{StaticResource TangoPrimaryBackgroundColor}"></SolidColorBrush> @@ -103,8 +107,8 @@ <SolidColorBrush x:Key="TangoNotificationBarBackgroundBrush" Color="{StaticResource TangoNotificationBarBackgroundColor}"></SolidColorBrush> <LinearGradientBrush x:Key="TangoNotificationBackgroundBrush" StartPoint="0.5,0" EndPoint="0.5,1"> - <GradientStop Color="Black"/> - <GradientStop Color="Black" Offset="1"/> + <GradientStop Color="White"/> + <GradientStop Color="White" Offset="1"/> </LinearGradientBrush> <SolidColorBrush x:Key="TangoKeyboardBackground" Color="#CE979797" /> @@ -112,4 +116,8 @@ <SolidColorBrush x:Key="TangoKeyboardKeyDarkBrush">#616161</SolidColorBrush> <SolidColorBrush x:Key="TangoKeyboardKeyDarkTextBrush">#121212</SolidColorBrush> <SolidColorBrush x:Key="TangoKeyboardKeyLightTextBrush">#F1F1F1</SolidColorBrush> + + <SolidColorBrush x:Key="TangoComboBoxPopupTitleBackgroundBrush" Color="{StaticResource TangoComboBoxPopupTitleBackgroundColor}"></SolidColorBrush> + + <SolidColorBrush x:Key="TangoPowerMenuOpenedBackgroundBrush" Color="{StaticResource TangoPowerMenuOpenedBackgroundColor}"></SolidColorBrush> </ResourceDictionary>
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Touch/Resources/Fonts.xaml b/Software/Visual_Studio/Tango.Touch/Resources/Fonts.xaml index 112dec891..387977e0a 100644 --- a/Software/Visual_Studio/Tango.Touch/Resources/Fonts.xaml +++ b/Software/Visual_Studio/Tango.Touch/Resources/Fonts.xaml @@ -19,4 +19,8 @@ <sys:Double x:Key="TangoExpanderHeaderFontSize">23</sys:Double> + <sys:Double x:Key="TangoComboBoxTitleFontSize">26</sys:Double> + <sys:Double x:Key="TangoComboBoxItemFontSize">18</sys:Double> + + <sys:Double x:Key="TangoMenuItemFontSize">27</sys:Double> </ResourceDictionary>
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Touch/Styles/TouchToggleButton.xaml b/Software/Visual_Studio/Tango.Touch/Styles/TouchToggleButton.xaml index 02450ee95..edf25c256 100644 --- a/Software/Visual_Studio/Tango.Touch/Styles/TouchToggleButton.xaml +++ b/Software/Visual_Studio/Tango.Touch/Styles/TouchToggleButton.xaml @@ -18,7 +18,7 @@ <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type controls:TouchToggleButton}"> - <Border Background="{TemplateBinding Property=Background}"> + <Border Background="{TemplateBinding Property=Background}" Padding="{TemplateBinding Padding}"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState Name="Normal"/> diff --git a/Software/Visual_Studio/Tango.UnitTesting/App.config b/Software/Visual_Studio/Tango.UnitTesting/App.config index 1a3af14d9..074da9ac0 100644 --- a/Software/Visual_Studio/Tango.UnitTesting/App.config +++ b/Software/Visual_Studio/Tango.UnitTesting/App.config @@ -4,6 +4,24 @@ <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> </configSections> + <appSettings> + <add key="DB_ADDRESS" value="twine.database.windows.net" /> + <add key="DB_USER_NAME" value="Roy" /> + <add key="DB_PASSWORD" value="Aa123456" /> + <add key="DB_CATALOG" value="Tango_DEV" /> + <add key="STORAGE_ACCOUNT" value="DefaultEndpointsProtocol=https;AccountName=tangostorage;AccountKey=S4z/D+Yg6mwMis+bs/VpcDLA9yE1iZaYq23shQlRIi2KmM9E7JY8zdZjeAPOPdG3gONHoNDEpsgH6D4cqQ/bsA==;EndpointSuffix=core.windows.net" /> + <add key="TENANT_ID" value="2ebd63a5-bc2f-41dc-9066-4409ed5e5dd4" /> + <add key="CLIENT_ID" value="ec612854-7abc-457b-808a-5d0c5ba80c57" /> + <add key="APP_SECRET" value="54)019A7wv+#86l*PQcQWYKu%fd4Dv!@G=VhCiDI5rD+H4BTH" /> + <add key="TANGO_VERSIONS_CONTAINER" value="tango-versions-dev" /> + <add key="MACHINE_STUDIO_VERSIONS_CONTAINER" value="machine-studio-versions-dev" /> + <add key="DEPLOYMENT_SLOT" value="DEV" /> + <add key="ENVIRONMENT_GROUP" value="Tango DEV" /> + <add key="ENFORCE_MACHINE_STUDIO_VERSION" value="true" /> + <add key="JWT_TOKEN_SECRET" value="GQDstcKsx0NHjLOuXOYg5MbeJ1yT0u1iwDVTwine" /> + <add key="REFRESH_TOKENS_TABLE_NAME" value="RefreshTokens" /> + <add key="REFRESH_TOKENS_TABLE_PARTITION" value="REFRESH_TOKENS_PART" /> + </appSettings> <entityFramework> <providers> <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> @@ -14,9 +32,26 @@ </entityFramework> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> - <assemblyIdentity name="System.Reactive.Core" publicKeyToken="94bc3704cddfc263" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-3.0.3000.0" newVersion="3.0.3000.0" /> + <assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" /> + </dependentAssembly> + <dependentAssembly> + <assemblyIdentity name="Microsoft.Data.Services.Client" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" /> + </dependentAssembly> + <dependentAssembly> + <assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" /> + </dependentAssembly> + <dependentAssembly> + <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" /> + </dependentAssembly> + <dependentAssembly> + <assemblyIdentity name="Microsoft.IdentityModel.Clients.ActiveDirectory" publicKeyToken="31bf3856ad364e35" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-2.7.0.0" newVersion="2.7.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> @@ -59,32 +94,8 @@ <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" /> </dependentAssembly> <dependentAssembly> - <assemblyIdentity name="System.Xml.ReaderWriter" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="Microsoft.IdentityModel.Clients.ActiveDirectory" publicKeyToken="31bf3856ad364e35" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-3.19.8.16603" newVersion="3.19.8.16603" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform" publicKeyToken="31bf3856ad364e35" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-3.19.8.16603" newVersion="3.19.8.16603" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="Microsoft.Data.Services.Client" publicKeyToken="31bf3856ad364e35" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" /> + <assemblyIdentity name="System.Reactive.Core" publicKeyToken="94bc3704cddfc263" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-3.0.3000.0" newVersion="3.0.3000.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" /> diff --git a/Software/Visual_Studio/Tango.UnitTesting/MachineService/MachineStudio_Controller_TST.cs b/Software/Visual_Studio/Tango.UnitTesting/MachineService/MachineStudio_Controller_TST.cs index 21ab16307..d4585388a 100644 --- a/Software/Visual_Studio/Tango.UnitTesting/MachineService/MachineStudio_Controller_TST.cs +++ b/Software/Visual_Studio/Tango.UnitTesting/MachineService/MachineStudio_Controller_TST.cs @@ -5,6 +5,7 @@ using Tango.BL; using Tango.MachineStudio.Common.Web; using Tango.Transport.Web; using System.Linq; +using System.Configuration; namespace Tango.UnitTesting.MachineService { @@ -74,5 +75,34 @@ namespace Tango.UnitTesting.MachineService Assert.IsFalse(res5.IsUpdateAvailable); } + + [TestMethod] + public void Login_with_new_user() + { + //LoadConfiguration(); + + Tango.MachineService.Controllers.MachineStudioController controller = new Tango.MachineService.Controllers.MachineStudioController(); + + + + controller.Login(new LoginRequest() + { + Email = "Mati@twine-s.com", + Password = "Futo8985", + }); + } + + //private void LoadConfiguration() + //{ + // ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); + // fileMap.ExeConfigFilename = @"web.config"; + + // Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); + + // foreach (var item in config.AppSettings.Settings.OfType<KeyValueConfigurationElement>()) + // { + // ConfigurationManager.AppSettings.Add(item.Key, item.Value); + // } + //} } } diff --git a/Software/Visual_Studio/Tango.UnitTesting/MachineService/PPC_Controller_TST.cs b/Software/Visual_Studio/Tango.UnitTesting/MachineService/PPC_Controller_TST.cs index 7c3d497b8..68232e512 100644 --- a/Software/Visual_Studio/Tango.UnitTesting/MachineService/PPC_Controller_TST.cs +++ b/Software/Visual_Studio/Tango.UnitTesting/MachineService/PPC_Controller_TST.cs @@ -13,7 +13,7 @@ namespace Tango.UnitTesting.MachineService [TestCategory("Machine Service - PPC")] public class PPC_Controller_TST { - private const string address = "http://localhost:51581"; + private const string address = "https://machineservice-test.twine-srv.com"; [TestMethod] public void Login_and_setup() diff --git a/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj b/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj index 4e852fed8..d1bba995e 100644 --- a/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj +++ b/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj @@ -25,7 +25,7 @@ <DebugSymbols>true</DebugSymbols> <DebugType>full</DebugType> <Optimize>false</Optimize> - <OutputPath>..\Build\Core\Debug\</OutputPath> + <OutputPath>bin\Debug\</OutputPath> <DefineConstants>DEBUG;TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>0</WarningLevel> @@ -35,7 +35,7 @@ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <DebugType>pdbonly</DebugType> <Optimize>true</Optimize> - <OutputPath>..\Build\Core\Release\</OutputPath> + <OutputPath>bin\Release\</OutputPath> <DefineConstants>TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> @@ -60,6 +60,16 @@ <HintPath>..\packages\JWT.5.0.0\lib\net46\JWT.dll</HintPath> </Reference> <Reference Include="Microsoft.CSharp" /> + <Reference Include="Microsoft.IdentityModel.Clients.ActiveDirectory, Version=3.13.5.907, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.7.10707.1513-rc\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll</HintPath> + </Reference> + <Reference Include="Microsoft.IdentityModel.Clients.ActiveDirectory.Platform, Version=3.13.5.907, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.3.13.5\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll</HintPath> + </Reference> + <Reference Include="Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms"> + <HintPath>..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.7.10707.1513-rc\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll</HintPath> + </Reference> <Reference Include="Microsoft.Office.Interop.Outlook, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL"> <EmbedInteropTypes>True</EmbedInteropTypes> </Reference> @@ -76,6 +86,7 @@ </Reference> <Reference Include="System" /> <Reference Include="System.ComponentModel.DataAnnotations" /> + <Reference Include="System.Configuration" /> <Reference Include="System.Core" /> <Reference Include="System.Data" /> <Reference Include="System.Data.Entity.Design" /> @@ -91,6 +102,13 @@ <HintPath>..\packages\System.Data.SQLite.Linq.1.0.108.0\lib\net46\System.Data.SQLite.Linq.dll</HintPath> <Private>True</Private> </Reference> + <Reference Include="System.Net.Http" /> + <Reference Include="System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll</HintPath> + </Reference> + <Reference Include="System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll</HintPath> + </Reference> <Reference Include="TestStack.White, Version=0.13.0.0, Culture=neutral, PublicKeyToken=2672efbf3e161801, processorArchitecture=MSIL"> <HintPath>..\packages\TestStack.White.0.13.3\lib\net40\TestStack.White.dll</HintPath> </Reference> @@ -216,6 +234,10 @@ <Project>{ebb7cb9f-6af2-456b-a5dd-1b136b605d90}</Project> <Name>Tango.DBObservablesGenerator.CLI</Name> </ProjectReference> + <ProjectReference Include="..\Web\Tango.MachineService\Tango.MachineService.csproj"> + <Project>{3f09b230-5aac-4651-ba7a-19f3bdfcf701}</Project> + <Name>Tango.MachineService</Name> + </ProjectReference> </ItemGroup> <ItemGroup> <Content Include="AdvancedInstaller\DemoProject\Files\File3.txt"> @@ -242,7 +264,7 @@ <Import Project="..\packages\System.Data.SQLite.Core.1.0.108.0\build\net46\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.108.0\build\net46\System.Data.SQLite.Core.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/Tango.UnitTesting/packages.config b/Software/Visual_Studio/Tango.UnitTesting/packages.config index 0528c7ef0..e3fc2d3b6 100644 --- a/Software/Visual_Studio/Tango.UnitTesting/packages.config +++ b/Software/Visual_Studio/Tango.UnitTesting/packages.config @@ -5,6 +5,9 @@ <package id="EntityFramework" version="6.2.0" targetFramework="net461" /> <package id="Google.Protobuf" version="3.4.1" targetFramework="net46" /> <package id="JWT" version="5.0.0" targetFramework="net461" /> + <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net461" /> + <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net461" /> + <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net461" /> <package id="MSTest.TestAdapter" version="1.1.11" targetFramework="net45" /> <package id="MSTest.TestFramework" version="1.1.11" targetFramework="net45" /> <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" /> diff --git a/Software/Visual_Studio/Tango.Web/TangoWebApplication.cs b/Software/Visual_Studio/Tango.Web/TangoWebApplication.cs index c9fea1678..f168fe9a4 100644 --- a/Software/Visual_Studio/Tango.Web/TangoWebApplication.cs +++ b/Software/Visual_Studio/Tango.Web/TangoWebApplication.cs @@ -26,7 +26,6 @@ namespace Tango.Web protected virtual void Application_Start() { LogManager.Default.RegisterLogger(new AzureCloudLogger()); - GlobalConfiguration.Configuration.Filters.Add(new LogExceptionFilterAttribute()); } diff --git a/Software/Visual_Studio/Tango.sln b/Software/Visual_Studio/Tango.sln index af35afd9f..a25cbde01 100644 --- a/Software/Visual_Studio/Tango.sln +++ b/Software/Visual_Studio/Tango.sln @@ -264,6 +264,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.WebClientGenerator", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.AdvancedInstaller", "Tango.AdvancedInstaller\Tango.AdvancedInstaller.csproj", "{C5DF1816-34E5-4700-824C-29623A1BAA22}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.Pulse", "Tango.Pulse\Tango.Pulse.csproj", "{8435223D-DB6B-45E3-A08B-45B7416F8481}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution AppVeyor|Any CPU = AppVeyor|Any CPU @@ -4721,6 +4723,46 @@ Global {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release|x64.Build.0 = Release|Any CPU {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release|x86.ActiveCfg = Release|Any CPU {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release|x86.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.AppVeyor|Any CPU.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.AppVeyor|Any CPU.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.AppVeyor|ARM.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.AppVeyor|ARM.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.AppVeyor|ARM64.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.AppVeyor|ARM64.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.AppVeyor|x64.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.AppVeyor|x64.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.AppVeyor|x86.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.AppVeyor|x86.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Debug|ARM.ActiveCfg = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Debug|ARM.Build.0 = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Debug|ARM64.Build.0 = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Debug|x64.ActiveCfg = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Debug|x64.Build.0 = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Debug|x86.ActiveCfg = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Debug|x86.Build.0 = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.DefaultBuild|Any CPU.ActiveCfg = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.DefaultBuild|Any CPU.Build.0 = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.DefaultBuild|ARM.ActiveCfg = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.DefaultBuild|ARM.Build.0 = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.DefaultBuild|ARM64.ActiveCfg = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.DefaultBuild|ARM64.Build.0 = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.DefaultBuild|x64.ActiveCfg = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.DefaultBuild|x64.Build.0 = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release|Any CPU.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release|ARM.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release|ARM.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release|ARM64.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release|ARM64.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release|x64.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release|x64.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release|x86.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -4806,12 +4848,12 @@ Global {E470673E-AEC8-4555-9136-D2F66B02DBFB} = {5F6BBAA8-EAD0-4B18-97E5-55B4F56DD760} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - BuildVersion_UseGlobalSettings = False - BuildVersion_AssemblyInfoFilename = Properties\AssemblyInfo.cs - BuildVersion_StartDate = 2000/1/1 - BuildVersion_UpdateFileVersion = False - BuildVersion_UpdateAssemblyVersion = True - BuildVersion_BuildVersioningStyle = None.None.Increment.DeltaBaseYearDayOfYear SolutionGuid = {7986F7F4-A86A-4994-B1B6-0988D7F057B6} + BuildVersion_BuildVersioningStyle = None.None.Increment.DeltaBaseYearDayOfYear + BuildVersion_UpdateAssemblyVersion = True + BuildVersion_UpdateFileVersion = False + BuildVersion_StartDate = 2000/1/1 + BuildVersion_AssemblyInfoFilename = Properties\AssemblyInfo.cs + BuildVersion_UseGlobalSettings = False EndGlobalSection EndGlobal diff --git a/Software/Visual_Studio/Utilities/Tango.UITests/MainWindow.xaml b/Software/Visual_Studio/Utilities/Tango.UITests/MainWindow.xaml index 6c1f5ed51..ab76a9745 100644 --- a/Software/Visual_Studio/Utilities/Tango.UITests/MainWindow.xaml +++ b/Software/Visual_Studio/Utilities/Tango.UITests/MainWindow.xaml @@ -20,8 +20,9 @@ <StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center"> <TextBlock HorizontalAlignment="Center" Margin="0 0 0 10" x:Name="txtStatus"></TextBlock> <ProgressBar x:Name="prog" VerticalAlignment="Center" Height="15" Width="700"></ProgressBar> - <Button x:Name="btnStart" Click="btnStart_Click" HorizontalAlignment="Center" Padding="30 10" Margin="0 10 0 0">START</Button> - <Button x:Name="btnChange" Click="btnChange_Click" HorizontalAlignment="Center" Padding="30 10" Margin="0 10 0 0">CHANGE</Button> + <Button x:Name="btnStart" Click="btnStart_Click" HorizontalAlignment="Center" Padding="30 10" Margin="0 10 0 0">LOAD JOBS</Button> + <Button x:Name="btnChange" Click="btnChange_Click" HorizontalAlignment="Center" Padding="30 10" Margin="0 10 0 0">CHANGE JOB</Button> + <Button x:Name="btnListen" Click="btnListen_Click" HorizontalAlignment="Center" Padding="30 10" Margin="0 10 0 0">START LISTEN</Button> </StackPanel> </Grid> </Window> diff --git a/Software/Visual_Studio/Utilities/Tango.UITests/MainWindow.xaml.cs b/Software/Visual_Studio/Utilities/Tango.UITests/MainWindow.xaml.cs index 4ac7bffa2..2fad8b46b 100644 --- a/Software/Visual_Studio/Utilities/Tango.UITests/MainWindow.xaml.cs +++ b/Software/Visual_Studio/Utilities/Tango.UITests/MainWindow.xaml.cs @@ -36,6 +36,9 @@ using System.Security.Permissions; using TableDependency.SqlClient.Base; using TableDependency.SqlClient; using TableDependency.SqlClient.Base.EventArgs; +using TableDependency.SqlClient.Base.Abstracts; +using Tango.Core.Components; +using System.Text.RegularExpressions; namespace Tango.UITests { @@ -44,115 +47,77 @@ namespace Tango.UITests /// </summary> public partial class MainWindow : Window { - public MainWindow() - { - InitializeComponent(); - EntityFrameworkCache.Initialize(new InMemoryCache()); - - - } - - private static string _con = "data source=localhost\\SQLEXPRESS; initial catalog=Tango; integrated security=False;User Id=SqlDependency;Password=Aa123456"; + private ITableDependency _dep; + private DataSource _dataSource; - private void btnStart_Click(object sender, RoutedEventArgs e) + public MainWindow() { - //var dataSource = new DataSource() + //_dataSource = new DataSource() //{ - // Address = "localhost\\SQLEXPRESS", - // Catalog = "Tango", + // Address = "twine.database.windows.net", + // Catalog = "Tango_DEV", // Type = DataSourceType.SQLServer, - // IntegratedSecurity = false, - // UserName = "Developer", + // UserName = "Roy", // Password = "Aa123456", + // IntegratedSecurity = false, //}; - //var connection = dataSource.ToConnection(); - - String str = _con; - - //var mapper = new ModelToTableMapper<User>(); - //mapper.AddMapping(c => c.ID, "ID"); - //mapper.AddMapping(c => c.Email, "EMAIL"); - - var dep = new SqlTableDependency<DAL.Remote.DB.USER>(str, "USERS", "dbo"); - dep.TraceLevel = TraceLevel.Verbose; - dep.TraceListener = new TextWriterTraceListener(Console.Out); - - dep.OnChanged += Changed; - dep.Start(); - - //SqlClientPermission clientPermission = - // new SqlClientPermission(PermissionState.Unrestricted); - //clientPermission.Demand(); + //InitializeComponent(); + //EntityFrameworkCache.Initialize(new MyMemoryCache() { Expiration = TimeSpan.FromMinutes(1) }); - //System.Data.SqlClient.SqlDependency.Start(str); - //String commandText = "SELECT [dbo].[USERS].[EMAIL] FROM [dbo].[USERS];"; - //SqlCommand command = new SqlCommand(commandText, connection as SqlConnection); - //command.Notification = null; - //command.CommandType = CommandType.Text; + //this.Closing += MainWindow_Closing; - //command.Connection.Open(); + CmdCommand command = new CmdCommand("wmic", "pagefile list /format:list"); + var result = command.Run().Result; - //SqlDependency dependency = new SqlDependency(command); - //dependency.OnChange += (s, args) => - //{ - - //}; + Regex regEx = new Regex("Name=(.+)"); + var pageFiles = regEx.Matches(result.StandardOutput).OfType<Match>().Select(x => x.Groups.OfType<Group>().LastOrDefault()).ToList().Select(x => x.Value.Replace("\n", "").Replace("\r", "")).ToList(); - //command.ExecuteReader(); - //String a = "!23"; + - //Stopwatch watch = Stopwatch.StartNew(); + //var matches = matches.OfType<Match>().Select(x => x.Groups.OfType<Group>().Last().Value.Replace("\n","").Replace("\r","")).ToList(); - //using (ObservablesContext db = ObservablesContext.CreateDefault(new DataSource() - //{ - // Address = "localhost\\SQLEXPRESS", - // Catalog = "Tango", - // Type = DataSourceType.SQLServer, - // UserName = "Roy", - // Password = "Aa123456", - // IntegratedSecurity = true, - //})) - //{ - // var users = db.Users.ToList(); - // var jobs = new JobsCollectionBuilder(db).SetAll().WithSegments().WithBrushStops().Build(); - // var first_job = jobs.First(); - // if (first_job.Name == "Changed Name 2") - // { - // Debug.WriteLine("Changed and cached !!!"); - // } - // else - // { - // Debug.WriteLine("Not working."); - // } - //} + } - //Debug.WriteLine($"Time to complete: {watch.Elapsed.TotalSeconds} seconds"); + private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e) + { + if (_dep != null) + { + _dep.Stop(); + _dep.Dispose(); + } } - private void Changed(object sender, RecordChangedEventArgs<DAL.Remote.DB.USER> e) + + private void btnStart_Click(object sender, RoutedEventArgs e) { - var changedEntity = e.Entity; + Stopwatch watch = Stopwatch.StartNew(); - Console.WriteLine("DML operation: " + e.ChangeType); + using (ObservablesContext db = ObservablesContext.CreateDefault(_dataSource)) + { + var users = db.Users.ToList(); + var jobs = new JobsCollectionBuilder(db).SetAll().WithSegments().WithBrushStops().Build(); + var first_job = jobs.First(); - Console.WriteLine(changedEntity.ToJsonString()); + if (first_job.Name == "Changed Name 2") + { + Debug.WriteLine("Changed and cached !!!"); + } + else + { + Debug.WriteLine("Not working."); + } + } + + Debug.WriteLine($"Time to complete: {watch.Elapsed.TotalSeconds} seconds"); } private void btnChange_Click(object sender, RoutedEventArgs e) { - using (ObservablesContext db = ObservablesContext.CreateDefault(new DataSource() - { - Address = "twine.database.windows.net", - Catalog = "Tango_DEV", - Type = DataSourceType.SQLServer, - UserName = "Roy", - Password = "Aa123456", - IntegratedSecurity = false, - })) + using (ObservablesContext db = ObservablesContext.CreateDefault(_dataSource)) { var jobs = new JobsCollectionBuilder(db).SetAll().WithSegments().WithBrushStops().Build(); var first_job = jobs.First(); @@ -160,5 +125,28 @@ namespace Tango.UITests db.SaveChanges(); } } + + private void btnListen_Click(object sender, RoutedEventArgs e) + { + String str = _dataSource.ToConnection().ConnectionString; + + var dep = new SqlTableDependency<DAL.Remote.DB.USER>(str, "USERS", "dbo"); + dep.TraceLevel = TraceLevel.Verbose; + dep.TraceListener = new TextWriterTraceListener(Console.Out); + + dep.OnChanged += Changed; + dep.Start(); + + _dep = dep; + } + + private void Changed(object sender, RecordChangedEventArgs<DAL.Remote.DB.USER> e) + { + var changedEntity = e.Entity; + + Console.WriteLine("DML operation: " + e.ChangeType); + + Console.WriteLine(changedEntity.ToJsonString()); + } } } diff --git a/Software/Visual_Studio/Utilities/Tango.UITests/MyMemoryCache.cs b/Software/Visual_Studio/Utilities/Tango.UITests/MyMemoryCache.cs new file mode 100644 index 000000000..0a3583f54 --- /dev/null +++ b/Software/Visual_Studio/Utilities/Tango.UITests/MyMemoryCache.cs @@ -0,0 +1,215 @@ + +namespace EFCache +{ + using System; + using System.Linq; + using System.Collections.Generic; + + public class MyMemoryCache : ICache + { + private readonly Dictionary<string, CacheEntry> _cache = new Dictionary<string, CacheEntry>(); + private readonly Dictionary<string, HashSet<string>> _entitySetToKey = new Dictionary<string, HashSet<string>>(); + + public TimeSpan Expiration { get; set; } + + public bool GetItem(string key, out object value) + { + if (key == null) + { + throw new ArgumentNullException("key"); + } + + value = null; + + lock (_cache) + { + var now = DateTimeOffset.Now; + + CacheEntry entry; + if (_cache.TryGetValue(key, out entry)) + { + if (EntryExpired(entry, now)) + { + InvalidateItem(key); + } + else + { + //entry.LastAccess = now; + value = entry.Value; + return true; + } + } + } + + return false; + } + + public void PutItem(string key, object value, IEnumerable<string> dependentEntitySets, TimeSpan slidingExpiration, DateTimeOffset absoluteExpiration) + { + if (key == null) + { + throw new ArgumentNullException("key"); + } + + if (dependentEntitySets == null) + { + throw new ArgumentNullException("dependentEntitySets"); + } + + lock (_cache) + { + var entitySets = dependentEntitySets.ToArray(); + + _cache[key] = new CacheEntry(value, entitySets, slidingExpiration, absoluteExpiration); + + foreach (var entitySet in entitySets) + { + HashSet<string> keys; + + if (!_entitySetToKey.TryGetValue(entitySet, out keys)) + { + keys = new HashSet<string>(); + _entitySetToKey[entitySet] = keys; + } + + keys.Add(key); + } + } + } + + public void InvalidateSets(IEnumerable<string> entitySets) + { + if (entitySets == null) + { + throw new ArgumentNullException("entitySets"); + } + + lock (_cache) + { + var itemsToInvalidate = new HashSet<string>(); + + foreach (var entitySet in entitySets) + { + HashSet<string> keys; + + if (_entitySetToKey.TryGetValue(entitySet, out keys)) + { + itemsToInvalidate.UnionWith(keys); + + _entitySetToKey.Remove(entitySet); + } + } + + foreach (var key in itemsToInvalidate) + { + InvalidateItem(key); + } + } + } + + public void InvalidateItem(string key) + { + if (key == null) + { + throw new ArgumentNullException("key"); + } + + lock (_cache) + { + CacheEntry entry; + + if (_cache.TryGetValue(key, out entry)) + { + _cache.Remove(key); + + foreach (var set in entry.EntitySets) + { + HashSet<string> keys; + if (_entitySetToKey.TryGetValue(set, out keys)) + { + keys.Remove(key); + } + } + } + } + } + + public void Purge() + { + Purge(false); + } + + public void Purge(bool removeUnexpiredItems) + { + lock (_cache) + { + var now = DateTimeOffset.Now; + var itemsToRemove = new HashSet<string>(); + + foreach (var item in _cache) + { + if (removeUnexpiredItems || EntryExpired(item.Value, now)) + { + itemsToRemove.Add(item.Key); + } + } + + foreach (var key in itemsToRemove) + { + InvalidateItem(key); + } + } + } + + public int Count + { + get { return _cache.Count; } + } + + private bool EntryExpired(CacheEntry entry, DateTimeOffset now) + { + return entry.AbsoluteExpiration < now || (now - entry.LastAccess) > Expiration; + } + + private class CacheEntry + { + private readonly object _value; + private readonly string[] _entitySets; + private readonly TimeSpan _slidingExpiration; + private readonly DateTimeOffset _absoluteExpiration; + private readonly DateTime _created; + + public CacheEntry(object value, string[] entitySets, TimeSpan slidingExpiration, + DateTimeOffset absoluteExpiration) + { + _value = value; + _entitySets = entitySets; + _slidingExpiration = slidingExpiration; + _absoluteExpiration = absoluteExpiration; + LastAccess = DateTimeOffset.Now; + } + + public object Value + { + get { return _value; } + } + + public string[] EntitySets + { + get { return _entitySets; } + } + + public TimeSpan SlidingExpiration + { + get { return _slidingExpiration; } + } + + public DateTimeOffset AbsoluteExpiration + { + get { return _absoluteExpiration; } + } + + public DateTimeOffset LastAccess { get; set; } + } + } +}
\ No newline at end of file diff --git a/Software/Visual_Studio/Utilities/Tango.UITests/Tango.UITests.csproj b/Software/Visual_Studio/Utilities/Tango.UITests/Tango.UITests.csproj index 7daf19294..87643ac2b 100644 --- a/Software/Visual_Studio/Utilities/Tango.UITests/Tango.UITests.csproj +++ b/Software/Visual_Studio/Utilities/Tango.UITests/Tango.UITests.csproj @@ -99,6 +99,7 @@ </Compile> </ItemGroup> <ItemGroup> + <Compile Include="MyMemoryCache.cs" /> <Compile Include="Properties\AssemblyInfo.cs"> <SubType>Code</SubType> </Compile> @@ -182,7 +183,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/Web/Tango.MachineService/Controllers/DownloadsController.cs b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/DownloadsController.cs index ecdbf662c..a46cab3c2 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/DownloadsController.cs +++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/DownloadsController.cs @@ -3,9 +3,19 @@ using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; +using Tango.BL; using Tango.MachineService.Filters; using Tango.MachineService.Models; using Tango.MachineService.Views.Downloads; +using Tango.Web.Helpers; +using System.Data.Entity; +using Tango.Web.Storage; +using System.IO; +using Microsoft.WindowsAzure.Storage.Blob; +using System.Net.Http; +using System.Net; +using System.Net.Http.Headers; +using System.Net.Mime; namespace Tango.MachineService.Controllers { @@ -15,18 +25,40 @@ namespace Tango.MachineService.Controllers public ActionResult Index() { List<DownloadModel> downloads = new List<DownloadModel>(); - for (int i = 0; i < 10; i++) + + using (ObservablesContext db = ObservablesContextHelper.CreateContext()) { - downloads.Add(new DownloadModel() + foreach (var item in db.MachineStudioVersions.Where(x => x.InstallerBlobName != null).Include(x => x.User).Include(x => x.User.Contact).ToList()) + { + DownloadModel download = new DownloadModel(); + download.App = DownloadModel.DownloadApp.MachineStudio; + download.ID = item.InstallerBlobName; + download.Name = $"Machine Studio v{item.Version}.exe"; + download.Version = item.Version; + download.User = item.User.Contact.FullName; + download.Date = item.LastUpdated; + download.Comments = item.Comments; + + downloads.Add(download); + } + + foreach (var item in db.TangoVersions.Where(x => x.InstallerBlobName != null).Include(x => x.User).Include(x => x.User.Contact).ToList()) { - Name = "Downloads " + i, - Comments = "Some comments...\nWith a new line", - Date = DateTime.Now.ToString(), - User = "Roy", - ID = i.ToString(), - }); + DownloadModel download = new DownloadModel(); + download.App = DownloadModel.DownloadApp.PPC; + download.ID = item.InstallerBlobName; + download.Name = $"PPC v{item.Version}.exe"; + download.Version = item.Version; + download.User = item.User.Contact.FullName; + download.Date = item.LastUpdated; + download.Comments = item.Comments; + + downloads.Add(download); + } } + downloads = downloads.OrderByDescending(x => x.Date).ToList(); + IndexViewModel model = new IndexViewModel(); model.Downloads = downloads; @@ -34,9 +66,24 @@ namespace Tango.MachineService.Controllers } [Authorize] - public ActionResult Download(String id) + public ActionResult Download(String blobName, DownloadModel.DownloadApp downloadApp) { - return File(new byte[] { 25, 255, 255 }, System.Net.Mime.MediaTypeNames.Application.Octet,"Machine Studio v1.0.exe"); + CloudBlobContainer container = null; + + var manager = new BlobStorageManager(); + + if (downloadApp == DownloadModel.DownloadApp.MachineStudio) + { + container = manager.GetContainer(MachineServiceConfig.MACHINE_STUDIO_VERSIONS_CONTAINER); + } + else + { + container = manager.GetContainer(MachineServiceConfig.TANGO_VERSIONS_CONTAINER); + } + + var blob = container.GetBlockBlobReference(blobName); + var signature = blob.GenerateReadSignature(TimeSpan.FromMinutes(10)); + return Redirect(signature); } } }
\ No newline at end of file diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs index a2016d4e0..a2c761824 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs +++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs @@ -65,7 +65,6 @@ namespace Tango.MachineService.Controllers using (ObservablesContext db = ObservablesContextHelper.CreateContext()) { - db.Configuration.LazyLoadingEnabled = false; String machine_guid = RequestToken.Object.MachineGuid; var machine = db.Machines.SingleOrDefault(x => x.Guid == machine_guid); diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Global.asax.cs b/Software/Visual_Studio/Web/Tango.MachineService/Global.asax.cs index 56561e4ce..07d1514eb 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Global.asax.cs +++ b/Software/Visual_Studio/Web/Tango.MachineService/Global.asax.cs @@ -21,6 +21,8 @@ namespace Tango.MachineService FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); + + GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; } } } diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Images/machine-studio.png b/Software/Visual_Studio/Web/Tango.MachineService/Images/machine-studio.png Binary files differnew file mode 100644 index 000000000..fb9a19df9 --- /dev/null +++ b/Software/Visual_Studio/Web/Tango.MachineService/Images/machine-studio.png diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Images/ppc.png b/Software/Visual_Studio/Web/Tango.MachineService/Images/ppc.png Binary files differnew file mode 100644 index 000000000..71bf61871 --- /dev/null +++ b/Software/Visual_Studio/Web/Tango.MachineService/Images/ppc.png diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Models/DownloadModel.cs b/Software/Visual_Studio/Web/Tango.MachineService/Models/DownloadModel.cs index 4239647e9..b13f5c66f 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Models/DownloadModel.cs +++ b/Software/Visual_Studio/Web/Tango.MachineService/Models/DownloadModel.cs @@ -7,10 +7,18 @@ namespace Tango.MachineService.Models { public class DownloadModel { + public DownloadApp App { get; set; } public String ID { get; set; } public String Name { get; set; } - public String Date { get; set; } + public String Version { get; set; } + public DateTime Date { get; set; } public String User { get; set; } public String Comments { get; set; } + + public enum DownloadApp + { + MachineStudio, + PPC, + } } }
\ No newline at end of file diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Scripts/Account/Login.js b/Software/Visual_Studio/Web/Tango.MachineService/Scripts/Account/Login.js index fbb21c935..3354a5423 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Scripts/Account/Login.js +++ b/Software/Visual_Studio/Web/Tango.MachineService/Scripts/Account/Login.js @@ -14,6 +14,10 @@ document.getElementById("go").className = ""; document.getElementById("go").value = "Initializing..."; + $('#accesspanel').css("cursor", "wait"); + $("#go").attr("disabled", true); + $('#go').css("cursor", "wait"); + $.ajax({ type: "POST", url: "Login", @@ -34,6 +38,10 @@ document.getElementById("go").className = ""; document.getElementById("go").value = "Authorize"; + $('#accesspanel').css("cursor", "auto"); + $("#go").attr("disabled", false); + $('#go').css("cursor", "auto"); + }, 1500); }, }); diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Styles/Account.css b/Software/Visual_Studio/Web/Tango.MachineService/Styles/Account.css index df8409941..996505be4 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Styles/Account.css +++ b/Software/Visual_Studio/Web/Tango.MachineService/Styles/Account.css @@ -10,25 +10,20 @@ text-shadow: none; } -html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { border: 0; - font: inherit; - font-size: 100%; + /*font: inherit;*/ + margin: 0; padding: 0; vertical-align: baseline; text-rendering: optimizeLegibility; } -article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { +article, aside, details, figcaption, figure, footer, hgroup, menu, nav, section { display: block; } -* { - box-sizing: border-box; - cursor: default; - outline: none; -} form { background: #111; diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Styles/Downloads.css b/Software/Visual_Studio/Web/Tango.MachineService/Styles/Downloads.css index c8ad359e7..c458f0fef 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Styles/Downloads.css +++ b/Software/Visual_Studio/Web/Tango.MachineService/Styles/Downloads.css @@ -13,8 +13,6 @@ body { font-family: 'Open Sans', sans-serif; - font-weight: 300; - line-height: 1.42em; color: #A7A1AE; } @@ -22,14 +20,12 @@ h1 { font-size: 3em; font-weight: 300; line-height: 1em; - text-align: center; color: #4DC3FA; } h2 { font-size: 1em; font-weight: 300; - text-align: center; display: block; line-height: 1em; padding-bottom: 2em; @@ -61,10 +57,8 @@ h2 { .container td { font-weight: normal; font-size: 1em; - -webkit-box-shadow: 0 2px 2px -2px #0E1119; - -moz-box-shadow: 0 2px 2px -2px #0E1119; - box-shadow: 0 2px 2px -2px #0E1119; - white-space:pre-wrap; + border: none; + text-align: left; } .container { @@ -75,6 +69,7 @@ h2 { display: table; margin-top: 50px; padding: 0 0 8em 0; + border-spacing: 0px; } .container td, .container th { @@ -90,7 +85,7 @@ h2 { /* Background-color of the even rows */ .container tr:nth-child(even) { - background-color: #363636; + background-color: #2B2B2B; } .container th { diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Styles/Layout.css b/Software/Visual_Studio/Web/Tango.MachineService/Styles/Layout.css index e15532c9d..b572ea5b9 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Styles/Layout.css +++ b/Software/Visual_Studio/Web/Tango.MachineService/Styles/Layout.css @@ -4,6 +4,8 @@ html, body { height: 100%; margin: 0; padding: 0; + font-weight: 300; + line-height: 1.42em; } body { @@ -11,7 +13,6 @@ body { color: #FFF; font-family: "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; font-size: 12px; - line-height: 1; } .header { @@ -23,20 +24,19 @@ body { filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ceff', endColorstr='#00a9d8',GradientType=0 ); /* IE6-9 */ padding: 20px; box-shadow: White 0px 0px 10px; - - position:relative; + position: relative; + height: 120px; } -#imgLogo -{ - height:120px; +#imgLogo { + height: 120px; } #txtLogo { font-family: 'Audiowide'; position: absolute; top: 45%; - margin-left: 30px; + margin-left: 180px; font-size: 32pt; color: black; } @@ -45,3 +45,9 @@ a { color: white; text-decoration: none; /* no underline */ } + +#linkLogout { + color: black; + font-weight: bold; + font-family: 'Audiowide'; +} diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj b/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj index 4d1826cc9..26efcf7c0 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj +++ b/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj @@ -305,6 +305,8 @@ <Content Include="ApplicationInsights.config"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Images\ppc.png" /> + <Content Include="Images\machine-studio.png" /> <Content Include="Images\machine.png" /> <Content Include="Scripts\Account\Login.js" /> <Content Include="Scripts\bootstrap.js" /> @@ -411,7 +413,7 @@ <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile> </WebProjectProperties> </FlavorProperties> - <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> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Views/Downloads/Index.cshtml b/Software/Visual_Studio/Web/Tango.MachineService/Views/Downloads/Index.cshtml index 92590521d..044daaaa2 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Views/Downloads/Index.cshtml +++ b/Software/Visual_Studio/Web/Tango.MachineService/Views/Downloads/Index.cshtml @@ -8,6 +8,7 @@ <table class="container"> <thead> <tr> + <th><h1></h1></th> <th><h1>Name</h1></th> <th><h1>Date</h1></th> <th><h1>User</h1></th> @@ -18,8 +19,18 @@ @foreach (var item in Model.Downloads) { <tr> + <td width="100"> + @if (item.App == Tango.MachineService.Models.DownloadModel.DownloadApp.MachineStudio) + { + <img src="~/Images/machine-studio.png" width="50" /> + } + else + { + <img src="~/Images/ppc.png" width="50" /> + } + </td> <td> - <a href="/Downloads/Download?id=@item.ID">@item.Name</a> + <a style="display:inline" href="/Downloads/Download?blobName=@item.ID&downloadApp=@item.App">@item.Name</a> </td> <td>@item.Date</td> <td>@item.User</td> diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Views/Shared/_Layout.cshtml b/Software/Visual_Studio/Web/Tango.MachineService/Views/Shared/_Layout.cshtml index c6448159f..44deb25b0 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Views/Shared/_Layout.cshtml +++ b/Software/Visual_Studio/Web/Tango.MachineService/Views/Shared/_Layout.cshtml @@ -13,11 +13,20 @@ <body> <header class="header"> - <img id="imgLogo" src="~/Images/machine.png" /> - <span id="txtLogo">MACHINE SERVICE</span> + <div style="float:left"> + <img id="imgLogo" src="~/Images/machine.png" /> + <span id="txtLogo">MACHINE SERVICE</span> + </div> + + @if (HttpContext.Current.User.Identity.IsAuthenticated) + { + <div style="float:right;position:relative"> + <a id="linkLogout" href="/Account/Logout">LOG OUT</a> + </div> + } </header> - <div class="container body-content"> + <div> @RenderBody() </div> @Scripts.Render("~/bundles/jquery") diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Web.config b/Software/Visual_Studio/Web/Tango.MachineService/Web.config index 4a694f320..58a8c48af 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Web.config +++ b/Software/Visual_Studio/Web/Tango.MachineService/Web.config @@ -48,7 +48,17 @@ <authentication mode="Forms"> <forms defaultUrl="/Downloads/Index" loginUrl="/Account/Login" slidingExpiration="true" timeout="30"></forms> </authentication> + + <customErrors mode="On"/> </system.web> + + <!-- Override it for paths starting with api (your WebAPI) --> + <location path="api"> + <system.web> + <customErrors mode="Off" /> + </system.web> + </location> + <system.webServer> <handlers> <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> |
