diff options
| author | Mirta <mirta@twine-s.com> | 2020-12-30 16:39:52 +0200 |
|---|---|---|
| committer | Mirta <mirta@twine-s.com> | 2020-12-30 16:39:52 +0200 |
| commit | 00a491d93733d4625ad329b2ba8237f445364b3f (patch) | |
| tree | 4b24c6fa78d7648f4bb7cefafa464bb0b063fec4 /Software/Visual_Studio/MachineStudio | |
| parent | 124ad4150f80c6846fdee41dbbda9848c105f6e5 (diff) | |
| download | Tango-00a491d93733d4625ad329b2ba8237f445364b3f.tar.gz Tango-00a491d93733d4625ad329b2ba8237f445364b3f.zip | |
merge
Diffstat (limited to 'Software/Visual_Studio/MachineStudio')
244 files changed, 1543 insertions, 12457 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/DispenserView.xaml b/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/DispenserView.xaml index e0f93df5a..977ab865a 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/DispenserView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/MachineStudio.Dispensers/Views/DispenserView.xaml @@ -19,7 +19,7 @@ <Grid DockPanel.Dock="Top"> <StackPanel Orientation="Horizontal"> <Button Style="{StaticResource MaterialDesignFlatButton}" Height="Auto" Command="{Binding BackToDispensersCommand}"> - <materialDesign:PackIcon Kind="ArrowLeft" Width="50" Height="50" Foreground="{StaticResource DarkGrayBrush200}" ToolTip="Back to RML list" /> + <materialDesign:PackIcon Kind="ArrowLeft" Width="50" Height="50" Foreground="#202020" ToolTip="Back to RML list" /> </Button> <TextBlock VerticalAlignment="Center" Margin="10 0 0 0" FontSize="34"> <Run>DISPENSER</Run> @@ -51,9 +51,9 @@ <TextBox Text="{Binding ActiveDispenser.SerialNumber}"></TextBox> <TextBlock FontWeight="SemiBold">Dispenser Type:</TextBlock> - <ComboBox ItemsSource="{Binding DispenserTypes}" SelectedItem="{Binding ActiveDispenser.DispenserType}" DisplayMemberPath="Name" Style="{StaticResource TransparentComboBoxStyle}" ></ComboBox> + <ComboBox ItemsSource="{Binding DispenserTypes}" SelectedItem="{Binding ActiveDispenser.DispenserType}" DisplayMemberPath="Name"></ComboBox> - <TextBlock FontWeight="SemiBold">Nanoliter / Pulse:</TextBlock> + <TextBlock FontWeight="SemiBold">Nanoliter / Pulse:</TextBlock> <mahapps:NumericUpDown HorizontalContentAlignment="Left" HasDecimals="True" BorderThickness="0 0 0 1" Background="Transparent" Minimum="0" Maximum="5" Value="{Binding ActiveDispenser.NlPerPulse}"></mahapps:NumericUpDown> <TextBlock FontWeight="SemiBold">Part Number:</TextBlock> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ActionLogsModule.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ActionLogsModule.cs deleted file mode 100644 index 3a9dcdfaa..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ActionLogsModule.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Media.Imaging; -using Tango.BL.Enumerations; -using Tango.MachineStudio.Common; -using Tango.MachineStudio.ActionLogs.Views; -using Tango.SharedUI.Helpers; - -namespace Tango.MachineStudio.ActionLogs -{ - [StudioModule(21)] - public class ActionLogsModule : StudioModuleBase - { - public override string Name - { - get - { - return "Action Logs"; - } - } - - public override string Description - { - get - { - return "Monitor and track changes made to Twine's global datasets."; - } - } - - public override BitmapSource Image - { - get - { - return ResourceHelper.GetImageFromResources("Images/action_logs.jpg"); - } - } - - public override Type MainViewType - { - get - { - return typeof(MainView); - } - } - - public override Permissions Permission - { - get - { - return Permissions.RunMachineStudio; - } - } - - public override void Dispose() - { - - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/App.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/App.xaml deleted file mode 100644 index 3ab646c7c..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/App.xaml +++ /dev/null @@ -1,12 +0,0 @@ -<Application x:Class="Tango.MachineStudio.ActionLogs.App" - xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> - <Application.Resources> - <ResourceDictionary> - <ResourceDictionary.MergedDictionaries> - <ResourceDictionary Source="pack://application:,,,/Tango.MachineStudio.Common;component/Resources/MaterialDesign.xaml" /> - <ResourceDictionary Source="pack://application:,,,/Tango.MachineStudio.Common;component/Themes/LightThemeColors.xaml" /> - </ResourceDictionary.MergedDictionaries> - </ResourceDictionary> - </Application.Resources> -</Application>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Images/action_logs.jpg b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Images/action_logs.jpg Binary files differdeleted file mode 100644 index 75f39c09c..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Images/action_logs.jpg +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Images/actionlogs_title.png b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Images/actionlogs_title.png Binary files differdeleted file mode 100644 index 299c14c6d..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Images/actionlogs_title.png +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/AssemblyInfo.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/AssemblyInfo.cs deleted file mode 100644 index 072265a74..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Reflection; -using System.Resources; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Windows; - -[assembly: AssemblyTitle("Tango - Machine Studio Action Logs Module")] -[assembly: AssemblyVersion("1.0.0.1737")] - -[assembly: ComVisible(false)] - -[assembly: ThemeInfo( - ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located - //(used if a resource is not found in the page, - // or application resource dictionaries) - ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located - //(used if a resource is not found in the page, - // app, or any theme specific resource dictionaries) -)] diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.Designer.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.Designer.cs deleted file mode 100644 index 796a67686..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.Designer.cs +++ /dev/null @@ -1,71 +0,0 @@ -//------------------------------------------------------------------------------ -// <auto-generated> -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// </auto-generated> -//------------------------------------------------------------------------------ - -namespace Tango.MachineStudio.ActionLogs.Properties -{ - - - /// <summary> - /// A strongly-typed resource class, for looking up localized strings, etc. - /// </summary> - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources - { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() - { - } - - /// <summary> - /// Returns the cached ResourceManager instance used by this class. - /// </summary> - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager - { - get - { - if ((resourceMan == null)) - { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Tango.MachineStudio.ActionLogs.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// <summary> - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// </summary> - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture - { - get - { - return resourceCulture; - } - set - { - resourceCulture = value; - } - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.resx b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.resx deleted file mode 100644 index af7dbebba..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<root> - <!-- - Microsoft ResX Schema - - Version 2.0 - - The primary goals of this format is to allow a simple XML format - that is mostly human readable. The generation and parsing of the - various data types are done through the TypeConverter classes - associated with the data types. - - Example: - - ... ado.net/XML headers & schema ... - <resheader name="resmimetype">text/microsoft-resx</resheader> - <resheader name="version">2.0</resheader> - <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> - <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> - <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> - <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> - <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> - <value>[base64 mime encoded serialized .NET Framework object]</value> - </data> - <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> - <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> - <comment>This is a comment</comment> - </data> - - There are any number of "resheader" rows that contain simple - name/value pairs. - - Each data row contains a name, and value. The row also contains a - type or mimetype. Type corresponds to a .NET class that support - text/value conversion through the TypeConverter architecture. - Classes that don't support this are serialized and stored with the - mimetype set. - - The mimetype is used for serialized objects, and tells the - ResXResourceReader how to depersist the object. This is currently not - extensible. For a given mimetype the value must be set accordingly: - - Note - application/x-microsoft.net.object.binary.base64 is the format - that the ResXResourceWriter will generate, however the reader can - read any of the formats listed below. - - mimetype: application/x-microsoft.net.object.binary.base64 - value : The object must be serialized with - : System.Serialization.Formatters.Binary.BinaryFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.soap.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Soap.SoapFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.bytearray.base64 - value : The object must be serialized into a byte array - : using a System.ComponentModel.TypeConverter - : and then encoded with base64 encoding. - --> - <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> - <xsd:element name="root" msdata:IsDataSet="true"> - <xsd:complexType> - <xsd:choice maxOccurs="unbounded"> - <xsd:element name="metadata"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" /> - <xsd:attribute name="type" type="xsd:string" /> - <xsd:attribute name="mimetype" type="xsd:string" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="assembly"> - <xsd:complexType> - <xsd:attribute name="alias" type="xsd:string" /> - <xsd:attribute name="name" type="xsd:string" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="data"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> - <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> - <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="resheader"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" /> - </xsd:complexType> - </xsd:element> - </xsd:choice> - </xsd:complexType> - </xsd:element> - </xsd:schema> - <resheader name="resmimetype"> - <value>text/microsoft-resx</value> - </resheader> - <resheader name="version"> - <value>2.0</value> - </resheader> - <resheader name="reader"> - <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> - <resheader name="writer"> - <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> -</root>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.Designer.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.Designer.cs deleted file mode 100644 index 507ac539d..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.Designer.cs +++ /dev/null @@ -1,30 +0,0 @@ -//------------------------------------------------------------------------------ -// <auto-generated> -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// </auto-generated> -//------------------------------------------------------------------------------ - -namespace Tango.MachineStudio.ActionLogs.Properties -{ - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { - return defaultInstance; - } - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.settings b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.settings deleted file mode 100644 index 033d7a5e9..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> -<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)"> - <Profiles> - <Profile Name="(Default)" /> - </Profiles> - <Settings /> -</SettingsFile>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj deleted file mode 100644 index de4783237..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Tango.MachineStudio.ActionLogs.csproj +++ /dev/null @@ -1,163 +0,0 @@ -<?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>{447ECB9F-F730-47D6-8DF8-D232BF4A0315}</ProjectGuid> - <OutputType>library</OutputType> - <RootNamespace>Tango.MachineStudio.ActionLogs</RootNamespace> - <AssemblyName>Tango.MachineStudio.ActionLogs</AssemblyName> - <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> - <FileAlignment>512</FileAlignment> - <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> - <WarningLevel>4</WarningLevel> - <Deterministic>true</Deterministic> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>..\..\..\Build\Machine Studio\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\Machine Studio\Release\</OutputPath> - <DefineConstants>TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <ItemGroup> - <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> - <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll</HintPath> - </Reference> - <Reference Include="Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll</HintPath> - </Reference> - <Reference Include="MahApps.Metro, Version=1.5.0.23, Culture=neutral, PublicKeyToken=f4fb5a3c4d1e5b4f, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\MahApps.Metro.1.5.0\lib\net45\MahApps.Metro.dll</HintPath> - </Reference> - <Reference Include="MaterialDesignColors, Version=1.1.2.0, Culture=neutral, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\MaterialDesignColors.1.1.2\lib\net45\MaterialDesignColors.dll</HintPath> - </Reference> - <Reference Include="MaterialDesignThemes.Wpf, Version=2.3.1.953, Culture=neutral, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\MaterialDesignThemes.2.3.1.953\lib\net45\MaterialDesignThemes.Wpf.dll</HintPath> - </Reference> - <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> - </Reference> - <Reference Include="System" /> - <Reference Include="System.ComponentModel.DataAnnotations" /> - <Reference Include="System.Data" /> - <Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\MahApps.Metro.1.5.0\lib\net45\System.Windows.Interactivity.dll</HintPath> - </Reference> - <Reference Include="System.Xml" /> - <Reference Include="Microsoft.CSharp" /> - <Reference Include="System.Core" /> - <Reference Include="System.Xml.Linq" /> - <Reference Include="System.Data.DataSetExtensions" /> - <Reference Include="System.Net.Http" /> - <Reference Include="System.Xaml"> - <RequiredTargetFramework>4.0</RequiredTargetFramework> - </Reference> - <Reference Include="WindowsBase" /> - <Reference Include="PresentationCore" /> - <Reference Include="PresentationFramework" /> - </ItemGroup> - <ItemGroup> - <Compile Include="..\..\..\Versioning\GlobalVersionInfo.cs"> - <Link>GlobalVersionInfo.cs</Link> - </Compile> - <Compile Include="ViewModelLocator.cs" /> - <Compile Include="ViewModels\MainViewVM.cs" /> - <Compile Include="Views\MainView.xaml.cs"> - <DependentUpon>MainView.xaml</DependentUpon> - </Compile> - <Compile Include="ActionLogsModule.cs" /> - <Page Include="App.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - <Page Include="Views\MainView.xaml"> - <SubType>Designer</SubType> - <Generator>MSBuild:Compile</Generator> - </Page> - </ItemGroup> - <ItemGroup> - <Compile Include="Properties\AssemblyInfo.cs"> - <SubType>Code</SubType> - </Compile> - <Compile Include="Properties\Resources.Designer.cs"> - <AutoGen>True</AutoGen> - <DesignTime>True</DesignTime> - <DependentUpon>Resources.resx</DependentUpon> - </Compile> - <Compile Include="Properties\Settings.Designer.cs"> - <AutoGen>True</AutoGen> - <DependentUpon>Settings.settings</DependentUpon> - <DesignTimeSharedInput>True</DesignTimeSharedInput> - </Compile> - <EmbeddedResource Include="Properties\Resources.resx"> - <Generator>ResXFileCodeGenerator</Generator> - <LastGenOutput>Resources.Designer.cs</LastGenOutput> - </EmbeddedResource> - <None Include="app.config" /> - <None Include="packages.config" /> - <None Include="Properties\Settings.settings"> - <Generator>SettingsSingleFileGenerator</Generator> - <LastGenOutput>Settings.Designer.cs</LastGenOutput> - </None> - </ItemGroup> - <ItemGroup> - <Resource Include="Images\actionlogs_title.png" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\..\..\Tango.BL\Tango.BL.csproj"> - <Project>{f441feee-322a-4943-b566-110e12fd3b72}</Project> - <Name>Tango.BL</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Core\Tango.Core.csproj"> - <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project> - <Name>Tango.Core</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Integration\Tango.Integration.csproj"> - <Project>{4206ac58-3b57-4699-8835-90bf6db01a61}</Project> - <Name>Tango.Integration</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Logging\Tango.Logging.csproj"> - <Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project> - <Name>Tango.Logging</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Settings\Tango.Settings.csproj"> - <Project>{d8f1ad85-526a-4f50-b6dc-d437af63d8d8}</Project> - <Name>Tango.Settings</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.SharedUI\Tango.SharedUI.csproj"> - <Project>{8491D07B-C1F6-4B62-A412-41B9FD2D6538}</Project> - <Name>Tango.SharedUI</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Transport\Tango.Transport.csproj"> - <Project>{74e700b0-1156-4126-be40-ee450d3c3026}</Project> - <Name>Tango.Transport</Name> - </ProjectReference> - <ProjectReference Include="..\..\Tango.MachineStudio.Common\Tango.MachineStudio.Common.csproj"> - <Project>{cb0b0aa2-bb24-4bca-a720-45e397684e12}</Project> - <Name>Tango.MachineStudio.Common</Name> - </ProjectReference> - </ItemGroup> - <ItemGroup> - <Resource Include="Images\action_logs.jpg" /> - </ItemGroup> - <ItemGroup> - <Folder Include="Models\" /> - </ItemGroup> - <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> -</Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModelLocator.cs deleted file mode 100644 index 29540fa86..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModelLocator.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.Core.DI; -using Tango.MachineStudio.ActionLogs.ViewModels; - -namespace Tango.MachineStudio.ActionLogs -{ - public static class ViewModelLocator - { - /// <summary> - /// Initializes a new instance of the ViewModelLocator class. - /// </summary> - static ViewModelLocator() - { - TangoIOC.Default.Register<MainViewVM>(); - } - - public static MainViewVM MainViewVM - { - get - { - return TangoIOC.Default.GetInstance<MainViewVM>(); - } - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs deleted file mode 100644 index 3e5c59fee..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/ViewModels/MainViewVM.cs +++ /dev/null @@ -1,290 +0,0 @@ - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Data.Entity; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using Tango.BL; -using Tango.BL.Builders; -using Tango.BL.Entities; -using Tango.BL.Enumerations; -using Tango.BL.ValueObjects; -using Tango.Core.Commands; -using Tango.Core.ExtensionMethods; -using Tango.MachineStudio.Common; -using Tango.MachineStudio.Common.Notifications; -using Tango.SharedUI.Components; - -namespace Tango.MachineStudio.ActionLogs.ViewModels -{ - public class MainViewVM : StudioViewModel - { - private INotificationProvider _notification; - private List<User> _allUsers; - - #region Properties - - private DateTime _startSelectedDate; - public DateTime StartSelectedDate - { - get { return _startSelectedDate; } - set { _startSelectedDate = value; RaisePropertyChangedAuto(); } - } - - private DateTime _endSelectedDate; - public DateTime EndSelectedDate - { - get { return _endSelectedDate; } - set { _endSelectedDate = value; RaisePropertyChangedAuto(); } - } - - private string _searchFilter; - public string SearchFilter - { - get { return _searchFilter; } - set { _searchFilter = value; RaisePropertyChangedAuto(); } - } - - private ObservableCollection<ActionLog> _actionLogs; - public ObservableCollection<ActionLog> ActionLogs - { - get { return _actionLogs; } - set { _actionLogs = value; RaisePropertyChanged(nameof(ActionLogs)); } - } - - private SelectedObjectCollection<ActionLogType> _selectedActionLogTypes; - public SelectedObjectCollection<ActionLogType> SelectedActionLogTypes - { - get { return _selectedActionLogTypes; } - set - { - _selectedActionLogTypes = value; - RaisePropertyChanged(nameof(SelectedActionLogTypes)); - } - } - - private ActionLog _selectedActionLog = null; - public ActionLog SelectedActionLog - { - get { return _selectedActionLog; } - set - { - _selectedActionLog = value; - SelectedItemChanged(); - RaisePropertyChangedAuto(); - InvalidateRelayCommands(); - } - } - - private ActionLogDifference _differenceObject; - public ActionLogDifference DifferenceObject - { - get { return _differenceObject; } - set { _differenceObject = value; RaisePropertyChangedAuto(); } - } - - private bool _isLoading; - - public bool IsLoading - { - get { return _isLoading; } - set { _isLoading = value; RaisePropertyChangedAuto(); } - } - - private bool _isLoadingDifferences; - - public bool IsLoadingDifferences - { - get { return _isLoadingDifferences; } - set { _isLoadingDifferences = value; RaisePropertyChangedAuto(); } - } - - - - - #endregion - - public RelayCommand SearchCommand { get; set; } - public RelayCommand CopyToClipBoardCommand { get; set; } - public RelayCommand CopyRelateObjectIDCommand { get; set; } - - public MainViewVM(INotificationProvider notification) - { - _notification = notification; - - IsLoading = false; - IsLoadingDifferences = false; - ActionLogs = new ObservableCollection<ActionLog>(); - SearchCommand = new RelayCommand(async () => await GetActionLogs(), () => IsFree); - CopyRelateObjectIDCommand = new RelayCommand(CopyRelateObjectID); - CopyToClipBoardCommand = new RelayCommand(CopyToClipBoard, () => SelectedActionLog != null && SelectedActionLog.DifferenceObject != null); - DateTime now = DateTime.Now; - StartSelectedDate = now.AddMonths(-1); - EndSelectedDate = now; - var source = Enum.GetValues(typeof(ActionLogType)).Cast<ActionLogType>().ToObservableCollection(); - var syncedSource = Enum.GetValues(typeof(ActionLogType)).Cast<ActionLogType>().ToObservableCollection(); - - SelectedActionLogTypes = new SelectedObjectCollection<ActionLogType>(source, syncedSource); - } - - public override void OnApplicationReady() - { - InitUsers(); - } - public async void InitUsers() - { - try - { - IsFree = false; - - using (var db = ObservablesContext.CreateDefault()) - { - - _allUsers = await db.Users.Include(x => x.Contact).ToListAsync(); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error loading users."); - } - finally - { - IsFree = true; - } - } - - private void CopyToClipBoard() - { - DataObject data = new DataObject(SelectedActionLog.DifferenceObject.ToJsonString()); - System.Windows.Clipboard.SetDataObject(data); - - } - private void CopyRelateObjectID() - { - DataObject data = new DataObject(SelectedActionLog.RelatedObjectGuid); - System.Windows.Clipboard.SetDataObject(data); - } - - /// <summary> - /// New Database Query with search parameters. Initialization ActionLogs property. - /// </summary> - private async Task GetActionLogs() - { - IsLoading = true; - string filter = SearchFilter?.ToLower(); - - if (String.IsNullOrWhiteSpace(filter)) filter = null; - - try - { - IsFree = false; - - using (ObservablesContext db = ObservablesContext.CreateDefault()) - { - DateTime startUtc = new DateTime(StartSelectedDate.Year, StartSelectedDate.Month, StartSelectedDate.Day, 0, 0, 0).ToUniversalTime(); - TimeSpan offsetTime = (EndSelectedDate.Date == DateTime.Now.Date) ? DateTime.Now.TimeOfDay : new TimeSpan(23, 59, 59); - DateTime endUtc = EndSelectedDate.ToUniversalTime() + offsetTime; - - Debug.Write($"TEST TIME {startUtc} to {endUtc} "+ System.Environment.NewLine); - - var db_ActionLogs = db.ActionLogs.Where(x => x.LastUpdated <= endUtc && x.LastUpdated >= startUtc) - .Select(x => new - { - x.ID, - x.Guid, - x.UserGuid, - x.LastUpdated, - x.Type, - x.RelatedObjectName, - x.RelatedObjectGuid, - x.Message - }); - - int[] actionTypes = SelectedActionLogTypes.SynchedSource.ToArray().Select(x => (int)x).ToArray(); - if (actionTypes.Length > 0) - { - db_ActionLogs = db_ActionLogs.Where(x => actionTypes.Contains(x.Type)); - } - - var runs_db = await db_ActionLogs.ToListAsync(); - var runs = runs_db.Select(x => new ActionLog() - { - ID = x.ID, - Guid = x.Guid, - UserGuid = x.UserGuid, - LastUpdated = x.LastUpdated, - Type = x.Type, - RelatedObjectName = x.RelatedObjectName, - RelatedObjectGuid = x.RelatedObjectGuid, - Message = x.Message, - User = _allUsers.SingleOrDefault(y => y.Guid == x.UserGuid) - }); - - if (!String.IsNullOrEmpty(filter)) - { - runs = runs.Where(x => x.ID.ToString().ToLower().StartsWith(filter) || (x.RelatedObjectName != null && x.RelatedObjectName.ToLower().StartsWith(filter)) - || (x.RelatedObjectGuid != null && x.RelatedObjectGuid.ToLower().StartsWith(filter)) - || (x.User != null && x.User.Contact != null && x.User.Contact.FullName.ToLower().StartsWith(filter))); - } - ActionLogs = runs.ToObservableCollection(); - } - } - catch (Exception ex) - { - IsFree = true; - LogManager.Log(ex, "Error getting action logs."); - _notification.ShowError($"Error occurred while trying to retrieve the action logs.\n{ex.Message}"); - } - finally - { - IsFree = true; - IsLoading = false; - } - } - - /// <summary> - /// Update DifferenceObject on Selected item changed - /// </summary> - private async void SelectedItemChanged() - { - if (SelectedActionLog == null) - return; - if (SelectedActionLog.Difference == null) - { - await InitSelectedActionLogDifference(); - } - DifferenceObject = SelectedActionLog.DifferenceObject; - } - - /// <summary> - /// Initializes the selected action log difference. - /// </summary> - public async Task InitSelectedActionLogDifference() - { - IsLoadingDifferences = true; - try - { - using (var db = ObservablesContext.CreateDefault()) - { - var difference = await db.ActionLogs.SingleOrDefaultAsync(x => x.Guid.Equals(SelectedActionLog.Guid)); - if (difference != null) - { - SelectedActionLog.DifferenceObject = difference.DifferenceObject; - } - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error loading difference of the selected action log."); - } - finally - { - IsLoadingDifferences = false; - } - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml deleted file mode 100644 index 146735eaa..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml +++ /dev/null @@ -1,317 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.ActionLogs.Views.MainView" - 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:mahapps="http://metro.mahapps.com/winfx/xaml/controls" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:sharedConverters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" - xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" - xmlns:vm="clr-namespace:Tango.MachineStudio.ActionLogs.ViewModels" - xmlns:global="clr-namespace:Tango.MachineStudio.ActionLogs" - xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf;assembly=MaterialDesignThemes.Wpf" - xmlns:diff="clr-namespace:Tango.BL.ValueObjects;assembly=Tango.BL" - xmlns:local="clr-namespace:Tango.MachineStudio.ActionLogs.Views" - 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}"> - <UserControl.Resources> - <sharedConverters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> - <sharedConverters:EnumToDescriptionConverter x:Key="EnumToDescriptionConverter" /> - <sharedConverters:DateTimeUTCToShortDateTimeConverter x:Key="DateTimeUTCToShortDateTimeConverter"/> - </UserControl.Resources> - <Grid IsEnabled="{Binding IsFree}"> - <Grid.RowDefinitions> - <RowDefinition Height="200"/> - <RowDefinition Height="1*"/> - </Grid.RowDefinitions> - <Grid Margin="40"> - <StackPanel Orientation="Horizontal"> - <Image Source="../Images/actionlogs_title.png" RenderOptions.BitmapScalingMode="Fant"></Image> - <StackPanel Margin="20 0 0 0" VerticalAlignment="Center"> - <TextBlock FontSize="50">Action Logs</TextBlock> - <TextBlock>Select start/end dates and action log types to trace system changes.</TextBlock> - </StackPanel> - </StackPanel> - </Grid> - <Grid Grid.Row="1" Margin="40 0 40 40"> - <Grid.RowDefinitions> - <RowDefinition Height="70"/> - <RowDefinition Height="1*"/> - </Grid.RowDefinitions> - <Grid.ColumnDefinitions> - <ColumnDefinition Width ="7*"/> - <ColumnDefinition Width ="3*"/> - </Grid.ColumnDefinitions > - - <Grid x:Name ="searchButtons" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Stretch"> - <Border Padding="14 14 12 14" BorderBrush="DimGray" BorderThickness="0" Background="{StaticResource Logging.Background}" HorizontalAlignment="Stretch" CornerRadius="2" > - <Border.Effect> - <DropShadowEffect ShadowDepth="4" BlurRadius="10" Opacity="0.5"/> - </Border.Effect> - <DockPanel> - <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Orientation="Horizontal"> - <StackPanel > - <TextBlock FontSize="10">Start Date:</TextBlock> - <DatePicker x:Name="startdatePicker" SelectedDate="{Binding StartSelectedDate}" materialDesign:HintAssist.Hint="Pick start date" Width="160" VerticalAlignment="Center" FontSize="16" /> - </StackPanel> - <StackPanel Margin="50 0 0 0"> - <TextBlock FontSize="10">End Date:</TextBlock> - <DatePicker x:Name="endDatePicker" SelectedDate="{Binding EndSelectedDate}" materialDesign:HintAssist.Hint="Pick end date" Width="160" VerticalAlignment="Center" FontSize="16" /> - </StackPanel> - <DockPanel Margin="50 0 0 0" > - <TextBlock DockPanel.Dock="Top" Text="Action Log Type:" VerticalAlignment="Center" FontSize="10"></TextBlock> - <ToggleButton Width="200" Margin="0 5 0 0" x:Name="selectActionsButton" > - <ToggleButton.Template> - <ControlTemplate> - <Grid> - <Border CornerRadius="3" BorderBrush="{StaticResource borderBrush}" BorderThickness="1" TextElement.Foreground="Black" > - <DockPanel> - <Button Width="18" Padding="0" Height="16" DockPanel.Dock="Right" BorderBrush="{x:Null}" HorizontalAlignment="Left" Click="Button_Click" Style="{StaticResource MaterialDesignFlatButton}" Foreground="{StaticResource MainWindow.Foreground}"> - <materialDesign:PackIcon Width="16" Height="16" Kind="ChevronDown" VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" HorizontalAlignment="Right"/> - </Button> - <TextBlock VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}"> - <Run Text=" Select Actions"></Run> - <Run>(</Run><Run Text="{Binding SelectedActionLogTypes.SynchedSource.Count,Mode=OneWay}"></Run><Run>)</Run> - </TextBlock> - </DockPanel> - </Border> - <Popup StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }" Style="{x:Null}"> - <Border Padding="5" MaxHeight="600" Background="{DynamicResource ComboBox.Floating.Background}" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=ActualWidth}"> - <controls:AllSelectedCheckboxList Style="{StaticResource AllSelectedCheckBoxListStyle}" MaxHeight="600" ItemsSource="{Binding SelectedActionLogTypes}" Foreground="{StaticResource MainWindow.Foreground}" Background="{DynamicResource ComboBox.Floating.Background}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" SelectionMode="Multiple" AllSelected="True" FontSize="11" FontFamily="{StaticResource FontName}"> - <controls:AllSelectedCheckboxList.ItemTemplate> - <DataTemplate > - <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Text="{Binding Data,Converter={StaticResource EnumToDescriptionConverter}}" FontSize="11" FontFamily="{StaticResource FontName}"/> - - </DataTemplate> - </controls:AllSelectedCheckboxList.ItemTemplate> - </controls:AllSelectedCheckboxList> - </Border> - </Popup> - </Grid> - </ControlTemplate> - </ToggleButton.Template> - </ToggleButton> - - </DockPanel> - <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="50 10 0 0"> - <materialDesign:PackIcon Kind="Magnify" Width="26" Height="26"/> - <TextBox Width="Auto" materialDesign:HintAssist.Hint="Search by ID, user, related object name" Text="{Binding SearchFilter,UpdateSourceTrigger=PropertyChanged}" /> - </StackPanel> - </StackPanel> - <Button DockPanel.Dock="Right" Width="120" HorizontalAlignment="Right" Command="{Binding SearchCommand}" Margin="10 0 10 0" VerticalAlignment="Center">Search</Button> - </DockPanel> - </Border> - </Grid> - - <Grid IsEnabled="{Binding IsFree}" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" > - <DataGrid Margin="0 0 0 10" SelectionMode="Single" SelectionUnit="FullRow" RowHeight="40" BorderBrush="{StaticResource borderBrush}" IsReadOnly="True" BorderThickness="1" - Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserReorderColumns="True" - CanUserAddRows="False" CanUserDeleteRows="False" ItemsSource="{Binding ActionLogs}" - SelectedItem="{Binding SelectedActionLog}" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" FontSize="11"> - <DataGrid.CellStyle> - <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="FocusVisualStyle" Value="{x:Null}"/> - <Setter Property="VerticalContentAlignment" Value="Center"></Setter> - <Style.Triggers> - <Trigger Property="IsSelected" Value="True"> - <Setter Property="Background" Value="Transparent"></Setter> - <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" /> - </Trigger> - </Style.Triggers> - </Style> - </DataGrid.CellStyle> - <DataGrid.RowStyle> - <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}"> - <Style.Triggers> - <Trigger Property="IsMouseOver" Value="True"> - <Setter Property="Background" Value="Transparent"></Setter> - <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" /> - <Setter Property="Cursor" Value="Hand"></Setter> - </Trigger> - <Trigger Property="IsSelected" Value="True"> - <Setter Property="Background" Value="Transparent"></Setter> - </Trigger> - <Trigger Property="IsFocused" Value="True"> - <Setter Property="Background" Value="Transparent"></Setter> - </Trigger> - </Style.Triggers> - </Style> - </DataGrid.RowStyle> - - <DataGrid.Columns> - <DataGridTextColumn Header="ID" Binding="{Binding ID}" Width="40" /> - <DataGridTextColumn Header="TIME" Binding="{Binding LastUpdated, Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="Auto" /> - <DataGridTextColumn Header="ACTION" Binding="{Binding ActionType, Converter={StaticResource EnumToDescriptionConverter}}" Width="Auto"/> - <DataGridTextColumn Header="USER" Binding="{Binding User.Contact.FullName}" Width="Auto"/> - <DataGridTextColumn Header="RELATED OBJECT NAME" Binding="{Binding RelatedObjectName}" Width="Auto" /> - <DataGridTextColumn Header="RELATED OBJECT ID" Binding="{Binding RelatedObjectGuid}" Width="Auto" > - <DataGridTextColumn.CellStyle> - <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}" > - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="FocusVisualStyle" Value="{x:Null}"/> - <Setter Property="VerticalContentAlignment" Value="Center"></Setter> - <Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DataContext}"/> - <Setter Property="ContextMenu"> - <Setter.Value> - <ContextMenu DataContext="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Self}}" Padding="0" Margin="0" > - <MenuItem Header="Copy (Ctrl+C)" Command="{Binding CopyRelateObjectIDCommand}" FontSize="12" Background="{StaticResource MainWindow.Background}"> - <MenuItem.Icon> - <materialDesign:PackIcon Width="16" Height="16" Kind="ContentCopy" VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}"/> - </MenuItem.Icon> - <MenuItem.ItemContainerStyle> - <Style TargetType="MenuItem" BasedOn="{StaticResource MaterialDesignMenuItem}"> - <Setter Property="Background" Value="Transparent"></Setter> - <Style.Triggers> - <Trigger Property="IsMouseOver" Value="True"> - <Setter Property="Background" Value="Transparent"></Setter> - </Trigger> - </Style.Triggers> - </Style> - </MenuItem.ItemContainerStyle> - </MenuItem> - <ContextMenu.Style> - <Style TargetType="{x:Type ContextMenu}" BasedOn="{StaticResource MaterialDesignMenu}"> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate > - <AdornerDecorator CacheMode="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:ShadowAssist.CacheMode)}"> - <Border Background="{StaticResource MainWindow.Background}" Effect="{DynamicResource MaterialDesignShadowDepth1}" Margin="3" CornerRadius="2"> - <Grid RenderOptions.ClearTypeHint="Enabled" Margin="0"> - <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Cycle" Grid.IsSharedSizeScope="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.TabNavigation="Cycle"/> - </Grid> - </Border> - </AdornerDecorator> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - </ContextMenu.Style> - </ContextMenu> - </Setter.Value> - </Setter> - <Style.Triggers> - <Trigger Property="IsSelected" Value="True"> - <Setter Property="Background" Value="Transparent"></Setter> - <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" /> - </Trigger> - </Style.Triggers> - </Style> - </DataGridTextColumn.CellStyle> - </DataGridTextColumn> - <DataGridTextColumn Header="MESSAGE" Binding="{Binding Message}" Width="1*" /> - </DataGrid.Columns> - </DataGrid> - </Grid> - <Grid Grid.Row="1" Grid.Column="0" Visibility="{Binding IsLoading,Converter={StaticResource BooleanToVisibilityConverter}}"> - <StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center"> - <mahapps:ProgressRing Margin="20 60 20 40" Width="80" Height="80" IsActive="{Binding IsLoading}"></mahapps:ProgressRing> - <TextBlock Text="Loading..." HorizontalAlignment="Center" FontSize="20" FontStyle="Italic" VerticalAlignment="Center" Margin="0 20 0 0"></TextBlock> - </StackPanel> - </Grid> - - <Grid Grid.Row="0" Grid.Column="1" Margin="40 0 10 0"> - <Border Padding="14 14 12 14" BorderBrush="DimGray" BorderThickness="0" Background="{StaticResource Logging.Background}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" CornerRadius="2"> - <Border.Effect> - <DropShadowEffect ShadowDepth="4" BlurRadius="10" Opacity="0.5"/> - </Border.Effect> - <DockPanel> - <TextBlock DockPanel.Dock="Left" Margin="10 0 0 0" Foreground="{StaticResource DimGrayBrush}" FontSize="16" VerticalAlignment="Center" Width="150">Object Changes</TextBlock> - <Button Width="Auto" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" HorizontalAlignment="Right" DockPanel.Dock="Right" Command="{Binding CopyToClipBoardCommand}" > - <StackPanel Orientation="Horizontal" > - <materialDesign:PackIcon Width="16" Height="16" Kind="ContentCopy" VerticalAlignment="Center" Margin="-5 0 10 0"/> - <TextBlock Text="Copy to Clipboard" VerticalAlignment="Center"></TextBlock> - </StackPanel> - </Button> - </DockPanel> - </Border> - </Grid> - <Border Grid.Row="1" Grid.Column="1" Margin="40 0 10 10" IsEnabled="{Binding IsFree}" BorderThickness="1 0 1 1 " BorderBrush="{StaticResource LightGrayBrush100}" Background="{StaticResource TransparentBackgroundBrush}"> - <DockPanel > - <TextBlock DockPanel.Dock="Top" Height="40" Text="{Binding DifferenceObject.Name, Mode=OneWay}" VerticalAlignment="Center" Padding="5" FontSize="18" HorizontalAlignment="Center" ></TextBlock> - <TreeView x:Name="treeView" ItemsSource="{Binding DifferenceObject.Children, Mode=OneWay}" > - <TreeView.ItemContainerStyle> - <Style TargetType="TreeViewItem" BasedOn="{StaticResource {x:Type TreeViewItem}}"> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="{x:Type TreeViewItem}"> - <Grid> - <Grid.ColumnDefinitions> - <ColumnDefinition MinWidth="19" Width="Auto"/> - <ColumnDefinition Width="Auto"/> - <ColumnDefinition Width="*"/> - </Grid.ColumnDefinitions> - <Grid.RowDefinitions> - <RowDefinition Height="Auto"/> - <RowDefinition/> - </Grid.RowDefinitions> - <ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" - Style="{StaticResource MaterialDesignExpandCollapseToggleStyle}" - Foreground="{TemplateBinding Foreground}" - Margin="8 0 8 0" - VerticalAlignment="Center" - /> - <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="1" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> - <ContentPresenter x:Name="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> - </Border> - <ItemsPresenter x:Name="ItemsHost" Grid.ColumnSpan="2" Grid.Column="1" Grid.Row="1"/> - </Grid> - <ControlTemplate.Triggers> - <Trigger Property="IsExpanded" Value="false"> - <Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/> - </Trigger> - <Trigger Property="HasItems" Value="false"> - <Setter Property="Visibility" TargetName="Expander" Value="Hidden"/> - </Trigger> - <MultiTrigger> - <MultiTrigger.Conditions> - <Condition Property="IsSelected" Value="true"/> - <Condition Property="IsSelectionActive" Value="false"/> - </MultiTrigger.Conditions> - <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}}"/> - </MultiTrigger> - <Trigger Property="IsEnabled" Value="false"> - <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> - </Trigger> - </ControlTemplate.Triggers> - </ControlTemplate> - </Setter.Value> - </Setter> - <Setter Property="IsExpanded" Value="True" /> - <Style.Triggers> - <Trigger Property="IsMouseOver" Value="True"> - <Setter Property="Background" Value="Transparent"></Setter> - </Trigger> - <Trigger Property="IsFocused" Value="True"> - <Setter Property="Background" Value="Transparent"></Setter> - </Trigger> - <Trigger Property="IsSelected" Value="True"> - <Setter Property="Background" Value="Transparent"></Setter> - </Trigger> - </Style.Triggers> - </Style> - </TreeView.ItemContainerStyle> - <TreeView.Resources> - <HierarchicalDataTemplate DataType="{x:Type diff:ActionLogDifference}" ItemsSource="{Binding Children}"> - <TextBlock Text="{Binding Name}" Margin="5 0 0 0" Foreground ="{StaticResource MainWindow.Foreground}"/> - </HierarchicalDataTemplate> - - <DataTemplate DataType="{x:Type diff:ActionLogDifferenceValue}"> - <TextBlock Margin="5 0 0 0" Foreground ="{StaticResource MainWindow.Foreground}"> - <Run Text="{Binding Name}"/> - <Run>: </Run> - <Run Text="{Binding Before,Mode=OneWay}" Foreground="{StaticResource DimGrayBrush}"/> - <Run> | </Run> - <Run Text="{Binding After,Mode=OneWay}" Foreground="{StaticResource RedBrush100}"/> - </TextBlock> - </DataTemplate> - </TreeView.Resources> - </TreeView> - - </DockPanel> - </Border> - <mahapps:ProgressRing Grid.Row="1" Grid.Column="1" Margin="20 0 20 40" Width="80" Height="80" IsActive="{Binding IsLoadingDifferences}"></mahapps:ProgressRing> - - </Grid> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml.cs deleted file mode 100644 index 67641e3fc..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/Views/MainView.xaml.cs +++ /dev/null @@ -1,34 +0,0 @@ -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.ActionLogs.Views -{ - /// <summary> - /// Interaction logic for MainView.xaml - /// </summary> - public partial class MainView : UserControl - { - public MainView() - { - InitializeComponent(); - } - - private void Button_Click(object sender, RoutedEventArgs e) - { - selectActionsButton.IsChecked = true; - e.Handled = true; - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/app.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/app.config deleted file mode 100644 index 7b82e5f7c..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/app.config +++ /dev/null @@ -1,85 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<configuration> - <configSections> - <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> - <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> - </configSections> - <runtime> - <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> - <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" /> - </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-5.0.5.0" newVersion="5.0.5.0" /> - </dependentAssembly> - <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" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-1.2.2.0" newVersion="1.2.2.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.Reflection.Metadata" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-1.4.2.0" newVersion="1.4.2.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.IO.FileSystem" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.IO.FileSystem.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.Security.Cryptography.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.Xml.XPath.XDocument" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.Console" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.Diagnostics.StackTrace" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" /> - </dependentAssembly> - </assemblyBinding> - </runtime> - <entityFramework> - <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> - <providers> - <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> - </providers> - </entityFramework> -</configuration>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/packages.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/packages.config deleted file mode 100644 index e57143046..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ActionLogs/packages.config +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<packages> - <package id="EntityFramework" version="6.2.0" targetFramework="net461" /> - <package id="Google.Protobuf" version="3.4.1" targetFramework="net461" /> - <package id="MahApps.Metro" version="1.5.0" targetFramework="net461" /> - <package id="MaterialDesignColors" version="1.1.2" targetFramework="net461" /> - <package id="MaterialDesignThemes" version="2.3.1.953" targetFramework="net461" /> - <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" /> -</packages>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs index 8a33f15ef..652ad3093 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/ViewModels/MainViewVM.cs @@ -17,10 +17,6 @@ using Microsoft.Win32; using Tango.Core.Helpers; using System.IO; using Tango.MachineStudio.Catalogs.Excel; -using Tango.BL.ActionLogs; -using Tango.MachineStudio.Common.Authentication; -using Tango.BL.Enumerations; -using Tango.BL.DTO; namespace Tango.MachineStudio.Catalogs.ViewModels { @@ -29,9 +25,6 @@ namespace Tango.MachineStudio.Catalogs.ViewModels private ObservablesContext _catalogsContext; private ObservablesContext _activeCatalogContext; private INotificationProvider _notification; - private IActionLogManager _actionLogManager; - private IAuthenticationProvider _authentication; - private ColorCatalogDTO _catalogBeforeSave; #region Properties @@ -158,11 +151,9 @@ namespace Tango.MachineStudio.Catalogs.ViewModels /// Initializes a new instance of the <see cref="MainViewVM"/> class. /// </summary> /// <param name="notificationProvider">The notification provider.</param> - public MainViewVM(INotificationProvider notificationProvider, IActionLogManager actionLogManager, IAuthenticationProvider authenticationProvider) : this() + public MainViewVM(INotificationProvider notificationProvider) : this() { - _actionLogManager = actionLogManager; _notification = notificationProvider; - _authentication = authenticationProvider; } #endregion @@ -206,7 +197,7 @@ namespace Tango.MachineStudio.Catalogs.ViewModels _activeCatalogContext = ObservablesContext.CreateDefault(); - ActiveCatalog = await new CatalogBuilder(_activeCatalogContext).Set(SelectedCatalog.Guid).WithGroups().WithItems().WithRecipes().BuildAsync(); + ActiveCatalog = await new ColorCatalogBuilder(_activeCatalogContext).Set(SelectedCatalog.Guid).WithGroups().WithItems().WithRecipes().BuildAsync(); SelectedGroup = ActiveCatalog.ColorCatalogsGroups.FirstOrDefault(); RMLS = await _activeCatalogContext.Rmls.ToListAsync(); @@ -215,8 +206,6 @@ namespace Tango.MachineStudio.Catalogs.ViewModels SelectedItem = SelectedGroup.ColorCatalogsItems.FirstOrDefault(); } - _catalogBeforeSave = ColorCatalogDTO.FromObservable(ActiveCatalog); - View.NavigateTo(CatalogsNavigationView.CatalogView); } catch (Exception ex) @@ -244,7 +233,6 @@ namespace Tango.MachineStudio.Catalogs.ViewModels { IsFree = false; await SelectedCatalog.DeleteCascadeAsync(_catalogsContext); - _actionLogManager.InsertLog(ActionLogType.CatalogDeleted, _authentication.CurrentUser, SelectedCatalog.Name, SelectedCatalog, "Catalog deleted using Machine Studio.", false); SelectedCatalog = null; } catch (Exception ex) @@ -277,7 +265,6 @@ namespace Tango.MachineStudio.Catalogs.ViewModels newCatalog.Company = "Twine"; _catalogsContext.ColorCatalogs.Add(newCatalog); await _catalogsContext.SaveChangesAsync(); - _actionLogManager.InsertLog(ActionLogType.CatalogCreated, _authentication.CurrentUser, newCatalog.Name, newCatalog, "Catalog created using Machine Studio."); SelectedCatalog = newCatalog; EditSelectedCatalog(); } @@ -318,44 +305,8 @@ namespace Tango.MachineStudio.Catalogs.ViewModels try { IsFree = false; - - //Validate color codes. - var duplicateCodes = ActiveCatalog - .ColorCatalogsGroups - .SelectMany(x => x.ColorCatalogsItems) - .GroupBy(x => x.Code) - .Where(x => x.Count() > 1) - .Select(x => x.First().Code) - .ToList(); - - if (duplicateCodes.Count > 0) - { - throw new InvalidOperationException($"Duplicate color codes found:\n{String.Join(Environment.NewLine, duplicateCodes)}"); - } - - //Validate color names. - var duplicateNames = ActiveCatalog - .ColorCatalogsGroups - .SelectMany(x => x.ColorCatalogsItems) - .GroupBy(x => x.Name) - .Where(x => x.Count() > 1) - .Select(x => x.First().Name) - .ToList(); - - if (duplicateNames.Count > 0) - { - throw new InvalidOperationException($"Duplicate color names found:\n{String.Join(Environment.NewLine, duplicateNames)}"); - } - - ActiveCatalog.LastUpdated = DateTime.UtcNow; await _activeCatalogContext.SaveChangesAsync(); - - var activeCatalogDTO = ColorCatalogDTO.FromObservable(ActiveCatalog); - _actionLogManager.InsertLog(ActionLogType.CatalogSaved, _authentication.CurrentUser, _catalogBeforeSave.Name, _catalogBeforeSave, activeCatalogDTO, "Catalog saved using Machine Studio."); - _catalogBeforeSave = activeCatalogDTO; - await LoadCatalogs(); - _notification.ShowInfo("Catalog updated successfully."); } catch (Exception ex) diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/Views/CatalogView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/Views/CatalogView.xaml index 5a49c93d3..ded1acb2d 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/Views/CatalogView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Catalogs/Views/CatalogView.xaml @@ -13,7 +13,7 @@ xmlns:global="clr-namespace:Tango.MachineStudio.Catalogs" xmlns:local="clr-namespace:Tango.MachineStudio.Catalogs.Views" mc:Ignorable="d" - d:DesignHeight="1080" d:DesignWidth="1920" Background="Transparent" Foreground="{StaticResource DarkGrayBrush200}" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> + d:DesignHeight="1080" d:DesignWidth="1920" Background="Transparent" Foreground="#232323" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> <UserControl.Resources> <converters:EnumToItemsSourceConverter x:Key="EnumToItemsSourceConverter" /> @@ -51,7 +51,7 @@ <Grid DockPanel.Dock="Top"> <StackPanel Orientation="Horizontal"> <Button Style="{StaticResource MaterialDesignFlatButton}" Height="Auto" Command="{Binding BackToCatalogsCommand}"> - <materialDesign:PackIcon Kind="ArrowLeft" Width="50" Height="50" Foreground="{StaticResource DarkGrayBrush200}" ToolTip="Back to RML list" /> + <materialDesign:PackIcon Kind="ArrowLeft" Width="50" Height="50" Foreground="#202020" ToolTip="Back to RML list" /> </Button> <TextBlock Text="{Binding ActiveCatalog.Name}" VerticalAlignment="Center" Margin="10 0 0 0" FontSize="34"></TextBlock> </StackPanel> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/ViewModels/MainViewVM.cs index bb9608f6b..bbe5432e9 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DataCapture/ViewModels/MainViewVM.cs @@ -382,7 +382,7 @@ namespace Tango.MachineStudio.DataCapture.ViewModels using (_notification.PushTaskItem("Starting Recording...")) { Recorder.Start(); - //_eventLogger.Log(EventTypes.RECORDING_STARTED, "Recording Started..."); + _eventLogger.Log(EventTypes.RECORDING_STARTED, "Recording Started..."); _recordingBarItem.Push(); } @@ -398,7 +398,7 @@ namespace Tango.MachineStudio.DataCapture.ViewModels await Recorder.Stop(); _recordingBarItem.Pop(); - //_eventLogger.Log(EventTypes.RECORDING_STOPPED, "Recording Stopped..."); + _eventLogger.Log(EventTypes.RECORDING_STOPPED, "Recording Stopped..."); } String recordingName = _notification.ShowTextInput("Enter recording name", "Recording name"); diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Controls/JobOutlineControl.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Controls/JobOutlineControl.cs index 68dc7e3bf..ee570ac34 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Controls/JobOutlineControl.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Controls/JobOutlineControl.cs @@ -136,34 +136,6 @@ namespace Tango.MachineStudio.Developer.Controls _sizeControl.Height += NORMAL_FONT_HEIGHT; } } - //JobTicket.ThreadParameters - if (job.ThreadParameters != null) - { - _sizeControl.Height += 20; - DrawHeaderText(drawingContext, "THREAD PARAMETERS", 17, LevelOffset.level_0); - _sizeControl.Height += TITLE_FONT_HEIGHT; - _sizeControl.Height += 5.0; - basicProps = GetNameValueList(job.ThreadParameters); - foreach (var prop in basicProps) - { - DrawNameValueText(drawingContext, prop, LevelOffset.level_1, PackIconKind.Settings); - _sizeControl.Height += NORMAL_FONT_HEIGHT; - } - } - //JobTicket.HeadCleaningParameters - if (job.HeadCleaningParameters != null) - { - _sizeControl.Height += 20; - DrawHeaderText(drawingContext, "HEAD CLEANING PARAMETERS", 17, LevelOffset.level_0); - _sizeControl.Height += TITLE_FONT_HEIGHT; - _sizeControl.Height += 5.0; - basicProps = GetNameValueList(job.HeadCleaningParameters); - foreach (var prop in basicProps) - { - DrawNameValueText(drawingContext, prop, LevelOffset.level_1, PackIconKind.Settings); - _sizeControl.Height += NORMAL_FONT_HEIGHT; - } - } //JobTicket.Segments if (job.Segments != null) { 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 fc0680d9c..3a1f3fb11 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 @@ -50,9 +50,6 @@ using Tango.Core.ExtensionMethods; using Tango.ColorConversion; using Tango.PMR.Exports; using Microsoft.WindowsAPICodePack.Dialogs; -using Tango.BL.Enumerations; -using Tango.BL.DTO; -using Tango.BL.ActionLogs; namespace Tango.MachineStudio.Developer.ViewModels { @@ -88,9 +85,6 @@ namespace Tango.MachineStudio.Developer.ViewModels private TaskItem _preparingTaskItem; private IColorConverter _converter; private string _current_job_string; - private JobDTO _beforeSaveJobDTO; - private IActionLogManager _actionLogManager; - private RmlDTO _selectedRMLBeforeLiquidFactorsSaves; #region Properties @@ -753,7 +747,7 @@ namespace Tango.MachineStudio.Developer.ViewModels /// </summary> /// <param name="applicationManager">The application manager.</param> /// <param name="notificationProvider">The notification provider.</param> - public MainViewVM(IStudioApplicationManager applicationManager, INotificationProvider notificationProvider, IDiagnosticsFrameProvider diagnosticsFrameProvider, IVideoCaptureProvider videoCaptureProvider, DeveloperNavigationManager navigation, INavigationManager navigationManager, IAuthenticationProvider authentication, IEventLogger eventLogger, ISpeechProvider speech, IActionLogManager actionLogManager) + public MainViewVM(IStudioApplicationManager applicationManager, INotificationProvider notificationProvider, IDiagnosticsFrameProvider diagnosticsFrameProvider, IVideoCaptureProvider videoCaptureProvider, DeveloperNavigationManager navigation, INavigationManager navigationManager, IAuthenticationProvider authentication, IEventLogger eventLogger, ISpeechProvider speech) { _converter = new DefaultColorConverter(); @@ -762,7 +756,6 @@ namespace Tango.MachineStudio.Developer.ViewModels AuthenticationProvider = authentication; - _actionLogManager = actionLogManager; _notification = notificationProvider; _speech = speech; _navigation = navigation; @@ -880,7 +873,7 @@ namespace Tango.MachineStudio.Developer.ViewModels foreach (var stop in stops) { - if (stop.ColorSpace.Code == BL.Enumerations.ColorSpaces.Volume.ToInt32()) + if (stop.ColorSpace.Code == BL.Enumerations.ColorSpaces.Volume.ToInt32() && !stop.IsLiquidVolumesOutOfRange) { try { @@ -1041,11 +1034,6 @@ namespace Tango.MachineStudio.Developer.ViewModels { var percent = (e.Progress / e.Total * 100d); - if (_preparingTaskItem != null) - { - _preparingTaskItem.Message = $"Preparing job for printing {(e.Progress / e.Total * 100d).ToString("0.0")}%..."; - } - if (_preparingTaskItem == null && percent == 0) { _preparingTaskItem = _notification.PushTaskItem("Preparing job for printing..."); @@ -1055,6 +1043,13 @@ namespace Tango.MachineStudio.Developer.ViewModels _preparingTaskItem.Pop(); _preparingTaskItem = null; } + else + { + if (_preparingTaskItem != null) + { + _preparingTaskItem.Message = $"Preparing job for printing {(e.Progress / e.Total * 100d).ToString("0.0")}%..."; + } + } } private void MachineOperator_ResumingJob(object sender, ResumingJobEventArgs e) @@ -1257,7 +1252,7 @@ namespace Tango.MachineStudio.Developer.ViewModels || j.Name.ToLower().Contains(filter) //Job name || - (j.User != null && j.User.Contact.FirstName.ToLower().Contains(filter)) // User first name + j.User.Contact.FirstName.ToLower().Contains(filter) // User first name || j.Length.ToString().Contains(filter); //Job length }; @@ -1376,7 +1371,7 @@ namespace Tango.MachineStudio.Developer.ViewModels /// <summary> /// Starts the job. /// </summary> - private async void StartJob(Func<JobHandler> resumeFunc = null) + private async void StartJob(Func<Job, JobHandler> resumeFunc = null) { SettingsManager.Default.Save(); @@ -1441,13 +1436,15 @@ namespace Tango.MachineStudio.Developer.ViewModels } else { - JobHandler = resumeFunc(); + JobHandler = resumeFunc(ActiveJob); } _navigation.NavigateTo(DeveloperNavigationView.RunningJobView); IsJobRunning = true; ShowJobStatus = true; + _eventLogger.Log(String.Format("Job '{0}' started...", ActiveJob.Name)); + JobHandler.StatusChanged += (x, status) => { if (IsJobRunning) @@ -1467,21 +1464,25 @@ namespace Tango.MachineStudio.Developer.ViewModels if (!segment.IsInterSegment) { _speech.SpeakInfo(String.Format("Segment {0} Started.", segment.SegmentIndex)); + _eventLogger.Log(String.Format("Segment {0} Started.", segment.SegmentIndex) + Environment.NewLine + segment.ToJsonString()); } else { _speech.SpeakInfo(String.Format("Inter Segment Started.")); + _eventLogger.Log("Inter Segment Started."); } }; JobHandler.UnitCompleted += (x, unit) => { _speech.SpeakInfo(String.Format("{0} Units Completed.", unit + 1)); + _eventLogger.Log(String.Format("{0} Units Completed.", unit + 1)); }; JobHandler.Failed += (x, ex) => { LogManager.Log(ex, String.Format("Job {0} has failed.", RunningJob.Name)); + _eventLogger.Log(ex, String.Format("Job {0} has failed.", RunningJob.Name)); SetJobFailed(); InvokeUI(() => @@ -1495,11 +1496,13 @@ namespace Tango.MachineStudio.Developer.ViewModels { _speech.SpeakInfo("Finalizing job..."); LogManager.Log(String.Format("Finalizing job {0}.", RunningJob.Name)); + _eventLogger.Log(String.Format("Finalizing job {0}.", RunningJob.Name)); }; JobHandler.Completed += (x, e) => { LogManager.Log(String.Format("Job {0} has completed.", RunningJob.Name)); + _eventLogger.Log(String.Format("Job {0} has completed.", RunningJob.Name)); SetJobCompleted(); StopRecordingIfInProgress(); }; @@ -1513,6 +1516,7 @@ namespace Tango.MachineStudio.Developer.ViewModels } LogManager.Log(String.Format("Job {0} has been canceled.", RunningJob.Name)); + _eventLogger.Log(String.Format("Job {0} has been canceled.", RunningJob.Name)); StopRecordingIfInProgress(); //Finally Canceled.. }; @@ -1530,6 +1534,7 @@ namespace Tango.MachineStudio.Developer.ViewModels catch (Exception ex) { LogManager.Log(ex); + _eventLogger.Log(ex, "An error occurred while starting the job."); _notification.ShowError("An error occurred while starting the job. " + Environment.NewLine + ex.Message); SetJobFailed(); StopRecordingIfInProgress(); @@ -1589,12 +1594,8 @@ namespace Tango.MachineStudio.Developer.ViewModels { LogManager.Log(String.Format("Saving liquid factors for RML {0}...", SelectedRML.Name)); await SelectedRML.SaveAsync(_activeJobDbContext); - var rmlAfterChange = RmlDTO.FromObservable(SelectedRML); - _actionLogManager.InsertLog(ActionLogType.RmlSaved, AuthenticationProvider.CurrentUser, SelectedRML.Name, _selectedRMLBeforeLiquidFactorsSaves, rmlAfterChange, "RML liquid factors changed from Machine Studio Research module."); - _selectedRMLBeforeLiquidFactorsSaves = rmlAfterChange; LiquidTypesRmls = ActiveJob.Machine.Configuration.GetSupportedIdsPacks(SelectedRML).Select(x => x.LiquidType).SelectMany(x => x.LiquidTypesRmls).Where(x => x.Rml.Guid == SelectedRML.Guid).ToList(); - foreach (var segment in ActiveJob.Segments) { SetSegmentBrushStopsLiquidVolumes(segment); @@ -1622,9 +1623,7 @@ namespace Tango.MachineStudio.Developer.ViewModels { LogManager.Log("Invalidating liquid factors, process parameters and process group history..."); - _selectedRML = new RmlBuilder(_activeJobDbContext).Set(SelectedRML.Guid).WithAllParametersGroup().WithCAT(SelectedMachine.Guid).WithCCT().WithLiquidFactors().WithSpools().Build(); - - _selectedRMLBeforeLiquidFactorsSaves = RmlDTO.FromObservable(_selectedRML); + _selectedRML = new RmlBuilder(_activeJobDbContext).Set(SelectedRML.Guid).WithAllParametersGroup().WithCAT(SelectedMachine.Guid).WithCCT().WithLiquidFactors().Build(); if (_selectedRML.Cct == null) { @@ -1673,17 +1672,7 @@ namespace Tango.MachineStudio.Developer.ViewModels { await Task.Factory.StartNew(() => { - try - { - IsFree = false; - InvalidateLiquidFactorsAndProcessTables(); - } - catch - {} - finally - { - IsFree = true; - } + InvalidateLiquidFactorsAndProcessTables(); }); } } @@ -1691,23 +1680,6 @@ namespace Tango.MachineStudio.Developer.ViewModels #endregion - #region Color Space - - public void OnBrushStopColorSpaceChanged(BrushStop stop) - { - if (stop != null && stop.ColorSpace != null && stop.BrushColorSpace != BL.Enumerations.ColorSpaces.Volume) - { - var lubricant = stop.LiquidVolumes.SingleOrDefault(x => x.LiquidType == LiquidTypes.Lubricant); - - if (lubricant != null) - { - lubricant.Volume = 100; - } - } - } - - #endregion - #region Process Parameters Management /// <summary> @@ -1719,12 +1691,12 @@ namespace Tango.MachineStudio.Developer.ViewModels { try { - LogManager.Log($"Uploading process parameters table {SelectedProcessParametersTable.Name}..."); + LogManager.Log(String.Format("Uploading process parameters table {0}...", SelectedProcessParametersTable.Name)); await MachineOperator.UploadProcessParameters(SelectedProcessParametersTable); } catch (Exception ex) { - LogManager.Log(ex, $"Failed to upload process parameters table {SelectedProcessParametersTable.Name}"); + LogManager.LogFormat(ex, "Failed to upload process parameters table {0}", SelectedProcessParametersTable.Name); _notification.ShowError("Failed to upload the selected process parameters." + Environment.NewLine + ex.Message); } } @@ -1743,8 +1715,6 @@ namespace Tango.MachineStudio.Developer.ViewModels using (_notification.PushTaskItem("Saving Parameters Group...")) { - var processGroupBefore = ProcessParametersTablesGroupDTO.FromObservable(SelectedRML.GetActiveProcessGroup()); - using (var db = ObservablesContext.CreateDefault()) { var active_groups = db.ProcessParametersTablesGroups.Where(x => x.RmlGuid == SelectedRML.Guid && x.Active).ToList(); @@ -1786,8 +1756,6 @@ namespace Tango.MachineStudio.Developer.ViewModels SelectedRML.ProcessParametersTablesGroups.Add(group); await SelectedRML.SaveAsync(_activeJobDbContext); - _actionLogManager.InsertLog(ActionLogType.RmlActiveProcessParametersChanged, AuthenticationProvider.CurrentUser, SelectedRML.Name, processGroupBefore, ProcessParametersTablesGroupDTO.FromObservable(SelectedRML.GetActiveProcessGroup()), "RML Active process parameters changed from Machine Studio Research module."); - InvalidateLiquidFactorsAndProcessTables(); } @@ -1832,110 +1800,97 @@ namespace Tango.MachineStudio.Developer.ViewModels using (_notification.PushTaskItem("Loading job details...")) { - try + await Task.Factory.StartNew(() => { - await Task.Factory.StartNew(() => - { - _disable_gamut_check = true; - - LogManager.Log(String.Format("Loading job {0}...", SelectedMachineJob.Name)); - SelectedSegments = new ObservableCollection<Segment>(); - SelectedBrushStops = new ObservableCollection<BrushStop>(); - SelectedRML = null; - SelectedSegment = null; - SelectedGroupHistory = null; - SelectedBrushStop = null; - SelectedProcessParametersTable = null; - RmlProcessParametersTableGroup = null; - - _blockInvalidateCommands = false; + _disable_gamut_check = true; - LogManager.Log("Creating active job DB context..."); - _activeJobDbContext = ObservablesContext.CreateDefault(); + LogManager.Log(String.Format("Loading job {0}...", SelectedMachineJob.Name)); + SelectedSegments = new ObservableCollection<Segment>(); + SelectedBrushStops = new ObservableCollection<BrushStop>(); + SelectedRML = null; + SelectedSegment = null; + SelectedGroupHistory = null; + SelectedBrushStop = null; + SelectedProcessParametersTable = null; + RmlProcessParametersTableGroup = null; - LogManager.Log("Initializing available color spaces, RMLs & Winding methods..."); + _blockInvalidateCommands = false; - //var processParamsGroups = _activeJobDbContext.ProcessParametersTablesGroups.ToList(); - //var processParams = _activeJobDbContext.ProcessParametersTables.ToList(); + LogManager.Log("Creating active job DB context..."); + _activeJobDbContext = ObservablesContext.CreateDefault(); - ColorSpaces = _activeJobDbContext.ColorSpaces.ToObservableCollection(); - Rmls = _activeJobDbContext.Rmls.OrderBy(i => i.Name).ToObservableCollection(); - WindingMethods = _activeJobDbContext.WindingMethods.ToObservableCollection(); - SpoolTypes = _activeJobDbContext.SpoolTypes.ToObservableCollection(); + LogManager.Log("Initializing available color spaces, RMLs & Winding methods..."); - LogManager.Log("Loading machine spools..."); - _activeJobDbContext.Spools.Where(x => x.MachineGuid == SelectedMachine.Guid).Load(); + //var processParamsGroups = _activeJobDbContext.ProcessParametersTablesGroups.ToList(); + //var processParams = _activeJobDbContext.ProcessParametersTables.ToList(); - LogManager.Log("Setting active job..."); - ActiveJob = new JobBuilder(_activeJobDbContext).Set(SelectedMachineJob.Guid).WithUser().WithSegments().WithBrushStops().WithConfiguration().WithRML().Build(); + ColorSpaces = _activeJobDbContext.ColorSpaces.ToObservableCollection(); + Rmls = _activeJobDbContext.Rmls.ToObservableCollection(); + WindingMethods = _activeJobDbContext.WindingMethods.ToObservableCollection(); + SpoolTypes = _activeJobDbContext.SpoolTypes.ToObservableCollection(); - //_activeJobDbContext.Ccts.Where(x => x.RmlGuid == ActiveJob.RmlGuid).ToList(); - //_activeJobDbContext.Cats.Where(x => x.RmlGuid == ActiveJob.RmlGuid).ToList(); - //_activeJobDbContext.Machines.SingleOrDefault(x => x.Guid == ActiveJob.MachineGuid); - //_activeJobDbContext.Configurations.SingleOrDefault(x => x.Guid == ActiveJob.Machine.ConfigurationGuid); + LogManager.Log("Loading machine spools..."); + _activeJobDbContext.Spools.Where(x => x.MachineGuid == SelectedMachine.Guid).Load(); - //_activeJobDbContext.LiquidTypesRmls.ToList(); + LogManager.Log("Setting active job..."); + ActiveJob = new JobBuilder(_activeJobDbContext).Set(SelectedMachineJob.Guid).WithUser().WithSegments().WithBrushStops().WithConfiguration().WithRML().Build(); - //_activeJobDbContext.IdsPackFormulas.ToList(); - //_activeJobDbContext.LiquidTypes.ToList(); - //_activeJobDbContext.MidTankTypes.ToList(); - //_activeJobDbContext.DispenserTypes.ToList(); + //_activeJobDbContext.Ccts.Where(x => x.RmlGuid == ActiveJob.RmlGuid).ToList(); + //_activeJobDbContext.Cats.Where(x => x.RmlGuid == ActiveJob.RmlGuid).ToList(); + //_activeJobDbContext.Machines.SingleOrDefault(x => x.Guid == ActiveJob.MachineGuid); + //_activeJobDbContext.Configurations.SingleOrDefault(x => x.Guid == ActiveJob.Machine.ConfigurationGuid); - //_activeJobDbContext.IdsPacks.Where(x => x.ConfigurationGuid == ActiveJob.Machine.ConfigurationGuid).ToList(); + //_activeJobDbContext.LiquidTypesRmls.ToList(); - _beforeSaveJobDTO = JobDTO.FromObservable(ActiveJob); + //_activeJobDbContext.IdsPackFormulas.ToList(); + //_activeJobDbContext.LiquidTypes.ToList(); + //_activeJobDbContext.MidTankTypes.ToList(); + //_activeJobDbContext.DispenserTypes.ToList(); + //_activeJobDbContext.IdsPacks.Where(x => x.ConfigurationGuid == ActiveJob.Machine.ConfigurationGuid).ToList(); - LogManager.Log("Setting selected segment..."); - _selectedSegment = ActiveJob.OrderedSegments.FirstOrDefault(); - ActiveJob.LengthChanged -= ActiveJob_LengthChanged; - ActiveJob.LengthChanged += ActiveJob_LengthChanged; - _selectedRML = ActiveJob.Rml; - InvalidateLiquidFactorsAndProcessTables(); - RaisePropertyChanged(nameof(SelectedRML)); + LogManager.Log("Setting selected segment..."); + _selectedSegment = ActiveJob.OrderedSegments.FirstOrDefault(); - UpdateEstimatedDuration(); + ActiveJob.LengthChanged -= ActiveJob_LengthChanged; + ActiveJob.LengthChanged += ActiveJob_LengthChanged; - _blockInvalidateCommands = false; - InvalidateRelayCommands(); + _selectedRML = ActiveJob.Rml; + InvalidateLiquidFactorsAndProcessTables(); + RaisePropertyChanged(nameof(SelectedRML)); - _disable_gamut_check = false; + UpdateEstimatedDuration(); - _settings.LastSelectedMachineGuid = SelectedMachine != null ? SelectedMachine.Guid : null; - _settings.LastSelectedJobGuid = SelectedMachineJob != null ? SelectedMachineJob.Guid : null; + _blockInvalidateCommands = false; + InvalidateRelayCommands(); - _settings.Save(); - }); - - SegmentsCollectionView = CollectionViewSource.GetDefaultView(ActiveJob.Segments); - SegmentsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Segment.SegmentIndex), ListSortDirection.Ascending)); + _disable_gamut_check = false; - foreach (var segment in ActiveJob.Segments) - { - SetSegmentBrushStopsLiquidVolumes(segment); - } + _settings.LastSelectedMachineGuid = SelectedMachine != null ? SelectedMachine.Guid : null; + _settings.LastSelectedJobGuid = SelectedMachineJob != null ? SelectedMachineJob.Guid : null; - SelectedSegment = _selectedSegment; + _settings.Save(); + }); - if (ActiveJob != null) - { - _current_job_string = ActiveJob.ToJobFileWhenLoaded().ToString(); - } + SegmentsCollectionView = CollectionViewSource.GetDefaultView(ActiveJob.Segments); + SegmentsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Segment.SegmentIndex), ListSortDirection.Ascending)); - UIHelper.DoEvents(); - _navigation.NavigateTo(DeveloperNavigationView.JobView); - } - catch (Exception ex) + foreach (var segment in ActiveJob.Segments) { - LogManager.Log(ex, "Error loading job."); - _notification.ShowError($"An error occurred while trying to load the selected job.\n{ex.FlattenMessage()}"); + SetSegmentBrushStopsLiquidVolumes(segment); } - finally + + SelectedSegment = _selectedSegment; + + if (ActiveJob != null) { - CanWork = true; + _current_job_string = ActiveJob.ToJobFileWhenLoaded().ToString(); } + + UIHelper.DoEvents(); + _navigation.NavigateTo(DeveloperNavigationView.JobView); } CanWork = true; @@ -1953,65 +1908,50 @@ namespace Tango.MachineStudio.Developer.ViewModels { CanWork = false; - try + using (_notification.PushTaskItem("Saving job details...")) { - using (_notification.PushTaskItem("Saving job details...")) + await Task.Factory.StartNew(() => { - await Task.Factory.StartNew(() => - { - LogManager.Log(String.Format("Saving the active job {0}...", ActiveJob.Name)); - ActiveJob.LastUpdated = DateTime.UtcNow; - ActiveJob.IsSynchronized = false; - ActiveJob.Rml = SelectedRML; - ActiveJob.EstimatedDurationMili = (int)EstimatedDuration.TotalMilliseconds; - ActiveJob.MarkModified(_activeJobDbContext); - _activeJobDbContext.SaveChanges(); - - var afterJobDTO = JobDTO.FromObservable(ActiveJob); - _actionLogManager.InsertLog(ActionLogType.JobSaved, AuthenticationProvider.CurrentUser, _beforeSaveJobDTO.Name, _beforeSaveJobDTO, afterJobDTO, "Job saved from research module in Machine Studio."); - _beforeSaveJobDTO = afterJobDTO; + LogManager.Log(String.Format("Saving the active job {0}...", ActiveJob.Name)); + ActiveJob.LastUpdated = DateTime.UtcNow; + ActiveJob.Rml = SelectedRML; + ActiveJob.EstimatedDurationMili = (int)EstimatedDuration.TotalMilliseconds; + _activeJobDbContext.SaveChanges(); - _machineDbContext.Entry(SelectedMachineJob).Reload(); + _machineDbContext.Entry(SelectedMachineJob).Reload(); - _machineDbContext.Entry(SelectedMachineJob).Collection(x => x.Segments).Load(); - foreach (var segment in SelectedMachineJob.Segments.ToList()) - { - _machineDbContext.Entry(segment).Collection(x => x.BrushStops).Load(); + _machineDbContext.Entry(SelectedMachineJob).Collection(x => x.Segments).Load(); - foreach (var brushStop in segment.BrushStops.ToList()) - { - _machineDbContext.Entry(brushStop).Reload(); - } - - _machineDbContext.Entry(segment).Reload(); - } + foreach (var segment in SelectedMachineJob.Segments.ToList()) + { + _machineDbContext.Entry(segment).Collection(x => x.BrushStops).Load(); - InvokeUI(() => + foreach (var brushStop in segment.BrushStops.ToList()) { - SelectedMachineJob.Segments = SelectedMachineJob.Segments; - }); + _machineDbContext.Entry(brushStop).Reload(); + } - var settings = SettingsManager.Default.GetOrCreate<DeveloperModuleSettings>(); - settings.DefaultJobRmlGuid = ActiveJob.RmlGuid; - settings.Save(); + _machineDbContext.Entry(segment).Reload(); + } - if (ActiveJob != null) - { - _current_job_string = ActiveJob.ToJobFileWhenLoaded().ToString(); - } + InvokeUI(() => + { + SelectedMachineJob.Segments = SelectedMachineJob.Segments; }); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error saving active job."); - _notification.ShowError($"An error occurred while trying to save the current job.\n{ex.FlattenMessage()}"); - } - finally - { - CanWork = true; + + var settings = SettingsManager.Default.GetOrCreate<DeveloperModuleSettings>(); + settings.DefaultJobRmlGuid = ActiveJob.RmlGuid; + settings.Save(); + + if (ActiveJob != null) + { + _current_job_string = ActiveJob.ToJobFileWhenLoaded().ToString(); + } + }); } + + CanWork = true; } } @@ -2199,7 +2139,7 @@ namespace Tango.MachineStudio.Developer.ViewModels { if (ActiveJob != null) { - LogManager.Log($"Adding new segment to job {ActiveJob.Name}..."); + LogManager.LogFormat("Adding new segment to job {0}...", ActiveJob.Name); Segment seg = new Segment(); seg.Job = ActiveJob; seg.Name = "SEGMENT"; @@ -2231,8 +2171,6 @@ namespace Tango.MachineStudio.Developer.ViewModels { if (_notification.ShowQuestion("Are you sure you want to delete the selected jobs?")) { - var jobsToReport = SelectedJobs.Select(x => JobDTO.FromObservable(x)).ToList(); - LogManager.Log(String.Format("Removing {0} jobs...", SelectedJobs.Count)); SelectedJobs.ToList().ForEach(x => { @@ -2244,11 +2182,6 @@ namespace Tango.MachineStudio.Developer.ViewModels LogManager.Log("Saving selected machine to database..."); await SelectedMachine.SaveAsync(_machineDbContext); } - - foreach (var job in jobsToReport) - { - _actionLogManager.InsertLog(ActionLogType.JobDeleted, AuthenticationProvider.CurrentUser, job.Name, job, "Job deleted using Machine Studio.", true); - } } } } @@ -2269,8 +2202,6 @@ namespace Tango.MachineStudio.Developer.ViewModels var settings = SettingsManager.Default.GetOrCreate<DeveloperModuleSettings>(); Job newJob = new Job(); - newJob.LastUpdated = DateTime.UtcNow; - newJob.JobSource = JobSource.Remote; newJob.Name = jobName; newJob.CreationDate = DateTime.UtcNow; newJob.UserGuid = AuthenticationProvider.CurrentUser.Guid; @@ -2305,7 +2236,6 @@ namespace Tango.MachineStudio.Developer.ViewModels LogManager.Log("Saving selected machine to database..."); await SelectedMachine.SaveAsync(_machineDbContext); - _actionLogManager.InsertLog(ActionLogType.JobCreated, AuthenticationProvider.CurrentUser, newJob.Name, newJob, "Job created using Machine Studio."); SelectedMachineJob = newJob; LoadSelectedJob(); } @@ -2331,13 +2261,6 @@ namespace Tango.MachineStudio.Developer.ViewModels return; } SelectedSegment.BrushStops.Remove(x); - var existingBrushStop = _activeJobDbContext.BrushStops.FirstOrDefault(y => y.Guid == x.Guid); - if(existingBrushStop != null) - { - _activeJobDbContext.BrushStops.Remove(existingBrushStop); - } - - }); ArrangeBrushStopsIndices(); @@ -2352,7 +2275,7 @@ namespace Tango.MachineStudio.Developer.ViewModels { if (SelectedSegment != null) { - LogManager.Log($"Adding new brush stop to segment '{SelectedSegment.SegmentIndex}'..."); + LogManager.LogFormat("Adding new brush stop to segment...", SelectedSegment.SegmentIndex.ToString()); var stop = new BrushStop(); @@ -2372,7 +2295,6 @@ namespace Tango.MachineStudio.Developer.ViewModels stop.SetAllDispensingStepDivisions(BL.Dispensing.DispenserStepDivisions.D8); stop.SetLiquidVolumes(SelectedMachine.Configuration, SelectedRML, SelectedProcessParametersTable); SelectedSegment.BrushStops.Add(stop); - // _activeJobDbContext.BrushStops.Add(stop); SelectedSegment.BrushStops.ToList().ForEach(x => x.RaiseOffsetChanged()); ArrangeBrushStopsIndices(); } @@ -2383,7 +2305,7 @@ namespace Tango.MachineStudio.Developer.ViewModels /// </summary> private void DuplicateSelectedBrushStops() { - LogManager.Log($"Duplicating {SelectedBrushStops.Count} brush stops..."); + LogManager.LogFormat("Duplicating {0} brush stops...", SelectedBrushStops.Count); foreach (var stop in SelectedBrushStops.OrderBy(x => x.StopIndex)) { @@ -2401,7 +2323,7 @@ namespace Tango.MachineStudio.Developer.ViewModels /// </summary> private void DuplicateSelectedSegments() { - LogManager.Log($"Duplicating {SelectedSegments.Count} segments..."); + LogManager.LogFormat("Duplicating {0} segments...", SelectedSegments.Count); int start_index = SelectedSegments.Max(x => x.SegmentIndex); @@ -2429,7 +2351,7 @@ namespace Tango.MachineStudio.Developer.ViewModels { CanWork = false; - LogManager.Log($"Duplicating {SelectedJobs.Count} jobs..."); + LogManager.LogFormat("Duplicating {0} jobs...", SelectedJobs.Count); int index = SelectedMachine.Jobs.Max(x => x.JobIndex); @@ -2443,11 +2365,6 @@ namespace Tango.MachineStudio.Developer.ViewModels LogManager.Log("Saving selected machine to database..."); await SelectedMachine.SaveAsync(_machineDbContext); - foreach (var job in SelectedJobs) - { - _actionLogManager.InsertLog(ActionLogType.JobCreated, AuthenticationProvider.CurrentUser, job.Name, job, "Job cloned using Machine Studio."); - } - CanWork = true; } } @@ -2671,26 +2588,17 @@ namespace Tango.MachineStudio.Developer.ViewModels LogManager.Log($"Importing job files..."); - List<Job> jobsToReport = new List<Job>(); - foreach (var file in dlg.FileNames) { var bytes = File.ReadAllBytes(file); var jobFile = JobFile.Parser.ParseFrom(bytes); var job = await Job.FromJobFile(jobFile, SelectedMachine.Guid, AuthenticationProvider.CurrentUser.Guid); - job.JobSource = JobSource.Remote; _machineDbContext.Jobs.Add(job); - jobsToReport.Add(job); } await _machineDbContext.SaveChangesAsync(); - foreach (var job in jobsToReport) - { - _actionLogManager.InsertLog(ActionLogType.JobImported, AuthenticationProvider.CurrentUser, job.Name, job, "Job imported using Machine Studio."); - } - IsFree = true; _notification.ShowInfo($"Jobs imported successfully."); diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/InsufficientLiquidQuantityView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/InsufficientLiquidQuantityView.xaml index c0cb963e7..f0e9dc29c 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/InsufficientLiquidQuantityView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/InsufficientLiquidQuantityView.xaml @@ -5,10 +5,8 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:vm="clr-namespace:Tango.MachineStudio.Developer.ViewModels" xmlns:local="clr-namespace:Tango.MachineStudio.Developer.Views" - xmlns:material="http://materialdesigninxaml.net/winfx/xaml/themes" mc:Ignorable="d" - Height="590" Width="800" d:DataContext="{d:DesignInstance Type=vm:InsufficientLiquidQuantityViewVM, IsDesignTimeCreatable=False}" Foreground="{StaticResource Dialog.Foreground}" - Background="{StaticResource Dialog.Background}"> + Height="450" Width="800" Background="{StaticResource WhiteBackgroundBrush}" d:DataContext="{d:DesignInstance Type=vm:InsufficientLiquidQuantityViewVM, IsDesignTimeCreatable=False}"> <Grid Margin="10"> <DockPanel> <StackPanel DockPanel.Dock="Top"> @@ -25,60 +23,28 @@ <Button HorizontalAlignment="Right" DockPanel.Dock="Bottom" Height="40" Width="140" Command="{Binding CloseCommand}" Margin="10 0 0 0">CLOSE</Button> </Grid> - <Border Margin="0 20 0 0" Padding="10" BorderThickness="1" BorderBrush="{StaticResource BorderBrushGainsboro}" CornerRadius="3"> - <ItemsControl ItemsSource="{Binding Exception.IdsPackLevels}" VerticalAlignment="Top"> + <Border Margin="0 40 0 0" BorderThickness="1" BorderBrush="{StaticResource BorderBrushGainsboro}" CornerRadius="3"> + <ItemsControl ItemsSource="{Binding Exception.IdsPackLevels}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> - <StackPanel HorizontalAlignment="Left" VerticalAlignment="Center" Orientation="Vertical" IsItemsHost="True"></StackPanel> + <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal" IsItemsHost="True"></StackPanel> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> - <Grid Margin="0 0 0 4"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="40" /> - <ColumnDefinition Width="160" /> - <ColumnDefinition Width="1*" /> - </Grid.ColumnDefinitions> - <material:PackIcon VerticalAlignment="Center" Width="24" Height="24"> - <material:PackIcon.Style> - <Style TargetType="material:PackIcon"> - <Setter Property="Kind" Value="Check"></Setter> - <Setter Property="Foreground" Value="{StaticResource GreenBrush100}"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding IsValid}" Value="False"> - <Setter Property="Kind" Value="Alert"></Setter> - <Setter Property="Foreground" Value="{StaticResource OrangeBrush}"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsOverMax}" Value="True"> - <Setter Property="Kind" Value="AlertOctagon"></Setter> - <Setter Property="Foreground" Value="{StaticResource RedBrush100}"></Setter> - </DataTrigger> - <MultiDataTrigger> - <MultiDataTrigger.Conditions> - <Condition Binding="{Binding IsValid}" Value="True" /> - <Condition Binding="{Binding IsOverMax}" Value="False" /> - </MultiDataTrigger.Conditions> - <Setter Property="Kind" Value="Check"></Setter> - <Setter Property="Foreground" Value="{StaticResource GreenBrush100}"></Setter> - </MultiDataTrigger> - </Style.Triggers> - </Style> - </material:PackIcon.Style> - </material:PackIcon> - <!--<material:PackIcon Kind="AlertOctagon" VerticalAlignment="Center" Width="24" Height="24" Visibility="{Binding IsValid,Converter={StaticResource BoolToVisConverter}}" />--> - - <Border Grid.Column="1" Margin="5 0 0 0" Height="45" Width="150" CornerRadius="3" BorderThickness="1" BorderBrush="{StaticResource BorderBrushGainsboro}"> + <StackPanel Margin="15 0"> + <TextBlock HorizontalAlignment="Center" Text="{Binding IdsPack.LiquidType.Name}"></TextBlock> + <Border Margin="0 5 0 0" Height="150" Width="50" CornerRadius="3" BorderThickness="1" BorderBrush="{StaticResource BorderBrushGainsboro}"> <Grid> - <Border VerticalAlignment="Center" CornerRadius="3" Loaded="IdsPackLoaded" MinHeight="45" HorizontalAlignment="Left" MinWidth="5"> + <Border CornerRadius="3" VerticalAlignment="Bottom" Loaded="IdsPackLoaded" MinHeight="5"> <Border.Background> - <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> + <LinearGradientBrush> + <GradientStop Offset="0" Color="#4DFFFFFF" /> <GradientStop Offset="0.5" Color="{Binding IdsPack.LiquidType.LiquidTypeColor}" /> - <GradientStop Offset="1" Color="#4EFFFFFF" /> </LinearGradientBrush> </Border.Background> </Border> - <Rectangle Loaded="Limit_Loaded" Stroke="Red" StrokeThickness="2" HorizontalAlignment="Left"> + <Rectangle Loaded="Limit_Loaded" Stroke="Red" StrokeThickness="2" VerticalAlignment="Bottom"> <Rectangle.Style> <Style TargetType="Rectangle"> <Style.Triggers> @@ -103,18 +69,9 @@ </Style> </Rectangle.Style> </Rectangle> - - - <TextBlock Foreground="#3B3B3B" HorizontalAlignment="Center" Text="{Binding IdsPack.LiquidType.Name}" VerticalAlignment="Center"> - <TextBlock.Effect> - <DropShadowEffect ShadowDepth="1" BlurRadius="1" Color="White" /> - </TextBlock.Effect> - </TextBlock> - </Grid> </Border> - <TextBlock Grid.Column="2" HorizontalAlignment="Left" Text="{Binding Message}" VerticalAlignment="Center" Margin="20,0,0,0" TextWrapping="Wrap" Foreground="{StaticResource RedBrush100}"></TextBlock> - </Grid> + </StackPanel> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/InsufficientLiquidQuantityView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/InsufficientLiquidQuantityView.xaml.cs index 51cfb1e73..171cb754e 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/InsufficientLiquidQuantityView.xaml.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/InsufficientLiquidQuantityView.xaml.cs @@ -33,7 +33,7 @@ namespace Tango.MachineStudio.Developer.Views Grid parent = border.Parent as Grid; IDSPackLevel packLevel = border.DataContext as IDSPackLevel; - border.Width = ((double)packLevel.Current / (double)MachineOperator.MAX_DISPENSER_NANOLITER) * parent.ActualWidth; + border.Height = ((double)packLevel.Current / (double)MachineOperator.MAX_DISPENSER_NANOLITER) * parent.ActualHeight; } private void Limit_Loaded(object sender, RoutedEventArgs e) @@ -42,8 +42,8 @@ namespace Tango.MachineStudio.Developer.Views Grid parent = rect.Parent as Grid; IDSPackLevel packLevel = rect.DataContext as IDSPackLevel; - var left = ((double)packLevel.Required / (double)MachineOperator.MAX_DISPENSER_NANOLITER) * parent.ActualWidth; - rect.Margin = new Thickness(left, 0, 0, 0); + var top = ((double)packLevel.Required / (double)MachineOperator.MAX_DISPENSER_NANOLITER) * parent.ActualHeight; + rect.Margin = new Thickness(0, 0, 0, top); if (packLevel.IsValid) { 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 32b7ccd86..3bda86036 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 @@ -28,8 +28,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:Tango.MachineStudio.Developer.Views" 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}" x:Name="control"> + d:DesignHeight="1080" d:DesignWidth="1920" Background="Transparent" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}" x:Name="control"> <UserControl.Resources> @@ -242,93 +241,91 @@ </Style> <DataTemplate x:Key="Volume_Template"> - <StackPanel> - <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> - <StackPanel VerticalAlignment="Center"> - <ItemsControl VerticalAlignment="Center"> - <ItemsControl.Style> - <Style TargetType="ItemsControl"> - <Setter Property="ItemsSource" Value="{Binding LiquidVolumes}"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.Settings.UsePreferredLiquidVolumeIndex}" Value="True"> - <Setter Property="ItemsSource" Value="{Binding LiquidVolumesOrdered}"></Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </ItemsControl.Style> - <ItemsControl.ItemsPanel> - <ItemsPanelTemplate> - <StackPanel VerticalAlignment="Center" Orientation="Horizontal" IsItemsHost="True"></StackPanel> - </ItemsPanelTemplate> - </ItemsControl.ItemsPanel> - <ItemsControl.ItemTemplate> - <DataTemplate> - <Border> - <Border.Style> - <Style TargetType="Border"> - <Setter Property="Visibility" Value="Visible"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding IdsPack.IdsPackFormula.Name}" Value="Lubricant"> - <Setter Property="Visibility" Value="Collapsed"></Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </Border.Style> - <ContentControl Focusable="False" Style="{StaticResource numberBorder}" Margin="10 0 0 0" Width="60" Height="60"> - <ContentControl.Foreground> - <SolidColorBrush Color="{Binding IdsPack.LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"></SolidColorBrush> - </ContentControl.Foreground> - <mahapps:NumericUpDown ValueChanged="OnBrushStopFieldValueChanged" FontSize="{StaticResource NumbersFontSize}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding Volume, Mode=TwoWay}" Background="Transparent" Width="40" HideUpDownButtons="True" Minimum="0" Maximum="1000" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Center"> - <mahapps:NumericUpDown.Resources> - <StaticResource ResourceKey="SelectAllTextBoxResource"></StaticResource> - </mahapps:NumericUpDown.Resources> - </mahapps:NumericUpDown> - </ContentControl> - </Border> - </DataTemplate> - </ItemsControl.ItemTemplate> - </ItemsControl> + <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> + <StackPanel VerticalAlignment="Center"> + <ItemsControl VerticalAlignment="Center"> + <ItemsControl.Style> + <Style TargetType="ItemsControl"> + <Setter Property="ItemsSource" Value="{Binding LiquidVolumes}"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.Settings.UsePreferredLiquidVolumeIndex}" Value="True"> + <Setter Property="ItemsSource" Value="{Binding LiquidVolumesOrdered}"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </ItemsControl.Style> + <ItemsControl.ItemsPanel> + <ItemsPanelTemplate> + <StackPanel VerticalAlignment="Center" Orientation="Horizontal" IsItemsHost="True"></StackPanel> + </ItemsPanelTemplate> + </ItemsControl.ItemsPanel> + <ItemsControl.ItemTemplate> + <DataTemplate> + <Border> + <Border.Style> + <Style TargetType="Border"> + <Setter Property="Visibility" Value="Visible"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding IdsPack.IdsPackFormula.Name}" Value="Lubricant"> + <Setter Property="Visibility" Value="Collapsed"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Border.Style> + <ContentControl Focusable="False" Style="{StaticResource numberBorder}" Margin="10 0 0 0" Width="60" Height="60"> + <ContentControl.Foreground> + <SolidColorBrush Color="{Binding IdsPack.LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"></SolidColorBrush> + </ContentControl.Foreground> + <mahapps:NumericUpDown ValueChanged="OnBrushStopFieldValueChanged" FontSize="{StaticResource NumbersFontSize}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding Volume, Mode=TwoWay}" Background="Transparent" Width="40" HideUpDownButtons="True" Minimum="0" Maximum="1000" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Center"> + <mahapps:NumericUpDown.Resources> + <StaticResource ResourceKey="SelectAllTextBoxResource"></StaticResource> + </mahapps:NumericUpDown.Resources> + </mahapps:NumericUpDown> + </ContentControl> + </Border> + </DataTemplate> + </ItemsControl.ItemTemplate> + </ItemsControl> + + <StackPanel Orientation="Horizontal" Margin="30 10 0 0" Height="16" Visibility="{Binding IsLiquidVolumesOutOfRange,Converter={StaticResource BooleanToVisibilityConverter}}"> + <materialDesign:PackIcon Kind="Alert" Foreground="{StaticResource OrangeBrush}" /> + <TextBlock Margin="5 0 0 0" Foreground="{StaticResource OrangeBrush}">Liquid volumes exceeds the maximum range for color conversion!</TextBlock> </StackPanel> + </StackPanel> - <materialDesign:PackIcon Kind="ChevronDoubleLeft" Margin="40 2 0 0" VerticalAlignment="Center" Foreground="Gray" /> + <materialDesign:PackIcon Kind="ChevronDoubleLeft" Margin="40 2 0 0" VerticalAlignment="Center" Foreground="Gray" /> - <TextBlock VerticalAlignment="Center" FontSize="16" Margin="5 0 0 0" FontStyle="Italic" Foreground="Gray"> + <TextBlock VerticalAlignment="Center" FontSize="16" Margin="5 0 0 0" FontStyle="Italic" Foreground="Gray"> <Run>Total:</Run> <Run Text="{Binding TotalLiquidVolume,Mode=OneWay,StringFormat=0}"></Run><Run>%</Run> <Run>(</Run> <Run FontSize="10" Text="{Binding TotalLiquidNanoliterPerCentimeter,Mode=OneWay,StringFormat=0.00}"></Run> <Run FontSize="12">nl</Run> <Run>)</Run> - </TextBlock> + </TextBlock> - <Border Margin="60 0 0 0" DataContext="{Binding LiquidVolumes,Converter={StaticResource LiquidVolumesToLubricantLiquidVolume}}" BorderBrush="{StaticResource WhiteBrush100}" BorderThickness="1 0 0 0"> - <Border.Style> - <Style TargetType="Border"> - <Setter Property="Visibility" Value="Collapsed"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding Converter={StaticResource NullObjectToBooleanConverter}}" Value="True"> - <Setter Property="Visibility" Value="Visible"></Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </Border.Style> - <ContentControl Focusable="False" Style="{StaticResource numberBorder}" Margin="10 0 0 0" Width="55" Height="55"> - <ContentControl.Foreground> - <SolidColorBrush Color="{Binding IdsPack.LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"></SolidColorBrush> - </ContentControl.Foreground> - <mahapps:NumericUpDown Foreground="{StaticResource GrayBrush250}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" FontSize="20" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding Volume, Mode=TwoWay}" Background="Transparent" Width="40" HideUpDownButtons="True" Minimum="0" Maximum="1000" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Center"> - <mahapps:NumericUpDown.Resources> - <StaticResource ResourceKey="SelectAllTextBoxResource"></StaticResource> - </mahapps:NumericUpDown.Resources> - </mahapps:NumericUpDown> - </ContentControl> - </Border> - </StackPanel> - - <StackPanel Orientation="Horizontal" Margin="30 10 0 0" Height="16" Visibility="{Binding IsLiquidVolumesOutOfRange,Converter={StaticResource BooleanToVisibilityConverter}}"> - <materialDesign:PackIcon Kind="Alert" Foreground="{StaticResource OrangeBrush}" /> - <TextBlock Margin="5 0 0 0" Foreground="{StaticResource OrangeBrush}">Liquid volumes exceeds the maximum range for color conversion!</TextBlock> - </StackPanel> + <Border Margin="60 0 0 0" DataContext="{Binding LiquidVolumes,Converter={StaticResource LiquidVolumesToLubricantLiquidVolume}}" BorderBrush="{StaticResource WhiteBrush100}" BorderThickness="1 0 0 0"> + <Border.Style> + <Style TargetType="Border"> + <Setter Property="Visibility" Value="Collapsed"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding Converter={StaticResource NullObjectToBooleanConverter}}" Value="True"> + <Setter Property="Visibility" Value="Visible"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Border.Style> + <ContentControl Focusable="False" Style="{StaticResource numberBorder}" Margin="10 0 0 0" Width="55" Height="55"> + <ContentControl.Foreground> + <SolidColorBrush Color="{Binding IdsPack.LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"></SolidColorBrush> + </ContentControl.Foreground> + <mahapps:NumericUpDown Foreground="{StaticResource GrayBrush250}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" FontSize="20" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Value="{Binding Volume, Mode=TwoWay}" Background="Transparent" Width="40" HideUpDownButtons="True" Minimum="0" Maximum="1000" InterceptArrowKeys="True" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Center"> + <mahapps:NumericUpDown.Resources> + <StaticResource ResourceKey="SelectAllTextBoxResource"></StaticResource> + </mahapps:NumericUpDown.Resources> + </mahapps:NumericUpDown> + </ContentControl> + </Border> </StackPanel> </DataTemplate> @@ -680,7 +677,7 @@ </StackPanel> </Border> - <Border Style="{StaticResource JobFieldBorder}" Visibility="{Binding IsSideBarOpened,Converter={StaticResource BooleanToVisibilityInverseConverter}}"> + <Border Style="{StaticResource JobFieldBorder}"> <StackPanel Margin="20 5 5 5" Width="140"> <StackPanel Orientation="Horizontal"> <Image Source="../Images/repeat.png" Width="32"></Image> @@ -756,7 +753,7 @@ <StackPanel> <TextBlock>MEDIA</TextBlock> <StackPanel Orientation="Horizontal" DockPanel.Dock="Left"> - <controls:SearchComboBox Width="250" ItemsSource="{Binding Rmls}" SelectedItem="{Binding SelectedRML}" HorizontalContentAlignment="Stretch" SearchProperty="Name"> + <ComboBox Width="250" ItemsSource="{Binding Rmls}" SelectedItem="{Binding SelectedRML}" Style="{StaticResource TransparentComboBoxStyle}" HorizontalContentAlignment="Stretch"> <ComboBox.ItemTemplate> <DataTemplate> <DockPanel> @@ -771,7 +768,7 @@ </DockPanel> </DataTemplate> </ComboBox.ItemTemplate> - </controls:SearchComboBox> + </ComboBox> <!--<Button Margin="20 30 0 0" Command="{Binding EditRMLCommand}" HorizontalAlignment="Right" Style="{StaticResource MaterialDesignFlatButton}"> <StackPanel Orientation="Horizontal"> @@ -792,9 +789,9 @@ </StackPanel> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="60 40 180 0" Visibility="{Binding IsSideBarOpened,Converter={StaticResource BooleanToVisibilityInverseConverter}}"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0 40 180 0"> <materialDesign:PackIcon Kind="ChevronLeft" Width="24" Height="24" /> - <TextBlock Margin="0 -2 0 0" VerticalAlignment="Center"><Run>MEDIA LIQUIDS</Run> <Run FontSize="10" Foreground="{StaticResource DimGrayBrush}">( Max Nanolitter/CM )</Run></TextBlock> + <TextBlock Margin="0 -2 0 0" VerticalAlignment="Center"><Run>SUPPORTED MEDIA LIQUID</Run> <Run FontSize="10" Foreground="{StaticResource DimGrayBrush}">( Max Nanolitter/CM )</Run></TextBlock> <materialDesign:PackIcon Kind="ChevronRight" Width="24" Height="24" /> </StackPanel> @@ -898,7 +895,7 @@ </DockPanel> </Grid> <Grid Margin="0 10 10 0"> - <controls:MultiSelectListBox x:Name="listStops" ScrollViewer.HorizontalScrollBarVisibility="Disabled" AutomationProperties.AutomationId="{x:Static automation:Developer.BrushStopsListBox}" SelectionMode="Extended" Style="{x:Null}" Background="Transparent" ScrollViewer.CanContentScroll="False" BorderThickness="0" ItemsSource="{Binding BrushStopsCollectionView}" SelectedItem="{Binding SelectedBrushStop}" SelectedItemsList="{Binding SelectedBrushStops,Mode=TwoWay}" HorizontalContentAlignment="Stretch"> + <controls:MultiSelectListBox x:Name="listStops" AutomationProperties.AutomationId="{x:Static automation:Developer.BrushStopsListBox}" SelectionMode="Extended" Style="{x:Null}" Background="Transparent" ScrollViewer.CanContentScroll="False" BorderThickness="0" ItemsSource="{Binding BrushStopsCollectionView}" SelectedItem="{Binding SelectedBrushStop}" SelectedItemsList="{Binding SelectedBrushStops,Mode=TwoWay}" HorizontalContentAlignment="Stretch"> <ListBox.Template> <ControlTemplate TargetType="{x:Type ListBox}"> <Border x:Name="Bd" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" @@ -976,8 +973,7 @@ <Image Source="../Images/colorspace.png" Width="24"></Image> <TextBlock VerticalAlignment="Center" Margin="5 0 0 0" FontSize="10">Color Space</TextBlock> </StackPanel> - <ComboBox SelectionChanged="OnBrushStopColorSpace_SelectionChanged" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.ColorSpaces}" SelectedItem="{Binding ColorSpace}" DisplayMemberPath="Name" Width="100" HorizontalAlignment="Left" - Style="{StaticResource TransparentComboBoxStyle}" > + <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.ColorSpaces}" SelectedItem="{Binding ColorSpace}" DisplayMemberPath="Name" Width="100" HorizontalAlignment="Left"> <ComboBox.ItemContainerStyle> <Style TargetType="ComboBoxItem" BasedOn="{StaticResource {x:Type ComboBoxItem}}"> <Setter Property="Background" Value="{StaticResource WhiteBrush100}"></Setter> @@ -1191,41 +1187,6 @@ <Setter Property="Content"> <Setter.Value> <TextBlock> - <Run Text="{Binding PulsePerSecondFull,Mode=OneWay,StringFormat='0.0'}"></Run> - <Run Text="(pulse)" FontSize="9" Foreground="{StaticResource GrayBrush250}"></Run> - </TextBlock> - </Setter.Value> - </Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding DispenserStepDivision}" Value="{x:Static dispensing:DispenserStepDivisions.Auto}"> - <Setter Property="Content" Value="Auto"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding DispenserStepDivision,Converter={StaticResource IsNotConverter},ConverterParameter={x:Static dispensing:DispenserStepDivisions.Auto}}" Value="True"> - <Setter Property="Content"> - <Setter.Value> - <TextBlock> - <Run Text="{Binding PulsePerSecondFull,Mode=OneWay,StringFormat='0.0'}"></Run> - <Run Text="(pulse)" FontSize="9" Foreground="{StaticResource GrayBrush250}"></Run> - </TextBlock> - </Setter.Value> - </Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </Label.Style> - </Label> - </DataTemplate> - </DataGridTemplateColumn.CellTemplate> - </DataGridTemplateColumn> - <DataGridTemplateColumn Header="PULSE / SEC (full step)"> - <DataGridTemplateColumn.CellTemplate> - <DataTemplate> - <Label VerticalAlignment="Center"> - <Label.Style> - <Style TargetType="Label"> - <Setter Property="Content"> - <Setter.Value> - <TextBlock> <Run Text="{Binding PulsePerSecond,Mode=OneWay,StringFormat='0.0'}"></Run> <Run Text="(pulse)" FontSize="9" Foreground="{StaticResource GrayBrush250}"></Run> </TextBlock> @@ -1405,7 +1366,7 @@ <Grid Background="{StaticResource TransparentBackgroundBrush100}"> <Grid.Style> <Style TargetType="Grid"> - <Setter Property="Width" Value="640"></Setter> + <Setter Property="Width" Value="520"></Setter> <Setter Property="LayoutTransform"> <Setter.Value> <ScaleTransform ScaleY="1" ScaleX="0"></ScaleTransform> @@ -1520,7 +1481,7 @@ <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ContentControl"> - <Grid Width="97" ToolTip="{Binding Name}" Background="Transparent" ToolTipService.InitialShowDelay="1000" ToolTipService.BetweenShowDelay="1000"> + <Grid Width="97"> <Border> <Border.Style> <Style TargetType="Border"> @@ -1543,7 +1504,7 @@ </WrapPanel.Resources> - <editors:ParameterizedEditor ParameterizedObject="{Binding}"> + <editors:ParameterizedEditor ParameterizedObject="{Binding}" GeneratingItems="ParameterizedEditor_GeneratingItems"> <editors:ParameterizedEditor.ItemsPanel> <ItemsPanelTemplate> <WrapPanel IsItemsHost="True" Orientation="Horizontal" /> @@ -1551,11 +1512,11 @@ </editors:ParameterizedEditor.ItemsPanel> <editors:ParameterizedEditor.DoubleTemplate> <DataTemplate> - <Grid Background="Transparent"> + <Grid Background="Transparent" Style="{StaticResource draggableDroppableGrid}" dragAndDrop:DragAndDropService.Drop="OnProcessParameterDropped" dragAndDrop:DragAndDropService.DraggingSurface="{Binding RelativeSource={RelativeSource AncestorType=editors:ParameterizedEditor},Path=DraggingSurface}"> <ContentControl> <StackPanel> - <TextBlock ToolTip="{Binding Name}" IsHitTestVisible="False" Margin="0 5 0 5" Text="{Binding Name}" FontSize="11" Foreground="{StaticResource MainWindow.Foreground}"></TextBlock> - <mahapps:NumericUpDown FontSize="20" Minimum="0" Margin="0 0 5 0" HideUpDownButtons="True" HorizontalContentAlignment="Center" Maximum="10000" StringFormat="{Binding StringFormat}" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" Value="{Binding Value,Mode=TwoWay}" Foreground="{StaticResource MainWindow.Foreground}"></mahapps:NumericUpDown> + <TextBlock IsHitTestVisible="False" Margin="0 5 0 5" Text="{Binding Name}" FontSize="11" Foreground="{StaticResource MainWindow.Foreground}"></TextBlock> + <mahapps:NumericUpDown FontSize="20" Minimum="0" Margin="0 0 5 0" HideUpDownButtons="True" HorizontalContentAlignment="Center" Maximum="10000" StringFormat="0.0" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" Value="{Binding Value,Mode=TwoWay}" Foreground="{StaticResource MainWindow.Foreground}"></mahapps:NumericUpDown> </StackPanel> </ContentControl> </Grid> @@ -1611,17 +1572,16 @@ <StackPanel Orientation="Horizontal"> <ToggleButton IsChecked="{Binding AutoProcessSelection}" /> - <TextBlock Margin="5 3 0 0">Use Recommended Process Parameters (auto)</TextBlock> + <TextBlock Margin="5 0 0 0">Use Recommended Process Parameters (auto)</TextBlock> </StackPanel> - <Grid Margin="0 40 0 0" > - <Button HorizontalAlignment="Left" Height="40" Width="105" Command="{Binding ResetProcessParametersCommand}" Background="Transparent" BorderBrush="{StaticResource DarkGrayBrush200}" Foreground="{StaticResource DarkGrayBrush200}" Margin="0 2 10 0" ToolTip="Resets the current process parameters in the embedded device"> + <StackPanel Margin="0 40 0 0" Orientation="Horizontal" HorizontalAlignment="Right"> + <Button Height="40" Width="105" Command="{Binding ResetProcessParametersCommand}" Background="Transparent" BorderBrush="{StaticResource DarkGrayBrush200}" Foreground="{StaticResource DarkGrayBrush200}" Margin="0 2 10 0" ToolTip="Resets the current process parameters in the embedded device"> <TextBlock TextWrapping="Wrap" TextAlignment="Center"> TEMP OFF </TextBlock> </Button> - <StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> - <Button Height="40" Command="{Binding SaveProcessParametersCommand}" HorizontalAlignment="Left" IsEnabled="{Binding AuthenticationProvider.CurrentUser,Converter={StaticResource UserRoleToBooleanConverter},ConverterParameter='Researcher'}"> + <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> @@ -1634,7 +1594,6 @@ </StackPanel> </Button> </StackPanel> - </Grid> </StackPanel> </StackPanel> </Grid> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml.cs index 94c1ed802..28e488aae 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml.cs @@ -159,6 +159,46 @@ namespace Tango.MachineStudio.Developer.Views e.Handled = true; } + private void ParameterizedEditor_GeneratingItems(object sender, SharedUI.Editors.ParameterizedEditor.GeneratingItemsEventArgs e) + { + var settings = SettingsManager.Default.GetOrCreate<DeveloperModuleSettings>(); + + List<ParameterItem> items = e.Result.ToList(); + + if (settings.ProcessParametersIndices.Count > 0) + { + items.Clear(); + + foreach (var item in settings.ProcessParametersIndices.OrderBy(x => x.Index)) + { + var p = e.Source.SingleOrDefault(x => x.Name == item.Name); + + if (p != null) + { + items.Add(p); + } + } + } + else + { + ProcessParametersTable p = new ProcessParametersTable(); + var pp = p.CreateParametersCollection(Core.ParameterItemMode.Binding); + + foreach (var item in pp) + { + settings.ProcessParametersIndices.Add(new ParameterIndex() + { + Index = pp.IndexOf(item), + Name = item.Name + }); + } + + settings.Save(); + } + + e.Result = items; + } + private void OnProcessParameterDropped(object sender, DropEventArgs e) { ParameterItem draggedItem = e.Draggable.DataContext as ParameterItem; @@ -281,10 +321,5 @@ namespace Tango.MachineStudio.Developer.Views { listStops.SelectedItem = (sender as ListBoxItem).DataContext; } - - private void OnBrushStopColorSpace_SelectionChanged(object sender, SelectionChangedEventArgs e) - { - _vm.OnBrushStopColorSpaceChanged((sender as ComboBox).DataContext as BrushStop); - } } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/MachineJobSelectionView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/MachineJobSelectionView.xaml index a3d2dbd68..f8a10e7c4 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/MachineJobSelectionView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/MachineJobSelectionView.xaml @@ -64,7 +64,7 @@ <Grid DockPanel.Dock="Top"> <StackPanel> <StackPanel Orientation="Horizontal"> - <Image Source="{StaticResource MachineSmall}" RenderOptions.BitmapScalingMode="Fant" Width="50"></Image> + <Image Source="../Images/machine-trans.png" RenderOptions.BitmapScalingMode="Fant" Width="50"></Image> <TextBlock VerticalAlignment="Center" FontWeight="SemiBold" Margin="30 0 0 0" FontSize="30" FontStyle="Italic">MACHINE JOBS</TextBlock> </StackPanel> <Rectangle HorizontalAlignment="Stretch" Margin="0 10 0 0" VerticalAlignment="Bottom" StrokeThickness="1" Height="3"> @@ -125,7 +125,7 @@ <Grid Margin="0 20 0 0"> <commonControls:LoadingPanel IsLoading="{Binding CanWork,Converter={StaticResource BooleanInverseConverter}}"> - <controls:MultiSelectDataGrid DoubleClickCommand="{Binding LoadJobCommand}" AutomationProperties.AutomationId="{x:Static automation:Developer.JobsDataGrid}" Style="{StaticResource {x:Type DataGrid}}" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeColumns="True" CanUserSortColumns="True" AutoGenerateColumns="False" Background="Transparent" ItemsSource="{Binding JobsCollectionView}" SelectedItem="{Binding SelectedMachineJob}" SelectedItemsList="{Binding SelectedJobs,Mode=TwoWay}"> + <controls:MultiSelectDataGrid MouseDoubleClick="MultiSelectDataGrid_MouseDoubleClick" AutomationProperties.AutomationId="{x:Static automation:Developer.JobsDataGrid}" Style="{StaticResource {x:Type DataGrid}}" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeColumns="True" CanUserSortColumns="True" AutoGenerateColumns="False" Background="Transparent" ItemsSource="{Binding JobsCollectionView}" SelectedItem="{Binding SelectedMachineJob}" SelectedItemsList="{Binding SelectedJobs,Mode=TwoWay}"> <DataGrid.CellStyle> <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> <Setter Property="BorderThickness" Value="0"/> @@ -190,10 +190,10 @@ </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> - <DataGridTemplateColumn Header="CREATED BY" Width="100" CanUserSort="True" SortMemberPath="User.Contact.FirstName"> + <DataGridTemplateColumn Header="CREATED BY" Width="100" CanUserSort="True" SortMemberPath="User"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> - <TextBlock Text="{Binding User.Contact.FirstName,TargetNullValue='PPC',FallbackValue='PPC'}" VerticalAlignment="Center" FontSize="14"></TextBlock> + <TextBlock Text="{Binding User.Contact.FirstName}" VerticalAlignment="Center" FontSize="14"></TextBlock> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/MainView.xaml index d0caa2447..abea6aec9 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/MainView.xaml @@ -330,36 +330,31 @@ <Rectangle Height="30" Margin="0 10 0 0" VerticalAlignment="Center" Fill="{Binding SegmentBrush}"> </Rectangle> - - <Grid Height="30"> - <TextBlock Visibility="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DataContext.RunningJobStatus.IsFinalizing, Converter={StaticResource BooleanToVisibilityConverter}}" VerticalAlignment="Center" Background="Transparent" FontSize="12" Foreground="{StaticResource RedBrush100}">Finalizing...</TextBlock> - <Canvas Height="30" HorizontalAlignment="Center" Width="80"> - <Label Padding="0" Margin="0"> - <Label.Style> - <Style TargetType="Label"> - <Setter Property="Content" Value="{x:Null}"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding Started}" Value="True"> - <Setter Property="Content"> - <Setter.Value> - <TextBlock Text="{Binding RemainingTime,StringFormat=hh\\:mm\\:ss}" Foreground="{StaticResource RedBrush300}" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Margin="10" FontSize="20"></TextBlock> - </Setter.Value> - </Setter> - </DataTrigger> - <DataTrigger Binding="{Binding Completed}" Value="True"> - <Setter Property="Content"> - <Setter.Value> - <materialDesign:PackIcon Margin="30 10 0 0" HorizontalAlignment="Center" Width="24" Height="24" Kind="Check" Foreground="#47FF00" /> - </Setter.Value> - </Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </Label.Style> - </Label> - </Canvas> - </Grid> - + <Canvas Height="30" HorizontalAlignment="Center" Width="80"> + <Label Padding="0" Margin="0"> + <Label.Style> + <Style TargetType="Label"> + <Setter Property="Content" Value="{x:Null}"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding Started}" Value="True"> + <Setter Property="Content"> + <Setter.Value> + <TextBlock Text="{Binding RemainingTime,StringFormat=hh\\:mm\\:ss}" Foreground="{StaticResource RedBrush300}" FontFamily="{StaticResource digital-7}" HorizontalAlignment="Center" Margin="10" FontSize="20"></TextBlock> + </Setter.Value> + </Setter> + </DataTrigger> + <DataTrigger Binding="{Binding Completed}" Value="True"> + <Setter Property="Content"> + <Setter.Value> + <materialDesign:PackIcon Margin="30 10 0 0" HorizontalAlignment="Center" Width="24" Height="24" Kind="Check" Foreground="#47FF00" /> + </Setter.Value> + </Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </Label.Style> + </Label> + </Canvas> </StackPanel> <Rectangle HorizontalAlignment="Right" Stroke="White" Margin="0 35 0 25" ></Rectangle> @@ -413,7 +408,8 @@ </Grid> </DockPanel> - </Grid> + <TextBlock Visibility="{Binding RunningJobStatus.IsFinalizing,Converter={StaticResource BooleanToVisibilityConverter}}" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="-170 0 0 0" Background="{StaticResource DarkGrayBrush}" FontSize="14" Height="30" Foreground="{StaticResource RedBrush100}">Finalizing...</TextBlock> + </Grid> </Border> <ProgressBar IsIndeterminate="True" VerticalAlignment="Bottom" Height="3" Visibility="{Binding IsJobRunning,Converter={StaticResource BooleanToVisibilityConverter}}"></ProgressBar> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/RunningJobView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/RunningJobView.xaml index 0400ee7e6..e7f16146b 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/RunningJobView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/RunningJobView.xaml @@ -208,7 +208,7 @@ </Grid> </Grid> - <Grid HorizontalAlignment="Right" Margin="0 0 0 82"> + <Grid HorizontalAlignment="Right"> <ContentControl Content="{Binding}"> <ContentControl.Style> <Style TargetType="ContentControl"> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner_ijdp5tm3_wpftmp.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner_ijdp5tm3_wpftmp.csproj deleted file mode 100644 index 0ef643858..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Tango.MachineStudio.HardwareDesigner_ijdp5tm3_wpftmp.csproj +++ /dev/null @@ -1,184 +0,0 @@ -<?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>{69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}</ProjectGuid> - <OutputType>library</OutputType> - <RootNamespace>Tango.MachineStudio.HardwareDesigner</RootNamespace> - <AssemblyName>Tango.MachineStudio.HardwareDesigner</AssemblyName> - <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> - <FileAlignment>512</FileAlignment> - <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>..\..\..\Build\Machine Studio\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\Machine Studio\Release\</OutputPath> - <DefineConstants>TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup> - <Compile Include="..\..\..\Versioning\GlobalVersionInfo.cs"> - <Link>GlobalVersionInfo.cs</Link> - </Compile> - <Compile Include="Comparison\HardwareCompareResult.cs" /> - <Compile Include="Comparison\HardwareComponentCollectionCompareResult.cs" /> - <Compile Include="Comparison\HardwareComponentCompareResult.cs" /> - <Compile Include="Comparison\HardwareComponentPropertyResult.cs" /> - <Compile Include="Comparison\IHasDifference.cs" /> - <Compile Include="Report\ReportModel.cs" /> - <Compile Include="ViewModelLocator.cs" /> - <Compile Include="ViewModels\ComparisonWizardViewVM.cs" /> - <Compile Include="Views\ComparisonWizardView.xaml.cs"> - <DependentUpon>ComparisonWizardView.xaml</DependentUpon> - </Compile> - <Compile Include="ViewModels\MainViewVM.cs" /> - <Compile Include="Views\MainView.xaml.cs"> - <DependentUpon>MainView.xaml</DependentUpon> - </Compile> - <Compile Include="HardwareDesignerModule.cs" /> - </ItemGroup> - <ItemGroup> - <Compile Include="Properties\AssemblyInfo.cs"> - <SubType>Code</SubType> - </Compile> - <Compile Include="Properties\Resources.Designer.cs"> - <AutoGen>True</AutoGen> - <DesignTime>True</DesignTime> - <DependentUpon>Resources.resx</DependentUpon> - </Compile> - <Compile Include="Properties\Settings.Designer.cs"> - <AutoGen>True</AutoGen> - <DependentUpon>Settings.settings</DependentUpon> - <DesignTimeSharedInput>True</DesignTimeSharedInput> - </Compile> - <EmbeddedResource Include="Properties\Resources.resx"> - <Generator>ResXFileCodeGenerator</Generator> - <LastGenOutput>Resources.Designer.cs</LastGenOutput> - </EmbeddedResource> - <None Include="app.config" /> - <None Include="packages.config" /> - <None Include="Properties\Settings.settings"> - <Generator>SettingsSingleFileGenerator</Generator> - <LastGenOutput>Settings.Designer.cs</LastGenOutput> - </None> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\..\..\Tango.BL\Tango.BL.csproj"> - <Project>{f441feee-322a-4943-b566-110e12fd3b72}</Project> - <Name>Tango.BL</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Core\Tango.Core.csproj"> - <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project> - <Name>Tango.Core</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.CSV\Tango.CSV.csproj"> - <Project>{58e8825f-0c96-449c-b320-1e82b0aa876b}</Project> - <Name>Tango.CSV</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.DragAndDrop\Tango.DragAndDrop.csproj"> - <Project>{b112d89a-a106-41ae-a0c1-4abc84c477f5}</Project> - <Name>Tango.DragAndDrop</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Integration\Tango.Integration.csproj"> - <Project>{4206ac58-3b57-4699-8835-90bf6db01a61}</Project> - <Name>Tango.Integration</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Logging\Tango.Logging.csproj"> - <Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project> - <Name>Tango.Logging</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Settings\Tango.Settings.csproj"> - <Project>{d8f1ad85-526a-4f50-b6dc-d437af63d8d8}</Project> - <Name>Tango.Settings</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.SharedUI\Tango.SharedUI.csproj"> - <Project>{8491d07b-c1f6-4b62-a412-41b9fd2d6538}</Project> - <Name>Tango.SharedUI</Name> - </ProjectReference> - <ProjectReference Include="..\..\Tango.MachineStudio.Common\Tango.MachineStudio.Common.csproj"> - <Project>{cb0b0aa2-bb24-4bca-a720-45e397684e12}</Project> - <Name>Tango.MachineStudio.Common</Name> - </ProjectReference> - </ItemGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup> - </ItemGroup> - <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" /> - </VisualStudio> - </ProjectExtensions> - <ItemGroup> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\packages\MahApps.Metro.1.5.0\lib\net45\MahApps.Metro.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\packages\MaterialDesignColors.1.1.2\lib\net45\MaterialDesignColors.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\packages\MaterialDesignThemes.2.3.1.953\lib\net45\MaterialDesignThemes.Wpf.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Microsoft.CSharp.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\PresentationCore.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\PresentationFramework.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.ComponentModel.DataAnnotations.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Core.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.DataSetExtensions.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\packages\Expression.Blend.Sdk.1.0.2\lib\net45\System.Windows.Interactivity.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xaml.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml.Linq.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.BL.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.Core.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.CSV.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.DragAndDrop.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.Integration.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.Logging.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Machine Studio\Debug\Tango.MachineStudio.Common.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.Settings.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.SharedUI.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\WindowsBase.dll" /> - </ItemGroup> - <ItemGroup> - <Compile Include="C:\DATA\Development\Tango\Software\Visual_Studio\MachineStudio\Modules\Tango.MachineStudio.HardwareDesigner\obj\Debug\App.g.cs" /> - <Compile Include="C:\DATA\Development\Tango\Software\Visual_Studio\MachineStudio\Modules\Tango.MachineStudio.HardwareDesigner\obj\Debug\Views\ComparisonWizardView.g.cs" /> - <Compile Include="C:\DATA\Development\Tango\Software\Visual_Studio\MachineStudio\Modules\Tango.MachineStudio.HardwareDesigner\obj\Debug\Views\MainView.g.cs" /> - </ItemGroup> -</Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/ComparisonWizardViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/ComparisonWizardViewVM.cs index a58d69a93..47a40ade4 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/ComparisonWizardViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/ComparisonWizardViewVM.cs @@ -281,7 +281,6 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels collection.Components.Add(componentResult); } - collection.Components = collection.Components.OrderByAlphaNumeric(x => x.ComponentName).ToSynchronizedObservableCollection(); return collection; } @@ -304,7 +303,6 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels collection.Components.Add(componentResult); } - collection.Components = collection.Components.OrderByAlphaNumeric(x => x.ComponentName).ToSynchronizedObservableCollection(); return collection; } @@ -327,7 +325,6 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels collection.Components.Add(componentResult); } - collection.Components = collection.Components.OrderByAlphaNumeric(x => x.ComponentName).ToSynchronizedObservableCollection(); return collection; } @@ -350,7 +347,6 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels collection.Components.Add(componentResult); } - collection.Components = collection.Components.OrderByAlphaNumeric(x => x.ComponentName).ToSynchronizedObservableCollection(); return collection; } @@ -373,7 +369,6 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels collection.Components.Add(componentResult); } - collection.Components = collection.Components.OrderByAlphaNumeric(x => x.ComponentName).ToSynchronizedObservableCollection(); return collection; } @@ -396,7 +391,6 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels collection.Components.Add(componentResult); } - collection.Components = collection.Components.OrderByAlphaNumeric(x => x.ComponentName).ToSynchronizedObservableCollection(); return collection; } @@ -419,7 +413,6 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels collection.Components.Add(componentResult); } - collection.Components = collection.Components.OrderByAlphaNumeric(x => x.ComponentName).ToSynchronizedObservableCollection(); return collection; } @@ -439,6 +432,7 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels result.Properties.Add(hProp); } + return result; } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs index 47fe19a05..40dc82d29 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/ViewModels/MainViewVM.cs @@ -16,9 +16,6 @@ using Tango.Core.ExtensionMethods; using Tango.MachineStudio.HardwareDesigner.Views; using Microsoft.Win32; using System.IO; -using Tango.BL.ActionLogs; -using Tango.MachineStudio.Common.Authentication; -using Tango.BL.DTO; namespace Tango.MachineStudio.HardwareDesigner.ViewModels { @@ -27,9 +24,6 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels private INotificationProvider _notification; private bool _isNew; private ObservablesContext _db; - private IActionLogManager _actionLogManager; - private IAuthenticationProvider _authentication; - private HardwareVersionDTO _hwBeforeSave; private HardwareVersion _selectedVersion; public HardwareVersion SelectedVersion @@ -51,8 +45,6 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels get { return _selectedHardwareObject; } set { - _selectedHardwareObject = null; - RaisePropertyChangedAuto(); _selectedHardwareObject = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(SelectedHardwareObjectTypeName)); @@ -121,11 +113,9 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels public RelayCommand ImportHardwareVersionCommand { get; set; } - public MainViewVM(INotificationProvider notification, IActionLogManager actionLogManager, IAuthenticationProvider authentication) + public MainViewVM(INotificationProvider notification) { _notification = notification; - _actionLogManager = actionLogManager; - _authentication = authentication; CurrentVersion = new HardwareVersion(); @@ -193,8 +183,6 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels _db.HardwareVersions.Add(hv); await _db.SaveChangesAsync(); - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.HardwareVersionImported, _authentication.CurrentUser, CurrentVersion.Name, CurrentVersion, "New hardware version imported using Machine Studio."); - RefreshVersions(); InvokeUI(() => @@ -233,7 +221,7 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels private void CopyParameters(object obj) { - obj.MapPropertiesTo(SelectedHardwareObject, MappingFlags.ValueTypesOnly, + obj.MapPrimitivesTo(SelectedHardwareObject, (prop) => !prop.PropertyType.IsEnum && @@ -248,20 +236,20 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels _db = ObservablesContext.CreateDefault(); - CurrentVersion.HardwareMotors = _db.HardwareMotorTypes.ToList().Select(x => new HardwareMotor() { HardwareMotorType = x }).OrderByAlphaNumeric(x => x.HardwareMotorType.Description).ToSynchronizedObservableCollection(); - CurrentVersion.HardwareDancers = _db.HardwareDancerTypes.ToList().Select(x => new HardwareDancer() { HardwareDancerType = x }).OrderByAlphaNumeric(x => x.HardwareDancerType.Description).ToSynchronizedObservableCollection(); - CurrentVersion.HardwarePidControls = _db.HardwarePidControlTypes.ToList().Select(x => new HardwarePidControl() { HardwarePidControlType = x }).OrderByAlphaNumeric(x => x.HardwarePidControlType.Description).ToSynchronizedObservableCollection(); - CurrentVersion.HardwareWinders = _db.HardwareWinderTypes.ToList().Select(x => new HardwareWinder() { HardwareWinderType = x }).OrderByAlphaNumeric(x => x.HardwareWinderType.Description).ToSynchronizedObservableCollection(); - CurrentVersion.HardwareSpeedSensors = _db.HardwareSpeedSensorTypes.ToList().Select(x => new HardwareSpeedSensor() { HardwareSpeedSensorType = x }).OrderByAlphaNumeric(x => x.HardwareSpeedSensorType.Description).ToSynchronizedObservableCollection(); - CurrentVersion.HardwareBlowers = _db.HardwareBlowerTypes.ToList().Select(x => new HardwareBlower() { HardwareBlowerType = x }).OrderByAlphaNumeric(x => x.HardwareBlowerType.Description).ToSynchronizedObservableCollection(); - CurrentVersion.HardwareBreakSensors = _db.HardwareBreakSensorTypes.ToList().Select(x => new HardwareBreakSensor() { HardwareBreakSensorType = x }).OrderByAlphaNumeric(x => x.HardwareBreakSensorType.Description).ToSynchronizedObservableCollection(); + CurrentVersion.HardwareMotors = _db.HardwareMotorTypes.ToList().Select(x => new HardwareMotor() { HardwareMotorType = x }).ToSynchronizedObservableCollection(); + CurrentVersion.HardwareDancers = _db.HardwareDancerTypes.ToList().Select(x => new HardwareDancer() { HardwareDancerType = x }).ToSynchronizedObservableCollection(); + CurrentVersion.HardwarePidControls = _db.HardwarePidControlTypes.ToList().Select(x => new HardwarePidControl() { HardwarePidControlType = x }).ToSynchronizedObservableCollection(); + CurrentVersion.HardwareWinders = _db.HardwareWinderTypes.ToList().Select(x => new HardwareWinder() { HardwareWinderType = x }).ToSynchronizedObservableCollection(); + CurrentVersion.HardwareSpeedSensors = _db.HardwareSpeedSensorTypes.ToList().Select(x => new HardwareSpeedSensor() { HardwareSpeedSensorType = x }).ToSynchronizedObservableCollection(); + CurrentVersion.HardwareBlowers = _db.HardwareBlowerTypes.ToList().Select(x => new HardwareBlower() { HardwareBlowerType = x }).ToSynchronizedObservableCollection(); + CurrentVersion.HardwareBreakSensors = _db.HardwareBreakSensorTypes.ToList().Select(x => new HardwareBreakSensor() { HardwareBreakSensorType = x }).ToSynchronizedObservableCollection(); } private void RefreshVersions() { using (var db = ObservablesContext.CreateDefault()) { - _hardwareVersions = db.HardwareVersions.OrderByDescending(x => x.Version).ToObservableCollection(); + _hardwareVersions = db.HardwareVersions.ToObservableCollection(); InvokeUI(() => { RaisePropertyChanged(nameof(HardwareVersions)); @@ -349,8 +337,6 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels }); CurrentVersion.HardwareBreakSensors = CurrentVersion.HardwareBreakSensors.OrderBy(x => x.HardwareBreakSensorType.Code).ToSynchronizedObservableCollection(); - - _hwBeforeSave = HardwareVersionDTO.FromObservable(CurrentVersion); }); } @@ -360,34 +346,24 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels { using (_notification.PushTaskItem("Loading hardware version...")) { - try + IsFree = false; + + await Task.Factory.StartNew(() => { - IsFree = false; + _isNew = false; + var selectedVersion = SelectedVersion; + RefreshVersions(); + var version = _hardwareVersions.SingleOrDefault(X => X.Guid == selectedVersion.Guid); + CreateVersionView(SelectedVersion); - await Task.Factory.StartNew(() => + InvokeUI(() => { - _isNew = false; - var selectedVersion = SelectedVersion; - RefreshVersions(); - var version = _hardwareVersions.SingleOrDefault(X => X.Guid == selectedVersion.Guid); - CreateVersionView(SelectedVersion); - - InvokeUI(() => - { - _selectedVersion = version; - RaisePropertyChanged(nameof(SelectedVersion)); - }); + _selectedVersion = version; + RaisePropertyChanged(nameof(SelectedVersion)); }); - } - catch (Exception ex) - { - LogManager.Log(ex, "Error loading hardware version."); - _notification.ShowError($"Error loading the selected hardware version.\n{ex.FlattenMessage()}"); - } - finally - { - IsFree = true; - } + }); + + IsFree = true; } } @@ -415,8 +391,6 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels _db.HardwareVersions.Add(CurrentVersion); _db.SaveChanges(); - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.HardwareVersionCreated, _authentication.CurrentUser, CurrentVersion.Name, CurrentVersion, "New hardware version created using Machine Studio."); - RefreshVersions(); InvokeUI(() => @@ -444,13 +418,7 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels await Task.Factory.StartNew(() => { - CurrentVersion.LastUpdated = DateTime.UtcNow; _db.SaveChanges(); - - var dtoAfter = HardwareVersionDTO.FromObservable(CurrentVersion); - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.HardwareVersionSaved, _authentication.CurrentUser, _hwBeforeSave.Name, _hwBeforeSave, dtoAfter, "Hardware Version saved using Machine Studio."); - _hwBeforeSave = dtoAfter; - RefreshVersions(); InvokeUI(() => @@ -492,9 +460,6 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels cloned.Version = HardwareVersions.Max(x => x.Version) + 1; _db.HardwareVersions.Add(cloned); _db.SaveChanges(); - - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.HardwareVersionCreated, _authentication.CurrentUser, cloned.Name, cloned, "New hardware version cloned using Machine Studio."); - RefreshVersions(); InvokeUI(() => @@ -530,8 +495,6 @@ namespace Tango.MachineStudio.HardwareDesigner.ViewModels await CurrentVersion.DeleteCascadeAsync(_db); - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.HardwareVersionDeleted, _authentication.CurrentUser, CurrentVersion.Name, _hwBeforeSave, "Hardware version deleted using Machine Studio.", true); - await Task.Factory.StartNew(() => { SelectedVersion = null; diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/MainView.xaml index 9ee2ffee7..1c00397aa 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.HardwareDesigner/Views/MainView.xaml @@ -9,7 +9,6 @@ xmlns:editors="clr-namespace:Tango.SharedUI.Editors;assembly=Tango.SharedUI" xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" xmlns:entities="clr-namespace:Tango.BL.Entities;assembly=Tango.BL" - xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" xmlns:local="clr-namespace:Tango.MachineStudio.HardwareDesigner.Views" xmlns:vm="clr-namespace:Tango.MachineStudio.HardwareDesigner.ViewModels" xmlns:observables="clr-namespace:Tango.BL.Entities;assembly=Tango.BL" @@ -58,14 +57,14 @@ <TextBlock FontSize="30" FontStyle="Italic" VerticalAlignment="Center" Margin="50 10 10 0" Foreground="Silver" FontWeight="Bold">HARDWARE DESIGNER</TextBlock> <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="10 10 0 0"> <materialDesign:PackIcon Kind="Pencil" Width="32" Height="32" Foreground="Silver" /> - <controls:SearchComboBox IsEnabled="{Binding IsFree}" ItemsSource="{Binding HardwareVersions}" SelectedItem="{Binding SelectedVersion}" Width="300" SearchProperty="FullName" FontSize="16" FontWeight="Bold" Margin="5 0 0 0" materialDesign:HintAssist.Hint="Hardware Version"> + <ComboBox IsEnabled="{Binding IsFree}" ItemsSource="{Binding HardwareVersions}" SelectedItem="{Binding SelectedVersion}" Width="300" FontSize="16" FontWeight="Bold" Margin="5 0 0 0" materialDesign:HintAssist.Hint="Hardware Version"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock><Run Text="{Binding Name}"></Run> <Run></Run> <Run Foreground="{StaticResource MainWindow.Foreground}" FontSize="14">v</Run><Run Foreground="{StaticResource MainWindow.Foreground}" FontSize="14" Text="{Binding Version}"></Run></TextBlock> </DataTemplate> </ComboBox.ItemTemplate> - </controls:SearchComboBox> - + </ComboBox> + </StackPanel> <Button Margin="100 10 0 0" Cursor="Hand" Height="40" FontSize="12" ToolTip="Open Comparison Wizard" Command="{Binding OpenComparisonWizardCommand}"> <StackPanel Orientation="Horizontal"> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/ViewModels/ApplicationLogsViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/ViewModels/ApplicationLogsViewVM.cs index a384c133d..91cc677e0 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/ViewModels/ApplicationLogsViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/ViewModels/ApplicationLogsViewVM.cs @@ -59,14 +59,14 @@ namespace Tango.MachineStudio.Logging.ViewModels } } - private bool _processDebugLogs; + private bool _displayDebug; /// <summary> /// Gets or sets a value indicating whether display debug logs. /// </summary> - public bool ProcessDebugLogs + public bool DisplayDebug { - get { return _processDebugLogs; } - set { _processDebugLogs = value; RaisePropertyChangedAuto(); OnProcessDebugLogsChanged(); } + get { return _displayDebug; } + set { _displayDebug = value; RaisePropertyChangedAuto(); } } private LogItemBase _selectedLog; @@ -184,18 +184,6 @@ namespace Tango.MachineStudio.Logging.ViewModels _is_debug = LogManager.Categories.Contains(LogCategory.Debug); } - private void OnProcessDebugLogsChanged() - { - if (ProcessDebugLogs) - { - LogManager.Categories.Add(LogCategory.Debug); - } - else - { - LogManager.Categories.RemoveAll(x => x == LogCategory.Debug); - } - } - private void ApplyLogsFilter() { if ((_realTimePaused && _isRealTime) || !_isRealTime) @@ -216,6 +204,8 @@ namespace Tango.MachineStudio.Logging.ViewModels private void LogManager_NewLog(object sender, LogItemBase log) { + if (log.Category == LogCategory.Debug && !DisplayDebug) return; + if (!RealTimePaused) { InvokeUI(() => diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Views/ApplicationLogsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Views/ApplicationLogsView.xaml index 486c0751d..4c291d0df 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Views/ApplicationLogsView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Views/ApplicationLogsView.xaml @@ -114,7 +114,7 @@ </StackPanel> </Border> - <CheckBox VerticalAlignment="Center" Margin="20 0 0 0" IsChecked="{Binding ProcessDebugLogs}" IsEnabled="{Binding IsRealTime}" ToolTip="Allow incoming real-time debug logs">Enable Debug Logs</CheckBox> + <CheckBox VerticalAlignment="Center" Margin="20 0 0 0" IsChecked="{Binding DisplayDebug}" IsEnabled="{Binding IsRealTime}" ToolTip="Hide/Display debug logs (applies only when debug logs are enabled in the settings file)">Process Debug Logs</CheckBox> </StackPanel> <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0 0 30 0"> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Views/EmbeddedLogDetailsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Views/EmbeddedLogDetailsView.xaml index e87609b88..e79fd0ad2 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Views/EmbeddedLogDetailsView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Views/EmbeddedLogDetailsView.xaml @@ -10,7 +10,7 @@ xmlns:entities="clr-namespace:Tango.BL.Entities;assembly=Tango.BL" xmlns:local="clr-namespace:Tango.MachineStudio.Logging.Views" mc:Ignorable="d" - Height="500" Width="800" Background="{StaticResource Dialog.Background}" d:DataContext="{d:DesignInstance Type=vm:LogDetailsViewVM, IsDesignTimeCreatable=False}" Foreground="{StaticResource MainWindow.Foreground}"> + Height="500" Width="800" Background="{StaticResource MainWindow.Background}" d:DataContext="{d:DesignInstance Type=vm:LogDetailsViewVM, IsDesignTimeCreatable=False}" Foreground="{StaticResource MainWindow.Foreground}"> <UserControl.Resources> <converters:DateTimeUTCToStringConverter x:Key="DateTimeUTCToStringConverter" /> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Views/TimelineView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Views/TimelineView.xaml index f720a0237..9eb099a9e 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Views/TimelineView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Logging/Views/TimelineView.xaml @@ -22,19 +22,24 @@ <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> <localConverters:StringToFirstLineConverter x:Key="StringToFirstLineConverter" /> + <LinearGradientBrush x:Key="infoBrush" StartPoint="0.5,0" EndPoint="0.5,1"> + <GradientStop Color="White"/> + <GradientStop Color="#FFBFBFBF" Offset="1"/> + </LinearGradientBrush> + <LinearGradientBrush x:Key="warningBrush" StartPoint="0.5,0" EndPoint="0.5,1"> <GradientStop Color="#FFFF8C57"/> - <GradientStop Color="{StaticResource whiteColor}" Offset="1"/> + <GradientStop Color="White" Offset="1"/> </LinearGradientBrush> <LinearGradientBrush x:Key="errorBrush" StartPoint="0.5,0" EndPoint="0.5,1"> - <GradientStop Color="#FFFF5151"/> + <GradientStop Color="{StaticResource RedBrush100}"/> <GradientStop Color="#FFD9D9" Offset="1"/> </LinearGradientBrush> <LinearGradientBrush x:Key="criticalBrush" StartPoint="0.5,0" EndPoint="0.5,1"> <GradientStop Color="Red"/> - <GradientStop Color="{StaticResource whiteColor}" Offset="1"/> + <GradientStop Color="White" Offset="1"/> </LinearGradientBrush> <LinearGradientBrush x:Key="hoverBrush" StartPoint="0.5,0" EndPoint="0.5,1"> @@ -64,7 +69,7 @@ </Grid> <ScrollViewer x:Name="scroll_channels" Grid.Column="0" Grid.Row="1" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"> - <ItemsControl ItemsSource="{Binding TimelineEventGroups}" Margin="0 0 0 0" Background="{StaticResource MainWindow.Background}" VerticalAlignment="Top"> + <ItemsControl ItemsSource="{Binding TimelineEventGroups}" Margin="0 0 0 0" Background="#FCFCFC" VerticalAlignment="Top"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel /> @@ -143,7 +148,7 @@ </Border.Style> <StackPanel Orientation="Horizontal"> <TextBlock FontWeight="SemiBold" Text="{Binding EventType.Name}" Height="14" FontSize="11"></TextBlock> - <TextBlock Margin="10 0 0 0" Text="{Binding Description,Converter={StaticResource StringToFirstLineConverter}}" Height="14" FontSize="11" Foreground="{StaticResource Dialog.Foreground}"></TextBlock> + <TextBlock Margin="10 0 0 0" Text="{Binding Description,Converter={StaticResource StringToFirstLineConverter}}" Height="14" FontSize="11"></TextBlock> </StackPanel> </Border> </Grid> 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 69cc75461..d80060831 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 @@ -89,20 +89,14 @@ <Compile Include="ViewModels\ColorCalibrationViewVM.cs" /> <Compile Include="ViewModels\HardwareConfigurationViewVM.cs" /> <Compile Include="ViewModels\MachineCreationDialogVM.cs" /> - <Compile Include="ViewModels\MachineUpdateDetailsDialogVM.cs" /> - <Compile Include="ViewModels\MachineUpdatesViewVM.cs" /> <Compile Include="ViewModels\MachineVersionDialogVM.cs" /> <Compile Include="ViewModels\MainViewVM.cs" /> - <Compile Include="ViewModels\TupViewVM.cs" /> <Compile Include="Views\ColorCalibrationView.xaml.cs"> <DependentUpon>ColorCalibrationView.xaml</DependentUpon> </Compile> <Compile Include="Views\HardwareConfigurationView.xaml.cs"> <DependentUpon>HardwareConfigurationView.xaml</DependentUpon> </Compile> - <Compile Include="Views\MachineUpdateDetailsDialog.xaml.cs"> - <DependentUpon>MachineUpdateDetailsDialog.xaml</DependentUpon> - </Compile> <Compile Include="Views\MachineCreationDialog.xaml.cs"> <DependentUpon>MachineCreationDialog.xaml</DependentUpon> </Compile> @@ -128,12 +122,6 @@ <Compile Include="Views\MainView.xaml.cs"> <DependentUpon>MainView.xaml</DependentUpon> </Compile> - <Compile Include="Views\MachineUpdatesView.xaml.cs"> - <DependentUpon>MachineUpdatesView.xaml</DependentUpon> - </Compile> - <Compile Include="Views\TupView.xaml.cs"> - <DependentUpon>TupView.xaml</DependentUpon> - </Compile> <Compile Include="Views\SpoolsView.xaml.cs"> <DependentUpon>SpoolsView.xaml</DependentUpon> </Compile> @@ -149,10 +137,6 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="Views\MachineUpdateDetailsDialog.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> <Page Include="Views\MachineCreationDialog.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -185,14 +169,6 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="Views\MachineUpdatesView.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - <Page Include="Views\TupView.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> <Page Include="Views\SpoolsView.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -332,7 +308,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.MachineDesigner/ViewModels/ColorCalibrationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/ColorCalibrationViewVM.cs index d37fe1aaa..b75fe7e03 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/ColorCalibrationViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/ColorCalibrationViewVM.cs @@ -180,16 +180,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels public void Save() { - //Remove cats with deleted RMLS. (Can only happen when creating new machine from prototype) - foreach (var cat in Machine.Cats.ToList()) - { - if (!Rmls.Any(x => x.Guid == cat.RmlGuid)) - { - Machine.Cats.Remove(cat); - _dbContext.Cats.Remove(cat); - } - } - foreach (var calDataVM in ColorConversionViewVM.LiquidsCalibrationData) { var cat = calDataVM.IdsPack.LiquidType.Cats.FirstOrDefault(x => x.Machine == Machine && x.Rml == SelectedRML); diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/HardwareConfigurationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/HardwareConfigurationViewVM.cs index e29ba3b6f..f7ae88f68 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/HardwareConfigurationViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/HardwareConfigurationViewVM.cs @@ -92,19 +92,16 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels { HardwareVersion hardwareVersion = configuration.HardwareVersion; - if (hardwareVersion != null) - { - _hwConfig = configuration.GetHardwareConfiguration(); + _hwConfig = configuration.GetHardwareConfiguration(); - Collections.Clear(); - Collections.Add(CreateMotorsCollection(hardwareVersion)); - Collections.Add(CreateDancerCollection(hardwareVersion)); - Collections.Add(CreatePidCollection(hardwareVersion)); - Collections.Add(CreateWindersCollection(hardwareVersion)); - Collections.Add(CreateSpeedSensorsCollection(hardwareVersion)); - Collections.Add(CreateBlowersCollection(hardwareVersion)); - Collections.Add(CreateBreakSensorCollection(hardwareVersion)); - } + Collections.Clear(); + Collections.Add(CreateMotorsCollection(hardwareVersion)); + Collections.Add(CreateDancerCollection(hardwareVersion)); + Collections.Add(CreatePidCollection(hardwareVersion)); + Collections.Add(CreateWindersCollection(hardwareVersion)); + Collections.Add(CreateSpeedSensorsCollection(hardwareVersion)); + Collections.Add(CreateBlowersCollection(hardwareVersion)); + Collections.Add(CreateBreakSensorCollection(hardwareVersion)); } private HardwareCollection CreateMotorsCollection(HardwareVersion hardwareVersion) @@ -127,7 +124,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels collection.Components.Add(componentResult); } } - collection.Components = collection.Components.OrderByAlphaNumeric(x => x.Description).ToSynchronizedObservableCollection(); return collection; } private HardwareCollection CreateDancerCollection(HardwareVersion hardwareVersion) @@ -150,7 +146,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels collection.Components.Add(componentResult); } } - collection.Components = collection.Components.OrderByAlphaNumeric(x => x.Description).ToSynchronizedObservableCollection(); return collection; } private HardwareCollection CreatePidCollection(HardwareVersion hardwareVersion) @@ -173,7 +168,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels collection.Components.Add(componentResult); } } - collection.Components = collection.Components.OrderByAlphaNumeric(x => x.Description).ToSynchronizedObservableCollection(); return collection; } private HardwareCollection CreateWindersCollection(HardwareVersion hardwareVersion) @@ -196,7 +190,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels collection.Components.Add(componentResult); } } - collection.Components = collection.Components.OrderByAlphaNumeric(x => x.Description).ToSynchronizedObservableCollection(); return collection; } private HardwareCollection CreateSpeedSensorsCollection(HardwareVersion hardwareVersion) @@ -219,7 +212,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels collection.Components.Add(componentResult); } } - collection.Components = collection.Components.OrderByAlphaNumeric(x => x.Description).ToSynchronizedObservableCollection(); return collection; } private HardwareCollection CreateBlowersCollection(HardwareVersion hardwareVersion) @@ -242,7 +234,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels collection.Components.Add(componentResult); } } - collection.Components= collection.Components.OrderByAlphaNumeric(x => x.Description).ToSynchronizedObservableCollection(); return collection; } private HardwareCollection CreateBreakSensorCollection(HardwareVersion hardwareVersion) @@ -265,7 +256,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels collection.Components.Add(componentResult); } } - collection.Components = collection.Components.OrderByAlphaNumeric(x => x.Description).ToSynchronizedObservableCollection(); return collection; } private HardwareComponent CreateComponent(String name, String description, List<PropertyInfo> properties, Object component) @@ -275,7 +265,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels Description = description, ComponentName = name }; - + foreach (var prop in properties) { var hProp = new HardwareParameter(); diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineCreationDialogVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineCreationDialogVM.cs index 4584d3508..0f6ab3314 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineCreationDialogVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineCreationDialogVM.cs @@ -13,50 +13,5 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels public List<MachineVersion> MachineVersions { get; set; } public MachineVersion SelectedMachineVersion { get; set; } - - private bool _isNewMachine; - public bool IsNewMachine - { - get { return _isNewMachine; } - set { _isNewMachine = value; RaisePropertyChangedAuto(); } - } - - private String _serialNumber; - public String SerialNumber - { - get { return _serialNumber; } - set { _serialNumber = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } - } - - private String _name; - public String Name - { - get { return _name; } - set { _name = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } - } - - private bool _generateDispensers; - public bool GenerateDispensers - { - get { return _generateDispensers; } - set { _generateDispensers = value; RaisePropertyChangedAuto(); } - } - - private double _dispenserFactor; - public double DispenserFactor - { - get { return _dispenserFactor; } - set { _dispenserFactor = value; RaisePropertyChangedAuto(); } - } - - public MachineCreationDialogVM() : base() - { - DispenserFactor = 2.34; - } - - protected override bool CanOK() - { - return base.CanOK() && !String.IsNullOrWhiteSpace(SerialNumber) && !String.IsNullOrWhiteSpace(Name); - } } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineUpdateDetailsDialogVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineUpdateDetailsDialogVM.cs deleted file mode 100644 index 49d410cdf..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineUpdateDetailsDialogVM.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.BL.Entities; -using Tango.SharedUI; - -namespace Tango.MachineStudio.MachineDesigner.ViewModels -{ - public class MachineUpdateDetailsDialogVM : DialogViewVM - { - private TangoUpdate _update; - public TangoUpdate Update - { - get { return _update; } - set { _update = value; RaisePropertyChangedAuto(); } - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineUpdatesViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineUpdatesViewVM.cs deleted file mode 100644 index 6004dbe6e..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MachineUpdatesViewVM.cs +++ /dev/null @@ -1,198 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Data; -using Tango.BL; -using Tango.BL.Builders; -using Tango.BL.Entities; -using Tango.Core.Commands; -using Tango.MachineStudio.Common.Notifications; -using Tango.MachineStudio.MachineDesigner.Views; -using Tango.SharedUI; - -namespace Tango.MachineStudio.MachineDesigner.ViewModels -{ - public class MachineUpdatesViewVM : ViewModel - { - private INotificationProvider _notification; - private ObservablesContext _context; - private const int MAX_UPDATE_ITEMS = 200; - - #region Properties - - private Machine _machine; - public Machine Machine - { - get { return _machine; } - set { _machine = value; RaisePropertyChangedAuto(); } - } - - private List<TangoUpdate> _updates; - public List<TangoUpdate> Updates - { - get { return _updates; } - set { _updates = value; RaisePropertyChangedAuto(); } - } - - private ICollectionView _updatesView; - public ICollectionView UpdatesView - { - get { return _updatesView; } - set { _updatesView = value; RaisePropertyChangedAuto(); } - } - - - private TangoUpdate _selectedUpdate; - public TangoUpdate SelectedUpdate - { - get { return _selectedUpdate; } - set { _selectedUpdate = value; RaisePropertyChangedAuto(); OnSelectedUpdateChanged(); } - } - - private bool _displayMachineSetups; - public bool DisplayMachineSetups - { - get { return _displayMachineSetups; } - set { _displayMachineSetups = value; RaisePropertyChangedAuto(); OnFilterChanged(); } - } - - private bool _displayApplicationUpdates; - public bool DisplayApplicationUpdates - { - get { return _displayApplicationUpdates; } - set { _displayApplicationUpdates = value; RaisePropertyChangedAuto(); OnFilterChanged(); } - } - - private bool _displayDatabaseUpdates; - public bool DisplayDatabaseUpdates - { - get { return _displayDatabaseUpdates; } - set { _displayDatabaseUpdates = value; RaisePropertyChangedAuto(); OnFilterChanged(); } - } - - private bool _displaySynchronizations; - public bool DisplaySynchronizations - { - get { return _displaySynchronizations; } - set { _displaySynchronizations = value; RaisePropertyChangedAuto(); OnFilterChanged(); } - } - - private bool _displayOfflineUpdates; - public bool DisplayOfflineUpdates - { - get { return _displayOfflineUpdates; } - set { _displayOfflineUpdates = value; RaisePropertyChangedAuto(); OnFilterChanged(); } - } - - private bool _displayFirmwareUpgrades; - public bool DisplayFirmwareUpgrades - { - get { return _displayFirmwareUpgrades; } - set { _displayFirmwareUpgrades = value; RaisePropertyChangedAuto(); OnFilterChanged(); } - } - - #endregion - - #region Commands - - public RelayCommand RefreshCommand { get; set; } - - #endregion - - #region Constructors - - public MachineUpdatesViewVM() - { - DisplayApplicationUpdates = true; - DisplayMachineSetups = true; - DisplayDatabaseUpdates = true; - DisplaySynchronizations = true; - DisplayOfflineUpdates = true; - DisplayFirmwareUpgrades = true; - - RefreshCommand = new RelayCommand(Refresh, () => IsFree); - } - - public MachineUpdatesViewVM(INotificationProvider notificationProvider) : this() - { - _notification = notificationProvider; - } - - #endregion - - #region Public Methods - - public async Task Init(Machine machine, ObservablesContext context) - { - try - { - _context = context; - Machine = machine; - Updates = (await new TangoUpdatesCollectionBuilder(context).Set(x => x.MachineGuid == machine.Guid).Query(x => x.OrderByDescending(y => y.StartDate).Take(MAX_UPDATE_ITEMS)).BuildAsync()).ToList(); - UpdatesView = CollectionViewSource.GetDefaultView(Updates); - UpdatesView.Filter = UpdatesFilter; - OnFilterChanged(); - } - catch (Exception ex) - { - LogManager.Log(ex, "Error loading machine updates."); - _notification.ShowError($"An error occurred while loading the history of machine updates.\n{ex.FlattenMessage()}"); - } - } - - #endregion - - #region Private Methods - - private async void Refresh() - { - IsFree = false; - using (_notification.PushTaskItem("Refreshing machine updates...")) - { - await Init(Machine, _context); - } - IsFree = true; - } - - private void OnFilterChanged() - { - if (UpdatesView != null) - { - UpdatesView.Refresh(); - } - } - - private bool UpdatesFilter(object obj) - { - TangoUpdate update = obj as TangoUpdate; - if (update != null) - { - if (!DisplayMachineSetups && update.IsSetup) return false; - if (!DisplayApplicationUpdates && update.IsUpdate) return false; - if (!DisplayDatabaseUpdates && update.IsDataBase) return false; - if (!DisplaySynchronizations && update.IsSynchronization) return false; - if (!DisplayOfflineUpdates && update.IsOfflineUpdate) return false; - if (!DisplayFirmwareUpgrades && update.IsOfflineFirmwareUpgrade) return false; - return true; - } - else - { - return false; - } - } - - private void OnSelectedUpdateChanged() - { - if (SelectedUpdate != null && SelectedUpdate.ApplicationVersion != "Fake") - { - _notification.ShowModalDialog<MachineUpdateDetailsDialogVM, MachineUpdateDetailsDialog>(new MachineUpdateDetailsDialogVM() { Update = SelectedUpdate }, (vm) => { }, () => { }); - SelectedUpdate = new TangoUpdate() { ApplicationVersion = "Fake"}; - } - } - - #endregion - } -} 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 0f439c83d..5f2dcd00d 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 @@ -25,32 +25,17 @@ using Tango.Core.Threading; using Tango.MachineStudio.RML.ViewModels; using Tango.Settings; using Tango.MachineStudio.RML.Models; -using Tango.BL.ActionLogs; -using Tango.MachineStudio.Common.Authentication; -using Tango.BL.DTO; -using Tango.Core.Cryptography; namespace Tango.MachineStudio.MachineDesigner.ViewModels { public class MainViewVM : StudioViewModel<IMainView> { private INotificationProvider _notification; - private IActionLogManager _actionLogManager; - private IAuthenticationProvider _authentication; private ActionTimer _machines_action_timer; private ActionTimer _dispensers_action_timer; - private MachineDTO _machineBeforeSave; - private List<Site> _all_sites; #region Properties - private bool _isNewMachine; - public bool IsNewMachine - { - get { return _isNewMachine; } - set { _isNewMachine = value; RaisePropertyChangedAuto(); } - } - private ObservablesStaticCollections _machinesAdapter; public ObservablesStaticCollections MachinesAdapter { @@ -130,21 +115,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels set { _selectedSpool = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } } - private Site _selectedSite; - public Site SelectedSite - { - get { return _selectedSite; } - set { _selectedSite = value; RaisePropertyChangedAuto(); } - } - - private List<Site> _sites; - public List<Site> Sites - { - get { return _sites; } - set { _sites = value; RaisePropertyChangedAuto(); } - } - - private ColorCalibrationViewVM _colorCalibrationViewVM; public ColorCalibrationViewVM ColorCalibrationViewVM { @@ -153,6 +123,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } private HardwareConfigurationViewVM _hardwareConfigurationViewVM; + public HardwareConfigurationViewVM HardwareConfigurationViewVM { get { return _hardwareConfigurationViewVM; } @@ -163,19 +134,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } } - private MachineUpdatesViewVM _machineUpdatesViewVM; - public MachineUpdatesViewVM MachineUpdatesViewVM - { - get { return _machineUpdatesViewVM; } - set { _machineUpdatesViewVM = value; RaisePropertyChangedAuto(); } - } - - private TupViewVM _tupViewVM; - public TupViewVM TupViewVM - { - get { return _tupViewVM; } - set { _tupViewVM = value; RaisePropertyChangedAuto(); } - } #endregion @@ -230,17 +188,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels /// Gets or sets the clone machine command. /// </summary> public RelayCommand CloneMachineCommand { get; set; } - - /// <summary> - /// Gets or sets the reset device registration command. - /// </summary> - public RelayCommand ResetDeviceRegistrationCommand { get; set; } - - /// <summary> - /// Gets or sets the make prototype command. - /// </summary> - public RelayCommand MakePrototypeCommand { get; set; } - #endregion #region Constructors @@ -253,12 +200,10 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels /// <summary> /// Initializes a new instance of the <see cref="MainViewVM"/> class. /// </summary> - public MainViewVM(INotificationProvider notification, IAuthenticationProvider authentication, IActionLogManager actionLogManager) + public MainViewVM(INotificationProvider notification) { MachinesAdapter = new ObservablesStaticCollections(ObservablesContext.CreateDefault()); _notification = notification; - _authentication = authentication; - _actionLogManager = actionLogManager; _machines_action_timer = new ActionTimer(TimeSpan.FromMilliseconds(200)); _dispensers_action_timer = new ActionTimer(TimeSpan.FromMilliseconds(200)); @@ -273,13 +218,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels AddSpoolCommand = new RelayCommand(AddNewSpool); RemoveSpoolCommand = new RelayCommand(RemoveSpool, () => SelectedSpool != null); CloneMachineCommand = new RelayCommand(CloneMachine, () => SelectedMachine != null); - ResetDeviceRegistrationCommand = new RelayCommand(ResetDeviceRegistration); - MakePrototypeCommand = new RelayCommand(MakePrototype); - - MachineUpdatesViewVM = new MachineUpdatesViewVM(_notification); - TupViewVM = new TupViewVM(_notification); } - #endregion #region Application Ready @@ -300,7 +239,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels { Task.Factory.StartNew(() => { - ActiveMachineAdapter.Dispensers = ActiveMachineAdapter.Context.Dispensers.Where(x => x.SerialNumber.ToLower().StartsWith(DispensersFilter.ToLower())).OrderBy(x => x.SerialNumber).ToSynchronizedObservableCollection(); + ActiveMachineAdapter.Dispensers = ActiveMachineAdapter.Context.Dispensers.Where(x => x.SerialNumber.ToLower().StartsWith(DispensersFilter.ToLower())).ToSynchronizedObservableCollection(); }); }); } @@ -449,10 +388,8 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels InvalidateRelayCommands(); } - private async void LoadSelectedMachine(bool newMachine = false, bool clone = false, MachineCreationDialogVM machineCreationDialogVM = null) + private async void LoadSelectedMachine(bool newMachine = false, bool clone = false, MachineVersion selectedVersion = null) { - IsNewMachine = false; - using (_notification.PushTaskItem("Loading machine details...")) { try @@ -476,7 +413,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels ActiveMachineAdapter.ApplicationOsVersions = (await ActiveMachineAdapter.Context.ApplicationOsVersions.ToListAsync()).ToObservableCollection(); ActiveMachineAdapter.EmbeddedFirmwareVersions = (await ActiveMachineAdapter.Context.EmbeddedFirmwareVersions.ToListAsync()).ToObservableCollection(); ActiveMachineAdapter.DispenserTypes = (await ActiveMachineAdapter.Context.DispenserTypes.ToListAsync()).ToObservableCollection(); - ActiveMachineAdapter.LiquidTypes = (await ActiveMachineAdapter.Context.LiquidTypes.ToListAsync()).OrderBy(x => x.PreferredIndex).ToObservableCollection(); + ActiveMachineAdapter.LiquidTypes = (await ActiveMachineAdapter.Context.LiquidTypes.ToListAsync()).ToObservableCollection(); ActiveMachineAdapter.MidTankTypes = (await ActiveMachineAdapter.Context.MidTankTypes.ToListAsync()).ToObservableCollection(); ActiveMachineAdapter.CartridgeTypes = (await ActiveMachineAdapter.Context.CartridgeTypes.ToListAsync()).ToObservableCollection(); ActiveMachineAdapter.IdsPackFormulas = (await ActiveMachineAdapter.Context.IdsPackFormulas.ToListAsync()).ToObservableCollection(); @@ -484,144 +421,32 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels ActiveMachineAdapter.MachineVersions = (await ActiveMachineAdapter.Context.MachineVersions.ToListAsync()).ToObservableCollection(); ActiveMachineAdapter.Organizations = (await ActiveMachineAdapter.Context.Organizations.ToListAsync()).ToObservableCollection(); - bool initHwConfig = true; - - Configuration machineConfigBeforeClone = null; - if (!newMachine) { ActiveMachine = (await new MachineBuilder(ActiveMachineAdapter.Context).Set(SelectedMachine.Guid).WithOrganization().WithConfiguration().WithSpools().BuildAsync()); - _machineBeforeSave = MachineDTO.FromObservable(ActiveMachine); - if (clone) { - machineConfigBeforeClone = ActiveMachine.Configuration; - - IsNewMachine = true; ActiveMachine = ActiveMachine.Clone(); - ActiveMachine.Name = machineCreationDialogVM.Name; - ActiveMachine.SerialNumber = machineCreationDialogVM.SerialNumber; - ActiveMachine.IsDeviceRegistered = false; - ActiveMachine.DeviceId = null; - ActiveMachine.DeviceName = null; - ActiveMachine.ActivationKey = null; + ActiveMachine.Name = ""; + ActiveMachine.SerialNumber = ""; ActiveMachineAdapter.Context.Machines.Add(ActiveMachine); } } else { - IsNewMachine = true; - - if (machineCreationDialogVM.SelectedMachineVersion == null) + if (selectedVersion == null) { ActiveMachine = new Machine(); ActiveMachine.Configuration = new Configuration(); - ActiveMachine.SerialNumber = machineCreationDialogVM.SerialNumber; - ActiveMachine.Name = machineCreationDialogVM.Name; ActiveMachineAdapter.Context.Machines.Add(ActiveMachine); } else { - try - { - initHwConfig = false; - ActiveMachine = await machineCreationDialogVM.SelectedMachineVersion.CreatePrototypeMachine(ActiveMachineAdapter.Context); - ActiveMachine.SerialNumber = machineCreationDialogVM.SerialNumber; - ActiveMachine.Name = machineCreationDialogVM.Name; - ActiveMachineAdapter.Context.Machines.Add(ActiveMachine); - - HardwareConfigurationViewVM = new HardwareConfigurationViewVM(_notification); - var version = await new HardwareVersionBuilder(ActiveMachineAdapter.Context).Set(ActiveMachine.Configuration.HardwareVersionGuid).WithHardwareComponents().BuildAsync(); - HardwareConfigurationViewVM.Init(ActiveMachine.Configuration); - } - catch (Exception ex) - { - _notification.ShowError($"Invalid machine version prototype.\n{ex.FlattenMessage()}"); - View.NavigateTo(MachineDesignerNavigationView.MachinesView); - return; - } - } - } - - if ((newMachine || clone) && machineCreationDialogVM.GenerateDispensers) - { - for (int i = 0; i < 8; i++) - { - var serial = machineCreationDialogVM.SerialNumber + "-" + (i + 1); - - var existingDispenser = await ActiveMachineAdapter.Context.Dispensers.Include(x => x.IdsPacks).SingleOrDefaultAsync(x => x.SerialNumber == serial); - - if (existingDispenser != null) - { - if (existingDispenser.IsInstalled) - { - _notification.ShowError($"Dispenser '{serial}' already exists. Cannot create machine."); - return; - } - else - { - if (!_notification.ShowErrorQuestion($"Dispenser '{serial}' already exists and is not installed. Do you wish to assign the existing dispenser to this machine?")) - { - return; - } - } - } - - Dispenser dispenser = new Dispenser(); - - if (existingDispenser == null) - { - dispenser.SerialNumber = serial; - - if (newMachine) - { - dispenser.NlPerPulse = machineCreationDialogVM.DispenserFactor; - dispenser.DispenserTypeGuid = ActiveMachineAdapter.DispenserTypes.First().Guid; - } - else - { - var packBefore = machineConfigBeforeClone.NoneEmptyIdsPacks.SingleOrDefault(x => x.PackIndex == i); - - if (packBefore != null) - { - dispenser.NlPerPulse = packBefore.Dispenser.NlPerPulse; - dispenser.DispenserTypeGuid = packBefore.Dispenser.DispenserType.Guid; - } - else - { - continue; - } - } - - dispenser.ProductionDate = DateTime.UtcNow; - - ActiveMachineAdapter.Context.Dispensers.Add(dispenser); - } - else - { - dispenser = existingDispenser; - } - - var idsPack = ActiveMachine.Configuration.NoneEmptyIdsPacks.SingleOrDefault(x => x.PackIndex == i); - - if (idsPack != null) - { - idsPack.Dispenser = dispenser; - idsPack.DispenserGuid = dispenser.Guid; - } + ActiveMachine = selectedVersion.CreatePrototypeMachine(ActiveMachineAdapter.Context); + ActiveMachineAdapter.Context.Machines.Add(ActiveMachine); } } - ActiveMachine.OrganizationChanged -= ActiveMachine_OrganizationChanged; - ActiveMachine.OrganizationChanged += ActiveMachine_OrganizationChanged; - - _all_sites = await ActiveMachineAdapter.Context.Sites.ToListAsync(); - - var sites = ActiveMachine.Organization != null ? _all_sites.Where(x => x.OrganizationGuid == ActiveMachine.OrganizationGuid).ToList() : new List<Site>(); - sites.Insert(0, new Site() { Name = "NONE", ID = -1 }); - Sites = sites; - - SelectedSite = Sites.SingleOrDefault(x => x.Guid == ActiveMachine.SiteGuid); ColorCalibrationViewVM = new ColorCalibrationViewVM(_notification, ActiveMachine, _activeMachineAdapter.Context) { @@ -630,31 +455,11 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels SelectedRML = ActiveMachineAdapter.Rmls.FirstOrDefault(), }; - if (initHwConfig) - { - HardwareConfigurationViewVM = new HardwareConfigurationViewVM(_notification); - HardwareConfigurationViewVM.Init(ActiveMachine.Configuration); - } - - if (!IsNewMachine) - { - await MachineUpdatesViewVM.Init(ActiveMachine, ActiveMachineAdapter.Context); - TupViewVM.Init(ActiveMachine); - } + HardwareConfigurationViewVM = new HardwareConfigurationViewVM(_notification); + HardwareConfigurationViewVM.Init(ActiveMachine.Configuration); ActiveMachine.Configuration.HardwareVersionChanged += Configuration_HardwareVersionChanged; - while (ActiveMachine.ActivationKey == null) //Generate a random password and make sure no machine matches it. - { - ActiveMachine.ActivationKey = PasswordGenerator.Generate(8, PasswordGenerator.PasswordType.Alpha, PasswordGenerator.PasswordCasing.Upper); - if (await ActiveMachineAdapter.Context.Machines.Where(x => x.ActivationKey == ActiveMachine.ActivationKey).CountAsync() == 0) - { - break; - } - - ActiveMachine.ActivationKey = null; - } - View.NavigateTo(MachineDesignerNavigationView.MachineDetailsView); } catch (Exception ex) @@ -680,11 +485,6 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels { try { - if (HardwareConfigurationViewVM == null) - { - HardwareConfigurationViewVM = new HardwareConfigurationViewVM(_notification); - } - version = await new HardwareVersionBuilder(ActiveMachineAdapter.Context).Set(version.Guid).WithHardwareComponents().BuildAsync(); HardwareConfigurationViewVM.Init(ActiveMachine.Configuration); } @@ -820,24 +620,14 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels ActiveMachine.ConfigurationGuid = ActiveMachine.Configuration.Guid; ActiveMachine.LastUpdated = DateTime.UtcNow; - ActiveMachine.SiteGuid = SelectedSite == null ? null : (SelectedSite.ID == -1 ? null : SelectedSite.Guid); + ActiveMachine.ProductionDate = DateTime.UtcNow; ColorCalibrationViewVM.Save(); var hwConfig = HardwareConfigurationViewVM.GetResultingHardwareConfiguration(); ActiveMachine.Configuration.SetHardwareConfiguration(hwConfig); - await ActiveMachineAdapter.Context.SaveChangesAsync(); - if (IsNewMachine) - { - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.MachineCreated, _authentication.CurrentUser, ActiveMachine.Name, ActiveMachine, "New machine created using Machine Studio."); - } - else - { - var machineAfterDTO = MachineDTO.FromObservable(ActiveMachine); - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.MachineSaved, _authentication.CurrentUser, _machineBeforeSave.Name, _machineBeforeSave, machineAfterDTO, "Machine saved using Machine Studio."); - _machineBeforeSave = machineAfterDTO; - } + await ActiveMachineAdapter.Context.SaveChangesAsync(); if (SelectedMachine != null) { @@ -862,23 +652,16 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels private void AddNewMachine() { MachineCreationDialogVM vm = new MachineCreationDialogVM(); - vm.IsNewMachine = true; vm.MachineVersions = MachinesAdapter.MachineVersions.ToList(); _notification.ShowModalDialog<MachineCreationDialogVM, Views.MachineCreationDialog>(vm, (x) => { - if (MachinesAdapter.Context.Machines.Any(y => y.SerialNumber == vm.SerialNumber || y.Name.ToLower() == vm.Name.ToLower())) - { - _notification.ShowError("Machine serial number or name already exists."); - return; - } - if (vm.SelectedMachineVersion != null && String.IsNullOrWhiteSpace(vm.SelectedMachineVersion.PrototypeMachineData)) { _notification.ShowError("The selected version does not contain any prototype machine data."); return; } - LoadSelectedMachine(true, false, vm); + LoadSelectedMachine(true, false, vm.SelectedMachineVersion); }, () => { }); } @@ -892,9 +675,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels { IsFree = false; await SelectedMachine.DeleteCascadeAsync(MachinesAdapter.Context); - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.MachineDeleted, _authentication.CurrentUser, SelectedMachine.Name, SelectedMachine, "Machine deleted using Machine Studio."); MachinesAdapter.Context.Machines.Remove(SelectedMachine); - MachinesAdapter.Machines.Remove(SelectedMachine); } catch (Exception ex) { @@ -909,68 +690,11 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels } } - private void ResetDeviceRegistration() - { - if (_notification.ShowQuestion("Are you sure you wish to reset this machine device registration?")) - { - ActiveMachine.IsDeviceRegistered = false; - ActiveMachine.DeviceId = null; - ActiveMachine.DeviceName = null; - } - } - - private async void MakePrototype() - { - if (ActiveMachine.MachineVersion == null) - { - _notification.ShowError("Machine version must be selected in order to make a prototype."); - return; - } - - if (_notification.ShowQuestion($"Are you sure you wish to make this machine configuration as a prototype for version '{ActiveMachine.MachineVersion.Name}' ?")) - { - using (_notification.PushTaskItem($"Making prototype machine for '{ActiveMachine.MachineVersion.Name}'...")) - { - try - { - IsFree = false; - - using (var db = ObservablesContext.CreateDefault()) - { - var machineVersion = await db.MachineVersions.SingleOrDefaultAsync(x => x.Guid == ActiveMachine.MachineVersionGuid); - await machineVersion.ApplyPrototypeMachine(ActiveMachine, db); - await db.SaveChangesAsync(); - } - } - catch (Exception ex) - { - _notification.ShowError($"Error making machine version prototype\n{ex.FlattenMessage()}"); - } - finally - { - IsFree = true; - } - } - } - } - #endregion private void CloneMachine() { - MachineCreationDialogVM vm = new MachineCreationDialogVM(); - vm.IsNewMachine = false; - vm.MachineVersions = MachinesAdapter.MachineVersions.ToList(); - _notification.ShowModalDialog<MachineCreationDialogVM, Views.MachineCreationDialog>(vm, (x) => - { - if (MachinesAdapter.Context.Machines.Any(y => y.SerialNumber == vm.SerialNumber || y.Name.ToLower() == vm.Name.ToLower())) - { - _notification.ShowError("Machine serial number or name already exists."); - return; - } - - LoadSelectedMachine(false, true, vm); - }, () => { }); + LoadSelectedMachine(false, true); } private void AddNewSpool() @@ -1001,7 +725,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels try { IsFree = false; - MachinesAdapter.Machines = MachinesAdapter.Context.Machines.Where(x => x.SerialNumber.StartsWith(Filter)).Include(x => x.Organization).Include(x => x.MachineVersion).OrderBy(x => x.SerialNumber).ToSynchronizedObservableCollection(); + MachinesAdapter.Machines = MachinesAdapter.Context.Machines.Where(x => x.SerialNumber.StartsWith(Filter)).Include(x => x.Organization).Include(x => x.MachineVersion).ToSynchronizedObservableCollection(); } catch { @@ -1015,14 +739,5 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels }); } } - - private void ActiveMachine_OrganizationChanged(object sender, Organization e) - { - var sites = ActiveMachine.Organization != null ? _all_sites.Where(x => x.OrganizationGuid == ActiveMachine.OrganizationGuid).ToList() : new List<Site>(); - sites.Insert(0, new Site() { Name = "NONE", ID = -1 }); - Sites = sites; - - SelectedSite = Sites.SingleOrDefault(x => x.Guid == ActiveMachine.SiteGuid); - } } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/TupViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/TupViewVM.cs deleted file mode 100644 index 5d1703dc3..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/TupViewVM.cs +++ /dev/null @@ -1,129 +0,0 @@ -using Microsoft.Win32; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.BL.Entities; -using Tango.Core.Commands; -using Tango.MachineStudio.Common.Notifications; -using Tango.MachineStudio.Common.Tup; -using Tango.SharedUI; - -namespace Tango.MachineStudio.MachineDesigner.ViewModels -{ - public class TupViewVM : ViewModel - { - private INotificationProvider _notification; - - private String _latestVersion; - public String LatestVersion - { - get { return _latestVersion; } - set { _latestVersion = value; RaisePropertyChangedAuto(); } - } - - private Machine _machine; - public Machine Machine - { - get { return _machine; } - set { _machine = value; RaisePropertyChangedAuto(); } - } - - private String _filePath; - public String FilePath - { - get { return _filePath; } - set { _filePath = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } - } - - private TupFileBuilderProgressEventArgs _progress; - public TupFileBuilderProgressEventArgs Progress - { - get { return _progress; } - set { _progress = value; RaisePropertyChangedAuto(); } - } - - public RelayCommand CreateTupFileCommand { get; set; } - - public RelayCommand SelectFileCommand { get; set; } - - public TupViewVM() - { - - } - - public TupViewVM(INotificationProvider notification) : this() - { - _notification = notification; - CreateTupFileCommand = new RelayCommand(CreateTupFile, () => FilePath != null && IsFree); - SelectFileCommand = new RelayCommand(SelectFile); - } - - public void Init(Machine machine) - { - Machine = machine; - DisplayLatestPPCVersion(); - } - - private async void DisplayLatestPPCVersion() - { - TupFileBuilder builder = new TupFileBuilder(); - - try - { - LatestVersion = await builder.GetLatestPPCVersion(Machine.SerialNumber); - } - catch (Exception ex) - { - LogManager.Log(ex, "Error retrieving latest PPC version."); - await Task.Delay(5000); - DisplayLatestPPCVersion(); - } - } - - private void SelectFile() - { - SaveFileDialog dlg = new SaveFileDialog(); - dlg.Title = "Select package location"; - dlg.Filter = "Tango Update Package Files|*.tup"; - dlg.DefaultExt = ".tup"; - dlg.FileName = LatestVersion == null ? $"{Machine.SerialNumber}_Update_{DateTime.Now.Date.ToFileName()}.tup" : $"{Machine.SerialNumber}_Update_{DateTime.Now.Date.ToFileName()}_v{LatestVersion}.tup"; - - if (dlg.ShowDialog().Value) - { - FilePath = dlg.FileName; - } - } - - private async void CreateTupFile() - { - try - { - LogManager.Log($"Generating TUP file to '{FilePath}'..."); - - IsFree = false; - TupFileBuilder builder = new TupFileBuilder(); - builder.Progress += Builder_Progress; - await builder.Build(Machine.SerialNumber, FilePath); - - LogManager.Log("TUP file generated successfully."); - _notification.ShowInfo("Tango update package created successfuly."); - } - catch (Exception ex) - { - LogManager.Log(ex, "Error generating tup file."); - _notification.ShowError($"An error occurred while generating the .tup file.\n{ex.FlattenMessage()}"); - } - finally - { - IsFree = true; - } - } - - private void Builder_Progress(object sender, TupFileBuilderProgressEventArgs e) - { - Progress = e; - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineCreationDialog.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineCreationDialog.xaml index 0640b846e..e3ba1bff4 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineCreationDialog.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineCreationDialog.xaml @@ -6,15 +6,9 @@ xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls" xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:vm="clr-namespace:Tango.MachineStudio.MachineDesigner.ViewModels" - xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" xmlns:local="clr-namespace:Tango.MachineStudio.MachineDesigner.Views" mc:Ignorable="d" - d:DesignHeight="400" d:DesignWidth="700" Height="460" Width="750" Background="{StaticResource Dialog.Background}" d:DataContext="{d:DesignInstance Type=vm:MachineCreationDialogVM, IsDesignTimeCreatable=False}" Foreground="{StaticResource Dialog.Foreground}"> - - <UserControl.Resources> - <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"></converters:BooleanToVisibilityConverter> - </UserControl.Resources> - + d:DesignHeight="400" d:DesignWidth="700" Height="400" Width="700" Background="White" d:DataContext="{d:DesignInstance Type=vm:MachineCreationDialogVM, IsDesignTimeCreatable=False}"> <Grid Margin="10"> <DockPanel> <Grid DockPanel.Dock="Top"> @@ -23,18 +17,7 @@ <Image Source="../Images/machine-full-fx.png" Width="120" RenderOptions.BitmapScalingMode="Fant"></Image> <materialDesign:PackIcon HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0 0 -10 -10" Kind="PlusCircle" Foreground="#15C315" Width="42" Height="42" /> </Grid> - <TextBlock Margin="30 0 0 0" VerticalAlignment="Bottom" FontSize="22"> - <TextBlock.Style> - <Style TargetType="TextBlock"> - <Setter Property="Text" Value="CLONE MACHINE"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding IsNewMachine}" Value="True"> - <Setter Property="Text" Value="NEW MACHINE"></Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </TextBlock.Style> - </TextBlock> + <TextBlock Margin="30 0 0 0" VerticalAlignment="Bottom" FontSize="22">NEW MACHINE</TextBlock> </StackPanel> </Grid> @@ -50,30 +33,12 @@ </Grid> <Grid> - <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20 20 0 0" Width="400"> - <TextBlock TextWrapping="Wrap" Visibility="{Binding IsNewMachine,Converter={StaticResource BooleanToVisibilityConverter}}"> - <Run>Please specify the machine version in order to prototype the new machine with default machine settings and configuration.</Run> + <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Width="400"> + <TextBlock TextWrapping="Wrap" TextAlignment="Center"> + <Run>Please specify the machine version in order to prototype the new machine with default machine settings and configuartion.</Run> </TextBlock> - <ComboBox Visibility="{Binding IsNewMachine,Converter={StaticResource BooleanToVisibilityConverter}}" ItemsSource="{Binding MachineVersions}" SelectedItem="{Binding SelectedMachineVersion}" DisplayMemberPath="Name" Margin="0 10 0 0" FontSize="16" materialDesign:HintAssist.Hint="NONE"></ComboBox> - - <TextBlock Margin="0 20 0 0" FontSize="10">Serial Number</TextBlock> - <TextBox Margin="0 2 0 0" Text="{Binding SerialNumber,UpdateSourceTrigger=PropertyChanged}"></TextBox> - - <TextBlock Margin="0 20 0 0" FontSize="10">Name</TextBlock> - <TextBox Margin="0 2 0 0" Text="{Binding Name,UpdateSourceTrigger=PropertyChanged}"></TextBox> - - <CheckBox Margin="0 30 0 0" IsChecked="{Binding GenerateDispensers}"> - <TextBlock> - <Run>Automatically generate 8 dispensers for this machine</Run> - <Run>(</Run><Run Foreground="{StaticResource GrayBrush}" FontSize="10" Text="{Binding SerialNumber}"></Run><Run Foreground="{StaticResource GrayBrush}" FontSize="10">-1-8</Run><Run>)</Run> - </TextBlock> - </CheckBox> - - <StackPanel Margin="20 10 0 0" Visibility="{Binding IsNewMachine,Converter={StaticResource BooleanToVisibilityConverter}}"> - <TextBlock FontSize="10">Dispenser max nl/cm</TextBlock> - <mahapps:NumericUpDown Minimum="0" StringFormat="0.00" Maximum="10" InterceptMouseWheel="True" Value="{Binding DispenserFactor,Mode=TwoWay}" HorizontalContentAlignment="Left" Width="95" HorizontalAlignment="Left" BorderThickness="0 0 0 1" Margin="0 2 0 0" HideUpDownButtons="True" HasDecimals="True" Background="Transparent"></mahapps:NumericUpDown> - </StackPanel> + <ComboBox ItemsSource="{Binding MachineVersions}" SelectedItem="{Binding SelectedMachineVersion}" DisplayMemberPath="Name" Margin="0 10 0 0" FontSize="16" materialDesign:HintAssist.Hint="NONE"></ComboBox> </StackPanel> </Grid> </DockPanel> 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 b2b770698..1f748fe9f 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 @@ -5,17 +5,11 @@ 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:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" + xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:vm="clr-namespace:Tango.MachineStudio.MachineDesigner.ViewModels" xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" 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}"> - - <UserControl.Resources> - <converters:BooleanToVisibilityInverseConverter x:Key="BooleanToVisibilityInverseConverter" /> - </UserControl.Resources> - <Grid Margin="20"> <DockPanel> <Grid DockPanel.Dock="Top"> @@ -29,7 +23,7 @@ </StackPanel> <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0 0 20 0"> - <Button Width="170" Height="45" VerticalAlignment="Center" Command="{Binding SaveCommand}"> + <Button Width="170" Height="45" VerticalAlignment="Center" Command="{Binding SaveCommand}"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon Kind="ContentSaveAll" Width="24" Height="24" /> <TextBlock VerticalAlignment="Center" Margin="10 0 0 0">SAVE</TextBlock> @@ -67,12 +61,6 @@ <TabItem Header="HW CONFIGURATION"> <local:HardwareConfigurationView/> </TabItem> - <TabItem Header="UPDATES" Visibility="{Binding IsNewMachine,Converter={StaticResource BooleanToVisibilityInverseConverter}}"> - <local:MachineUpdatesView/> - </TabItem> - <TabItem Header="TUP" Visibility="{Binding IsNewMachine,Converter={StaticResource BooleanToVisibilityInverseConverter}}"> - <local:TupView/> - </TabItem> </TabControl> </Grid> </DockPanel> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineSettingsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineSettingsView.xaml index 76517ec37..40ce9ea08 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineSettingsView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineSettingsView.xaml @@ -6,7 +6,6 @@ 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:enumerations="clr-namespace:Tango.BL.Enumerations;assembly=Tango.BL" 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" @@ -14,11 +13,6 @@ xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" 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}"> - - <UserControl.Resources> - <converters:EnumToItemsSourceConverter x:Key="EnumToItemsSourceConverter"/> - </UserControl.Resources> - <Grid Margin="20"> <DockPanel> <Grid DockPanel.Dock="Bottom"> @@ -33,106 +27,84 @@ <local:MachineView DataContext="{Binding ActiveMachine}" IsHitTestVisible="False" /> - <StackPanel Grid.Column="1" Margin="100 30"> - <Border CornerRadius="5" Background="{StaticResource TransparentBackgroundBrush600}" Padding="10" BorderBrush="{StaticResource borderBrush}" BorderThickness="1"> - <Grid TextElement.Foreground="{StaticResource GrayBrush280}"> - <Grid.ColumnDefinitions> - <ColumnDefinition/> - <ColumnDefinition Width="Auto" /> - <ColumnDefinition/> - </Grid.ColumnDefinitions> - - <StackPanel> - <controls:TableGrid RowHeight="50" Margin="10"> - <TextBlock FontWeight="SemiBold">Serial Number</TextBlock> - <TextBox Text="{Binding ActiveMachine.SerialNumber}"></TextBox> - - <TextBlock FontWeight="SemiBold">Name</TextBlock> - <TextBox Text="{Binding ActiveMachine.Name}"></TextBox> + <Border Grid.Column="1" Margin="100 70" CornerRadius="5" Background="{StaticResource TransparentBackgroundBrush600}" Padding="10" BorderBrush="{StaticResource borderBrush}" BorderThickness="1"> + <Grid TextElement.Foreground="{StaticResource GrayBrush280}"> + <Grid.ColumnDefinitions> + <ColumnDefinition/> + <ColumnDefinition Width="Auto" /> + <ColumnDefinition/> + </Grid.ColumnDefinitions> + <controls:TableGrid RowHeight="50" Margin="10"> + <TextBlock FontWeight="SemiBold">Serial Number</TextBlock> + <TextBox Text="{Binding ActiveMachine.SerialNumber}"></TextBox> - <TextBlock FontWeight="SemiBold">Head Type</TextBlock> - <ComboBox ItemsSource="{Binding Source={x:Type enumerations:HeadTypes},Converter={StaticResource EnumToItemsSourceConverter}}" SelectedValue="{Binding ActiveMachine.MachineHeadType}" SelectedValuePath="Value" DisplayMemberPath="DisplayName" Style="{StaticResource TransparentComboBoxStyle}"></ComboBox> + <TextBlock FontWeight="SemiBold">Name</TextBlock> + <TextBox Text="{Binding ActiveMachine.Name}"></TextBox> - <TextBlock FontWeight="SemiBold">Machine Version</TextBlock> - <ComboBox Background="Transparent" ItemsSource="{Binding ActiveMachineAdapter.MachineVersions}" SelectedItem="{Binding ActiveMachine.MachineVersion}" DisplayMemberPath="Name" Style="{StaticResource TransparentComboBoxStyle}" ></ComboBox> + <TextBlock FontWeight="SemiBold">Machine Version</TextBlock> + <ComboBox Background="Transparent" ItemsSource="{Binding ActiveMachineAdapter.MachineVersions}" SelectedItem="{Binding ActiveMachine.MachineVersion}" DisplayMemberPath="Name" Style="{StaticResource TransparentComboBoxStyle}"></ComboBox> - <TextBlock FontWeight="SemiBold">Organization</TextBlock> - <ComboBox Background="Transparent" ItemsSource="{Binding ActiveMachineAdapter.Organizations}" SelectedItem="{Binding ActiveMachine.Organization}" DisplayMemberPath="Name" Style="{StaticResource TransparentComboBoxStyle}"></ComboBox> + <TextBlock FontWeight="SemiBold">Organization</TextBlock> + <ComboBox Background="Transparent" ItemsSource="{Binding ActiveMachineAdapter.Organizations}" SelectedItem="{Binding ActiveMachine.Organization}" DisplayMemberPath="Name" Style="{StaticResource TransparentComboBoxStyle}"></ComboBox> - <TextBlock FontWeight="SemiBold">Site</TextBlock> - <ComboBox Background="Transparent" ItemsSource="{Binding Sites}" SelectedItem="{Binding SelectedSite}" DisplayMemberPath="Name" Style="{StaticResource TransparentComboBoxStyle}"></ComboBox> + <TextBlock FontWeight="SemiBold">Default RML</TextBlock> + <ComboBox Background="Transparent" ItemsSource="{Binding ActiveMachineAdapter.Rmls}" SelectedItem="{Binding ActiveMachine.DefaultRml}" DisplayMemberPath="Name" Style="{StaticResource TransparentComboBoxStyle}"></ComboBox> - <TextBlock FontWeight="SemiBold">OS Key</TextBlock> - <TextBox Text="{Binding ActiveMachine.OsKey}"></TextBox> + <TextBlock FontWeight="SemiBold">Loaded RML</TextBlock> + <ComboBox Background="Transparent" ItemsSource="{Binding ActiveMachineAdapter.Rmls}" SelectedValue="{Binding ActiveMachine.LoadedRmlGuid}" SelectedValuePath="Guid" DisplayMemberPath="Name" Style="{StaticResource TransparentComboBoxStyle}"></ComboBox> - <TextBlock FontWeight="SemiBold">Device COM Port</TextBlock> - <TextBox Text="{Binding ActiveMachine.DeviceComPort}"></TextBox> - </controls:TableGrid> + <TextBlock FontWeight="SemiBold">Default Color Space</TextBlock> + <ComboBox Background="Transparent" ItemsSource="{Binding ActiveMachineAdapter.ColorSpaces}" SelectedItem="{Binding ActiveMachine.DefaultColorSpace}" DisplayMemberPath="Name" Style="{StaticResource TransparentComboBoxStyle}"></ComboBox> - <Button Margin="0 20 0 0" Background="{StaticResource RedBrush300}" ToolTip="Make this machine configuration as a prototype for the selected machine version" BorderBrush="{StaticResource RedBrush300}" Width="200" Height="45" VerticalAlignment="Bottom" Command="{Binding MakePrototypeCommand}"> - <StackPanel Orientation="Horizontal"> - <materialDesign:PackIcon Kind="Copyright" Width="24" Height="24" /> - <TextBlock VerticalAlignment="Center" Margin="10 0 0 0">MAKE PROTOTYPE</TextBlock> - </StackPanel> - </Button> - </StackPanel> + <TextBlock FontWeight="SemiBold">Default Segment Length</TextBlock> + <mahapps:NumericUpDown HideUpDownButtons="True" BorderThickness="0 0 0 1" Background="Transparent" Minimum="0" Maximum="1000" Value="{Binding ActiveMachine.DefaultSegmentLength}" HasDecimals="False"></mahapps:NumericUpDown> - <Rectangle Grid.Column="1" StrokeThickness="1" Stroke="{StaticResource borderBrush}" HorizontalAlignment="Center" Margin="50 50" /> - <controls:TableGrid RowHeight="50" Margin="10" Grid.Column="2"> - <TextBlock FontWeight="SemiBold">Auto Login</TextBlock> - <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.AutoLogin}"></ToggleButton> + <TextBlock FontWeight="SemiBold">Default Spool Type</TextBlock> + <ComboBox Background="Transparent" ItemsSource="{Binding ActiveMachineAdapter.SpoolTypes}" SelectedItem="{Binding ActiveMachine.DefaultSpoolType}" DisplayMemberPath="Name" Style="{StaticResource TransparentComboBoxStyle}"></ComboBox> - <!--<TextBlock FontWeight="SemiBold">Auto Check For Updates</TextBlock> - <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.AutoCheckForUpdates}"></ToggleButton>--> + <TextBlock FontWeight="SemiBold">OS Key</TextBlock> + <TextBox Text="{Binding ActiveMachine.OsKey}"></TextBox> - <TextBlock FontWeight="SemiBold">Setup Activation</TextBlock> - <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.SetupActivation}"></ToggleButton> + <TextBlock FontWeight="SemiBold">Device COM Port</TextBlock> + <TextBox Text="{Binding ActiveMachine.DeviceComPort}"></TextBox> + </controls:TableGrid> + <Rectangle Grid.Column="1" StrokeThickness="1" Stroke="{StaticResource borderBrush}" HorizontalAlignment="Center" Margin="50 50" /> + <controls:TableGrid RowHeight="50" Margin="10" Grid.Column="2"> + <TextBlock FontWeight="SemiBold">Auto Login</TextBlock> + <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.AutoLogin}"></ToggleButton> - <TextBlock FontWeight="SemiBold">Setup Remote Assistance</TextBlock> - <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.SetupRemoteAssistance}"></ToggleButton> + <TextBlock FontWeight="SemiBold">Auto Check For Updates</TextBlock> + <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.AutoCheckForUpdates}"></ToggleButton> - <TextBlock FontWeight="SemiBold">Setup UWF</TextBlock> - <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.SetupUwf}"></ToggleButton> + <TextBlock FontWeight="SemiBold">Setup Activation</TextBlock> + <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.SetupActivation}"></ToggleButton> - <TextBlock FontWeight="SemiBold">Setup Firmware</TextBlock> - <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.SetupFirmware}"></ToggleButton> + <TextBlock FontWeight="SemiBold">Setup Remote Assistance</TextBlock> + <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.SetupRemoteAssistance}"></ToggleButton> - <TextBlock FontWeight="SemiBold">Setup FPGA</TextBlock> - <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.SetupFpga}"></ToggleButton> + <TextBlock FontWeight="SemiBold">Setup UWF</TextBlock> + <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.SetupUwf}"></ToggleButton> - <TextBlock FontWeight="SemiBold">Is Demo Machine</TextBlock> - <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.IsDemo}"></ToggleButton> + <TextBlock FontWeight="SemiBold">Setup Firmware</TextBlock> + <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.SetupFirmware}"></ToggleButton> - <TextBlock FontWeight="SemiBold">Suspend Version Update</TextBlock> - <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.SuspendVersionUpdate}"></ToggleButton> + <TextBlock FontWeight="SemiBold">Setup FPGA</TextBlock> + <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.SetupFpga}"></ToggleButton> - <TextBlock FontWeight="SemiBold">Force Version Update</TextBlock> - <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.ForceVersionUpdate}"></ToggleButton> + <TextBlock FontWeight="SemiBold">Is Demo Machine</TextBlock> + <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.IsDemo}"></ToggleButton> - <TextBlock FontWeight="SemiBold">Update Schema on Update</TextBlock> - <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.PerformSchemaUpdateOnDataUpdate}"></ToggleButton> - </controls:TableGrid> - </Grid> - </Border> + <TextBlock FontWeight="SemiBold">Suspend Version Update</TextBlock> + <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.SuspendVersionUpdate}"></ToggleButton> - <Border Visibility="{Binding ActiveMachine.IsDeviceRegistered,Converter={StaticResource BoolToVisConverter}}" Margin="0 10 0 0" CornerRadius="5" Background="{StaticResource TransparentBackgroundBrush600}" Padding="20" BorderBrush="{StaticResource borderBrush}" BorderThickness="1"> - <DockPanel> - <StackPanel DockPanel.Dock="Left"> - <TextBlock FontSize="16" FontWeight="SemiBold">Device Registration</TextBlock> - <TextBlock Margin="0 10 0 0"> - <Run FontWeight="SemiBold">Device ID:</Run> - <Run Text="{Binding ActiveMachine.DeviceId}"></Run> - </TextBlock> - <TextBlock Margin="0 5 0 0"> - <Run FontWeight="SemiBold">Device Name:</Run> - <Run Text="{Binding ActiveMachine.DeviceName}"></Run> - </TextBlock> - </StackPanel> + <TextBlock FontWeight="SemiBold">Force Version Update</TextBlock> + <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.ForceVersionUpdate}"></ToggleButton> - <Button Command="{Binding ResetDeviceRegistrationCommand}" HorizontalAlignment="Center" VerticalAlignment="Center" Background="{StaticResource RedBrush300}" BorderBrush="{StaticResource RedBrush300}" Padding="10" Height="45" Width="240">RESET DEVICE REGISTRATION</Button> - </DockPanel> - </Border> - </StackPanel> + <TextBlock FontWeight="SemiBold">Update Schema on Update</TextBlock> + <ToggleButton HorizontalAlignment="Left" IsChecked="{Binding ActiveMachine.PerformSchemaUpdateOnDataUpdate}"></ToggleButton> + </controls:TableGrid> + </Grid> + </Border> </Grid> </DockPanel> </Grid> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineUpdateDetailsDialog.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineUpdateDetailsDialog.xaml deleted file mode 100644 index 0e793dc6a..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineUpdateDetailsDialog.xaml +++ /dev/null @@ -1,94 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.MachineDesigner.Views.MachineUpdateDetailsDialog" - 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:mahapps="http://metro.mahapps.com/winfx/xaml/controls" - xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" - xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:vm="clr-namespace:Tango.MachineStudio.MachineDesigner.ViewModels" - xmlns:local="clr-namespace:Tango.MachineStudio.MachineDesigner.Views" - mc:Ignorable="d" - d:DesignHeight="400" d:DesignWidth="700" Height="700" Width="1280" Background="White" d:DataContext="{d:DesignInstance Type=vm:MachineUpdateDetailsDialogVM, IsDesignTimeCreatable=False}"> - <UserControl.Resources> - <converters:EnumToDescriptionConverter x:Key="EnumToDescriptionConverter" /> - <converters:DateTimeUTCToShortDateTimeConverter x:Key="DateTimeUTCToShortDateTimeConverter" /> - <converters:StringToOneLineConverter x:Key="StringToOneLineConverter" /> - </UserControl.Resources> - - <Grid> - <Grid Grid.RowSpan="2"> - <Grid.RowDefinitions> - <RowDefinition Height="60"/> - <RowDefinition Height="31*"/> - <RowDefinition Height="50"/> - </Grid.RowDefinitions> - - <StackPanel Orientation="Horizontal" DataContext="{Binding Update}"> - <materialDesign:PackIcon Width="42" Height="42" VerticalAlignment="Center"> - <materialDesign:PackIcon.Style> - <Style TargetType="materialDesign:PackIcon"> - <Setter Property="Kind" Value="Information"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding IsSetup}" Value="True"> - <Setter Property="Kind" Value="Settings"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsUpdate}" Value="True"> - <Setter Property="Kind" Value="CloudDownload"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsDataBase}" Value="True"> - <Setter Property="Kind" Value="Database"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsSynchronization}" Value="True"> - <Setter Property="Kind" Value="Sync"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsOfflineUpdate}" Value="True"> - <Setter Property="Kind" Value="Sd"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsOfflineFirmwareUpgrade}" Value="True"> - <Setter Property="Kind" Value="Chip"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsStarted}" Value="True"> - <Setter Property="Foreground" Value="{StaticResource OrangeBrush}"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsCompleted}" Value="True"> - <Setter Property="Foreground" Value="{StaticResource GreenBrush }"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsFailed}" Value="True"> - <Setter Property="Foreground" Value="Red"></Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </materialDesign:PackIcon.Style> - </materialDesign:PackIcon> - <TextBlock VerticalAlignment="Center" Text="{Binding UpdateStatus,Converter={StaticResource EnumToDescriptionConverter}}" TextWrapping="NoWrap" Height="22" TextTrimming="CharacterEllipsis" Width="500" Margin="10 0 0 0" FontSize="16"></TextBlock> - </StackPanel> - - <Grid Grid.Row="1"> - <DockPanel> - <Grid DockPanel.Dock="Top"> - <controls:TableGrid RowHeight="30"> - <TextBlock Text="Started On:" FontWeight="SemiBold" /> - <TextBlock Text="{Binding Update.StartDate,Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}"></TextBlock> - <TextBlock Text="Application:" FontWeight="SemiBold" /> - <TextBlock Text="{Binding Update.ApplicationVersion}"></TextBlock> - <TextBlock Text="Firmware:" FontWeight="SemiBold" /> - <TextBlock Text="{Binding Update.FirmwareVersion}"></TextBlock> - <TextBlock Text="Ended:" FontWeight="SemiBold" /> - <TextBlock Text="{Binding Update.EndDate,TargetNullValue='Never',FallbackValue='Never',Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}"></TextBlock> - </controls:TableGrid> - </Grid> - - <Border Padding="5" BorderThickness="1" BorderBrush="{StaticResource BorderBrushGainsboro}"> - <TextBox BorderThickness="0" Text="{Binding Update.FailedLog,TargetNullValue='No further Information available.'}" Style="{x:Null}" TextWrapping="NoWrap" IsReadOnly="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Background="Transparent" /> - </Border> - </DockPanel> - </Grid> - - <Grid Grid.Row="2"> - <Button HorizontalAlignment="Right" Width="140" Command="{Binding CloseCommand}">CLOSE</Button> - </Grid> - </Grid> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineUpdateDetailsDialog.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineUpdateDetailsDialog.xaml.cs deleted file mode 100644 index 8bb051c51..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineUpdateDetailsDialog.xaml.cs +++ /dev/null @@ -1,28 +0,0 @@ -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 MachineCreationDialog.xaml - /// </summary> - public partial class MachineUpdateDetailsDialog : UserControl - { - public MachineUpdateDetailsDialog() - { - InitializeComponent(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineUpdatesView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineUpdatesView.xaml deleted file mode 100644 index bd272718d..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineUpdatesView.xaml +++ /dev/null @@ -1,114 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.MachineDesigner.Views.MachineUpdatesView" - 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:vm="clr-namespace:Tango.MachineStudio.MachineDesigner.ViewModels" - xmlns:global="clr-namespace:Tango.MachineStudio.MachineDesigner" - xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" - xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls" - xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:local="clr-namespace:Tango.MachineStudio.MachineDesigner.Views" - mc:Ignorable="d" - d:DesignHeight="720" d:DesignWidth="1500" Background="Transparent" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> - - <UserControl.Resources> - <converters:EnumToDescriptionConverter x:Key="EnumToDescriptionConverter" /> - <converters:DateTimeUTCToShortDateTimeConverter x:Key="DateTimeUTCToShortDateTimeConverter" /> - <converters:StringToOneLineConverter x:Key="StringToOneLineConverter" /> - </UserControl.Resources> - - <Grid Margin="20" DataContext="{Binding MachineUpdatesViewVM}"> - <DockPanel IsEnabled="{Binding IsFree}"> - <Grid DockPanel.Dock="Bottom"> - - </Grid> - - <Grid Margin="0 20"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="38*"/> - <ColumnDefinition Width="117*"/> - </Grid.ColumnDefinitions> - - <local:MachineView Margin="30 80 0 0" DataContext="{Binding Machine}" IsHitTestVisible="False" VerticalAlignment="Top" Height="241" /> - - <DockPanel Grid.Column="1" Margin="50 100 50 50"> - <Grid DockPanel.Dock="Bottom" Height="50"> - <StackPanel Orientation="Horizontal"> - <CheckBox IsChecked="{Binding DisplayMachineSetups}">Machine Setups</CheckBox> - <CheckBox IsChecked="{Binding DisplayApplicationUpdates}" Margin="30 0">Software Updates</CheckBox> - <CheckBox IsChecked="{Binding DisplayDatabaseUpdates}">Database Updates</CheckBox> - <CheckBox IsChecked="{Binding DisplaySynchronizations}" Margin="30 0 0 0">Synchronizations</CheckBox> - <CheckBox IsChecked="{Binding DisplayOfflineUpdates}" Margin="30 0 0 0">Offline Updates</CheckBox> - <CheckBox IsChecked="{Binding DisplayFirmwareUpgrades}" Margin="30 0 0 0">Offline Firmware Upgrades</CheckBox> - </StackPanel> - - <Button Command="{Binding RefreshCommand}" HorizontalAlignment="Right" Width="150" Style="{StaticResource MaterialDesignFlatButton}">REFRESH</Button> - </Grid> - <Grid> - <DataGrid Margin="0 0 0 10" SelectionUnit="FullRow" BorderBrush="{StaticResource borderBrush }" BorderThickness="1" Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" IsReadOnly="True" ItemsSource="{Binding Updates}" SelectedItem="{Binding SelectedUpdate}"> - <DataGrid.CellStyle> - <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="FocusVisualStyle" Value="{x:Null}"/> - <Setter Property="VerticalContentAlignment" Value="Center"></Setter> - </Style> - </DataGrid.CellStyle> - <DataGrid.Columns> - <DataGridTemplateColumn Header=""> - <DataGridTemplateColumn.CellTemplate> - <DataTemplate> - <materialDesign:PackIcon Width="16" Height="16"> - <materialDesign:PackIcon.Style> - <Style TargetType="materialDesign:PackIcon"> - <Setter Property="Kind" Value="Information"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding IsSetup}" Value="True"> - <Setter Property="Kind" Value="Settings"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsUpdate}" Value="True"> - <Setter Property="Kind" Value="CloudDownload"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsDataBase}" Value="True"> - <Setter Property="Kind" Value="Database"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsSynchronization}" Value="True"> - <Setter Property="Kind" Value="Sync"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsOfflineUpdate}" Value="True"> - <Setter Property="Kind" Value="Sd"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsOfflineFirmwareUpgrade}" Value="True"> - <Setter Property="Kind" Value="Chip"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsStarted}" Value="True"> - <Setter Property="Foreground" Value="{StaticResource OrangeBrush}"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsCompleted}" Value="True"> - <Setter Property="Foreground" Value="{StaticResource GreenBrush }"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding IsFailed}" Value="True"> - <Setter Property="Foreground" Value="Red"></Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </materialDesign:PackIcon.Style> - </materialDesign:PackIcon> - </DataTemplate> - </DataGridTemplateColumn.CellTemplate> - </DataGridTemplateColumn> - <DataGridTextColumn Header="STARTED" Binding="{Binding StartDate,Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="Auto" /> - <DataGridTextColumn Header="APPLICATION" Binding="{Binding ApplicationVersion}" Width="Auto" /> - <DataGridTextColumn Header="FIRMWARE" Binding="{Binding FirmwareVersion}" Width="Auto" /> - <DataGridTextColumn Header="ENDED" Binding="{Binding EndDate,TargetNullValue='Never',FallbackValue='Never',Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="Auto" /> - <DataGridTextColumn Header="STATUS" Binding="{Binding UpdateStatus,Converter={StaticResource EnumToDescriptionConverter}}" Width="Auto" /> - <DataGridTextColumn Header="REASON" Binding="{Binding FailedReason,Converter={StaticResource StringToOneLineConverter},ConverterParameter='80'}" Width="*" /> - </DataGrid.Columns> - </DataGrid> - </Grid> - </DockPanel> - </Grid> - </DockPanel> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineUpdatesView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineUpdatesView.xaml.cs deleted file mode 100644 index d13ef2d0e..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineUpdatesView.xaml.cs +++ /dev/null @@ -1,28 +0,0 @@ -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 SpoolsView.xaml - /// </summary> - public partial class MachineUpdatesView : UserControl - { - public MachineUpdatesView() - { - InitializeComponent(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachinesView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachinesView.xaml index a231e92a3..35b578b6a 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachinesView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachinesView.xaml @@ -15,7 +15,6 @@ d:DesignHeight="1080" d:DesignWidth="1920" Background="Transparent" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> <UserControl.Resources> <converters:DateTimeUTCToShortDateTimeConverter x:Key="DateTimeUTCToShortDateTimeConverter" /> - <converters:BooleanToYesNoConverter x:Key="BooleanToYesNoConverter" /> </UserControl.Resources> <Grid> @@ -74,8 +73,7 @@ <DataGridTextColumn Header="NAME" Binding="{Binding Name}" Width="Auto" /> <DataGridTextColumn Header="ORGANIZATION" Binding="{Binding Organization.Name}" Width="Auto" /> <DataGridTextColumn Header="VERSION" Binding="{Binding MachineVersion.Name}" Width="Auto" /> - <DataGridTextColumn Header="REGISTERED" Binding="{Binding IsDeviceRegistered,Converter={StaticResource BooleanToYesNoConverter}}" Width="Auto" /> - <DataGridTextColumn Header="DEMO MACHINE" Binding="{Binding IsDemo,Converter={StaticResource BooleanToYesNoConverter}}" Width="Auto" /> + <DataGridTextColumn Header="DEMO MACHINE" Binding="{Binding IsDemo}" Width="Auto" /> <DataGridTextColumn Header="LAST UPDATED" Binding="{Binding LastUpdated,Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="1*" /> </DataGrid.Columns> </controls:DoubleClickDataGrid> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MainView.xaml index 833086bf0..bc9b038dc 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MainView.xaml @@ -9,7 +9,7 @@ xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" 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 IsEnabled="{Binding IsFree}"> + <Grid> <controls:NavigationControl x:Name="navigationControl" TransitionType="Slide"> <local:MachinesView /> <local:MachineDetailsView/> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/SpoolsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/SpoolsView.xaml index f08da88d1..3663f72f8 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/SpoolsView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/SpoolsView.xaml @@ -9,14 +9,8 @@ xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:local="clr-namespace:Tango.MachineStudio.MachineDesigner.Views" - xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" mc:Ignorable="d" d:DesignHeight="720" d:DesignWidth="1280" Background="Transparent" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> - - <UserControl.Resources> - <converters:EmptyStringToNullConverter x:Key="EmptyStringToNullConverter" /> - </UserControl.Resources> - <Grid Margin="20"> <DockPanel> <Grid DockPanel.Dock="Bottom"> @@ -73,7 +67,10 @@ </Style> </DataGridComboBoxColumn.EditingElementStyle> </DataGridComboBoxColumn> - <DataGridTextColumn Header="LIMIT SWITCH START POINT OFFSET" Binding="{Binding LimitSwitchStartPointOffset,Converter={StaticResource EmptyStringToNullConverter}}" Width="1*" /> + <DataGridTextColumn Header="START OFFSET PULSES" Binding="{Binding StartOffsetPulses}" Width="Auto" /> + <DataGridTextColumn Header="BACKING RATE" Binding="{Binding BackingRate}" Width="Auto" /> + <DataGridTextColumn Header="SEGMENT OFFSET PULSES" Binding="{Binding SegmentOffsetPulses}" Width="Auto" /> + <DataGridTextColumn Header="BOTTOM BACKING RATE" Binding="{Binding BottomBackingRate}" Width="1*" /> </DataGrid.Columns> </DataGrid> </Grid> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/TupView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/TupView.xaml deleted file mode 100644 index 895a26ca0..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/TupView.xaml +++ /dev/null @@ -1,60 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.MachineDesigner.Views.TupView" - 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:vm="clr-namespace:Tango.MachineStudio.MachineDesigner.ViewModels" - xmlns:global="clr-namespace:Tango.MachineStudio.MachineDesigner" - xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls" - xmlns:material="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:local="clr-namespace:Tango.MachineStudio.MachineDesigner.Views" - mc:Ignorable="d" - d:DesignHeight="720" d:DesignWidth="1280" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}" Background="Transparent"> - - <Grid Margin="20" DataContext="{Binding TupViewVM}"> - <DockPanel IsEnabled="{Binding IsFree}"> - <Grid DockPanel.Dock="Bottom"> - - </Grid> - - <Grid Margin="0 20"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="38*"/> - <ColumnDefinition Width="117*"/> - </Grid.ColumnDefinitions> - - <local:MachineView Margin="30 80 0 0" DataContext="{Binding Machine}" IsHitTestVisible="False" VerticalAlignment="Top" Height="241" /> - - <DockPanel Grid.Column="1" Margin="50 100 300 100"> - <TextBlock DockPanel.Dock="Top"> - <Run>Create a complete update package (.tup) in order to update this machine offline using a removable storage device.</Run> - <LineBreak/> - <Run>The latest PPC version is </Run> - <Run Foreground="{StaticResource AccentColorBrush}" FontWeight="SemiBold" Text="{Binding LatestVersion,FallbackValue='loading...',TargetNullValue='loading...'}"></Run> - </TextBlock> - <Grid Margin="0 20 0 0"> - <Border Background="{StaticResource Transparent200}" CornerRadius="5" Padding="60" BorderThickness="1" BorderBrush="Silver"> - <DockPanel> - <DockPanel DockPanel.Dock="Top" Height="40"> - <Button Command="{Binding SelectFileCommand}" DockPanel.Dock="Right" BorderBrush="Silver" BorderThickness="1" Padding="0" Height="Auto" Width="40" Margin="5 0 0 0" Style="{StaticResource MaterialDesignFlatButton}"> - <material:PackIcon Kind="Folder" /> - </Button> - <TextBox materialDesign:HintAssist.Hint="Select package location" BorderBrush="Silver" BorderThickness="1" Text="{Binding FilePath}" IsReadOnly="True" VerticalContentAlignment="Center" Padding="10 0 0 0"></TextBox> - </DockPanel> - <StackPanel DockPanel.Dock="Bottom"> - <TextBlock HorizontalAlignment="Center" Text="{Binding Progress.Message,FallbackValue='Ready',TargetNullValue='Ready'}"></TextBlock> - <ProgressBar Margin="0 10 0 0" Height="15" IsIndeterminate="{Binding Progress.IsIntermediate}" Value="{Binding Progress.Progress}" Maximum="{Binding Progress.Total}"></ProgressBar> - </StackPanel> - <Grid> - <Button Command="{Binding CreateTupFileCommand}" HorizontalAlignment="Center" VerticalAlignment="Center" Padding="20 10" Height="60" Width="300">GENERATE UPDATE PACKAGE</Button> - </Grid> - </DockPanel> - </Border> - </Grid> - </DockPanel> - </Grid> - </DockPanel> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/TupView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/TupView.xaml.cs deleted file mode 100644 index fe01296d8..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/TupView.xaml.cs +++ /dev/null @@ -1,28 +0,0 @@ -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 SpoolsView.xaml - /// </summary> - public partial class TupView : UserControl - { - public TupView() - { - InitializeComponent(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/CalibrationMeasurementModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/CalibrationMeasurementModel.cs deleted file mode 100644 index 6345d5f59..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/CalibrationMeasurementModel.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.Core; -using Tango.BL.Enumerations; -using Tango.PMR.Printing; - -namespace Tango.MachineStudio.RML.Models -{ - public static class ColorCalibrationExt - { - public static Dictionary<LiquidTypes, LAB> TargetLiquidTypeToLAB = new Dictionary<LiquidTypes, LAB> - { - {LiquidTypes.Cyan, new LAB(51.94591,-18.3438,-39.0577)}, - {LiquidTypes.Magenta, new LAB(47.46248, 65.84478, 3.922838)}, - {LiquidTypes.Yellow, new LAB(84.41956,-0.27005, 94.05445)}, - {LiquidTypes.Black, new LAB(26.57986, -0.13567, 0.948574)}, - }; - public static Dictionary<LiquidTypes, string> DisplayLiquidTypeToLABType = new Dictionary<LiquidTypes, string> - { - {LiquidTypes.Cyan, "L"}, - {LiquidTypes.Magenta, "L"}, - {LiquidTypes.Yellow, "B"}, - {LiquidTypes.Black, "L"}, - }; - }; - - public class LAB - { - public double L { get; set; } - public double A { get; set; } - public double B { get; set; } - - public LAB( double l, double a, double b) - { - L = l; B = b; A = a; - } - }; - - public class CalibrationMeasurementModel : ExtendedObject - { - #region properties - private double _l; - - public double L - { - get { return _l; } - set { _l = value; RaisePropertyChangedAuto(); } - } - - private double _a; - - public double A - { - get { return _a; } - set { _a = value; RaisePropertyChangedAuto(); } - } - - private double _b; - - public double B - { - get { return _b; } - set { _b = value; RaisePropertyChangedAuto(); } - } - - private double _ink; - - public double Ink - { - get { return _ink; } - set { _ink = value; RaisePropertyChangedAuto(); } - } - #endregion - - public CalibrationMeasurementModel() - { - - } - public CalibrationMeasurementModel(Tango.MachineStudio.RML.Models.ColorLinearizationModel.LinearizationDataItem model) - { - L = model.L; - A = model.A; - B = model.B; - Ink = model.InkPercentage; - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs deleted file mode 100644 index 23179b3f2..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.Documents; - -namespace Tango.MachineStudio.RML.Models -{ - public class ColorLinearizationModel - { - public class LinearizationDataItem - { - public double InkPercentage { get; set; } - public double L { get; set; } - public double A { get; set; } - public double B { get; set; } - } - - public ColorLinearizationModel() - { - - } - - public void GetDataFromFile(string fileName, out List<LinearizationDataItem> items, ref string errors) - { - items = null; - try - { - using (ExcelReader reader = new ExcelReader(fileName)) - { - items = reader.GetDataByIndex<LinearizationDataItem>("Sheet1", 2); - } - } - catch (Exception ex) - { - errors = ex.Message; - } - - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Tango.MachineStudio.RML.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Tango.MachineStudio.RML.csproj index 38d289c58..2ff9ab0a3 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Tango.MachineStudio.RML.csproj +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Tango.MachineStudio.RML.csproj @@ -49,12 +49,6 @@ <Reference Include="MaterialDesignThemes.Wpf, Version=2.3.1.953, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\MaterialDesignThemes.2.3.1.953\lib\net45\MaterialDesignThemes.Wpf.dll</HintPath> </Reference> - <Reference Include="OxyPlot"> - <HintPath>..\..\..\packages\OxyPlot.Core.2.0.0\lib\net45\OxyPlot.dll</HintPath> - </Reference> - <Reference Include="OxyPlot.Wpf"> - <HintPath>..\..\..\packages\OxyPlot.Wpf.2.0.0\lib\net45\OxyPlot.Wpf.dll</HintPath> - </Reference> <Reference Include="System" /> <Reference Include="System.ComponentModel.DataAnnotations" /> <Reference Include="System.Data" /> @@ -79,9 +73,7 @@ <Link>GlobalVersionInfo.cs</Link> </Compile> <Compile Include="Contracts\IMainView.cs" /> - <Compile Include="Models\CalibrationMeasurementModel.cs" /> <Compile Include="Models\CctModel.cs" /> - <Compile Include="Models\ColorLinearizationModel.cs" /> <Compile Include="RMLModule.cs" /> <Compile Include="Properties\AssemblyInfo.cs"> <SubType>Code</SubType> @@ -101,21 +93,16 @@ <Compile Include="ViewModels\CalibrationDataPointVM.cs" /> <Compile Include="ViewModels\CalibrationDataViewVM.cs" /> <Compile Include="ViewModels\CalibrationDataVM.cs" /> - <Compile Include="ViewModels\ColorCalibrationViewVM.cs" /> <Compile Include="ViewModels\ColorConversionViewVM.cs" /> <Compile Include="ViewModels\LiquidVolumeVM.cs" /> <Compile Include="ViewModels\MainViewVM.cs" /> <Compile Include="ViewModels\RgbVM.cs" /> - <Compile Include="ViewModels\RmlDeleteDialogViewVM.cs" /> <Compile Include="Views\AddLiquidFactorView.xaml.cs"> <DependentUpon>AddLiquidFactorView.xaml</DependentUpon> </Compile> <Compile Include="Views\CalibrationDataView.xaml.cs"> <DependentUpon>CalibrationDataView.xaml</DependentUpon> </Compile> - <Compile Include="Views\ColorCalibrationView.xaml.cs"> - <DependentUpon>ColorCalibrationView.xaml</DependentUpon> - </Compile> <Compile Include="Views\ColorConversionView.xaml.cs"> <DependentUpon>ColorConversionView.xaml</DependentUpon> </Compile> @@ -125,24 +112,12 @@ <Compile Include="Views\ProcessParametersView.xaml.cs"> <DependentUpon>ProcessParametersView.xaml</DependentUpon> </Compile> - <Compile Include="Views\RmlDeleteDialogView.xaml.cs"> - <DependentUpon>RmlDeleteDialogView.xaml</DependentUpon> - </Compile> <Compile Include="Views\RmlsView.xaml.cs"> <DependentUpon>RmlsView.xaml</DependentUpon> </Compile> <Compile Include="Views\RmlView.xaml.cs"> <DependentUpon>RmlView.xaml</DependentUpon> </Compile> - <Compile Include="Views\HeadCleaningParametersView.xaml.cs"> - <DependentUpon>HeadCleaningParametersView.xaml</DependentUpon> - </Compile> - <Compile Include="Views\ThreadParametersView.xaml.cs"> - <DependentUpon>ThreadParametersView.xaml</DependentUpon> - </Compile> - <Compile Include="Views\SpoolsView.xaml.cs"> - <DependentUpon>SpoolsView.xaml</DependentUpon> - </Compile> <EmbeddedResource Include="Properties\Resources.resx"> <Generator>ResXFileCodeGenerator</Generator> <LastGenOutput>Resources.Designer.cs</LastGenOutput> @@ -167,10 +142,6 @@ <Project>{40085232-aced-4cbe-945b-90ba8153c151}</Project> <Name>Tango.BrushPicker</Name> </ProjectReference> - <ProjectReference Include="..\..\..\Tango.ColorCalibration\Tango.ColorCalibration.csproj"> - <Project>{b60c695c-61e8-4091-b506-4c45349c04aa}</Project> - <Name>Tango.ColorCalibration</Name> - </ProjectReference> <ProjectReference Include="..\..\..\Tango.ColorConversion\Tango.ColorConversion.csproj"> <Project>{b4fe6485-4161-4b36-bc08-67e0b53d01b7}</Project> <Name>Tango.ColorConversion</Name> @@ -232,10 +203,6 @@ <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> </Page> - <Page Include="Views\ColorCalibrationView.xaml"> - <SubType>Designer</SubType> - <Generator>MSBuild:Compile</Generator> - </Page> <Page Include="Views\ColorConversionView.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -248,10 +215,6 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="Views\RmlDeleteDialogView.xaml"> - <SubType>Designer</SubType> - <Generator>MSBuild:Compile</Generator> - </Page> <Page Include="Views\RmlsView.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -260,18 +223,6 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="Views\HeadCleaningParametersView.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - <Page Include="Views\ThreadParametersView.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - <Page Include="Views\SpoolsView.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> </ItemGroup> <ItemGroup> <Resource Include="Images\threads.png" /> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/CalibrationDataViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/CalibrationDataViewVM.cs index fd69fef35..b34ef83bc 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/CalibrationDataViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/CalibrationDataViewVM.cs @@ -6,7 +6,6 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL.Calibration; -using Tango.BL.Entities; using Tango.Core.Commands; using Tango.MachineStudio.Common; using Tango.MachineStudio.Common.Notifications; @@ -107,14 +106,5 @@ namespace Tango.MachineStudio.RML.ViewModels _notification.ShowError("An error occurred while trying to export the calibration data."); } } - - public void ApplyCalibrationData(LiquidType liquidType, List<CalibrationDataPointVM> newpoints) - { - CalibrationDataVM vm = LiquidsCalibrationData.FirstOrDefault(x => x.LiquidType == liquidType); - if(vm != null) - { - newpoints.ForEach(x => vm.CalibrationPoints.Add(x)); - } - } } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs deleted file mode 100644 index f04eccd90..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs +++ /dev/null @@ -1,551 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.BL.Entities; -using Tango.Core; -using Tango.Core.Commands; -using Tango.MachineStudio.RML.Models; -using Tango.SharedUI; -using OxyPlot; -using OxyPlot.Wpf; -using OxyPlot.Annotations; -using Tango.ColorCalibration; -using Tango.PMR.ColorLab; -using Tango.Logging; -using Tango.MachineStudio.Common.Notifications; -using System.Text.RegularExpressions; -using Microsoft.Win32; - -namespace Tango.MachineStudio.RML.ViewModels -{ - public class ColorCalibrationViewVM : ExtendedObject - { - private IColorCalibrator _calibrator; - private ILinearizationMeasurements _linearizationMeasurementscalibrator; - private INotificationProvider _notification; - - #region Properties - - private Rml _rml; - public Rml RML - { - get { return _rml; } - set { _rml = value; RaisePropertyChangedAuto(); } - } - - private BL.Entities.LiquidType _liquidType; - - public BL.Entities.LiquidType LiquidType - { - get { return _liquidType; } - set { _liquidType = value; RaisePropertyChangedAuto(); RaisePropertyChanged("LiquidTypeName"); } - } - - private List<BL.Entities.LiquidType> _liquidTypes; - - public List<BL.Entities.LiquidType> LiquidTypes - { - get { return _liquidTypes; } - set { _liquidTypes = value; } - } - - - private ObservableCollection<CalibrationMeasurementModel> _measurements; - public ObservableCollection<CalibrationMeasurementModel> Measurements - { - get - { - return _measurements; - } - set - { - _measurements = value; RaisePropertyChangedAuto(); - } - } - - - private double _factor; - - public double Factor - { - get { return _factor; } - set { _factor = value; RaisePropertyChangedAuto(); } - } - - private string _errorMessage; - - public string ErrorMessage - { - get { return _errorMessage; } - set { _errorMessage = value; RaisePropertyChangedAuto(); } - } - private bool _hasError; - - public bool HasError - { - get { return _hasError; } - set { _hasError = value; RaisePropertyChangedAuto(); } - } - - public RelayCommand ImportDataCommand { get; set; } - public RelayCommand CreateGraphCommand { get; set; } - public RelayCommand CreateLinearizationGraphCommand { get; set; } - public RelayCommand ExportGraphCommand { get; set; } - public RelayCommand ApplyCalibrationDataCommand { get; set; } - - - public string LiquidTypeName - { - get { return LiquidType == null ?"" : LiquidType.Name; } - } - - public Plot PlotControl { get; set; } - private IList<DataPoint> _points; - /// <summary> - /// Binding to ItemsSource of line chart. - /// </summary> - public IList<DataPoint> Points - { - get { return _points; } - set - { - _points = value; - RaisePropertyChangedAuto(); - } - } - private IList<DataPoint> _targetPoints; - /// <summary> - /// Binding to ItemsSource of line chart. - /// </summary> - public IList<DataPoint> TargetPoints - { - get { return _targetPoints; } - set - { - _targetPoints = value; - RaisePropertyChangedAuto(); - } - } - private int _step; - public int XStep - { - get { return _step; } - set { _step = value; RaisePropertyChangedAuto(); } - } - - private double _from; - /// <summary> - /// From use to binding to bottom axis min value - /// </summary> - public double From - { - get { return _from; } - set - { - _from = value; RaisePropertyChangedAuto(); - } - } - - private double _to; - /// <summary> - /// To use to binding to bottom axis max value - /// </summary> - public double To - { - get { return _to; } - set - { - _to = value; RaisePropertyChangedAuto(); - } - } - - private double _LabMinVal; - - public double LabMinVal - { - get { return _LabMinVal; } - set { _LabMinVal = value; RaisePropertyChangedAuto(); } - } - - private double _LabMaxVal; - - public double LabMaxVal - { - get { return _LabMaxVal; } - set { _LabMaxVal = value; RaisePropertyChangedAuto(); } - } - - public Plot LABLinearizationPlotControl { get; set; } - public Plot LinearizationPlotControl { get; set; } - private IList<DataPoint> _linearizationPoints; - /// <summary> - /// Binding to ItemsSource of line chart. - /// </summary> - public IList<DataPoint> LinearizationPoints - { - get { return _linearizationPoints; } - set - { - _linearizationPoints = value; - RaisePropertyChangedAuto(); - } - } - - private IList<DataPoint> _LPoints; - - public IList<DataPoint> LPoints - { - get { return _LPoints; } - set { _LPoints = value; } - } - - private IList<DataPoint> _APoints; - - public IList<DataPoint> APoints - { - get { return _APoints; } - set { _APoints = value; } - } - - private IList<DataPoint> _BPoints; - - public IList<DataPoint> BPoints - { - get { return _BPoints; } - set { _BPoints = value; } - } - - - #endregion - - public ColorCalibrationViewVM(INotificationProvider notification) - { - _notification = notification; - Measurements = new ObservableCollection<CalibrationMeasurementModel>() - { - new CalibrationMeasurementModel(), - new CalibrationMeasurementModel(), - new CalibrationMeasurementModel(), - }; - Factor = 0; - HasError = false; - ImportDataCommand = new RelayCommand(ImportDataForCalcFactorExcel); - CreateGraphCommand = new RelayCommand(CreateGraph); - CreateLinearizationGraphCommand = new RelayCommand(CreateLinearizationGraph); - ExportGraphCommand = new RelayCommand(ExportGraph); - ApplyCalibrationDataCommand = new RelayCommand(ApplyCalibrationData); - this.Points = new List<DataPoint>(); - TargetPoints = new List<DataPoint>(); - LinearizationPoints = new List<DataPoint>(); - LPoints = new List<DataPoint>(); - APoints = new List<DataPoint>(); - BPoints = new List<DataPoint>(); - } - - public void Loading() - { - LiquidType = LiquidTypes.Count > 0 ? LiquidTypes[0] : null; - _calibrator = new DefaultColorCalibrator(); - _linearizationMeasurementscalibrator = new DefaultColorCalibrator(); - - } - - public void ClearResults() - { - Points.Clear(); - TargetPoints.Clear(); - ErrorMessage = ""; - HasError = false; - Factor = 0.0; - } - - private double GetLiquidFactor() - { - try - { - CalibrationInput conversionInput = new CalibrationInput(); - Measurements.ToList().ForEach(x => conversionInput.Measurements.Add(new CalibrationMeasurement { L = x.L, A = x.A, B = x.B, NanoliterPerCentimeter = x.Ink })); - conversionInput.LiquidType = PMR.ColorLab.LiquidType.TryParse(_liquidType.Type.ToString(), out PMR.ColorLab.LiquidType outValue) ? outValue : PMR.ColorLab.LiquidType.Black; - - - LAB lab; - if (ColorCalibrationExt.TargetLiquidTypeToLAB.TryGetValue(_liquidType.Type, out lab)) - { - conversionInput.TargetL = lab.L; - conversionInput.TargetA = lab.A; - conversionInput.TargetB = lab.B; - } - CalibrationOutput result = _calibrator.GetLiquidFactor(conversionInput); - - ErrorMessage = result.ErrorMessage; - HasError = false == String.IsNullOrEmpty(ErrorMessage); - - return result.LiquidFactor; - } - catch (Exception ex ) - { - HasError = true; - ErrorMessage = "Error occurred while trying to call GetLiquidFactor."; - LogManager.Log(ex, "Error occurred while trying to call GetLiquidFactor."); - } - return 0.0; - } - - private void ImportDataForCalcFactorExcel() - { - OpenFileDialog dlg = new OpenFileDialog(); - - try - { - dlg.Title = $"Import excel file for calculate Factor"; - dlg.Filter = "Excel Files|*.xlsx"; - if (dlg.ShowDialog().Value) - { - ClearResults(); - - List<ColorLinearizationModel.LinearizationDataItem> items;//List<LinearizationDataItem> items - ColorLinearizationModel model = new ColorLinearizationModel(); - string error = ""; - model.GetDataFromFile(dlg.FileName, out items, ref error); - if (false == String.IsNullOrEmpty(error) || items == null || items.Count == 0) - { - _notification.ShowError("An error occurred while trying to import data form the selected excel file. Please check the file format if valid and is available to read."); - return; - } - Measurements.Clear(); - items.ForEach(x => Measurements.Add(new CalibrationMeasurementModel(x))); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error importing excel file " + dlg.FileName); - _notification.ShowError("An error occurred while trying to import the selected excel file. Please check the file format if valid and is available to read."); - } - } - #region CreateGraph - - private async void CreateGraph(object obj) - { - if (_liquidType == null) - return; - ClearResults(); - PlotControl.InvalidatePlot(true); - string labType = ColorCalibrationExt.DisplayLiquidTypeToLABType[_liquidType.Type]; - await Task.Factory.StartNew(() => - { - Factor = GetLiquidFactor( ); - }); - - DataPoint targetPoint = GetTargetPoint(); - - To = 0; - From = 0; - - Measurements.ToList().ForEach(x =>{ Points.Add(new DataPoint(x.Ink, labType == "L" ? x.L : x.B)); - TargetPoints.Add(new DataPoint(x.Ink, targetPoint.Y)); }); - - _to = labType == "L"? 100 : 128; - _from = labType == "L" ? 0 : -127; - - RaisePropertyChanged("To"); - RaisePropertyChanged("From"); - XStep = (int)(Points.Count / 6); - RaisePropertyChanged("CalibrationType"); - PlotControl.InvalidatePlot(true); - - } - - private DataPoint GetTargetPoint() - { - var listValues = Measurements.ToList(); - if (listValues.Count == 0 || Factor <=0) - return new DataPoint(0, 0); - - string labType = ColorCalibrationExt.DisplayLiquidTypeToLABType[_liquidType.Type]; - - var left = listValues.Where(y => y.Ink == listValues.Min(x => x.Ink)).ToList().First(); - var right = listValues.Where(y => y.Ink == listValues.Max(x => x.Ink)).ToList().First(); - // Normalize start/end to left right to make the offset calc simpler. - DataPoint leftPoint = new DataPoint(left.Ink, labType == "L" ? left.L : left.B); - DataPoint rightPoint = new DataPoint(right.Ink, labType == "L" ? right.L : right.B); - - double deltaX = rightPoint.X - leftPoint.X; - double deltaY = rightPoint.Y - leftPoint.Y; - - // prevents division by zero exceptions. - if (deltaX == 0 ) - return new DataPoint(0, 0); - - double slope = deltaY / deltaX; - double offset = leftPoint.Y - leftPoint.X * slope; - double calculatedY = Factor * slope + offset; - - return new DataPoint(Factor, calculatedY); ; - } - - #endregion - #region CreateLinearizationGraph - - private async void CreateLinearizationGraph(object obj) - { - if (_liquidType == null ) - return; - - string labType = ColorCalibrationExt.DisplayLiquidTypeToLABType[_liquidType.Type]; - - ColorLinearizationModel model = new ColorLinearizationModel(); - string fileName = GetInkDataFileOpen();// @"C:\Test\Test Input Lineration.xlsx";//dialog to open file - if (fileName == null) - return; - - LinearizationPoints.Clear(); - LinearizationPlotControl.InvalidatePlot(true); - LPoints.Clear(); - APoints.Clear(); - BPoints.Clear(); - LabMinVal = LabMaxVal = 0; - LABLinearizationPlotControl.InvalidatePlot(true); - - List<ColorLinearizationModel.LinearizationDataItem> items; - string errors = ""; - model.GetDataFromFile(fileName, out items, ref errors); - if(false == String.IsNullOrEmpty(errors) || items == null || items.Count == 0) - { - _notification.ShowError("An error occurred while trying to import data form the selected excel file. Please check the file format if valid and is available to read."); - return; - } - - List<double> outputPoints = new List<double>(); - - await Task.Factory.StartNew(() => - { - outputPoints = GetLinearizationMeasurements(items); - }); - - LabMinVal = items.Min(x => Math.Min(x.L, Math.Min(x.A, x.B))); - LabMaxVal = items.Max(x => Math.Max(x.L, Math.Max(x.A, x.B))); - foreach (var labItem in items) - { - LPoints.Add(new DataPoint(labItem.InkPercentage, labItem.L)); - APoints.Add(new DataPoint(labItem.InkPercentage, labItem.A)); - BPoints.Add(new DataPoint(labItem.InkPercentage, labItem.B)); - } - LABLinearizationPlotControl.InvalidatePlot(true); - - if (outputPoints == null || outputPoints.Count != items.Count) - return; - - foreach (var nw in items.Zip(outputPoints, Tuple.Create)) - { - LinearizationPoints.Add(new DataPoint(nw.Item1.InkPercentage, nw.Item2)); - } - - LinearizationPlotControl.InvalidatePlot(true); - } - - /// <summary> - /// Open file dialog and get name of file - /// </summary> - /// <returns></returns> - private String GetInkDataFileOpen() - { - OpenFileDialog dlg = new OpenFileDialog(); - dlg.Title = "Select Ink data file"; - dlg.Filter = "Excel |*.xlsx"; - if (dlg.ShowDialogCenter()) - { - return dlg.FileName; - } - - return null; - } - - private List<double> GetLinearizationMeasurements(List<ColorLinearizationModel.LinearizationDataItem> items) - { - try - { - LinearizationInput linearizationInput = new LinearizationInput(); - items.ForEach(x => linearizationInput.Measurements.Add(new LinearizationMeasurement { L = x.L, A = x.A, B = x.B, InkPercentage = x.InkPercentage })); - linearizationInput.LiquidType = PMR.ColorLab.LiquidType.TryParse(_liquidType.Type.ToString(), out PMR.ColorLab.LiquidType outValue) ? outValue : PMR.ColorLab.LiquidType.Black; - - LinearizationOutput result = _linearizationMeasurementscalibrator.GetLinearizationMeasurements(linearizationInput); - - if(!String.IsNullOrEmpty(result.ErrorMessage)) - { - LogManager.Log(result.ErrorMessage, "GetLinearizationMeasurements returns error." + result.ErrorMessage); - InvokeUI(() => - { - _notification.ShowError("Linearization failed. " + result.ErrorMessage); - }); - } - - LAB lab; - if (ColorCalibrationExt.TargetLiquidTypeToLAB.TryGetValue(_liquidType.Type, out lab)) - { - linearizationInput.TargetL = lab.L; - linearizationInput.TargetA = lab.A; - linearizationInput.TargetB = lab.B; - } - return result.InkPercentage.ToList(); - } - catch (Exception ex) - { - LogManager.Log(ex, "Error occurred while trying to call GetLinearizationMeasurements."); - } - return null; - } - #endregion - - #region Export graph - /// <summary> - /// Exports the graph point to Excel file. - /// </summary> - protected void ExportGraph() - { - SaveFileDialog dlg = new SaveFileDialog(); - try - { - dlg.Title = $"Export excel calibration file for {LiquidType.Name}"; - dlg.Filter = "Excel Files|*.xlsx"; - dlg.DefaultExt = ".xlsx"; - dlg.FileName = $"CData_{LiquidType.Name}_v{LiquidType.Version}.xlsx"; - if (dlg.ShowDialog().Value) - { - List<CalibrationPoint> points = new List<CalibrationPoint>(); - LinearizationPoints.ToList().ForEach(x=> points.Add(ToCalibrationPoint(x))); - BL.Calibration.CalibrationHelper.ExportCalibrationDataToExcel(points, dlg.FileName); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error exporting excel file " + dlg.FileName); - _notification.ShowError("An error occurred while trying to export the calibration data."); - } - } - public CalibrationPoint ToCalibrationPoint(DataPoint point) - { - return new CalibrationPoint() - { - X = point.X, - Y = point.Y, - }; - } - - /// <summary> - /// Applies the calibration data. - /// </summary> - protected void ApplyCalibrationData() - { - if (LinearizationPoints.Count == 0) - return; - - List<CalibrationDataPointVM> points = new List<CalibrationDataPointVM>(); - LinearizationPoints.ToList().ForEach(x => points.Add(new CalibrationDataPointVM(x.X, x.Y))); - ViewModelLocator.MainViewVM.CalibrationDataViewVM.ApplyCalibrationData(LiquidType, points); - } - #endregion - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs index 95de19f42..b68239b4b 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs @@ -111,7 +111,6 @@ namespace Tango.MachineStudio.RML.ViewModels Color = x.LiquidType.Color, Name = x.LiquidType.Name, LiquidType = x.LiquidType, - MaxNanoliterPerCentimeter = x.MaxNlPerCm, }).ToObservableCollection(); } @@ -310,19 +309,6 @@ namespace Tango.MachineStudio.RML.ViewModels } } - private double GetTotalMaximumLiquidNlPerCMLimit() - { - try - { - var tables = RML.GetActiveProcessGroup().ProcessParametersTables.OrderBy(x => x.TableIndex).ToList(); - return tables.Max(x => x.MaxInkUptake); - } - catch - { - return BrushStop.MAX_INK_UPTAKE; - } - } - private void OnLiquidVolumeChanged() { try @@ -330,7 +316,7 @@ namespace Tango.MachineStudio.RML.ViewModels if (LiquidsCalibrationData == null || _prevent_inverse_conversion) return; //TODO: This is temporary because of out of range volumes. - if (LiquidVolumes.Where(x => x.LiquidType.HasPigment).Sum(x => x.NanoliterPerCentimeter) > GetTotalMaximumLiquidNlPerCMLimit()) + if (LiquidVolumes.Where(x => x.LiquidType.HasPigment).Sum(x => x.Volume) > 200) { IsVolumesOutOfRange = true; return; diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/LiquidVolumeVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/LiquidVolumeVM.cs index 27b811bb6..7399d62af 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/LiquidVolumeVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/LiquidVolumeVM.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Tango.BL.Dispensing; using Tango.BL.Entities; using Tango.Core; using Tango.SharedUI; @@ -48,17 +47,5 @@ namespace Tango.MachineStudio.RML.ViewModels get { return _liquidType; } set { _liquidType = value; RaisePropertyChangedAuto(); } } - - public double MaxNanoliterPerCentimeter { get; set; } - - public double NanoliterPerCentimeter - { - get - { - StandardColorDispensingCalc calc = new StandardColorDispensingCalc(); - return calc.CalculateNanoliterPerCentimeter(Volume, MaxNanoliterPerCentimeter); - } - } - } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/MainViewVM.cs index cadd1fb95..ee21b9ac3 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/MainViewVM.cs @@ -21,19 +21,12 @@ using Tango.MachineStudio.RML.Views; using Tango.PMR.ColorLab; using System.Data.Entity; using Tango.Core.ExtensionMethods; -using Tango.MachineStudio.Common.Authentication; -using Tango.BL.ActionLogs; -using Tango.BL.DTO; -using Tango.BL.Enumerations; namespace Tango.MachineStudio.RML.ViewModels { public class MainViewVM : StudioViewModel<IMainView> { private INotificationProvider _notification; - private IAuthenticationProvider _authentication; - private IActionLogManager _actionLogManager; - private RmlDTO _rmlBeforeSave; private ObservablesContext _rmls_context; private ObservablesContext _active_context; @@ -45,20 +38,6 @@ namespace Tango.MachineStudio.RML.ViewModels set { _rmls = value; RaisePropertyChangedAuto(); } } - private ICollectionView _rmlssCollectionView; - /// <summary> - /// Gets or sets the RML collection view. - /// </summary> - public ICollectionView RmlsCollectionView - { - get { return _rmlssCollectionView; } - set - { - _rmlssCollectionView = value; - RaisePropertyChangedAuto(); - } - } - private ObservableCollection<MediaMaterial> _materials; public ObservableCollection<MediaMaterial> Materials { @@ -101,13 +80,6 @@ namespace Tango.MachineStudio.RML.ViewModels set { _fiberSynths = value; RaisePropertyChangedAuto(); } } - private ObservableCollection<SpoolType> _spoolTypes; - public ObservableCollection<SpoolType> SpoolTypes - { - get { return _spoolTypes; } - set { _spoolTypes = value; RaisePropertyChangedAuto(); } - } - private Rml _selectedRML; public Rml SelectedRML { @@ -171,30 +143,6 @@ namespace Tango.MachineStudio.RML.ViewModels set { _colorConversionViewVM = value; RaisePropertyChangedAuto(); } } - private RmlsSpool _selectedSpool; - public RmlsSpool SelectedSpool - { - get { return _selectedSpool; } - set { _selectedSpool = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } - } - - private ColorCalibrationViewVM _colorCalibrationVM; - public ColorCalibrationViewVM ColorCalibrationVM - { - get { return _colorCalibrationVM; } - set { _colorCalibrationVM = value; RaisePropertyChangedAuto(); } - } - - private String _RMLFilter; - /// <summary> - /// Gets or sets the job filter. - /// </summary> - public String RMLFilter - { - get { return _RMLFilter; } - set { _RMLFilter = value; RaisePropertyChangedAuto(); OnRMLFilterChanged(); } - } - /// <summary> /// Gets or sets the manage RML command. /// </summary> @@ -237,21 +185,9 @@ namespace Tango.MachineStudio.RML.ViewModels public RelayCommand ImportRMLFileCommand { get; set; } - /// <summary> - /// Gets or sets the add spool command. - /// </summary> - public RelayCommand AddSpoolCommand { get; set; } - - /// <summary> - /// Gets or sets the remove spool command. - /// </summary> - public RelayCommand RemoveSpoolCommand { get; set; } - - public MainViewVM(INotificationProvider notificationProvider, IAuthenticationProvider authentication, IActionLogManager actionLogManager) + public MainViewVM(INotificationProvider notificationProvider) { _notification = notificationProvider; - _authentication = authentication; - _actionLogManager = actionLogManager; ManageRmlCommand = new RelayCommand(() => LoadActiveRML(SelectedRML.Guid), () => SelectedRML != null); RemoveRmlCommand = new RelayCommand(RemoveSelectedRml, () => SelectedRML != null); CloneRmlCommand = new RelayCommand(CloneSelectedRml, () => SelectedRML != null); @@ -270,9 +206,6 @@ namespace Tango.MachineStudio.RML.ViewModels ExportRMLFileCommand = new RelayCommand(ExportRmlFile, () => SelectedRML != null && IsFree); ImportRMLFileCommand = new RelayCommand(ImportRmlFile, () => IsFree); - - AddSpoolCommand = new RelayCommand(AddNewSpool); - RemoveSpoolCommand = new RelayCommand(RemoveSpool, () => SelectedSpool != null); } public override void OnApplicationReady() @@ -282,177 +215,130 @@ namespace Tango.MachineStudio.RML.ViewModels private async void LoadRmls() { - try - { - IsFree = false; + if (_rmls_context != null) _rmls_context.Dispose(); - using (_notification.PushTaskItem("Loading Rmls...")) - { - if (_rmls_context != null) _rmls_context.Dispose(); + _rmls_context = ObservablesContext.CreateDefault(); + Rmls = await new RmlsCollectionBuilder(_rmls_context).SetAll().WithLiquidFactors().WithMediaProperties().BuildAsync(); - _rmls_context = ObservablesContext.CreateDefault(); - Rmls = await new RmlsCollectionBuilder(_rmls_context).SetAll().WithLiquidFactors().WithMediaProperties().BuildAsync(); - //Load CCT file names... - var ccts = await _rmls_context.Ccts.Select(x => new - { - x.Guid, - x.FileName - }).ToListAsync(); - - foreach (var rml in Rmls) - { - var cct = ccts.SingleOrDefault(x => x.Guid == rml.CctGuid); + //Load CCT file names... + var ccts = await _rmls_context.Ccts.Select(x => new + { + x.Guid, + x.FileName + }).ToListAsync(); - if (cct != null) - { - rml.Cct = new Cct() - { - Guid = cct.Guid, - FileName = cct.FileName, - }; - } - } - RmlsCollectionView = CollectionViewSource.GetDefaultView(Rmls); - RmlsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Rml.LastUpdated), ListSortDirection.Descending)); - //RmlsCollectionView.Filter = new Predicate<object>(FilterCollection); + foreach (var rml in Rmls) + { + var cct = ccts.SingleOrDefault(x => x.Guid == rml.CctGuid); - RmlsCollectionView.Filter = (rml) => + if (cct != null) + { + rml.Cct = new Cct() { - Rml r = rml as Rml; - return String.IsNullOrWhiteSpace(RMLFilter) - || r.Name.ToLower().Contains(RMLFilter.ToLower()); + Guid = cct.Guid, + FileName = cct.FileName, }; - } } - catch (Exception ex) - { - LogManager.Log(ex, $"Error loading RMLS.\n{ex.FlattenMessage()}"); - } - finally - { - IsFree = true; - } } private async void LoadActiveRML(String guid) { using (_notification.PushTaskItem("Loading RML...")) { - try + IsFree = false; + + if (_active_context != null) { - IsFree = false; + _active_context.Dispose(); + } - if (_active_context != null) - { - _active_context.Dispose(); - } + _active_context = ObservablesContext.CreateDefault(); - _active_context = ObservablesContext.CreateDefault(); + CCTS = _active_context.Ccts + .Select(x => new CctModel() + { + Guid = x.Guid, + FileName = x.FileName, - CCTS = _active_context.Ccts - .Select(x => new CctModel() - { - Guid = x.Guid, - FileName = x.FileName, + }).ToObservableCollection(); - }).ToObservableCollection(); + CCTS.Where(x => String.IsNullOrWhiteSpace(x.FileName)).ToList().ForEach(x => x.FileName = x.Guid); - CCTS.Where(x => String.IsNullOrWhiteSpace(x.FileName)).ToList().ForEach(x => x.FileName = x.Guid); + LoadRmlProperties(); - LoadRmlProperties(); + ActiveRML = await new RmlBuilder(_active_context) + .Set(guid) + .WithActiveParametersGroup() + .WithLiquidFactors() + .WithCCT() + .BuildAsync(); - ActiveRML = await new RmlBuilder(_active_context) - .Set(guid) - .WithActiveParametersGroup() - .WithLiquidFactors() - .WithCCT() - .WithSpools() - .BuildAsync(); + if (ActiveRML.Cct != null) + { + SelectedCCT = CCTS.SingleOrDefault(x => x.Guid == ActiveRML.Cct.Guid); + } - if (ActiveRML.Cct != null) + if (ActiveRML.ProcessParametersTablesGroups.ToList().Count == 0) + { + if (!_notification.ShowQuestion("Could not find any process group for the selected RML. Would you like to create one?")) { - SelectedCCT = CCTS.SingleOrDefault(x => x.Guid == ActiveRML.Cct.Guid); + _notification.ShowError("Cannot load an RML with no process group."); + IsFree = true; + return; } - - if (ActiveRML.ProcessParametersTablesGroups.ToList().Count == 0) + else { - if (!_notification.ShowQuestion("Could not find any process group for the selected RML. Would you like to create one?")) - { - _notification.ShowError("Cannot load an RML with no process group."); - IsFree = true; - return; - } - else + ProcessParametersTablesGroup group = new ProcessParametersTablesGroup(); + group.Name = "Active Group"; + group.Active = true; + group.ProcessParametersTables.Add(new ProcessParametersTable() { - ProcessParametersTablesGroup group = new ProcessParametersTablesGroup(); - group.Name = "Active Group"; - group.Active = true; - group.ProcessParametersTables.Add(new ProcessParametersTable() - { - Name = "Process Table 1", - }); + Name = "Process Table 1", + }); - group.Rml = ActiveRML; + group.Rml = ActiveRML; - _active_context.ProcessParametersTablesGroups.Add(group); - _active_context.ProcessParametersTables.Add(group.ProcessParametersTables[0]); - await _active_context.SaveChangesAsync(); - LoadActiveRML(ActiveRML.Guid); - return; - } + _active_context.ProcessParametersTablesGroups.Add(group); + _active_context.ProcessParametersTables.Add(group.ProcessParametersTables[0]); + await _active_context.SaveChangesAsync(); + LoadActiveRML(ActiveRML.Guid); + return; } + } - ActiveProcessParametersGroup = ActiveRML.ProcessParametersTablesGroups.ToList().FirstOrDefault(); - ActiveProcessParametersTableView = CollectionViewSource.GetDefaultView(ActiveProcessParametersGroup.ProcessParametersTables); - ActiveProcessParametersTableView.SortDescriptions.Add(new SortDescription(nameof(ProcessParametersTable.TableIndex), ListSortDirection.Ascending)); - - CalibrationDataViewVM = new CalibrationDataViewVM(_notification); - LiquidTypesRmls = ActiveRML.LiquidTypesRmls; - - foreach (var liquidTypeRml in LiquidTypesRmls) - { - CalibrationDataVM catVM = new CalibrationDataVM(liquidTypeRml.LiquidType); + ActiveProcessParametersGroup = ActiveRML.ProcessParametersTablesGroups.ToList().FirstOrDefault(); + ActiveProcessParametersTableView = CollectionViewSource.GetDefaultView(ActiveProcessParametersGroup.ProcessParametersTables); + ActiveProcessParametersTableView.SortDescriptions.Add(new SortDescription(nameof(ProcessParametersTable.TableIndex), ListSortDirection.Ascending)); - if (liquidTypeRml.DefaultCatData != null) - { - catVM.CalibrationPoints = liquidTypeRml.GetCalibrationData().CalibrationPoints.Select(x => new CalibrationDataPointVM(x.X, x.Y)).ToObservableCollection(); - } + CalibrationDataViewVM = new CalibrationDataViewVM(_notification); + LiquidTypesRmls = ActiveRML.LiquidTypesRmls; - CalibrationDataViewVM.LiquidsCalibrationData.Add(catVM); - } + foreach (var liquidTypeRml in LiquidTypesRmls) + { + CalibrationDataVM catVM = new CalibrationDataVM(liquidTypeRml.LiquidType); - ColorConversionViewVM = new ColorConversionViewVM(_notification) + if (liquidTypeRml.DefaultCatData != null) { - RML = ActiveRML, - CCT = SelectedCCT, - LiquidsCalibrationData = CalibrationDataViewVM.LiquidsCalibrationData, - LiquidTypesRmls = LiquidTypesRmls, - }; + catVM.CalibrationPoints = liquidTypeRml.GetCalibrationData().CalibrationPoints.Select(x => new CalibrationDataPointVM(x.X, x.Y)).ToObservableCollection(); + } - ColorCalibrationVM = new ColorCalibrationViewVM(_notification) - { - RML = ActiveRML, - LiquidTypes = LiquidTypesRmls.Where(x => x.LiquidType.HasPigment).ToList().Select(y => y.LiquidType).ToList(), - }; + CalibrationDataViewVM.LiquidsCalibrationData.Add(catVM); + } - _rmlBeforeSave = RmlDTO.FromObservable(ActiveRML); + ColorConversionViewVM = new ColorConversionViewVM(_notification) + { + RML = ActiveRML, + CCT = SelectedCCT, + LiquidsCalibrationData = CalibrationDataViewVM.LiquidsCalibrationData, + LiquidTypesRmls = LiquidTypesRmls, + }; - View.NavigateTo(RmlNavigationView.RmlView); + View.NavigateTo(RmlNavigationView.RmlView); - InvalidateRelayCommands(); + InvalidateRelayCommands(); - IsFree = true; - } - catch (Exception ex) - { - LogManager.Log($"Error loading RML '{ActiveRML.Name}'..."); - _notification.ShowError($"Error loading the selected thread.\n{ex.FlattenMessage()}"); - } - finally - { - IsFree = true; - } + IsFree = true; } } @@ -485,7 +371,6 @@ namespace Tango.MachineStudio.RML.ViewModels LinearMassDensityUnits = _active_context.LinearMassDensityUnits.ToObservableCollection(); FiberShapes = _active_context.FiberShapes.ToObservableCollection(); FiberSynths = _active_context.FiberSynths.ToObservableCollection(); - SpoolTypes = _active_context.SpoolTypes.ToObservableCollection(); } private async void AddNewRml() @@ -515,10 +400,8 @@ namespace Tango.MachineStudio.RML.ViewModels Rml rml = new Rml(); rml.Name = name; - rml.DisplayName = name; - rml.QualificationDate = DateTime.UtcNow; rml.Manufacturer = "Twine"; - rml.Code = Rmls.Count > 0 ? Rmls.Max(x => x.Code) + 1 : 1; + rml.Code = Rmls.Max(x => x.Code) + 1; rml.MediaMaterial = Materials.FirstOrDefault(); rml.MediaPurpose = Purposes.FirstOrDefault(); rml.MediaCondition = Conditions.FirstOrDefault(); @@ -540,9 +423,6 @@ namespace Tango.MachineStudio.RML.ViewModels _active_context.ProcessParametersTables.Add(group.ProcessParametersTables[0]); _active_context.Rmls.Add(rml); await _active_context.SaveChangesAsync(); - - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.RmlCreated, _authentication.CurrentUser, rml.Name, rml, "Rml created using Machine Studio."); - LoadActiveRML(rml.Guid); IsFree = true; @@ -552,64 +432,25 @@ namespace Tango.MachineStudio.RML.ViewModels private async void RemoveSelectedRml() { - if (_notification.ShowQuestion("Removing the selected thread will result in the loss of all related process parameters and default calibration data. Are you sure you want to delete the selected RML?")) + if (_notification.ShowQuestion("Removing the selected RML will result in the loss of all related process parameters and default calibration data. Are you sure you want to delete the selected RML?")) { + IsFree = false; + using (_notification.PushTaskItem("Removing RML...")) { try { - IsFree = false; - - var rml_jobs = await _rmls_context.Jobs.Where(x => x.RmlGuid == SelectedRML.Guid).Include(x => x.Machine).OrderBy(x => x.Machine.SerialNumber).ToListAsync(); - - if (rml_jobs.Count > 0) - { - var vm = new RmlDeleteDialogViewVM(SelectedRML, Rmls.ToList(), rml_jobs.ToList()); - _notification.ShowModalDialog<RmlDeleteDialogViewVM, RmlDeleteDialogView>(vm, (x) => { }, () => { }); - - if (!vm.DialogResult) - { - return; - } - - //Perform actions... - using (var db = ObservablesContext.CreateDefault()) - { - foreach (var jobAction in vm.JobsActions) - { - if (jobAction.Action == RmlDeleteDialogViewVM.RmlDeleteJobAction.Delete) - { - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.JobDeleted, _authentication.CurrentUser.Guid, jobAction.Job.Name, jobAction.Job.Guid, $"Job deleted due to RML '{SelectedRML.Name}' being removed."); - await jobAction.Job.DeleteCascadeAsync(db); - } - else if (jobAction.Action == RmlDeleteDialogViewVM.RmlDeleteJobAction.Change) - { - var job = await db.Jobs.SingleOrDefaultAsync(x => x.Guid == jobAction.Job.Guid); - job.RmlGuid = jobAction.TargetRml.Guid; - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.JobSaved, _authentication.CurrentUser.Guid, jobAction.Job.Name, jobAction.Job.Guid, $"Job RML changed to '{jobAction.TargetRml.Name}' due to RML '{SelectedRML.Name}' being removed."); - } - } - - await db.SaveChangesAsync(); - } - } - await SelectedRML.DeleteCascadeAsync(_rmls_context); - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.RmlDeleted, _authentication.CurrentUser, SelectedRML.Name, SelectedRML, "RML deleted from Machine Studio."); - LoadRmls(); } catch (Exception ex) { - LogManager.Log(ex, $"Error removing selected RML {SelectedRML?.Name}."); - _notification.ShowError($"An error occurred while trying to remove the selected RML.\n{ex.FlattenMessage()}"); - LoadRmls(); - } - finally - { - IsFree = true; + LogManager.Log(ex, $"Error removing selected RML {SelectedRML.Name}."); + _notification.ShowError($"An error occurred while trying to remove the selected RML.\n{ex.Message}"); } } + + IsFree = true; } } @@ -627,18 +468,15 @@ namespace Tango.MachineStudio.RML.ViewModels using (var context = ObservablesContext.CreateDefault()) { - var rml = await new RmlBuilder(context).Set(SelectedRML.Guid).WithActiveParametersGroup().WithLiquidFactors().WithSpools().BuildAsync(); + var rml = await new RmlBuilder(context).Set(SelectedRML.Guid).WithActiveParametersGroup().WithLiquidFactors().BuildAsync(); Rml cloned = new Rml(); - rml.MapPropertiesTo(cloned, MappingFlags.NoReferenceTypes); + rml.MapPrimitivesWithStrings(cloned); cloned.Code = Rmls.Max(x => x.Code) + 1; cloned.Guid = Guid.NewGuid().ToString(); cloned.ID = 0; cloned.Name = name; - cloned.DisplayName = name; - cloned.RmlQualificationLevel = RmlQualifications.Provisional; - cloned.QualificationDate = DateTime.UtcNow; ProcessParametersTablesGroup group = new ProcessParametersTablesGroup(); group.Name = rml.GetActiveProcessGroup().Name; @@ -664,19 +502,8 @@ namespace Tango.MachineStudio.RML.ViewModels cloned.LiquidTypesRmls.Add(l); } - foreach (var spool in rml.RmlsSpools) - { - RmlsSpool s = new RmlsSpool(); - spool.MapPropertiesTo(s, MappingFlags.ValueTypesOnly); - s.RmlGuid = cloned.Guid; - s.SpoolTypeGuid = spool.SpoolTypeGuid; - cloned.RmlsSpools.Add(s); - } - context.Rmls.Add(cloned); await context.SaveChangesAsync(); - - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.RmlCreated, _authentication.CurrentUser, cloned.Name, cloned, "RML cloned from Machine Studio."); } LoadRmls(); @@ -731,11 +558,6 @@ namespace Tango.MachineStudio.RML.ViewModels ActiveProcessParametersTableView.Refresh(); } - private void OnRMLFilterChanged() - { - RmlsCollectionView.Refresh(); - } - private void RemoveLiquidFactor(LiquidTypesRml liquidFactor) { if (_notification.ShowQuestion("Removing this liquid factor will remove the liquid type association with the RML and will drop the calibration data. Are you sure?")) @@ -826,11 +648,6 @@ namespace Tango.MachineStudio.RML.ViewModels ActiveRML.LastUpdated = DateTime.UtcNow; - if (_rmlBeforeSave.QualificationLevel != ActiveRML.QualificationLevel) - { - ActiveRML.QualificationDate = DateTime.UtcNow; - } - if (SelectedCCT != null) { if (SelectedCCT.IsNew) @@ -848,26 +665,18 @@ namespace Tango.MachineStudio.RML.ViewModels } } - var rmlAfter = RmlDTO.FromObservable(ActiveRML); - await _active_context.SaveChangesAsync(); - - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.RmlSaved, _authentication.CurrentUser, _rmlBeforeSave.Name, _rmlBeforeSave, rmlAfter, "RML saved using Machine Studio."); - - _rmlBeforeSave = rmlAfter; - - LoadActiveRML(ActiveRML.Guid); } } catch (Exception ex) { LogManager.Log(ex, $"Error saving RML {ActiveRML.Name}"); - _notification.ShowError($"An error occurred while trying to save the current RML.\n{ex.FlattenMessage()}"); - } - finally - { - IsFree = true; + _notification.ShowError($"An error occurred while trying to save the current RML.\n{ex.Message}"); } + + LoadActiveRML(ActiveRML.Guid); + + IsFree = true; } private void BackToRmls() @@ -883,12 +692,6 @@ namespace Tango.MachineStudio.RML.ViewModels String file = GetCCTFileOpen(); if (file != null) { - if (CCTS.ToList().Exists(x => x.FileName == Path.GetFileName(file))) - { - _notification.ShowError("The selected CCT file already exists on the database. Please select the CCT file from the dropdown box."); - return; - } - CctModel cctModel = new CctModel(); cctModel.Guid = Guid.NewGuid().ToString(); cctModel.IsNew = true; @@ -1001,8 +804,6 @@ namespace Tango.MachineStudio.RML.ViewModels var rmlFile = await Rml.FromRmlFile(db, json); db.Rmls.Add(rmlFile); - - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.RmlImported, _authentication.CurrentUser, rmlFile.Name, rmlFile, "RML imported from Machine Studio."); } await db.SaveChangesAsync(); @@ -1059,26 +860,5 @@ namespace Tango.MachineStudio.RML.ViewModels } #endregion - - #region Spools - - private void AddNewSpool() - { - _active_context.RmlsSpools.Add(new RmlsSpool() - { - Rml = ActiveRML, - }); - } - - private void RemoveSpool() - { - if (SelectedSpool != null) - { - _active_context.RmlsSpools.Remove(SelectedSpool); - ActiveRML.RmlsSpools.Remove(SelectedSpool); - } - } - - #endregion } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/RmlDeleteDialogViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/RmlDeleteDialogViewVM.cs deleted file mode 100644 index b4c6c6274..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/RmlDeleteDialogViewVM.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.BL.Entities; -using Tango.Core; -using Tango.SharedUI; - -namespace Tango.MachineStudio.RML.ViewModels -{ - public class RmlDeleteDialogViewVM : DialogViewVM - { - public enum RmlDeleteJobAction - { - Delete, - Change - } - - public class RmlDeleteJob : ExtendedObject - { - public Job Job { get; set; } - public Machine Machine { get; set; } - private RmlDeleteJobAction _action; - - public RmlDeleteJobAction Action - { - get { return _action; } - set { _action = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(IsDelete)); } - } - - public bool IsDelete - { - get { return Action == RmlDeleteJobAction.Delete; } - } - - - public Rml TargetRml { get; set; } - - public override string ToString() - { - return $"{Machine.SerialNumber} => {Job.Name} => {Action} {(Action == RmlDeleteJobAction.Change ? $" => {TargetRml.Name}" : String.Empty)}"; - } - } - - private List<Job> _jobsToDelete; - - private List<RmlDeleteJob> _jobsActions; - public List<RmlDeleteJob> JobsActions - { - get { return _jobsActions; } - set { _jobsActions = value; RaisePropertyChangedAuto(); } - } - - public Rml Rml { get; set; } - - public List<Rml> Rmls { get; set; } - - public List<RmlDeleteJobAction> Actions { get; set; } - - public RmlDeleteDialogViewVM(Rml rml, List<Rml> rmls, List<Job> jobsToDelete) - { - Rml = rml; - Rmls = rmls.Where(x => x.Guid != rml.Guid).ToList(); - _jobsToDelete = jobsToDelete; - JobsActions = new List<RmlDeleteJob>(); - - Actions = new List<RmlDeleteJobAction>() - { - RmlDeleteJobAction.Delete, - RmlDeleteJobAction.Change - }; - } - - public override void OnShow() - { - base.OnShow(); - - List<RmlDeleteJob> list = new List<RmlDeleteJob>(); - - foreach (var job in _jobsToDelete) - { - RmlDeleteJob deleteJob = new RmlDeleteJob(); - deleteJob.Job = job; - deleteJob.Action = RmlDeleteJobAction.Delete; - deleteJob.Machine = job.Machine; - deleteJob.TargetRml = Rmls.FirstOrDefault(x => x.Guid != Rml.Guid); - - list.Add(deleteJob); - } - - JobsActions = list; - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml deleted file mode 100644 index 116500f80..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml +++ /dev/null @@ -1,213 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.RML.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:vm="clr-namespace:Tango.MachineStudio.RML.ViewModels" - xmlns:global="clr-namespace:Tango.MachineStudio.RML" - xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls" - xmlns:oxy="http://oxyplot.org/wpf" - 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" - mc:Ignorable="d" - d:DesignHeight="450" d:DesignWidth="1200" Background="Transparent" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> - - <UserControl.Resources> - <converters:EmptyStringToNullConverter x:Key="EmptyStringToNullConverter" /> - <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/> - <converters:BooleanToVisibilityInverseConverter x:Key="BooleanToVisibilityInverseConverter"/> - </UserControl.Resources> - - <Grid> - <DockPanel> - <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="20 10"> - <TextBlock FontSize="16" HorizontalAlignment="Left" VerticalAlignment="Center">Liquid Type:</TextBlock> - <ComboBox Margin="40 0 0 0" MinWidth="180" HorizontalAlignment="Left" ItemsSource="{Binding LiquidTypes}" - SelectedItem="{Binding LiquidType}" DisplayMemberPath="Name" - Style="{StaticResource TransparentComboBoxStyle}" FontSize="16"></ComboBox> - </StackPanel> - <Grid> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="1.1*"/> - <ColumnDefinition Width="*"/> - </Grid.ColumnDefinitions> - <DockPanel Grid.Column="0"> - <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="20 0 0 0 " Padding="5" CornerRadius="5" Height="40" VerticalAlignment="Top"> - <Border.Effect> - <DropShadowEffect Opacity="0.4" /> - </Border.Effect> - <Grid> - <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="20 4 0 0" FontSize="16" Padding="0">LIQUID FACTOR</TextBlock> - </Grid> - </Border> - <Grid Margin="10 20 0 10"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="1*"/> - <ColumnDefinition Width="1*"/> - </Grid.ColumnDefinitions> - <Grid.RowDefinitions> - <RowDefinition Height="1*"/> - <RowDefinition Height="Auto"/> - <RowDefinition Height="Auto"/> - </Grid.RowDefinitions> - - - <Grid HorizontalAlignment="Left" VerticalAlignment="Stretch" Grid.Column="0" Grid.Row="0" Margin="20 0 10 0"> - <StackPanel Orientation="Vertical"> - <Button HorizontalAlignment="Left" Padding="6" Width="120" Background="{StaticResource TransparentBackgroundBrush200}" Command="{Binding ImportDataCommand}" ToolTip="Import data to calculate Liquid factor." Margin="0 0 10 4" BorderBrush="{StaticResource TransparentBackgroundBrush200}"> - <TextBlock FontSize="14" Foreground="{StaticResource MainWindow.Foreground}">IMPORT DATA</TextBlock> - </Button> - <DataGrid HorizontalAlignment="Left" VerticalScrollBarVisibility ="Auto" MaxHeight="280" SelectionUnit="FullRow" BorderBrush="{StaticResource DarkGrayBrush }" BorderThickness="1" Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="False" ItemsSource="{Binding Measurements}" Margin="0 0 0 50"> - <DataGrid.CellStyle> - <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="FocusVisualStyle" Value="{x:Null}"/> - <Setter Property="VerticalContentAlignment" Value="Center"></Setter> - </Style> - </DataGrid.CellStyle> - <DataGrid.Resources> - <Style x:Key="CellNumericUpDown" TargetType="{x:Type mahapps:NumericUpDown}" BasedOn="{StaticResource {x:Type mahapps:NumericUpDown}}"> - <Setter Property="FrameworkElement.HorizontalAlignment" Value="Stretch"/> - <Setter Property="HorizontalContentAlignment" Value="Left"/> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/> - <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/> - <Setter Property="Focusable" Value="false"/> - <Setter Property="IsHitTestVisible" Value="false"/> - <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/> - <Setter Property="FrameworkElement.VerticalAlignment" Value="Top"/> - <Setter Property="VerticalContentAlignment" Value="Center"/> - <Setter Property="FrameworkElement.MinHeight" Value="0"/> - <Setter Property="HideUpDownButtons" Value="true"/> - </Style> - <Style x:Key="EditableCellNumericUpDown" TargetType="{x:Type mahapps:NumericUpDown}" BasedOn="{StaticResource {x:Type mahapps:NumericUpDown}}"> - <Setter Property="FrameworkElement.HorizontalAlignment" Value="Stretch"/> - <Setter Property="HorizontalContentAlignment" Value="Left"/> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/> - <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/> - <Setter Property="FrameworkElement.VerticalAlignment" Value="Top"/> - <Setter Property="VerticalContentAlignment" Value="Center"/> - <Setter Property="FrameworkElement.MinHeight" Value="0"/> - </Style> - </DataGrid.Resources> - <DataGrid.Columns> - <mahapps:DataGridNumericUpDownColumn Header="Ink nl/cm" Minimum="0" Maximum="100000" Binding="{Binding Ink}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" /> - <mahapps:DataGridNumericUpDownColumn Header="L" Minimum="0" Maximum="100" Binding="{Binding L}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}"/> - <mahapps:DataGridNumericUpDownColumn Header="A" Minimum="-128" Maximum="127" Binding="{Binding A}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" /> - <mahapps:DataGridNumericUpDownColumn Header="B" Minimum="-128" Maximum="127" Binding="{Binding B}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" /> - </DataGrid.Columns> - </DataGrid> - - </StackPanel> - </Grid> - - <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="1" Grid.Row="0" Margin="10 0 0 0"> - <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderThickness="0" BorderBrush="{StaticResource DarkGrayBrush}" CornerRadius="5"> - <oxy:Plot Title="{Binding LiquidTypeName}" TitleFontSize="14" x:Name="CalibrationPlot" Margin="0 0 10 0" Background="Transparent" > - <oxy:Plot.Series > - <oxy:LineSeries ItemsSource="{Binding Points}" Color="#73B6EC" MarkerFill="SteelBlue" MarkerType="Circle" /> - <oxy:LineSeries ItemsSource="{Binding TargetPoints}" Color="#E14141" /> - </oxy:Plot.Series> - <oxy:Plot.Axes> - <oxy:LinearAxis Position="Bottom" Title = "nl/cm" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" /> - <oxy:LinearAxis Position="Left" Title = "Lab" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="{Binding From}" Maximum="{Binding To}" /> - </oxy:Plot.Axes> - </oxy:Plot> - </Border> - </Grid> - - <Border Grid.Row="1" Grid.ColumnSpan="2" BorderBrush="{StaticResource BlueBrush100}" BorderThickness="0" CornerRadius="5" Margin="20 0 20 0"> - <StackPanel Orientation="Vertical" Grid.Row="0" Margin="2 5 0 0"> - <Border BorderThickness="0.5" CornerRadius="4" BorderBrush="{StaticResource DarkGrayBrush}" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityInverseConverter}}" Height="Auto" Margin="0 6 0 0"> - <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}" FontWeight="SemiBold" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityInverseConverter}}" Margin="10" > - <Run FontSize="16"> Factor: </Run> - <Run Text="{Binding Factor,StringFormat='#.0000'}" Foreground="{StaticResource BlueBrush100}"></Run> - </TextBlock> - </Border> - - <Border BorderThickness="0.5" CornerRadius="4" BorderBrush="{StaticResource DarkGrayBrush}" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}" Height="Auto" Margin="0 6 0 0"> - <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}" FontWeight="SemiBold" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}" Margin="10" > - <Run FontSize="14"> Warning: </Run> - <Run Foreground="{StaticResource RedBrush300}" Text="{Binding ErrorMessage}" ></Run> - </TextBlock> - </Border> - </StackPanel> - </Border> - <Button Grid.Row="2" Grid.Column="1" Margin="0 20 20 0" VerticalAlignment="Bottom" HorizontalAlignment="Right" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="160" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding CreateGraphCommand}" > - <TextBlock FontSize="14" Foreground="{StaticResource MainWindow.Foreground}">GET LIQUID FACTOR</TextBlock> - </Button> - </Grid> - </DockPanel> - <DockPanel Grid.Column="1"> - <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="20 0 0 0 " Padding="5" CornerRadius="5" Height="40" VerticalAlignment="Top"> - <Border.Effect> - <DropShadowEffect Opacity="0.4" /> - </Border.Effect> - <Grid> - <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="20 4 0 0" FontSize="16" Padding="0">LINEARIZATION</TextBlock> - </Grid> - </Border> - <Grid Margin="10 20 20 10"> - <Grid.RowDefinitions> - <RowDefinition Height="1*"/> - <RowDefinition Height="Auto"/> - </Grid.RowDefinitions> - <Grid Grid.Column="0" Margin="10 0 0 0"> - <Grid.RowDefinitions> - <RowDefinition Height="1*"/> - <RowDefinition Height="Auto"/> - </Grid.RowDefinitions> - <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0" Margin="0 0 0 0"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="1*"></ColumnDefinition> - <ColumnDefinition Width="1*"></ColumnDefinition> - </Grid.ColumnDefinitions> - - <Border Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderThickness="0" BorderBrush="{StaticResource DarkGrayBrush}" CornerRadius="5"> - <oxy:Plot Title="{Binding LiquidTypeName}" TitleFontSize="14" x:Name="LABLinearizationPlot" Margin="0 0 10 0" Background="Transparent" LegendPlacement="Inside" LegendPosition="TopRight" LegendOrientation="Vertical" LegendFontSize="9" LegendItemAlignment="Left" LegendLineSpacing="3" Foreground="{StaticResource Dialog.Foreground}"> - <oxy:Plot.Series > - <oxy:LineSeries ItemsSource="{Binding LPoints}" Color="LawnGreen" Title="L" StrokeThickness="1.5"/> - <oxy:LineSeries ItemsSource="{Binding APoints}" Color="#E14141" Title="A" StrokeThickness="1.5"/> - <oxy:LineSeries ItemsSource="{Binding BPoints}" Color="#73B6EC" Title="B" StrokeThickness="1.5"/> - </oxy:Plot.Series> - <oxy:Plot.Axes> - <oxy:LinearAxis Position="Bottom" Title = "Ink%" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" AxisTitleDistance ="12" Minimum="0" Maximum="100" /> - <oxy:LinearAxis Position="Left" Title = "LAB" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="{Binding LabMinVal}" Maximum="{Binding LabMaxVal}" MinorStep="10" /> - </oxy:Plot.Axes> - </oxy:Plot> - </Border> - - <Border Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0" BorderThickness="0" BorderBrush="{StaticResource DarkGrayBrush}" CornerRadius="5" > - <oxy:Plot Title="{Binding LiquidTypeName}" TitleFontSize="14" x:Name="LinearizationPlot" Margin="0 0 0 0" Background="Transparent" LegendPlacement="Inside" LegendPosition="RightTop" LegendOrientation="Vertical" > - <oxy:Plot.Series > - <oxy:LineSeries ItemsSource="{Binding LinearizationPoints}" Color="#73B6EC" MarkerFill="SteelBlue" MarkerType="Circle"/> - </oxy:Plot.Series> - <oxy:Plot.Axes> - <oxy:LinearAxis Position="Bottom" Title = "In Ink" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="0" Maximum="100"/> - <oxy:LinearAxis Position="Left" Title = "Out Ink" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="0" Maximum="100"/> - </oxy:Plot.Axes> - </oxy:Plot> - </Border> - </Grid> - <StackPanel Orientation="Horizontal" Grid.Row="1" Margin="0 20 10 0" HorizontalAlignment="Right"> - <Button Background="{StaticResource TransparentBackgroundBrush200}" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Padding="6" MinWidth="130" Command="{Binding ApplyCalibrationDataCommand}" ToolTip="Apply the calibration data to the current RML calibration tables."> - <TextBlock FontSize="14" Foreground="{StaticResource MainWindow.Foreground}">APPLY TO RML</TextBlock> - </Button> - <Button Margin="20 0 0 0" Background="{StaticResource TransparentBackgroundBrush200}" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Padding="6" ToolTip="Export to excel" MinWidth="130" Command="{Binding ExportGraphCommand}"> - <TextBlock FontSize="14" Foreground="{StaticResource MainWindow.Foreground}">EXPORT TO FILE</TextBlock> - </Button> - <Button Margin="20 0 0 0" VerticalAlignment="Bottom" HorizontalAlignment="Right" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="180" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding CreateLinearizationGraphCommand}" > - <TextBlock FontSize="14" Foreground="{StaticResource MainWindow.Foreground}">CREATE LINEARIZATION GRAPH</TextBlock> - </Button> - </StackPanel> - </Grid> - - </Grid> - </DockPanel> - </Grid> - </DockPanel> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml.cs deleted file mode 100644 index c29bb68fb..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml.cs +++ /dev/null @@ -1,42 +0,0 @@ -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; -using Tango.MachineStudio.RML.ViewModels; - -namespace Tango.MachineStudio.RML.Views -{ - /// <summary> - /// Interaction logic for ColorCalibrationView.xaml - /// </summary> - public partial class ColorCalibrationView : UserControl - { - public ColorCalibrationView() - { - InitializeComponent(); - this.Loaded += ColorCalibrationView_Loaded; - } - - private void ColorCalibrationView_Loaded(object sender, RoutedEventArgs e) - { - if(DataContext is ColorCalibrationViewVM) - { - ColorCalibrationViewVM vm = (ColorCalibrationViewVM)DataContext; - vm.PlotControl = CalibrationPlot; - vm.LinearizationPlotControl = LinearizationPlot; - vm.LABLinearizationPlotControl = LABLinearizationPlot; - vm.Loading(); - } - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/HeadCleaningParametersView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/HeadCleaningParametersView.xaml deleted file mode 100644 index aec12aa63..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/HeadCleaningParametersView.xaml +++ /dev/null @@ -1,59 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.RML.Views.HeadCleaningParametersView" - 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:vm="clr-namespace:Tango.MachineStudio.RML.ViewModels" - xmlns:global="clr-namespace:Tango.MachineStudio.RML" - xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls" - xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:local="clr-namespace:Tango.MachineStudio.RML.Views" - xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" - mc:Ignorable="d" - d:DesignHeight="720" d:DesignWidth="1280" Background="Transparent" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> - - <UserControl.Resources> - <converters:EmptyStringToNullConverter x:Key="EmptyStringToNullConverter" /> - </UserControl.Resources> - - <Grid> - <DockPanel> - <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="20 0" Padding="5" CornerRadius="5"> - <Border.Effect> - <DropShadowEffect Opacity="0.4" /> - </Border.Effect> - <Grid> - <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="20 0 0 0" FontSize="16" Padding="2">HEAD CLEANING PARAMETERS</TextBlock> - </Grid> - </Border> - - <Grid> - <StackPanel Orientation="Horizontal"> - <DockPanel Grid.Column="1" Margin="25" HorizontalAlignment="Left" Width="400"> - <materialDesign:Card> - <StackPanel> - <DockPanel> - <TextBlock DockPanel.Dock="Top" Margin="20 10 0 10" FontSize="16">CLEANER</TextBlock> - <controls:TableGrid RowHeight="25" Margin="20 0" MakeFirstColumnVerticalAlignmentBottom="False"> - <controls:TableGrid.Resources> - <Style TargetType="TextBlock"> - <Setter Property="VerticalAlignment" Value="Center"></Setter> - <Setter Property="Margin" Value="0 3 0 0"></Setter> - </Style> - </controls:TableGrid.Resources> - <TextBlock Text="Cleaner Flow:" VerticalAlignment="Center"></TextBlock> - <mahapps:NumericUpDown Value="{Binding ActiveRML.CleanerFlow,Mode=TwoWay}" Minimum="0" Maximum="10000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="False" HorizontalContentAlignment="Left"></mahapps:NumericUpDown> - - <TextBlock Text="Arc Head Cleaning Motor Speed:" VerticalAlignment="Center"></TextBlock> - <mahapps:NumericUpDown Value="{Binding ActiveRML.ArcHeadCleaningMotorSpeed,Mode=TwoWay}" Minimum="0" Maximum="10000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Left"></mahapps:NumericUpDown> - </controls:TableGrid> - </DockPanel> - </StackPanel> - </materialDesign:Card> - </DockPanel> - </StackPanel> - </Grid> - </DockPanel> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/HeadCleaningParametersView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/HeadCleaningParametersView.xaml.cs deleted file mode 100644 index 8d036efa5..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/HeadCleaningParametersView.xaml.cs +++ /dev/null @@ -1,28 +0,0 @@ -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.RML.Views -{ - /// <summary> - /// Interaction logic for SpoolsView.xaml - /// </summary> - public partial class HeadCleaningParametersView : UserControl - { - public HeadCleaningParametersView() - { - InitializeComponent(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/MainView.xaml index e52ac4ece..ab5207722 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/MainView.xaml @@ -9,7 +9,7 @@ xmlns:local="clr-namespace:Tango.MachineStudio.RML.Views" 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 IsEnabled="{Binding IsFree}"> + <Grid> <controls:NavigationControl x:Name="navigationControl" TransitionType="Slide"> <local:RmlsView /> <local:RmlView/> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ProcessParametersView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ProcessParametersView.xaml index 03bf65522..b85fd2c12 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ProcessParametersView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ProcessParametersView.xaml @@ -32,7 +32,7 @@ <DropShadowEffect Opacity="0.4" /> </Border.Effect> <Grid> - <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="20 0 0 0" FontSize="16">ACTIVE PROCESS GROUP</TextBlock> + <TextBlock HorizontalAlignment="Left" Margin="20 0 0 0" FontSize="16">ACTIVE PROCESS GROUP</TextBlock> <Button ToolTip="Add new table" Style="{StaticResource MaterialDesignFlatButton}" Height="Auto" Width="30" HorizontalAlignment="Right" Padding="0" Command="{Binding AddProcessParametersTableCommand}"> <materialDesign:PackIcon Kind="Plus" Foreground="#0AC30A" Width="24" Height="24" /> </Button> @@ -70,7 +70,7 @@ <DataTemplate> <DockPanel> <TextBlock IsHitTestVisible="False" Margin="0 5 0 5" Text="{Binding Name}" FontSize="11"></TextBlock> - <mahapps:NumericUpDown HorizontalAlignment="Right" Minimum="0" Margin="0 0 5 0" HideUpDownButtons="True" HorizontalContentAlignment="Right" Maximum="10000" StringFormat="{Binding StringFormat}" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" Value="{Binding Value,Mode=TwoWay}"></mahapps:NumericUpDown> + <mahapps:NumericUpDown HorizontalAlignment="Right" Minimum="0" Margin="0 0 5 0" HideUpDownButtons="True" HorizontalContentAlignment="Right" Maximum="10000" StringFormat="0.0" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="True" Value="{Binding Value,Mode=TwoWay}"></mahapps:NumericUpDown> </DockPanel> </DataTemplate> </editors:ParameterizedEditor.DoubleTemplate> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlDeleteDialogView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlDeleteDialogView.xaml deleted file mode 100644 index 7745848c1..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlDeleteDialogView.xaml +++ /dev/null @@ -1,82 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.RML.Views.RmlDeleteDialogView" - 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:vm="clr-namespace:Tango.MachineStudio.RML.ViewModels" - xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" - xmlns:local="clr-namespace:Tango.MachineStudio.RML.Views" - mc:Ignorable="d" - d:DesignHeight="400" d:DesignWidth="700" Height="600" Width="900" Background="{StaticResource Dialog.Background}" d:DataContext="{d:DesignInstance Type=vm:RmlDeleteDialogViewVM, IsDesignTimeCreatable=False}" Foreground="{StaticResource Dialog.Foreground}"> - - <UserControl.Resources> - <converters:BooleanToVisibilityInverseConverter x:Key="BooleanToVisibilityInverseConverter" /> - </UserControl.Resources> - - <Grid Margin="10"> - <DockPanel> - <Grid DockPanel.Dock="Top"> - <StackPanel Orientation="Horizontal"> - <Grid> - <materialDesign:PackIcon Kind="Alert" Foreground="{StaticResource OrangeBrush}" Width="42" Height="42" /> - </Grid> - <TextBlock Margin="20 0 0 0" VerticalAlignment="Center" FontSize="22"> - <Run>DELETE</Run> - <Run></Run> - <Run Text="{Binding Rml.Name}"></Run> - </TextBlock> - </StackPanel> - </Grid> - - <Grid DockPanel.Dock="Bottom"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Right" DockPanel.Dock="Bottom"> - <Button Command="{Binding CloseCommand}" Width="140" Height="40" Margin="0 0 10 0"> - CANCEL - </Button> - <Button Command="{Binding OKCommand}" IsDefault="True" Width="140" Height="40"> - DELETE - </Button> - </StackPanel> - </Grid> - - <Grid> - <DockPanel Margin="0 10 0 0"> - <TextBlock DockPanel.Dock="Top" Margin="5"> - <Run>The following jobs must be removed or change thread type before the selected thread can be deleted.</Run> - </TextBlock> - <DataGrid Margin="0 10 0 10" SelectionUnit="FullRow" SelectionMode="Single" ItemsSource="{Binding JobsActions}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" CanUserSortColumns="False"> - <DataGrid.Columns> - <DataGridTextColumn Header="MACHINE" Width="Auto" Binding="{Binding Machine.SerialNumber}" IsReadOnly="True" /> - <DataGridTextColumn Header="JOB" Width="200" Binding="{Binding Job.Name}" IsReadOnly="True" /> - <DataGridComboBoxColumn Header="ACTION" Width="100" SelectedItemBinding="{Binding Action}"> - <DataGridComboBoxColumn.ElementStyle> - <Style TargetType="{x:Type ComboBox}"> - <Setter Property="ItemsSource" Value="{Binding Path=DataContext.Actions, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" /> - </Style> - </DataGridComboBoxColumn.ElementStyle> - <DataGridComboBoxColumn.EditingElementStyle> - <Style TargetType="{x:Type ComboBox}"> - <Setter Property="ItemsSource" Value="{Binding Path=DataContext.Actions, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" /> - </Style> - </DataGridComboBoxColumn.EditingElementStyle> - </DataGridComboBoxColumn> - <DataGridComboBoxColumn Header="TARGET RML" SelectedItemBinding="{Binding TargetRml}" Width="1*" DisplayMemberPath="Name"> - <DataGridComboBoxColumn.ElementStyle> - <Style TargetType="{x:Type ComboBox}"> - <Setter Property="ItemsSource" Value="{Binding Path=DataContext.Rmls, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" /> - </Style> - </DataGridComboBoxColumn.ElementStyle> - <DataGridComboBoxColumn.EditingElementStyle> - <Style TargetType="{x:Type ComboBox}"> - <Setter Property="ItemsSource" Value="{Binding Path=DataContext.Rmls, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" /> - </Style> - </DataGridComboBoxColumn.EditingElementStyle> - </DataGridComboBoxColumn> - </DataGrid.Columns> - </DataGrid> - </DockPanel> - </Grid> - </DockPanel> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlDeleteDialogView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlDeleteDialogView.xaml.cs deleted file mode 100644 index 96254c03a..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlDeleteDialogView.xaml.cs +++ /dev/null @@ -1,28 +0,0 @@ -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.RML.Views -{ - /// <summary> - /// Interaction logic for RmlDeleteDialogView.xaml - /// </summary> - public partial class RmlDeleteDialogView : UserControl - { - public RmlDeleteDialogView() - { - InitializeComponent(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml index b6c91f066..50f6a6297 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml @@ -4,7 +4,6 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:global="clr-namespace:Tango.MachineStudio.RML" - xmlns:enumerations="clr-namespace:Tango.BL.Enumerations;assembly=Tango.BL" xmlns:observables="clr-namespace:Tango.BL.Entities;assembly=Tango.BL" xmlns:shapes="clr-namespace:Tango.SharedUI.Shapes;assembly=Tango.SharedUI" xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" @@ -20,7 +19,6 @@ <UserControl.Resources> <converters:ColorToIntegerConverter x:Key="ColorToIntegerConverter"></converters:ColorToIntegerConverter> - <converters:EnumToItemsSourceConverter x:Key="EnumToItemsSourceConverter"/> </UserControl.Resources> <Grid Margin="20"> @@ -30,7 +28,7 @@ <Button Style="{StaticResource MaterialDesignFlatButton}" Height="Auto" Command="{Binding BackToRmlsCommand}"> <materialDesign:PackIcon Kind="ArrowLeft" Width="50" Height="50" Foreground="{StaticResource DarkGrayBrush200}" ToolTip="Back to RML list" /> </Button> - <TextBlock MaxWidth="350" Text="{Binding ActiveRML.Name}" VerticalAlignment="Center" Margin="10 0 0 0" FontSize="30" TextWrapping="Wrap"></TextBlock> + <TextBlock Text="{Binding ActiveRML.Name}" VerticalAlignment="Center" Margin="10 0 0 0" FontSize="34"></TextBlock> </StackPanel> <Button HorizontalAlignment="Right" Width="170" Height="45" Margin="0 0 20 0" VerticalAlignment="Center" Command="{Binding SaveCommand}"> @@ -56,25 +54,10 @@ <Grid> <DockPanel> <TextBlock DockPanel.Dock="Top" Margin="20 10 0 10" FontSize="16">PROPERTIES</TextBlock> - <controls:TableGrid RowHeight="35" Margin="20 0" MakeFirstColumnVerticalAlignmentBottom="False"> - <controls:TableGrid.Resources> - <Style TargetType="TextBlock"> - <Setter Property="VerticalAlignment" Value="Center"></Setter> - <Setter Property="Margin" Value="0 3 0 0"></Setter> - </Style> - </controls:TableGrid.Resources> + <controls:TableGrid RowHeight="35" Margin="20 0"> <TextBlock Text="Name:" ></TextBlock> <TextBox Text="{Binding ActiveRML.Name,UpdateSourceTrigger=PropertyChanged}"></TextBox> - <TextBlock Text="Display Name:" ></TextBlock> - <TextBox Text="{Binding ActiveRML.DisplayName,UpdateSourceTrigger=PropertyChanged}"></TextBox> - - <TextBlock Text="Head Type:" ></TextBlock> - <ComboBox ItemsSource="{Binding Source={x:Type enumerations:HeadTypes},Converter={StaticResource EnumToItemsSourceConverter}}" SelectedValue="{Binding ActiveRML.RmlHeadType}" SelectedValuePath="Value" DisplayMemberPath="DisplayName"></ComboBox> - - <TextBlock Text="Qualification Level:" ></TextBlock> - <ComboBox ItemsSource="{Binding Source={x:Type enumerations:RmlQualifications},Converter={StaticResource EnumToItemsSourceConverter}}" SelectedValue="{Binding ActiveRML.RmlQualificationLevel}" SelectedValuePath="Value" DisplayMemberPath="DisplayName"></ComboBox> - <TextBlock Text="Manufacturer:" ></TextBlock> <TextBox Text="{Binding ActiveRML.Manufacturer}"></TextBox> @@ -155,34 +138,28 @@ <Setter Property="Padding" Value="20,2"></Setter> </Style> </TabControl.Resources> - <TabItem Header="PROCESS PARAMETERS" Margin="-100 0 0 0" mahapps:ControlsHelper.HeaderFontSize="20"> + <TabItem Header="PROCESS PARAMETERS" Margin="-100 0 0 0 "> <local:ProcessParametersView x:Name="processParametersView" WidthLilquidFactors="{Binding ElementName=calibrationDataView,Path=ActualWidth}"/> </TabItem> - <TabItem Header="THREAD PARAMETERS" Margin="-100 0 0 0" mahapps:ControlsHelper.HeaderFontSize="20"> - <local:ThreadParametersView/> - </TabItem> - <TabItem Header="HEAD CLEANING" Margin="-100 0 0 0" mahapps:ControlsHelper.HeaderFontSize="20"> - <local:HeadCleaningParametersView/> - </TabItem> - <TabItem Header="COLOR CONVERSION" Margin="-100 0 0 0 " mahapps:ControlsHelper.HeaderFontSize="20"> + <TabItem Header="COLOR CONVERSION" Margin="-100 0 0 0 "> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="260"></ColumnDefinition> </Grid.ColumnDefinitions> <DockPanel> - <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="20 0" Padding="7" CornerRadius="5"> + <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="20 0" Padding="5" CornerRadius="5"> <Border.Effect> <DropShadowEffect Opacity="0.4" /> </Border.Effect> <Grid> - <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="20 0 0 0" FontSize="16">COLOR CONVERSION</TextBlock> + <TextBlock HorizontalAlignment="Left" Margin="20 0 0 0" FontSize="16">COLOR CONVERSION</TextBlock> </Grid> </Border> <local:ColorConversionView x:Name="colorConversionView" Margin="0 0 0 0" Grid.Column="0" DataContext="{Binding ColorConversionViewVM}"/> </DockPanel> <DockPanel Grid.Column="1"> - <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="16 0" Padding="7" CornerRadius="5"> + <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="16 0" Padding="5" CornerRadius="5"> <Border.Effect> <DropShadowEffect Opacity="0.4" /> </Border.Effect> @@ -214,9 +191,7 @@ </UniformGrid> <TextBlock Margin="0 40 0 0" Text="Color Conversion Version:" HorizontalAlignment="Center"></TextBlock> - <mahapps:NumericUpDown Minimum="1" Maximum="4" Value="{Binding ActiveRML.ColorConversionVersion}" HorizontalContentAlignment="Center" Background="Transparent" BorderBrush="{StaticResource DimGrayBrush}" HasDecimals="False" Margin="0 5 0 0" /> - - <CheckBox ToolTip="Use the color conversion engine to generate gradients" IsChecked="{Binding ActiveRML.UseColorLibGradients}" HorizontalAlignment="Center" Margin="0 40 0 0">Enable Gradient Generation</CheckBox> + <mahapps:NumericUpDown Minimum="1" Maximum="2" Value="{Binding ActiveRML.ColorConversionVersion}" HorizontalContentAlignment="Center" Background="Transparent" BorderBrush="{StaticResource DimGrayBrush}" HasDecimals="False" Margin="0 5 0 0" /> </StackPanel> </StackPanel> </Grid> @@ -225,12 +200,6 @@ </DockPanel> </Grid> </TabItem> - <TabItem Header="SPOOLS" Margin="-100 0 0 0" mahapps:ControlsHelper.HeaderFontSize="20"> - <local:SpoolsView/> - </TabItem> - <TabItem Header="COLOR CALIBRATION" Margin="-100 0 0 0" mahapps:ControlsHelper.HeaderFontSize="20"> - <local:ColorCalibrationView DataContext="{Binding ColorCalibrationVM}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"/> - </TabItem> </TabControl> </Grid> <Grid Grid.Row="1"> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlsView.xaml index b1a1f4aa5..288f00a3d 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlsView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlsView.xaml @@ -18,14 +18,10 @@ <converters:ColorToIntegerConverter x:Key="ColorToIntegerConverter"></converters:ColorToIntegerConverter> </UserControl.Resources> - <Grid IsEnabled="{Binding IsFree}"> + <Grid> <DockPanel Margin="100 100 100 50" MaxWidth="1200"> <Grid DockPanel.Dock="Top"> <Image Source="../Images/threads.png" Width="300" Margin="10" /> - <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0 0 10 30"> - <materialDesign:PackIcon Kind="Magnify" Width="26" Height="26"/> - <TextBox Width="300" materialDesign:HintAssist.Hint="Search by name" Text="{Binding RMLFilter,UpdateSourceTrigger=PropertyChanged,Delay=500}"></TextBox> - </StackPanel> </Grid> <Grid DockPanel.Dock="Bottom"> <StackPanel> @@ -78,7 +74,7 @@ </StackPanel> </Grid> <Grid> - <DataGrid Margin="0 0 0 10" BorderBrush="Silver" IsReadOnly="True" BorderThickness="1" RowHeight="60" Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" ItemsSource="{Binding Rmls}" SelectedItem="{Binding SelectedRML}"> + <DataGrid Margin="0 0 0 10" BorderBrush="Silver" IsReadOnly="True" BorderThickness="1" Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" ItemsSource="{Binding Rmls}" SelectedItem="{Binding SelectedRML}"> <DataGrid.CellStyle> <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> <Setter Property="BorderThickness" Value="0"/> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/SpoolsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/SpoolsView.xaml deleted file mode 100644 index 6eae05c76..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/SpoolsView.xaml +++ /dev/null @@ -1,85 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.RML.Views.SpoolsView" - 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:vm="clr-namespace:Tango.MachineStudio.RML.ViewModels" - xmlns:global="clr-namespace:Tango.MachineStudio.RML" - xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls" - xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:local="clr-namespace:Tango.MachineStudio.RML.Views" - xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" - mc:Ignorable="d" - d:DesignHeight="720" d:DesignWidth="1280" Background="Transparent" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> - - <UserControl.Resources> - <converters:EmptyStringToNullConverter x:Key="EmptyStringToNullConverter" /> - </UserControl.Resources> - - <Grid> - <DockPanel> - <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="20 0" Padding="5" CornerRadius="5"> - <Border.Effect> - <DropShadowEffect Opacity="0.4" /> - </Border.Effect> - <Grid> - <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="20 0 0 0" FontSize="16" Padding="2">SPOOLS</TextBlock> - </Grid> - </Border> - - <Grid> - <DockPanel Grid.Column="1" Margin="25"> - <Grid DockPanel.Dock="Bottom"> - <StackPanel VerticalAlignment="Center" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0 0 0 0"> - <Button Margin="0 0 10 0" MinWidth="160" Height="50" Background="{StaticResource RedBrush300}" BorderBrush="{StaticResource RedBrush300}" Command="{Binding RemoveSpoolCommand}"> - <StackPanel Orientation="Horizontal"> - <materialDesign:PackIcon Kind="Delete" Width="20" Height="20" /> - <TextBlock Margin="5 0 0 0" FontSize="16">DELETE</TextBlock> - </StackPanel> - </Button> - <Button Margin="0 0 0 0" MinWidth="160" Height="50" Background="{StaticResource GreenBrush300}" BorderBrush="{StaticResource GreenBrush300}" Command="{Binding AddSpoolCommand}"> - <StackPanel Orientation="Horizontal"> - <materialDesign:PackIcon Kind="Plus" Width="20" Height="20" /> - <TextBlock Margin="5 0 0 0" FontSize="16">NEW SPOOL</TextBlock> - </StackPanel> - </Button> - </StackPanel> - <StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> - - </StackPanel> - </Grid> - <Grid> - <DataGrid Margin="0 0 0 10" SelectionUnit="FullRow" BorderBrush="{StaticResource borderBrush }" BorderThickness="1" Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" ItemsSource="{Binding ActiveRML.RmlsSpools}" SelectedItem="{Binding SelectedSpool}"> - <DataGrid.CellStyle> - <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="FocusVisualStyle" Value="{x:Null}"/> - <Setter Property="VerticalContentAlignment" Value="Center"></Setter> - </Style> - </DataGrid.CellStyle> - <DataGrid.Columns> - <DataGridComboBoxColumn Header="SPOOL TYPE" SelectedItemBinding="{Binding SpoolType}" DisplayMemberPath="Name" Width="Auto"> - <DataGridComboBoxColumn.ElementStyle> - <Style TargetType="ComboBox"> - <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid},Path=DataContext.SpoolTypes}"/> - </Style> - </DataGridComboBoxColumn.ElementStyle> - <DataGridComboBoxColumn.EditingElementStyle> - <Style TargetType="ComboBox"> - <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid},Path=DataContext.SpoolTypes}"/> - </Style> - </DataGridComboBoxColumn.EditingElementStyle> - </DataGridComboBoxColumn> - <DataGridTextColumn Header="ROTATIONS PER PASSAGE" Binding="{Binding RotationsPerPassage,Converter={StaticResource EmptyStringToNullConverter}}" Width="Auto" /> - <DataGridTextColumn Header="MAX LENGTH" Binding="{Binding Length,Converter={StaticResource EmptyStringToNullConverter}}" Width="Auto" /> - <DataGridTextColumn Header="BACKING RATE" Binding="{Binding BackingRate,Converter={StaticResource EmptyStringToNullConverter}}" Width="Auto" /> - <DataGridTextColumn Header="BOTTOM BACKING RATE" Binding="{Binding BottomBackingRate,Converter={StaticResource EmptyStringToNullConverter}}" Width="Auto" /> - </DataGrid.Columns> - </DataGrid> - </Grid> - </DockPanel> - </Grid> - </DockPanel> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/SpoolsView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/SpoolsView.xaml.cs deleted file mode 100644 index 6e363681c..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/SpoolsView.xaml.cs +++ /dev/null @@ -1,28 +0,0 @@ -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.RML.Views -{ - /// <summary> - /// Interaction logic for SpoolsView.xaml - /// </summary> - public partial class SpoolsView : UserControl - { - public SpoolsView() - { - InitializeComponent(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ThreadParametersView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ThreadParametersView.xaml deleted file mode 100644 index c083e9b02..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ThreadParametersView.xaml +++ /dev/null @@ -1,121 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.RML.Views.ThreadParametersView" - 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:vm="clr-namespace:Tango.MachineStudio.RML.ViewModels" - xmlns:global="clr-namespace:Tango.MachineStudio.RML" - xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls" - xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:local="clr-namespace:Tango.MachineStudio.RML.Views" - xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" - mc:Ignorable="d" - d:DesignHeight="720" d:DesignWidth="1280" Background="Transparent" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> - - <UserControl.Resources> - <converters:EmptyStringToNullConverter x:Key="EmptyStringToNullConverter" /> - </UserControl.Resources> - - <Grid> - <DockPanel> - <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="20 0" Padding="5" CornerRadius="5"> - <Border.Effect> - <DropShadowEffect Opacity="0.4" /> - </Border.Effect> - <Grid> - <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="20 0 0 0" FontSize="16" Padding="2">THREAD PARAMETERS</TextBlock> - </Grid> - </Border> - - <Grid> - <StackPanel Orientation="Horizontal"> - <DockPanel Grid.Column="1" Margin="25" HorizontalAlignment="Left" Width="400"> - <materialDesign:Card> - <StackPanel> - <DockPanel> - <TextBlock DockPanel.Dock="Top" Margin="20 10 0 10" FontSize="16">FEEDER</TextBlock> - <controls:TableGrid RowHeight="25" Margin="20 0" MakeFirstColumnVerticalAlignmentBottom="False"> - <controls:TableGrid.Resources> - <Style TargetType="TextBlock"> - <Setter Property="VerticalAlignment" Value="Center"></Setter> - <Setter Property="Margin" Value="0 3 0 0"></Setter> - </Style> - </controls:TableGrid.Resources> - <TextBlock Text="Feeder P:" ></TextBlock> - <mahapps:NumericUpDown Value="{Binding ActiveRML.FeederP,Mode=TwoWay}" Minimum="-100000" Maximum="1000000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="False" HorizontalContentAlignment="Left"></mahapps:NumericUpDown> - - <TextBlock Text="Feeder I:" ></TextBlock> - <mahapps:NumericUpDown Value="{Binding ActiveRML.FeederI,Mode=TwoWay}" Minimum="-100000" Maximum="1000000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="False" HorizontalContentAlignment="Left"></mahapps:NumericUpDown> - - <TextBlock Text="Feeder D:" ></TextBlock> - <mahapps:NumericUpDown Value="{Binding ActiveRML.FeederD,Mode=TwoWay}" Minimum="-100000" Maximum="1000000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="False" HorizontalContentAlignment="Left"></mahapps:NumericUpDown> - </controls:TableGrid> - </DockPanel> - - <DockPanel> - <TextBlock DockPanel.Dock="Top" Margin="20 10 0 10" FontSize="16">PULLER</TextBlock> - <controls:TableGrid RowHeight="25" Margin="20 0" MakeFirstColumnVerticalAlignmentBottom="False"> - <controls:TableGrid.Resources> - <Style TargetType="TextBlock"> - <Setter Property="VerticalAlignment" Value="Center"></Setter> - <Setter Property="Margin" Value="0 3 0 0"></Setter> - </Style> - </controls:TableGrid.Resources> - <TextBlock Text="Puller P:" ></TextBlock> - <mahapps:NumericUpDown Value="{Binding ActiveRML.PullerP,Mode=TwoWay}" Minimum="-100000" Maximum="1000000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="False" HorizontalContentAlignment="Left"></mahapps:NumericUpDown> - - <TextBlock Text="Puller I:" ></TextBlock> - <mahapps:NumericUpDown Value="{Binding ActiveRML.PullerI,Mode=TwoWay}" Minimum="-100000" Maximum="1000000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="False" HorizontalContentAlignment="Left"></mahapps:NumericUpDown> - - <TextBlock Text="Puller D:" ></TextBlock> - <mahapps:NumericUpDown Value="{Binding ActiveRML.PullerD,Mode=TwoWay}" Minimum="-100000" Maximum="1000000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="False" HorizontalContentAlignment="Left"></mahapps:NumericUpDown> - </controls:TableGrid> - </DockPanel> - - <DockPanel> - <TextBlock DockPanel.Dock="Top" Margin="20 10 0 10" FontSize="16">WINDER</TextBlock> - <controls:TableGrid RowHeight="25" Margin="20 0" MakeFirstColumnVerticalAlignmentBottom="False"> - <controls:TableGrid.Resources> - <Style TargetType="TextBlock"> - <Setter Property="VerticalAlignment" Value="Center"></Setter> - <Setter Property="Margin" Value="0 3 0 0"></Setter> - </Style> - </controls:TableGrid.Resources> - <TextBlock Text="Winder P:" ></TextBlock> - <mahapps:NumericUpDown Value="{Binding ActiveRML.WinderP,Mode=TwoWay}" Minimum="-100000" Maximum="1000000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="False" HorizontalContentAlignment="Left"></mahapps:NumericUpDown> - - <TextBlock Text="Winder I:" ></TextBlock> - <mahapps:NumericUpDown Value="{Binding ActiveRML.WinderI,Mode=TwoWay}" Minimum="-100000" Maximum="1000000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="False" HorizontalContentAlignment="Left"></mahapps:NumericUpDown> - - <TextBlock Text="Winder D:" ></TextBlock> - <mahapps:NumericUpDown Value="{Binding ActiveRML.WinderD,Mode=TwoWay}" Minimum="-100000" Maximum="1000000" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" InterceptMouseWheel="True" HasDecimals="False" HorizontalContentAlignment="Left"></mahapps:NumericUpDown> - </controls:TableGrid> - </DockPanel> - </StackPanel> - </materialDesign:Card> - </DockPanel> - - <DockPanel Grid.Column="1" Margin="25" HorizontalAlignment="Left" Width="400"> - <materialDesign:Card> - <StackPanel> - <DockPanel> - <TextBlock DockPanel.Dock="Top" Margin="20 10 0 10" FontSize="16">ROCKERS</TextBlock> - <controls:TableGrid RowHeight="25" Margin="20 0" MakeFirstColumnVerticalAlignmentBottom="False"> - <controls:TableGrid.Resources> - <Style TargetType="TextBlock"> - <Setter Property="VerticalAlignment" Value="Center"></Setter> - </Style> - </controls:TableGrid.Resources> - <TextBlock Text="Bypass Rockers:" ></TextBlock> - <ToggleButton IsChecked="{Binding ActiveRML.BypassRockers,Mode=TwoWay}" HorizontalAlignment="Right" ></ToggleButton> - </controls:TableGrid> - </DockPanel> - </StackPanel> - </materialDesign:Card> - </DockPanel> - </StackPanel> - </Grid> - </DockPanel> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ThreadParametersView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ThreadParametersView.xaml.cs deleted file mode 100644 index aa63e48fb..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ThreadParametersView.xaml.cs +++ /dev/null @@ -1,28 +0,0 @@ -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.RML.Views -{ - /// <summary> - /// Interaction logic for SpoolsView.xaml - /// </summary> - public partial class ThreadParametersView : UserControl - { - public ThreadParametersView() - { - InitializeComponent(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/App.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/App.xaml deleted file mode 100644 index 01a064b05..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/App.xaml +++ /dev/null @@ -1,12 +0,0 @@ -<Application x:Class="Tango.MachineStudio.Sites.App" - xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> - <Application.Resources> - <ResourceDictionary> - <ResourceDictionary.MergedDictionaries> - <ResourceDictionary Source="pack://application:,,,/Tango.MachineStudio.Common;component/Resources/MaterialDesign.xaml" /> - <ResourceDictionary Source="pack://application:,,,/Tango.MachineStudio.Common;component/Themes/LightThemeColors.xaml" /> - </ResourceDictionary.MergedDictionaries> - </ResourceDictionary> - </Application.Resources> -</Application> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Contracts/IMainView.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Contracts/IMainView.cs deleted file mode 100644 index 67f57b28c..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Contracts/IMainView.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.SharedUI; - -namespace Tango.MachineStudio.Sites.Contracts -{ - public enum SitesNavigationView - { - SitesView, - SiteDetailsView, - } - - public interface IMainView : IView - { - void NavigateTo(SitesNavigationView view); - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Images/machine_site.png b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Images/machine_site.png Binary files differdeleted file mode 100644 index 9b22e53b0..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Images/machine_site.png +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Images/site.png b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Images/site.png Binary files differdeleted file mode 100644 index 2fee5fafa..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Images/site.png +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Models/SiteModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Models/SiteModel.cs deleted file mode 100644 index 007f8a3ad..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Models/SiteModel.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.BL.Entities; -using Tango.SharedUI.Components; - -namespace Tango.MachineStudio.Sites.Models -{ - public class SiteModel : Site - { - public String Organization { get; set; } - public int MachineCount { get; set; } - public int CatalogCount { get; set; } - public int ThreadCount { get; set; } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/AssemblyInfo.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/AssemblyInfo.cs deleted file mode 100644 index a6eebb5a8..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Reflection; -using System.Resources; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Windows; - -[assembly: AssemblyTitle("Tango - Machine Studio Sites Module")] -[assembly: AssemblyVersion("1.0.0.1737")] - -[assembly: ComVisible(false)] - -[assembly: ThemeInfo( - ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located - //(used if a resource is not found in the page, - // or application resource dictionaries) - ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located - //(used if a resource is not found in the page, - // app, or any theme specific resource dictionaries) -)] diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/Resources.Designer.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/Resources.Designer.cs deleted file mode 100644 index ecefa25e7..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/Resources.Designer.cs +++ /dev/null @@ -1,62 +0,0 @@ -//------------------------------------------------------------------------------ -// <auto-generated> -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// </auto-generated> -//------------------------------------------------------------------------------ - -namespace Tango.MachineStudio.Sites.Properties { - - - /// <summary> - /// A strongly-typed resource class, for looking up localized strings, etc. - /// </summary> - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// <summary> - /// Returns the cached ResourceManager instance used by this class. - /// </summary> - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if ((resourceMan == null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Tango.MachineStudio.Sites.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// <summary> - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// </summary> - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/Resources.resx b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/Resources.resx deleted file mode 100644 index af7dbebba..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<root> - <!-- - Microsoft ResX Schema - - Version 2.0 - - The primary goals of this format is to allow a simple XML format - that is mostly human readable. The generation and parsing of the - various data types are done through the TypeConverter classes - associated with the data types. - - Example: - - ... ado.net/XML headers & schema ... - <resheader name="resmimetype">text/microsoft-resx</resheader> - <resheader name="version">2.0</resheader> - <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> - <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> - <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> - <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> - <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> - <value>[base64 mime encoded serialized .NET Framework object]</value> - </data> - <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> - <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> - <comment>This is a comment</comment> - </data> - - There are any number of "resheader" rows that contain simple - name/value pairs. - - Each data row contains a name, and value. The row also contains a - type or mimetype. Type corresponds to a .NET class that support - text/value conversion through the TypeConverter architecture. - Classes that don't support this are serialized and stored with the - mimetype set. - - The mimetype is used for serialized objects, and tells the - ResXResourceReader how to depersist the object. This is currently not - extensible. For a given mimetype the value must be set accordingly: - - Note - application/x-microsoft.net.object.binary.base64 is the format - that the ResXResourceWriter will generate, however the reader can - read any of the formats listed below. - - mimetype: application/x-microsoft.net.object.binary.base64 - value : The object must be serialized with - : System.Serialization.Formatters.Binary.BinaryFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.soap.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Soap.SoapFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.bytearray.base64 - value : The object must be serialized into a byte array - : using a System.ComponentModel.TypeConverter - : and then encoded with base64 encoding. - --> - <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> - <xsd:element name="root" msdata:IsDataSet="true"> - <xsd:complexType> - <xsd:choice maxOccurs="unbounded"> - <xsd:element name="metadata"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" /> - <xsd:attribute name="type" type="xsd:string" /> - <xsd:attribute name="mimetype" type="xsd:string" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="assembly"> - <xsd:complexType> - <xsd:attribute name="alias" type="xsd:string" /> - <xsd:attribute name="name" type="xsd:string" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="data"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> - <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> - <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="resheader"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" /> - </xsd:complexType> - </xsd:element> - </xsd:choice> - </xsd:complexType> - </xsd:element> - </xsd:schema> - <resheader name="resmimetype"> - <value>text/microsoft-resx</value> - </resheader> - <resheader name="version"> - <value>2.0</value> - </resheader> - <resheader name="reader"> - <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> - <resheader name="writer"> - <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> -</root>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/Settings.Designer.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/Settings.Designer.cs deleted file mode 100644 index 5fa894ceb..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/Settings.Designer.cs +++ /dev/null @@ -1,30 +0,0 @@ -//------------------------------------------------------------------------------ -// <auto-generated> -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// </auto-generated> -//------------------------------------------------------------------------------ - -namespace Tango.MachineStudio.Sites.Properties -{ - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { - return defaultInstance; - } - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/Settings.settings b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/Settings.settings deleted file mode 100644 index 033d7a5e9..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> -<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)"> - <Profiles> - <Profile Name="(Default)" /> - </Profiles> - <Settings /> -</SettingsFile>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/SitesModule.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/SitesModule.cs deleted file mode 100644 index 96d3aed49..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/SitesModule.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Media.Imaging; -using Tango.BL.Enumerations; -using Tango.MachineStudio.Common; -using Tango.MachineStudio.Sites.Views; -using Tango.SharedUI.Helpers; - -namespace Tango.MachineStudio.Sites -{ - [StudioModule(20)] - public class SitesModule : StudioModuleBase - { - public override string Name - { - get - { - return "Sites"; - } - } - - public override string Description - { - get - { - return "Manage organizations sites and their common machine properties."; - } - } - - public override BitmapSource Image - { - get - { - return ResourceHelper.GetImageFromResources("Images/site.png"); - } - } - - public override Type MainViewType - { - get - { - return typeof(MainView); - } - } - - public override Permissions Permission - { - get - { - return Permissions.RunRMLModule; - } - } - - public override void Dispose() - { - - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Tango.MachineStudio.Sites.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Tango.MachineStudio.Sites.csproj deleted file mode 100644 index ea9162ce2..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Tango.MachineStudio.Sites.csproj +++ /dev/null @@ -1,177 +0,0 @@ -<?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>{18A27902-9881-4556-8163-F6DF2236A14D}</ProjectGuid> - <OutputType>library</OutputType> - <RootNamespace>Tango.MachineStudio.Sites</RootNamespace> - <AssemblyName>Tango.MachineStudio.Sites</AssemblyName> - <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> - <FileAlignment>512</FileAlignment> - <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> - <WarningLevel>4</WarningLevel> - <Deterministic>true</Deterministic> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>..\..\..\Build\Machine Studio\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\Machine Studio\Release\</OutputPath> - <DefineConstants>TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <ItemGroup> - <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> - <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll</HintPath> - </Reference> - <Reference Include="Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll</HintPath> - </Reference> - <Reference Include="MahApps.Metro, Version=1.5.0.23, Culture=neutral, PublicKeyToken=f4fb5a3c4d1e5b4f, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\MahApps.Metro.1.5.0\lib\net45\MahApps.Metro.dll</HintPath> - </Reference> - <Reference Include="MaterialDesignColors, Version=1.1.2.0, Culture=neutral, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\MaterialDesignColors.1.1.2\lib\net45\MaterialDesignColors.dll</HintPath> - </Reference> - <Reference Include="MaterialDesignThemes.Wpf, Version=2.3.1.953, Culture=neutral, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\MaterialDesignThemes.2.3.1.953\lib\net45\MaterialDesignThemes.Wpf.dll</HintPath> - </Reference> - <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> - </Reference> - <Reference Include="System" /> - <Reference Include="System.ComponentModel.DataAnnotations" /> - <Reference Include="System.Data" /> - <Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\MahApps.Metro.1.5.0\lib\net45\System.Windows.Interactivity.dll</HintPath> - </Reference> - <Reference Include="System.Xml" /> - <Reference Include="Microsoft.CSharp" /> - <Reference Include="System.Core" /> - <Reference Include="System.Xml.Linq" /> - <Reference Include="System.Data.DataSetExtensions" /> - <Reference Include="System.Net.Http" /> - <Reference Include="System.Xaml"> - <RequiredTargetFramework>4.0</RequiredTargetFramework> - </Reference> - <Reference Include="WindowsBase" /> - <Reference Include="PresentationCore" /> - <Reference Include="PresentationFramework" /> - </ItemGroup> - <ItemGroup> - <Compile Include="Contracts\IMainView.cs" /> - <Compile Include="Models\SiteModel.cs" /> - <Compile Include="ViewModelLocator.cs" /> - <Compile Include="ViewModels\MainViewVM.cs" /> - <Compile Include="ViewModels\SiteDetailsViewVM.cs" /> - <Compile Include="Views\MainView.xaml.cs"> - <DependentUpon>MainView.xaml</DependentUpon> - </Compile> - <Compile Include="..\..\..\Versioning\GlobalVersionInfo.cs"> - <Link>GlobalVersionInfo.cs</Link> - </Compile> - <Compile Include="SitesModule.cs" /> - <Compile Include="Views\SiteDetailsView.xaml.cs"> - <DependentUpon>SiteDetailsView.xaml</DependentUpon> - </Compile> - <Compile Include="Views\SitesView.xaml.cs"> - <DependentUpon>SitesView.xaml</DependentUpon> - </Compile> - <Page Include="App.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - <Page Include="Views\MainView.xaml"> - <SubType>Designer</SubType> - <Generator>MSBuild:Compile</Generator> - </Page> - <Page Include="Views\SiteDetailsView.xaml"> - <SubType>Designer</SubType> - <Generator>MSBuild:Compile</Generator> - </Page> - <Page Include="Views\SitesView.xaml"> - <SubType>Designer</SubType> - <Generator>MSBuild:Compile</Generator> - </Page> - </ItemGroup> - <ItemGroup> - <Compile Include="Properties\AssemblyInfo.cs"> - <SubType>Code</SubType> - </Compile> - <Compile Include="Properties\Resources.Designer.cs"> - <AutoGen>True</AutoGen> - <DesignTime>True</DesignTime> - <DependentUpon>Resources.resx</DependentUpon> - </Compile> - <Compile Include="Properties\Settings.Designer.cs"> - <AutoGen>True</AutoGen> - <DependentUpon>Settings.settings</DependentUpon> - <DesignTimeSharedInput>True</DesignTimeSharedInput> - </Compile> - <EmbeddedResource Include="Properties\Resources.resx"> - <Generator>ResXFileCodeGenerator</Generator> - <LastGenOutput>Resources.Designer.cs</LastGenOutput> - </EmbeddedResource> - <None Include="app.config" /> - <None Include="packages.config" /> - <None Include="Properties\Settings.settings"> - <Generator>SettingsSingleFileGenerator</Generator> - <LastGenOutput>Settings.Designer.cs</LastGenOutput> - </None> - </ItemGroup> - <ItemGroup> - <Resource Include="Images\machine_site.png" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\..\..\Tango.BL\Tango.BL.csproj"> - <Project>{f441feee-322a-4943-b566-110e12fd3b72}</Project> - <Name>Tango.BL</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Core\Tango.Core.csproj"> - <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project> - <Name>Tango.Core</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Integration\Tango.Integration.csproj"> - <Project>{4206ac58-3b57-4699-8835-90bf6db01a61}</Project> - <Name>Tango.Integration</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Logging\Tango.Logging.csproj"> - <Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project> - <Name>Tango.Logging</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Settings\Tango.Settings.csproj"> - <Project>{d8f1ad85-526a-4f50-b6dc-d437af63d8d8}</Project> - <Name>Tango.Settings</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.SharedUI\Tango.SharedUI.csproj"> - <Project>{8491D07B-C1F6-4B62-A412-41B9FD2D6538}</Project> - <Name>Tango.SharedUI</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Transport\Tango.Transport.csproj"> - <Project>{74e700b0-1156-4126-be40-ee450d3c3026}</Project> - <Name>Tango.Transport</Name> - </ProjectReference> - <ProjectReference Include="..\..\Tango.MachineStudio.Common\Tango.MachineStudio.Common.csproj"> - <Project>{cb0b0aa2-bb24-4bca-a720-45e397684e12}</Project> - <Name>Tango.MachineStudio.Common</Name> - </ProjectReference> - </ItemGroup> - <ItemGroup> - <Resource Include="Images\site.png" /> - </ItemGroup> - <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> -</Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/ViewModelLocator.cs deleted file mode 100644 index c06ae05e7..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/ViewModelLocator.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.Core.DI; -using Tango.MachineStudio.Sites.ViewModels; - -namespace Tango.MachineStudio.Sites -{ - public static class ViewModelLocator - { - /// <summary> - /// Initializes a new instance of the ViewModelLocator class. - /// </summary> - static ViewModelLocator() - { - TangoIOC.Default.Register<MainViewVM>(); - } - - public static MainViewVM MainViewVM - { - get - { - return TangoIOC.Default.GetInstance<MainViewVM>(); - } - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/ViewModels/MainViewVM.cs deleted file mode 100644 index 5db5e004d..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/ViewModels/MainViewVM.cs +++ /dev/null @@ -1,220 +0,0 @@ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.BL; -using Tango.BL.ActionLogs; -using Tango.BL.Builders; -using Tango.BL.Entities; -using Tango.Core.Commands; -using Tango.Core.Threading; -using Tango.MachineStudio.Common; -using Tango.MachineStudio.Common.Authentication; -using Tango.MachineStudio.Common.Notifications; -using Tango.MachineStudio.Sites.Contracts; -using Tango.MachineStudio.Sites.Models; - -namespace Tango.MachineStudio.Sites.ViewModels -{ - public class MainViewVM : StudioViewModel<IMainView> - { - private ObservablesContext _db; - private INotificationProvider _notification; - private IAuthenticationProvider _authentication; - private IActionLogManager _actionLogManager; - private ActionTimer _filter_timer; - - private List<SiteModel> _sites; - public List<SiteModel> Sites - { - get { return _sites; } - set { _sites = value; RaisePropertyChangedAuto(); } - } - - private SiteModel _selectedSite; - public SiteModel SelectedSite - { - get { return _selectedSite; } - set { _selectedSite = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } - } - - private String _filter; - public String Filter - { - get { return _filter; } - set { _filter = value; RaisePropertyChangedAuto(); OnFilterChanged(); } - } - - private SiteDetailsViewVM _siteDetailsViewVM; - public SiteDetailsViewVM SiteDetailsViewVM - { - get { return _siteDetailsViewVM; } - set { _siteDetailsViewVM = value; RaisePropertyChangedAuto(); } - } - - public RelayCommand AddSiteCommand { get; set; } - - public RelayCommand RemoveSiteCommand { get; set; } - - public RelayCommand ManageSiteCommand { get; set; } - - public RelayCommand BackToSitesCommand { get; set; } - - public MainViewVM(INotificationProvider notificationProvider, IAuthenticationProvider authentication, IActionLogManager actionLogManager) - { - _notification = notificationProvider; - _authentication = authentication; - _actionLogManager = actionLogManager; - _filter_timer = new ActionTimer(TimeSpan.FromMilliseconds(500)); - - ManageSiteCommand = new RelayCommand(() => LoadSelectedSite(), () => SelectedSite != null); - BackToSitesCommand = new RelayCommand(() => { View.NavigateTo(SitesNavigationView.SitesView); }); - AddSiteCommand = new RelayCommand(AddNewSite); - RemoveSiteCommand = new RelayCommand(RemoveSelectedSite, () => SelectedSite != null); - } - - private async void RemoveSelectedSite() - { - if (!_notification.ShowQuestion("Are you sure you wish to remove the selected site?")) return; - - try - { - using (_notification.PushTaskItem("Removing site...")) - { - IsFree = false; - await Task.Factory.StartNew(() => - { - var site = _db.Sites.SingleOrDefault(x => x.Guid == SelectedSite.Guid); - site.Delete(_db); - _db.SaveChanges(); - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.SiteDeleted, _authentication.CurrentUser, site.Name, site, "Site deleted using Machine Studio."); - Sites.Remove(SelectedSite); - LoadSites(); - }); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error removing site."); - _notification.ShowError($"Error removing site.\n{ex.FlattenMessage()}"); - } - finally - { - IsFree = true; - } - } - - private async void AddNewSite() - { - try - { - String name = _notification.ShowTextInput("Enter site name", "name"); - if (String.IsNullOrWhiteSpace(name)) return; - - using (_notification.PushTaskItem("Creating site...")) - { - IsFree = false; - SiteDetailsViewVM = new SiteDetailsViewVM(); - SiteDetailsViewVM.Saved += SiteDetailsViewVM_Saved; - await SiteDetailsViewVM.Init(SelectedSite?.Guid, _notification, _authentication, _actionLogManager, true, name); - View.NavigateTo(SitesNavigationView.SiteDetailsView); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error creating site."); - _notification.ShowError($"Error creating site.\n{ex.FlattenMessage()}"); - } - finally - { - IsFree = true; - } - } - - private async void LoadSelectedSite() - { - try - { - using (_notification.PushTaskItem("Loading site details...")) - { - IsFree = false; - SiteDetailsViewVM = new SiteDetailsViewVM(); - SiteDetailsViewVM.Saved += SiteDetailsViewVM_Saved; - await SiteDetailsViewVM.Init(SelectedSite.Guid, _notification, _authentication, _actionLogManager, false); - View.NavigateTo(SitesNavigationView.SiteDetailsView); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error loading site details."); - _notification.ShowError($"Error loading site details.\n{ex.FlattenMessage()}"); - } - finally - { - IsFree = true; - } - } - - private void SiteDetailsViewVM_Saved(object sender, EventArgs e) - { - OnFilterChanged(); - View.NavigateTo(SitesNavigationView.SitesView); - } - - private void OnFilterChanged() - { - if (Filter != null) - { - _filter_timer.ResetReplace(() => - { - try - { - LoadSites(); - } - catch (Exception ex) - { - LogManager.Log(ex, "Error loading sites list."); - } - }); - } - } - - private void LoadSites() - { - using (_notification.PushTaskItem("Loading sites...")) - { - Sites = (from site in _db.Sites - join organization in _db.Organizations on site.OrganizationGuid equals organization.Guid - join sites_rmls in _db.SitesRmls on site.Guid equals sites_rmls.SiteGuid into rmls - join sites_catalogs in _db.SitesCatalogs on site.Guid equals sites_catalogs.SiteGuid into catalogs - join sites_machines in _db.Machines on site.Guid equals sites_machines.SiteGuid into machines - where Filter == null || Filter == "" || site.Name.ToLower().StartsWith(Filter.ToLower()) || organization.Name.ToLower().StartsWith(Filter.ToLower()) - select new - { - Site = site, - OrganizationName = organization.Name, - ThreadCount = rmls.Count(x => x.SiteGuid == site.Guid), - CatalogCount = catalogs.Count(x => x.SiteGuid == site.Guid), - MachineCount = machines.Count(x => x.SiteGuid == site.Guid) - }).Distinct().ToList().DistinctBy(x => x.Site.Guid).Select(x => new SiteModel() - { - Guid = x.Site.Guid, - ID = x.Site.ID, - Name = x.Site.Name, - Description = x.Site.Description, - ThreadCount = x.ThreadCount, - CatalogCount = x.CatalogCount, - MachineCount = x.MachineCount, - Organization = x.OrganizationName, - }).ToList(); - } - } - - public override void OnApplicationReady() - { - _db = ObservablesContext.CreateDefault(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/ViewModels/SiteDetailsViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/ViewModels/SiteDetailsViewVM.cs deleted file mode 100644 index cacda1e8d..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/ViewModels/SiteDetailsViewVM.cs +++ /dev/null @@ -1,175 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.BL; -using Tango.BL.Entities; -using Tango.Core.Commands; -using Tango.SharedUI; -using Tango.SharedUI.Components; -using System.Data.Entity; -using Tango.MachineStudio.Common.Notifications; -using Tango.MachineStudio.Common.Authentication; -using Tango.BL.ActionLogs; -using Tango.BL.DTO; -using Tango.BL.Builders; - -namespace Tango.MachineStudio.Sites.ViewModels -{ - public class SiteDetailsViewVM : ViewModel - { - private ObservablesContext _db; - private INotificationProvider _notification; - private IAuthenticationProvider _authentication; - private IActionLogManager _actionLogManager; - private bool _isNew; - private SiteDTO _siteBeforeSave; - - public event EventHandler Saved; - - private Site _site; - public Site Site - { - get { return _site; } - set { _site = value; RaisePropertyChangedAuto(); } - } - - private List<Organization> _organizations; - public List<Organization> Organizations - { - get { return _organizations; } - set { _organizations = value; RaisePropertyChangedAuto(); } - } - - private SelectedObjectCollection<Rml> _rmls; - public SelectedObjectCollection<Rml> Rmls - { - get { return _rmls; } - set { _rmls = value; RaisePropertyChangedAuto(); } - } - - private SelectedObjectCollection<ColorCatalog> _catalogs; - public SelectedObjectCollection<ColorCatalog> Catalogs - { - get { return _catalogs; } - set { _catalogs = value; RaisePropertyChangedAuto(); } - } - - private List<Machine> _machines; - public List<Machine> Machines - { - get { return _machines; } - set { _machines = value; RaisePropertyChangedAuto(); } - } - - public RelayCommand SaveCommand { get; set; } - - public SiteDetailsViewVM() - { - SaveCommand = new RelayCommand(Save, () => IsFree); - } - - public async Task Init(String siteGuid, INotificationProvider notification, IAuthenticationProvider authentication, IActionLogManager actionLogManager, bool isNew, string newSiteName = null) - { - _notification = notification; - _authentication = authentication; - _actionLogManager = actionLogManager; - - _db = ObservablesContext.CreateDefault(); - Organizations = await _db.Organizations.ToListAsync(); - - if (isNew) - { - Site = new Site(); - Site.Name = newSiteName; - Site.Description = "My site description"; - _db.Sites.Add(Site); - - _isNew = true; - } - else - { - _isNew = false; - Site = await new SiteBuilder(_db).Set(siteGuid) - .WithSiteCatalogs() - .WithCatalogs() - .WithSiteRmls() - .WithRmls() - .WithOrganization() - .BuildAsync(); - } - - Machines = await _db.Machines.Where(x => x.SiteGuid == Site.Guid).Include(x => x.Organization).ToListAsync(); - - var rmls = await _db.Rmls.OrderBy(x => x.Name).ToListAsync(); - var catalogs = await _db.ColorCatalogs.OrderBy(x => x.Name).ToListAsync(); - - Rmls = new SelectedObjectCollection<Rml>(rmls.ToObservableCollection(), Site.SitesRmls.Select(x => x.Rml).ToObservableCollection()); - Catalogs = new SelectedObjectCollection<ColorCatalog>(catalogs.ToObservableCollection(), Site.SitesCatalogs.Select(x => x.ColorCatalog).ToObservableCollection()); - - _siteBeforeSave = SiteDTO.FromObservable(Site); - } - - private async void Save() - { - try - { - if (!Site.Validate(_db)) - { - _notification.ShowError(String.Join("\n", Site.ValidationErrors)); - return; - } - - IsFree = false; - - using (_notification.PushTaskItem("Saving site details...")) - { - //Check if site organization has changed and there are no machines that belongs to this site but different organization. - if (_db.Machines.Any(x => x.SiteGuid == Site.Guid && x.OrganizationGuid != Site.OrganizationGuid)) - { - throw new InvalidOperationException($"One or more machines belongs to this site but not to '{Site.Organization.Name}' organization."); - } - - //Remove site rmls. - Site.SitesRmls.ToList().Where(x => !Rmls.SynchedSource.ToList().Exists(y => y.Guid == x.RmlGuid)).ToList().ForEach(x => _db.SitesRmls.Remove(x)); - Site.SitesCatalogs.ToList().Where(x => !Catalogs.SynchedSource.ToList().Exists(y => y.Guid == x.ColorCatalogGuid)).ToList().ForEach(x => _db.SitesCatalogs.Remove(x)); - - foreach (var selectedRml in Rmls.SynchedSource.Where(x => !Site.SitesRmls.ToList().Exists(y => y.RmlGuid == x.Guid))) - { - _db.SitesRmls.Add(new SitesRml() { SiteGuid = Site.Guid, RmlGuid = selectedRml.Guid }); - } - - foreach (var selectedCatalog in Catalogs.SynchedSource.Where(x => !Site.SitesCatalogs.ToList().Exists(y => y.ColorCatalogGuid == x.Guid))) - { - _db.SitesCatalogs.Add(new SitesCatalog() { SiteGuid = Site.Guid, ColorCatalogGuid = selectedCatalog.Guid }); - } - - await _db.SaveChangesAsync(); - - if (_isNew) - { - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.SiteCreated, _authentication.CurrentUser, Site.Name, Site, "Site created using Machine Studio."); - } - else - { - SiteDTO siteAfter = SiteDTO.FromObservable(Site); - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.SiteSaved, _authentication.CurrentUser, _siteBeforeSave.Name, _siteBeforeSave, siteAfter, "Site saved using Machine Studio."); - _siteBeforeSave = siteAfter; - } - } - _db.Dispose(); - Saved?.Invoke(this, new EventArgs()); - } - catch (Exception ex) - { - LogManager.Log(ex, "Error saving site details."); - _notification.ShowError($"Error saving site details.\n{ex.FlattenMessage()}"); - } - finally - { - IsFree = true; - } - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/MainView.xaml deleted file mode 100644 index 4ca82c4f7..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/MainView.xaml +++ /dev/null @@ -1,19 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.Sites.Views.MainView" - 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.Sites.Views" - xmlns:vm="clr-namespace:Tango.MachineStudio.Sites.ViewModels" - xmlns:global="clr-namespace:Tango.MachineStudio.Sites" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" - 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 IsEnabled="{Binding IsFree}"> - <controls:NavigationControl x:Name="navigationControl" TransitionType="Slide"> - <local:SitesView /> - <local:SiteDetailsView/> - </controls:NavigationControl> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/MainView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/MainView.xaml.cs deleted file mode 100644 index c4f9995ce..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/MainView.xaml.cs +++ /dev/null @@ -1,36 +0,0 @@ -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; -using Tango.Core.DI; -using Tango.MachineStudio.Sites.Contracts; - -namespace Tango.MachineStudio.Sites.Views -{ - /// <summary> - /// Interaction logic for MainView.xaml - /// </summary> - public partial class MainView : UserControl, IMainView - { - public MainView() - { - InitializeComponent(); - TangoIOC.Default.Register<IMainView>(this); - } - - public void NavigateTo(SitesNavigationView view) - { - navigationControl.NavigateTo(view.ToString()); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/SiteDetailsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/SiteDetailsView.xaml deleted file mode 100644 index 182f05be0..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/SiteDetailsView.xaml +++ /dev/null @@ -1,170 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.Sites.Views.SiteDetailsView" - 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.Sites.Views" - xmlns:vm="clr-namespace:Tango.MachineStudio.Sites.ViewModels" - xmlns:global="clr-namespace:Tango.MachineStudio.Sites" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" - xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" - 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}"> - - <UserControl.Resources> - <Style x:Key="GridStyle" TargetType="DataGrid" BasedOn="{StaticResource {x:Type DataGrid}}"> - <Setter Property="AutoGenerateColumns" Value="False"></Setter> - <Setter Property="SelectionMode" Value="Single"></Setter> - <Setter Property="SelectionUnit" Value="FullRow"></Setter> - <Setter Property="IsReadOnly" Value="True"></Setter> - </Style> - - <Style x:Key="CellStyle" TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="{x:Type DataGridCell}"> - <Grid Background="{TemplateBinding Background}"> - <ContentPresenter VerticalAlignment="Center" Margin="8" /> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="FocusVisualStyle" Value="{x:Null}"/> - <Setter Property="VerticalContentAlignment" Value="Center"></Setter> - <Style.Triggers> - <Trigger Property="IsSelected" Value="True"> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="BorderBrush" Value="Cyan"/> - </Trigger> - </Style.Triggers> - </Style> - </UserControl.Resources> - - <Grid Margin="20" DataContext="{Binding SiteDetailsViewVM}" d:DataContext="{d:DesignInstance Type=vm:SiteDetailsViewVM, IsDesignTimeCreatable=False}"> - <DockPanel> - <Grid DockPanel.Dock="Top"> - <StackPanel Orientation="Horizontal"> - <Button Style="{StaticResource MaterialDesignFlatButton}" Height="Auto" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.BackToSitesCommand}"> - <materialDesign:PackIcon Kind="ArrowLeft" Width="50" Height="50" Foreground="#202020" ToolTip="Back to RML list" /> - </Button> - <TextBlock Text="{Binding Site.Name,NotifyOnValidationError=False,ValidatesOnNotifyDataErrors=False}" VerticalAlignment="Center" Margin="10 0 0 0" FontSize="34"></TextBlock> - </StackPanel> - - <StackPanel HorizontalAlignment="Right" Orientation="Horizontal"> - <Button Margin="10 0 0 0" Width="170" Height="45" VerticalAlignment="Center" Command="{Binding SaveCommand}"> - <StackPanel Orientation="Horizontal"> - <materialDesign:PackIcon Kind="ContentSaveAll" Width="24" Height="24" /> - <TextBlock VerticalAlignment="Center" Margin="10 0 0 0">SAVE</TextBlock> - </StackPanel> - </Button> - </StackPanel> - </Grid> - - <Grid Margin="0 20"> - <Grid.RowDefinitions> - <RowDefinition Height="113*"/> - <RowDefinition Height="358*"/> - </Grid.RowDefinitions> - <Grid> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="302*"/> - <ColumnDefinition Width="399*"/> - <ColumnDefinition Width="1179*"/> - </Grid.ColumnDefinitions> - - <Grid Margin="10"> - <materialDesign:Card Background="{DynamicResource MaterialDesignBackground}" VerticalAlignment="Stretch"> - <Border Padding="20"> - <DockPanel> - <TextBlock DockPanel.Dock="Top" FontSize="16">PROPERTIES</TextBlock> - <controls:TableGrid RowHeight="35"> - <TextBlock Text="Name:" ></TextBlock> - <TextBox Text="{Binding Site.Name,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True,ValidatesOnNotifyDataErrors=True}"></TextBox> - - <TextBlock Text="Organization:" ></TextBlock> - <ComboBox ItemsSource="{Binding Organizations}" SelectedItem="{Binding Site.Organization}" DisplayMemberPath="Name"></ComboBox> - - <TextBlock Text="Description:" ></TextBlock> - <TextBox Text="{Binding Site.Description,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True,ValidatesOnNotifyDataErrors=True}"></TextBox> - </controls:TableGrid> - </DockPanel> - </Border> - </materialDesign:Card> - </Grid> - - <Grid Grid.Column="1" Margin="10"> - - </Grid> - - <Grid Grid.ColumnSpan="3"> - - </Grid> - </Grid> - - <Grid Grid.Row="1" Margin="0 20 0 0"> - <Grid> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="1*"/> - <ColumnDefinition Width="1*"/> - <ColumnDefinition Width="1*"/> - </Grid.ColumnDefinitions> - - - <DockPanel Margin="10"> - <TextBlock DockPanel.Dock="Top" FontSize="16">SITE RML</TextBlock> - - <materialDesign:Card Margin="0 5 0 0" Background="{DynamicResource MaterialDesignBackground}" VerticalAlignment="Stretch"> - <DataGrid ItemsSource="{Binding Rmls}" Style="{StaticResource GridStyle}" CellStyle="{StaticResource CellStyle}"> - <DataGrid.Columns> - <DataGridTemplateColumn Header="" Width="Auto"> - <DataGridTemplateColumn.CellTemplate> - <DataTemplate> - <CheckBox IsChecked="{Binding IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" /> - </DataTemplate> - </DataGridTemplateColumn.CellTemplate> - </DataGridTemplateColumn> - <DataGridTextColumn Header="NAME" IsReadOnly="True" Binding="{Binding Data.Name}" Width="1*" /> - </DataGrid.Columns> - </DataGrid> - </materialDesign:Card> - </DockPanel> - - - <DockPanel Margin="10" Grid.Column="1"> - <TextBlock DockPanel.Dock="Top" FontSize="16" Text="SITE CATALOGS"/> - <materialDesign:Card Margin="0 5 0 0" Background="{DynamicResource MaterialDesignBackground}" VerticalAlignment="Stretch"> - <DataGrid ItemsSource="{Binding Catalogs}" Style="{StaticResource GridStyle}" CellStyle="{StaticResource CellStyle}"> - <DataGrid.Columns> - <DataGridTemplateColumn Header="" Width="Auto"> - <DataGridTemplateColumn.CellTemplate> - <DataTemplate> - <CheckBox IsChecked="{Binding IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" /> - </DataTemplate> - </DataGridTemplateColumn.CellTemplate> - </DataGridTemplateColumn> - <DataGridTextColumn Header="NAME" Binding="{Binding Data.Name}" Width="1*" /> - </DataGrid.Columns> - </DataGrid> - </materialDesign:Card> - </DockPanel> - - <DockPanel Margin="10" Grid.Column="2"> - <TextBlock DockPanel.Dock="Top" FontSize="16" Text="SITE MACHINES"/> - <materialDesign:Card Margin="0 5 0 0" Background="{DynamicResource MaterialDesignBackground}" VerticalAlignment="Stretch"> - <DataGrid ItemsSource="{Binding Machines}" Style="{StaticResource GridStyle}" CellStyle="{StaticResource CellStyle}"> - <DataGrid.Columns> - <DataGridTextColumn Header="ORGANIZATION" Binding="{Binding Organization.Name}" Width="Auto" /> - <DataGridTextColumn Header="SERIAL NUMBER" Binding="{Binding SerialNumber}" Width="Auto" /> - <DataGridTextColumn Header="NAME" Binding="{Binding Name}" Width="1*" /> - </DataGrid.Columns> - </DataGrid> - </materialDesign:Card> - </DockPanel> - </Grid> - </Grid> - </Grid> - </DockPanel> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/SiteDetailsView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/SiteDetailsView.xaml.cs deleted file mode 100644 index 03e9a2f75..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/SiteDetailsView.xaml.cs +++ /dev/null @@ -1,28 +0,0 @@ -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.Sites.Views -{ - /// <summary> - /// Interaction logic for SiteDetailsView.xaml - /// </summary> - public partial class SiteDetailsView : UserControl - { - public SiteDetailsView() - { - InitializeComponent(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/SitesView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/SitesView.xaml deleted file mode 100644 index 437003a8a..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/SitesView.xaml +++ /dev/null @@ -1,76 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.Sites.Views.SitesView" - 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.Sites.Views" - xmlns:vm="clr-namespace:Tango.MachineStudio.Sites.ViewModels" - xmlns:global="clr-namespace:Tango.MachineStudio.Sites" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" - xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" - 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}"> - <UserControl.Resources> - <converters:DateTimeUTCToShortDateTimeConverter x:Key="DateTimeUTCToShortDateTimeConverter" /> - </UserControl.Resources> - - <Grid> - <DockPanel Margin="100" MaxWidth="1200"> - <Grid DockPanel.Dock="Top"> - <StackPanel Orientation="Horizontal"> - <Image Source="../Images/machine_site.png" Width="350" RenderOptions.BitmapScalingMode="Fant" Margin="10" /> - - <StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" Margin="0 0 0 10"> - <materialDesign:PackIcon VerticalAlignment="Center" Kind="Magnify" Width="32" Height="32" /> - <TextBox Width="400" FontSize="20" Margin="10 0 0 0" materialDesign:HintAssist.Hint="Name, Organization" Text="{Binding Filter,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox> - </StackPanel> - </StackPanel> - </Grid> - <Grid DockPanel.Dock="Bottom" IsEnabled="{Binding IsFree}"> - <StackPanel VerticalAlignment="Center" Orientation="Horizontal" HorizontalAlignment="Left" Margin="0 0 0 0"> - <Button Margin="0 0 10 0" MinWidth="160" Height="50" Background="{StaticResource RedBrush300}" BorderBrush="{StaticResource RedBrush300}" Command="{Binding RemoveSiteCommand}"> - <StackPanel Orientation="Horizontal"> - <materialDesign:PackIcon Kind="Delete" Width="20" Height="20" /> - <TextBlock Margin="5 0 0 0" FontSize="16">DELETE</TextBlock> - </StackPanel> - </Button> - <Button Margin="0 0 10 0" MinWidth="160" Height="50" Background="{StaticResource GreenBrush300}" BorderBrush="{StaticResource GreenBrush300}" Command="{Binding AddSiteCommand}"> - <StackPanel Orientation="Horizontal"> - <materialDesign:PackIcon Kind="Plus" Width="20" Height="20" /> - <TextBlock Margin="5 0 0 0" FontSize="16">NEW SITE</TextBlock> - </StackPanel> - </Button> - </StackPanel> - <StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> - <Button Margin="50 0 0 0" MinWidth="200" Height="60" Command="{Binding ManageSiteCommand}"> - <StackPanel Orientation="Horizontal"> - <materialDesign:PackIcon Kind="Pencil" Width="24" Height="24" /> - <TextBlock Margin="10 0 0 0" FontSize="18">EDIT</TextBlock> - </StackPanel> - </Button> - </StackPanel> - </Grid> - <Grid IsEnabled="{Binding IsFree}"> - <controls:DoubleClickDataGrid Style="{StaticResource {x:Type DataGrid}}" DoubleClickCommand="{Binding ManageSiteCommand}" Margin="0 0 0 10" BorderBrush="{StaticResource borderBrush}" IsReadOnly="True" BorderThickness="1" Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" ItemsSource="{Binding Sites}" SelectedItem="{Binding SelectedSite}"> - <DataGrid.CellStyle> - <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="FocusVisualStyle" Value="{x:Null}"/> - <Setter Property="VerticalContentAlignment" Value="Center"></Setter> - </Style> - </DataGrid.CellStyle> - <DataGrid.Columns> - <DataGridTextColumn Header="NAME" Binding="{Binding Name}" Width="Auto" /> - <DataGridTextColumn Header="DESCRIPTION" Binding="{Binding Description}" Width="Auto" /> - <DataGridTextColumn Header="ORGANIZATION" Binding="{Binding Organization}" Width="Auto" /> - <DataGridTextColumn Header="MACHINES" Binding="{Binding MachineCount}" Width="Auto" /> - <DataGridTextColumn Header="THREADS" Binding="{Binding ThreadCount}" Width="Auto" /> - <DataGridTextColumn Header="CATALOGS" Binding="{Binding CatalogCount}" Width="Auto" /> - <DataGridTextColumn Header="LAST UPDATED" Binding="{Binding LastUpdated,Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="1*" /> - </DataGrid.Columns> - </controls:DoubleClickDataGrid> - </Grid> - </DockPanel> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/SitesView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/SitesView.xaml.cs deleted file mode 100644 index e6a4a6fe6..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/Views/SitesView.xaml.cs +++ /dev/null @@ -1,28 +0,0 @@ -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.Sites.Views -{ - /// <summary> - /// Interaction logic for SitesView.xaml - /// </summary> - public partial class SitesView : UserControl - { - public SitesView() - { - InitializeComponent(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/app.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/app.config deleted file mode 100644 index 7b82e5f7c..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/app.config +++ /dev/null @@ -1,85 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<configuration> - <configSections> - <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> - <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> - </configSections> - <runtime> - <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> - <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" /> - </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-5.0.5.0" newVersion="5.0.5.0" /> - </dependentAssembly> - <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" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-1.2.2.0" newVersion="1.2.2.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.Reflection.Metadata" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-1.4.2.0" newVersion="1.4.2.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.IO.FileSystem" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.IO.FileSystem.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.Security.Cryptography.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.Xml.XPath.XDocument" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.Console" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="System.Diagnostics.StackTrace" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" /> - </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" /> - </dependentAssembly> - </assemblyBinding> - </runtime> - <entityFramework> - <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> - <providers> - <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> - </providers> - </entityFramework> -</configuration>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/packages.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/packages.config deleted file mode 100644 index e57143046..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Sites/packages.config +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<packages> - <package id="EntityFramework" version="6.2.0" targetFramework="net461" /> - <package id="Google.Protobuf" version="3.4.1" targetFramework="net461" /> - <package id="MahApps.Metro" version="1.5.0" targetFramework="net461" /> - <package id="MaterialDesignColors" version="1.1.2" targetFramework="net461" /> - <package id="MaterialDesignThemes" version="2.3.1.953" targetFramework="net461" /> - <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" /> -</packages>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/App.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/App.config index 75b63289d..ed4582d5b 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/App.config +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/App.config @@ -22,7 +22,7 @@ </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.IO.FileSystem" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> @@ -30,27 +30,27 @@ </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" /> + <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.IO.FileSystem.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Security.Cryptography.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Xml.XPath.XDocument" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> + <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Console" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> + <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Diagnostics.StackTrace" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" /> + <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Reactive.Core" publicKeyToken="94bc3704cddfc263" culture="neutral" /> @@ -74,7 +74,7 @@ </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.IdentityModel.Clients.ActiveDirectory" publicKeyToken="31bf3856ad364e35" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-5.0.5.0" newVersion="5.0.5.0" /> + <bindingRedirect oldVersion="0.0.0.0-3.19.8.16603" newVersion="3.19.8.16603" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" /> @@ -92,10 +92,6 @@ <assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" /> </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="Z.EntityFramework.Extensions" publicKeyToken="59b66d028979105b" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.50.0" newVersion="4.0.50.0" /> - </dependentAssembly> </assemblyBinding> </runtime> </configuration>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/CollectionConverter .cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/CollectionConverter .cs deleted file mode 100644 index 2d9a3cfd9..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/CollectionConverter .cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Data; - -namespace Tango.MachineStudio.Statistics.Converters -{ - public class CollectionConverter : IValueConverter - { - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - if(value != null && value is System.Collections.IEnumerable) - { - var colection = value as System.Collections.IEnumerable; - var text = new StringBuilder(); - foreach(var val in colection) - { - string visibleText = val.ToString(); - if(val is bool && parameter is string) - { - string[] tokens = (parameter as string).Split(','); - if(tokens.Count() > 1) - { - visibleText = (bool)val == true ? tokens[1] : tokens[0]; - } - } - text.Append(visibleText); - text.Append("/"); - } - string str_text = text.ToString(); - if(str_text.Length > 1) - { - str_text = str_text.Remove(str_text.Length - 1); - } - return str_text; - } - return ""; - } - - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/DateTimeToStringFormatConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/DateTimeToStringFormatConverter.cs deleted file mode 100644 index 6b5154ce3..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/DateTimeToStringFormatConverter.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Data; - -namespace Tango.MachineStudio.Statistics.Converters -{ - public class DateTimeToStringFormatConverter : IValueConverter - { - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - if (value != null) - { - return ((TimeSpan)value).ToString(@"hh\:mm\:ss"); - } - else - { - return TimeSpan.FromSeconds(0).ToString(@"hh\:mm\:ss"); - } - } - - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/JobLengthConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/JobLengthConverter.cs deleted file mode 100644 index cd928d9c9..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/JobLengthConverter.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Data; - -namespace Tango.MachineStudio.Statistics.Converters -{ - public class JobLengthConverter : IMultiValueConverter - { - public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) - { - try - { - if (values != null && values.Count() == 3) - { - double length = (double)values[0]; - double endPoint = (double)values[1]; - double width = (double)values[2]; - var v = Math.Round((endPoint / length) * width, MidpointRounding.AwayFromZero); - - if (double.IsInfinity(v)) - { - return 0d; - } - return v; - } - } - catch { } - - return 0d; - } - - public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/LiquidQuantityToFormatStringConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/LiquidQuantityToFormatStringConverter.cs deleted file mode 100644 index 3ab013ab3..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/LiquidQuantityToFormatStringConverter.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Data; - - -namespace Tango.MachineStudio.Statistics.Converters -{ - public class LiquidQuantityToFormatStringConverter : IValueConverter - { - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - try - { - string format = ""; - if (parameter is string) - { - format = (string)parameter; - } - - var longValue = System.Convert.ToUInt64(value.ToString()); - double liters_val = (longValue / 1000000000d); - double cc_val = (longValue / 1000000d); - double dispensers_val = (longValue / 130000000d); - string tooltip = String.Format($"Nanoliters: {longValue.ToString(format)}\nCubic Centimeters: {cc_val}\nLiters: {liters_val}\nDispensers: {dispensers_val}"); - return tooltip; - } - catch { } - - return ""; - } - - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/LiquidTypeToColorConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/LiquidTypeToColorConverter.cs deleted file mode 100644 index b36bf608e..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/LiquidTypeToColorConverter.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Data; -using System.Windows.Media; -using Tango.BL; -using Tango.BL.Enumerations; - -namespace Tango.MachineStudio.Statistics.Converters -{ - public class LiquidTypeToColorConverter : IValueConverter - { - private static Dictionary<LiquidTypes,Color> liquidTypes; - - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - if (liquidTypes == null) - { - liquidTypes = new Dictionary<LiquidTypes, Color>(); - - foreach (var type in ObservablesStaticCollections.Instance.LiquidTypes.ToList()) - { - liquidTypes.Add(type.Type, type.LiquidTypeColor); - } - } - - if (value != null) - { - return liquidTypes[(LiquidTypes)value]; - } - - return value; - } - - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/MidTankLevelToElementHeightConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/MidTankLevelToElementHeightConverter.cs deleted file mode 100644 index de002046e..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/MidTankLevelToElementHeightConverter.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Globalization; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Data; - -namespace Tango.MachineStudio.Statistics.Converters -{ - public class MidTankLevelToElementHeightConverter : IMultiValueConverter - { - public const double MAX_QUANTITY = 130000000; - public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) - { - try - { - double parentActualHeight; - Double.TryParse(values[0].ToString(), out parentActualHeight); - double quantity; - Double.TryParse(values[1].ToString(), out quantity); - - double midTankLevel = (double)Math.Min(quantity, MAX_QUANTITY); - double delta = ((midTankLevel / MAX_QUANTITY) * parentActualHeight); - if (quantity > 0 && midTankLevel < (MAX_QUANTITY/10))// if quantity < 10|% set 2 pixel - delta = 2.0; - var test = delta; - return parentActualHeight - delta; - } - catch - { - return 0d; - } - } - - public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/NanoLiterToLiterFormatConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/NanoLiterToLiterFormatConverter.cs deleted file mode 100644 index 97f4ec066..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/NanoLiterToLiterFormatConverter.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Data; - -namespace Tango.MachineStudio.Statistics.Converters -{ - public class NanoLiterToLiterFormatConverter : IValueConverter - { - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - try - { - var longValue = System.Convert.ToUInt64(value.ToString()); - double val = (longValue / 1000000000d); - if (parameter is string) - { - string format= (string)parameter; - return val.ToString(format); - } - return val.ToString(); - } - catch { } - - return ""; - } - - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/StringToBoolYesNoNullConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/StringToBoolYesNoNullConverter.cs deleted file mode 100644 index f7633a7d0..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/StringToBoolYesNoNullConverter.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Controls; -using System.Windows.Data; - -namespace Tango.MachineStudio.Statistics.Converters -{ - public class StringToBoolYesNoNullConverter : IValueConverter - { - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - if(value is bool) - { - return (bool)value ? "Yes" : "No"; - } - return "Null"; - } - - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - //throw new NotImplementedException(); - if (value is ComboBoxItem) - { - string str_val = ((ComboBoxItem)value).Content.ToString(); - if (str_val.ToUpper() == "NO") - return false; - if (str_val.ToUpper() == "YES") - return true; - } - return null; - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/StringToFirstLetterConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/StringToFirstLetterConverter.cs deleted file mode 100644 index a1c9561b9..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/StringToFirstLetterConverter.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Data; - -namespace Tango.MachineStudio.Statistics.Converters -{ - public class StringToFirstLetterConverter : IValueConverter - { - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - if (value != null && value.ToString().Length > 1) - { - return value.ToString().First().ToString(); - } - else - { - return value; - } - } - - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } - } -}
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/TooltipLiquidQuantityFormatConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/TooltipLiquidQuantityFormatConverter.cs deleted file mode 100644 index 6c4d1347f..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/TooltipLiquidQuantityFormatConverter.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Data; -namespace Tango.MachineStudio.Statistics.Converters -{ - class TooltipLiquidQuantityFormatConverter : IValueConverter - { - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - try - { - string format = ""; - if (parameter is string) - { - format = (string)parameter; - } - var longValue = System.Convert.ToUInt64(value.ToString()); - decimal liters_val = (decimal)(longValue / 1000000000d); - decimal cc_val = (decimal)(longValue / 1000000d); - decimal dispensers_val = (decimal)(longValue / 130000000d); - string tooltip = String.Format($"Nanoliters: {longValue.ToString(format)}\nCubic Centimeters: {cc_val}\nLiters: {liters_val}\nDispensers: {dispensers_val}"); - return tooltip; - } - catch { } - - return ""; - } - - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/ExcelModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/ExcelModel.cs deleted file mode 100644 index f06b9fe60..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/ExcelModel.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Tango.MachineStudio.Statistics.Models -{ - public class ExcelModel - { - public String ID { get; set; } - public String Machine { get; set; } - public String User { get; set; } - public String JobName { get; set; } - public String Thread { get; set; } - public String Length { get; set; } - public String Source { get; set; } - public String UploadDuration { get; set; } - public String HeatingDuration { get; set; } - public String StartTime { get; set; } - public String IsGradient { get; set; } - public String GR { get; set; } - public String Status { get; set; } - public String EndTime { get; set; } - public String EndPosition { get; set; } - public String Cyan { get; set; } - public String Magenta { get; set; } - public String Yellow { get; set; } - public String Black { get; set; } - public String Transparent { get; set; } - public String Lubricant { get; set; } - public String Cleaner { get; set; } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/JobRunModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/JobRunModel.cs deleted file mode 100644 index 83897ca16..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/JobRunModel.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.BL.Entities; - -namespace Tango.MachineStudio.Statistics.Models -{ - public class JobRunModel - { - public JobRun JobRun { get; set; } - - public Machine Machine { get; set; } - - public User User { get; set; } - - public TimeSpan? UploadDuration { get; set; } - - public TimeSpan? HeatingDuration { get; set; } - - public RmlModel Rml { get; set; } - - public void Init() - { - if (JobRun.HeatingStartDate != null) - { - UploadDuration = JobRun.HeatingStartDate - JobRun.StartDate; - } - - if (JobRun.ActualStartDate != null && JobRun.HeatingStartDate != null) - { - HeatingDuration = JobRun.ActualStartDate - JobRun.HeatingStartDate; - } - - - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/JobRunStatisticsModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/JobRunStatisticsModel.cs deleted file mode 100644 index 98b719cae..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/JobRunStatisticsModel.cs +++ /dev/null @@ -1,45 +0,0 @@ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.BL; -using Tango.BL.Entities; -using Tango.Core.ExtensionMethods; - -namespace Tango.MachineStudio.Statistics.Models -{ - public class JobRunStatisticsModel : JobRun - { - private static Dictionary<String, Machine> _machines = new Dictionary<string, Machine>(); - - public JobRunStatisticsModel() - { - - } - - public JobRunStatisticsModel(JobRun run) - { - run.MapPropertiesTo(this, MappingFlags.NoReferenceTypes); - } - - public Task LoadMachine(ObservablesContext context) - { - return Task.Factory.StartNew(() => - { - if (!_machines.ContainsKey(MachineGuid)) - { - Machine = context.Machines.SingleOrDefault(x => x.Guid == MachineGuid); - _machines.Add(MachineGuid, Machine); - } - else - { - Machine = _machines[MachineGuid]; - } - }); - } - - public Machine Machine { get; set; } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/RmlModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/RmlModel.cs deleted file mode 100644 index 789779e42..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/RmlModel.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Tango.MachineStudio.Statistics.Models -{ - public class RmlModel - { - public string Guid { get; set; } - - public string Name { get; set; } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/StatisticsValueCollection.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/StatisticsValueCollection.cs deleted file mode 100644 index b5615e4d1..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/StatisticsValueCollection.cs +++ /dev/null @@ -1,319 +0,0 @@ -using LiveCharts; -using LiveCharts.Wpf; -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Data; -using System.Windows.Media; -using Tango.BL.Enumerations; -using Tango.BL.ValueObjects; -using Tango.Core; -using System.Windows.Media; -using System.Windows; - -namespace Tango.MachineStudio.Statistics.Models -{ - public class StatisticsValue - { - public string Name { get; set; } - - public object Value { get; set; } - - public string Unit { get; set; } - } - public class MoreValue - { - public string Text { get; set; } - } - - public class StatisticsValueCollection : ExtendedObject - { - private List<Color> _pieColors; - - #region Properties - - private ObservableCollection<StatisticsValue> _statisticsCollection; - - /// <summary> - /// Gets or sets the statistics collection of StatisticsValue object. - /// </summary> - public ObservableCollection<StatisticsValue> StatisticsCollection - { - get { return _statisticsCollection; } - set - { - _statisticsCollection = value; - RaisePropertyChangedAuto(); - } - } - - private List<StatisticsValue> _threadConsumptionPerThread; - /// <summary> - /// Gets or sets the thread consumption per thread list. - /// </summary> - public List<StatisticsValue> ThreadConsumptionPerThread - { - get { return _threadConsumptionPerThread; } - set { _threadConsumptionPerThread = value; RaisePropertyChangedAuto(); } - } - - /// <summary> - /// Gets or sets the thread consumption per thread collection. - /// </summary> - public CompositeCollection ThreadConsumptionPerThreadCollection { get; set; } - - private LabeledSeriesCollection _pieJobSource; - - /// <summary> - /// Gets or sets the pie job source. - /// </summary> - public LabeledSeriesCollection PieJobSource - { - get { return _pieJobSource; } - set { _pieJobSource = value; RaisePropertyChangedAuto(); } - } - - private LabeledSeriesCollection _pieJobRunStatus; - - /// <summary> - /// Gets or sets the pie job run status. - /// </summary> - public LabeledSeriesCollection PieJobRunStatus - { - get { return _pieJobRunStatus; } - set { _pieJobRunStatus = value; RaisePropertyChangedAuto(); } - } - - private LabeledSeriesCollection _pieGradientSolid; - - /// <summary> - /// Gets or sets the pie gradient solid. - /// </summary> - public LabeledSeriesCollection PieGradientSolid - { - get { return _pieGradientSolid; } - set { _pieGradientSolid = value; RaisePropertyChangedAuto(); } - } - - private List<TotalLiquidQuantityModel> _liquidQuantities; - - /// <summary> - /// Gets or sets the liquid quantities. - /// </summary> - public List<TotalLiquidQuantityModel> LiquidQuantities - { - get - { - if (_liquidQuantities == null) - { - _liquidQuantities = new List<TotalLiquidQuantityModel>(); - } - return _liquidQuantities; - } - set - { _liquidQuantities = value; RaisePropertyChangedAuto(); } - } - - private ulong _totalLiquidQuantities; - - /// <summary> - /// Gets or sets the total liquid quantities. - /// </summary> - public ulong TotalLiquidQuantities - { - get { return _totalLiquidQuantities; } - set { _totalLiquidQuantities = value; RaisePropertyChangedAuto(); } - } - - #endregion - - public StatisticsValueCollection() - { - StatisticsCollection = new ObservableCollection<StatisticsValue>(); - ThreadConsumptionPerThread = new List<StatisticsValue>(); - ThreadConsumptionPerThreadCollection = new CompositeCollection(); - - _pieColors = new List<Color>(); - _pieColors.Add(((SolidColorBrush)Application.Current.Resources["RedBrush500"]).Color); - _pieColors.Add(((SolidColorBrush)Application.Current.Resources["OrangeBrush"]).Color); - _pieColors.Add(((SolidColorBrush)Application.Current.Resources["GreenBrush"]).Color); - _pieColors.Add(((SolidColorBrush)Application.Current.Resources["BlueBrush100"]).Color); - _pieColors.Add(Color.FromRgb(255, 216, 76)); - - - PieJobSource = new LabeledSeriesCollection() - { - Title = "PPC/MS", - SeriesColors = _pieColors, - }; - PieJobRunStatus = new LabeledSeriesCollection() - { - Title = "Failed/Aborted/Completed", - SeriesColors = _pieColors, - }; - PieGradientSolid = new LabeledSeriesCollection() - { - Title = "Gradient/Solid", - SeriesColors = _pieColors, - }; - } - - /// <summary> - /// Cleans all values. - /// </summary> - public void Clean() - { - StatisticsCollection.Clear(); - ThreadConsumptionPerThreadCollection.Clear(); - ThreadConsumptionPerThread.Clear(); - PieJobSource.SeriesCollection.Clear(); - PieJobRunStatus.SeriesCollection.Clear(); - PieGradientSolid.SeriesCollection.Clear(); - } - - /// <summary> - /// Adds the statistics value. - /// </summary> - public void AddStatisticsValue(string name, object value, string unit) - { - StatisticsCollection.Add(new StatisticsValue() { Name = name, Value = value, Unit = unit }); - RaisePropertyChanged("StatisticsCollection"); - } - - /// <summary> - /// Creates the thread consumption per thread. - /// </summary> - public void CreateThreadConsumptionPerThread(List<StatisticsValue> threads) - { - ThreadConsumptionPerThreadCollection.Add(new CollectionContainer() { Collection = threads.Take(threads.Count() > 2 ? 2 : threads.Count()) }); - if (threads.Count() > 2) - { - ThreadConsumptionPerThreadCollection.Add(new CollectionContainer() { Collection = new List<MoreValue>() { new MoreValue() { Text = "More threads ..." } } }); - ThreadConsumptionPerThread = threads.Skip(2).ToList(); - } - - RaisePropertyChanged("ThreadConsumptionPerThreadCollection"); - } - - #region GeneratePieChart - Func<ChartPoint, string> labelPoint = chartPoint => - string.Format("{0} ({1:P})", chartPoint.Y, chartPoint.Participation); - - public void GeneratePieJobSource(int PPCCount, int MSCount) - { - var series = new PieSeries() - { - Title = "PPC", - Values = new ChartValues<int>() { PPCCount }, - Fill = new SolidColorBrush(_pieColors[4]), - DataLabels = true, - ToolTip = "", - LabelPoint = labelPoint - - }; - - PieJobSource.SeriesCollection.Add(series); - - series = new PieSeries() - { - Title = "MS", - Values = new ChartValues<int>() { MSCount }, - Fill = new SolidColorBrush(_pieColors[3]), - DataLabels = true, - ToolTip = "", - LabelPoint = labelPoint - }; - PieJobSource.SeriesCollection.Add(series); - RaisePropertyChanged("PieJobSource"); - } - - public void GeneratePieJobRunStatus(int failedCount, int abortedCount, int completedCount) - { - var series = new PieSeries() - { - Title = "Failed", - Values = new ChartValues<int>() { failedCount }, - Fill = new SolidColorBrush(_pieColors[0]), - DataLabels = true, - ToolTip = "", - LabelPoint = labelPoint - }; - - PieJobRunStatus.SeriesCollection.Add(series); - - series = new PieSeries() - { - Title = "Aborted", - Values = new ChartValues<int>() { abortedCount }, - Fill = new SolidColorBrush(_pieColors[1]), - DataLabels = true, - ToolTip = "", - LabelPoint = labelPoint, - - }; - PieJobRunStatus.SeriesCollection.Add(series); - - series = new PieSeries() - { - Title = "Completed", - Values = new ChartValues<int>() { completedCount }, - Fill = new SolidColorBrush(_pieColors[2]), - DataLabels = true, - ToolTip = "", - LabelPoint = labelPoint - }; - PieJobRunStatus.SeriesCollection.Add(series); - - RaisePropertyChanged("PieJobRunStatus"); - } - - public void GeneratePieGradientSolid(int gradientCount, int solidCount) - { - var series = new PieSeries() - { - Title = "Solid", - Values = new ChartValues<int>() { solidCount }, - Fill = new SolidColorBrush(_pieColors[4]), - DataLabels = true, - ToolTip = "", - LabelPoint = labelPoint - }; - PieGradientSolid.SeriesCollection.Add(series); - - series = new PieSeries() - { - Title = "Gradient", - Values = new ChartValues<int>() { gradientCount }, - Fill = new SolidColorBrush(_pieColors[3]), - DataLabels = true, - ToolTip = "", - LabelPoint = labelPoint - - }; - - PieGradientSolid.SeriesCollection.Add(series); - - - RaisePropertyChanged("PieGradientSolid"); - } - #endregion - - /// <summary> - /// Generates the statistics liquid quantity and TotalLiquidQuantities. - /// </summary> - public void GenerateStatisticsLiquidQuantity(List<TotalLiquidQuantityModel> liquidQuantities) - { - LiquidQuantities = liquidQuantities; - TotalLiquidQuantities = 0; - - foreach (var item in liquidQuantities) - { - TotalLiquidQuantities += (ulong)item.Quantity; - } - } - - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/TotalLiquidQuantityModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/TotalLiquidQuantityModel.cs deleted file mode 100644 index b5e2e9fb7..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/TotalLiquidQuantityModel.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.BL.Enumerations; - -namespace Tango.MachineStudio.Statistics.Models -{ - public class TotalLiquidQuantityModel - { - public LiquidTypes LiquidType { get; set; } - public ulong Quantity { get; set; } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj index 4ce0ea87d..243663c5a 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj @@ -38,9 +38,6 @@ <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll</HintPath> </Reference> - <Reference Include="Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll</HintPath> - </Reference> <Reference Include="LiveCharts, Version=0.9.7.0, Culture=neutral, PublicKeyToken=0bc1f845d1ebb8df, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\LiveCharts.0.9.7\lib\net45\LiveCharts.dll</HintPath> </Reference> @@ -76,38 +73,13 @@ <Reference Include="PresentationFramework" /> </ItemGroup> <ItemGroup> - <Compile Include="Converters\CollectionConverter .cs" /> - <Compile Include="Converters\DateTimeToStringFormatConverter.cs" /> - <Compile Include="Converters\JobLengthConverter.cs" /> - <Compile Include="Converters\LiquidQuantityToFormatStringConverter.cs" /> - <Compile Include="Converters\LiquidTypeToColorConverter.cs" /> - <Compile Include="Converters\MidTankLevelToElementHeightConverter.cs" /> - <Compile Include="Converters\NanoLiterToLiterFormatConverter.cs" /> - <Compile Include="Converters\StringToBoolYesNoNullConverter.cs" /> - <Compile Include="Converters\StringToFirstLetterConverter.cs" /> - <Compile Include="Converters\TooltipLiquidQuantityFormatConverter.cs" /> - <Compile Include="Models\ExcelModel.cs" /> - <Compile Include="Models\TotalLiquidQuantityModel.cs" /> - <Compile Include="Models\JobRunModel.cs" /> - <Compile Include="Models\JobRunStatisticsModel.cs" /> <Compile Include="Models\LabeledSeriesCollection.cs" /> - <Compile Include="Models\RmlModel.cs" /> - <Compile Include="Models\StatisticsValueCollection.cs" /> <Compile Include="Tooltips\PieChartTooltipControl.xaml.cs"> <DependentUpon>PieChartTooltipControl.xaml</DependentUpon> </Compile> <Compile Include="StatisticsModule.cs" /> - <Compile Include="ValidationRules\DateExpiredRule.cs" /> <Compile Include="ViewModelLocator.cs" /> - <Compile Include="ViewModels\ChartsViewVM.cs" /> - <Compile Include="ViewModels\JobRunsViewVM.cs" /> <Compile Include="ViewModels\MainViewVM.cs" /> - <Compile Include="Views\ChartsView.xaml.cs"> - <DependentUpon>ChartsView.xaml</DependentUpon> - </Compile> - <Compile Include="Views\JobRunsView.xaml.cs"> - <DependentUpon>JobRunsView.xaml</DependentUpon> - </Compile> <Compile Include="Views\MainView.xaml.cs"> <DependentUpon>MainView.xaml</DependentUpon> </Compile> @@ -122,14 +94,6 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="Views\ChartsView.xaml"> - <SubType>Designer</SubType> - <Generator>MSBuild:Compile</Generator> - </Page> - <Page Include="Views\JobRunsView.xaml"> - <SubType>Designer</SubType> - <Generator>MSBuild:Compile</Generator> - </Page> <Page Include="Views\MainView.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -164,10 +128,6 @@ <Resource Include="Images\statistics.png" /> </ItemGroup> <ItemGroup> - <ProjectReference Include="..\..\..\SideChains\Tango.AutoComplete\Tango.AutoComplete.csproj"> - <Project>{bb2abb74-ba58-4812-83aa-ec8171f42df4}</Project> - <Name>Tango.AutoComplete</Name> - </ProjectReference> <ProjectReference Include="..\..\..\Tango.BL\Tango.BL.csproj"> <Project>{f441feee-322a-4943-b566-110e12fd3b72}</Project> <Name>Tango.BL</Name> @@ -176,18 +136,10 @@ <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project> <Name>Tango.Core</Name> </ProjectReference> - <ProjectReference Include="..\..\..\Tango.CSV\Tango.CSV.csproj"> - <Project>{58e8825f-0c96-449c-b320-1e82b0aa876b}</Project> - <Name>Tango.CSV</Name> - </ProjectReference> <ProjectReference Include="..\..\..\Tango.Logging\Tango.Logging.csproj"> <Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project> <Name>Tango.Logging</Name> </ProjectReference> - <ProjectReference Include="..\..\..\Tango.PMR\Tango.PMR.csproj"> - <Project>{e4927038-348d-4295-aaf4-861c58cb3943}</Project> - <Name>Tango.PMR</Name> - </ProjectReference> <ProjectReference Include="..\..\..\Tango.Serialization\Tango.Serialization.csproj"> <Project>{22f87980-e990-4686-be81-be63d562c4d5}</Project> <Name>Tango.Serialization</Name> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tooltips/PieChartTooltipControl.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tooltips/PieChartTooltipControl.xaml index b03f02249..07f1308ec 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tooltips/PieChartTooltipControl.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tooltips/PieChartTooltipControl.xaml @@ -7,7 +7,7 @@ mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"> <Grid> - <Border Padding="10" Background="{StaticResource TransparentBackgroundBrush450}" CornerRadius="5" BorderThickness="1" BorderBrush="{StaticResource borderBrush}" MaxWidth="400"> + <Border Padding="10" Background="White" CornerRadius="5" BorderThickness="1" BorderBrush="Silver" MaxWidth="400"> <TextBlock Text="{Binding Title}" TextWrapping="Wrap"></TextBlock> </Border> </Grid> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ValidationRules/DateExpiredRule.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ValidationRules/DateExpiredRule.cs deleted file mode 100644 index 98b90f855..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ValidationRules/DateExpiredRule.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Controls; - - -namespace Tango.MachineStudio.Statistics.ValidationRules -{ - public class DateExpiredRule : ValidationRule - { - public override ValidationResult Validate(object value, CultureInfo cultureInfo) - { - DateTime orderDate = (DateTime)value; - - return new ValidationResult(orderDate < DateTime.Now, "Please enter a date until today."); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/ChartsViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/ChartsViewVM.cs deleted file mode 100644 index a98257086..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/ChartsViewVM.cs +++ /dev/null @@ -1,364 +0,0 @@ -using LiveCharts; -using LiveCharts.Wpf; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Windows.Media; -using Tango.BL.Enumerations; -using Tango.MachineStudio.Common; -using Tango.MachineStudio.Statistics.Models; -using Tango.BL.Entities; -using Tango.SharedUI; -using Tango.BL; -using Tango.MachineStudio.Common.Notifications; -using System.Threading.Tasks; -using Tango.Core.Commands; - -namespace Tango.MachineStudio.Statistics.ViewModels -{ - public class ChartsViewVM : ViewModel - { - private INotificationProvider _notification; - //private ObservablesContext _context; - private List<JobRunStatisticsModel> _job_runs; - private bool _loaded; - - #region Properties - private LabeledSeriesCollection _timelineJobStatusSeries; - public LabeledSeriesCollection TimelineJobStatusSeries - { - get { return _timelineJobStatusSeries; } - set { _timelineJobStatusSeries = value; RaisePropertyChangedAuto(); } - } - - private LabeledSeriesCollection _pieJobFailedReasons; - public LabeledSeriesCollection PieJobFailedReasons - { - get { return _pieJobFailedReasons; } - set { _pieJobFailedReasons = value; RaisePropertyChangedAuto(); } - } - - private LabeledSeriesCollection _printPerWeekSeries; - public LabeledSeriesCollection PrintPerWeekSeries - { - get { return _printPerWeekSeries; } - set { _printPerWeekSeries = value; RaisePropertyChangedAuto(); } - } - - private DateTime _startDate; - public DateTime StartDate - { - get { return _startDate; } - set { _startDate = value; RaisePropertyChangedAuto(); RaisePropertyChanged("EndDate"); } - } - - private DateTime _endDate; - public DateTime EndDate - { - get { return _endDate; } - set { _endDate = value; RaisePropertyChangedAuto(); RaisePropertyChanged("StartDate"); } - } - - public RelayCommand LoadJobRunsCommand { get; set; } - #endregion - - public ChartsViewVM(INotificationProvider notificationProvider) - { - _notification = notificationProvider; - StartDate = DateTime.Now.AddMonths(-1); - EndDate = DateTime.Now; - LoadJobRunsCommand = new RelayCommand(async () => await LoadJobRuns(), () => IsFree); - } - - #region Generate Charts - - private async Task LoadJobRuns() - { - using (_notification.PushTaskItem("Loading statistics...")) - { - try - { - IsFree = false; - - await Task.Factory.StartNew(() => - { - using (var db = ObservablesContext.CreateDefault()) - { - DateTime startUtc = new DateTime(StartDate.Year, StartDate.Month, StartDate.Day, 0, 0, 0).ToUniversalTime(); - TimeSpan offsetTime = (EndDate.Date == DateTime.Now.Date) ? DateTime.Now.TimeOfDay : new TimeSpan(23, 59, 59); - DateTime endUtc = EndDate.ToUniversalTime() + offsetTime; - - _job_runs = db.JobRuns.Where(x => (x.StartDate <= endUtc && x.StartDate >= startUtc)).OrderBy(x => x.StartDate).ToList().Select(x => new JobRunStatisticsModel(x)).ToList(); - - foreach (var run in _job_runs) - { - run.LoadMachine(db).GetAwaiter().GetResult(); - } - } - }); - - InvokeUIOnIdle(() => - { - if (_loaded) - { - OnDateRangeChanged(); - } - }); - - _loaded = true; - } - catch (Exception ex) - { - LogManager.Log(ex, "Error loading statistics."); - } - finally - { - IsFree = true; - } - } - } - - - private List<JobRunStatisticsModel> GetJobRunsByDateRange(DateTime startDate, DateTime endTime, JobRunStatus? status = null) - { - return _job_runs.Where(x => x.StartDate.ToLocalTime() >= startDate && x.StartDate.ToLocalTime() <= endTime && (status == null || x.JobRunStatus == status)).ToList(); - } - - private List<JobRunStatisticsModel> GetJobRunsByDate(DateTime date, JobRunStatus? status = null) - { - return _job_runs.Where(x => x.StartDate.ToLocalTime().Date == date.Date && (status == null || x.JobRunStatus == status)).ToList(); - } - - private IEnumerable<DateTime> CreateDates(DateTime start, DateTime end) - { - for (DateTime date = start.Date; date.Date <= end.Date; date = date.AddDays(1)) - { - yield return date; - } - } - - private void GenerateTimelineJobStatusChart() - { - TimelineJobStatusSeries = new LabeledSeriesCollection() - { - Title = "Job Runs Status", - ChartTitle = "Number Of Runs", - LabelsTitle = "Date", - SeriesColors = new List<Color>() - { - Colors.Green, - Colors.Orange, - Colors.Red, - }, - }; - - Series completed_job_runs = new ColumnSeries() - { - Title = "Completed", - Values = new ChartValues<int>(), - Fill = Brushes.Green, - MinWidth = 1, - - }; - Series aborted_job_runs = new ColumnSeries() - { - Title = "Aborted", - Values = new ChartValues<int>(), - Fill = Brushes.Orange, - MinWidth = 1, - }; - Series failed_job_runs = new ColumnSeries() - { - Title = "Failed", - Values = new ChartValues<int>(), - Fill = Brushes.Red, - MinWidth = 1, - }; - - if (EndDate - StartDate > TimeSpan.FromDays(40)) - { - completed_job_runs = new LineSeries() - { - Title = "Completed", - Values = new ChartValues<int>(), - Fill = new SolidColorBrush(Colors.Green) { Opacity = 0.5 }, - MinWidth = 1, - PointGeometry = null, - StrokeThickness = 0, - - }; - aborted_job_runs = new LineSeries() - { - Title = "Aborted", - Values = new ChartValues<int>(), - Fill = new SolidColorBrush(Colors.Orange) { Opacity = 0.5 }, - MinWidth = 1, - PointGeometry = null, - StrokeThickness = 0, - }; - failed_job_runs = new LineSeries() - { - Title = "Failed", - Values = new ChartValues<int>(), - Fill = new SolidColorBrush(Colors.Red) { Opacity = 0.5 }, - MinWidth = 1, - PointGeometry = null, - StrokeThickness = 0, - }; - } - - foreach (var date in CreateDates(StartDate, EndDate)) - { - completed_job_runs.Values.Add(GetJobRunsByDate(date, JobRunStatus.Completed).Count()); - aborted_job_runs.Values.Add(GetJobRunsByDate(date, JobRunStatus.Aborted).Count()); - failed_job_runs.Values.Add(GetJobRunsByDate(date, JobRunStatus.Failed).Count()); - - TimelineJobStatusSeries.Labels.Add(date.ToShortDateString()); - } - - - - TimelineJobStatusSeries.SeriesCollection.Add(failed_job_runs); - TimelineJobStatusSeries.SeriesCollection.Add(aborted_job_runs); - TimelineJobStatusSeries.SeriesCollection.Add(completed_job_runs); - } - - private void GeneratePieFailedReasonsChart() - { - var groups = GetJobRunsByDateRange(StartDate, EndDate, JobRunStatus.Failed).GroupBy(x => x.FailedMessage).OrderBy(x => x.Count()); - - List<Color> colors = new List<Color>(); - - int max = groups.Count() > 0 ? groups.Max(x => x.Count()) : 0; - - for (int i = 0; i < groups.Count(); i++) - { - int count = groups.ElementAt(i).Count(); - double alpha = Math.Max(((double)(count) / max * 200), 20); - colors.Add(Color.FromArgb((byte)alpha, 200, 0, 0)); - } - - PieJobFailedReasons = new LabeledSeriesCollection() - { - Title = "Job Failure Reasons", - SeriesColors = colors, - }; - - int index = 0; - - foreach (var group in groups) - { - int count = group.Count(); - - var series = new PieSeries() - { - Title = group.First().FailedMessage, - Values = new ChartValues<int>() { count }, - Fill = new SolidColorBrush(colors[index++]), - DataLabels = true, - ToolTip = group.First().FailedMessage, - }; - - PieJobFailedReasons.SeriesCollection.Add(series); - } - } - - private void GeneratePrintPerWeekChart() - { - List<JobRunStatisticsModel> range_job_runs = GetJobRunsByDateRange(StartDate, EndDate); - - Dictionary<Machine, List<double>> weeks_print_avg = new Dictionary<Machine, List<double>>(); - - //Init machines weeks averages dictionary. - foreach (var machine in range_job_runs.Select(x => x.Machine).OrderBy(x => x.Name).DistinctBy(x => x.Guid)) - { - weeks_print_avg[machine] = new List<double>(); - } - - //Create all available dates - List<DateTime> all_dates = range_job_runs.Select(x => x.StartDate).ToList(); - - //get first Sunday. - DateTime current_sunday = all_dates.FirstOrDefault(x => x.DayOfWeek == DayOfWeek.Sunday); - - if (current_sunday != null && all_dates.Count > 0) - { - //Iterate over each week starting from the earliest Sunday. - while (current_sunday <= all_dates.Last()) - { - var week_job_runs = range_job_runs.Where(x => x.EndPosition > 10 && x.StartDate >= current_sunday && x.StartDate <= current_sunday.AddDays(7)).ToList(); - - foreach (var machine_job_runs in week_job_runs.GroupBy(x => x.Machine)) - { - weeks_print_avg[machine_job_runs.Key].Add(machine_job_runs.Select(x => x.EndPosition).Average()); - } - - current_sunday = current_sunday.AddDays(8); - } - } - - Dictionary<Machine, double> week_print_avg = new Dictionary<Machine, double>(); - - //Init machines week average dictionary. - foreach (var machine in weeks_print_avg) - { - if (machine.Value.Count > 0) - { - week_print_avg[machine.Key] = machine.Value.Average(); - } - } - - //Init chart series - PrintPerWeekSeries = new LabeledSeriesCollection() - { - Title = "Average Printed Thread Per Week (m)", - ChartTitle = "Average Print Per Week (m)", - LabelsTitle = "Date", - SeriesColors = new List<Color>() - { - - }, - }; - - //Init series colors intensity by number of prints. - double max = week_print_avg.Count > 0 ? week_print_avg.Max(x => x.Value) : 0; - foreach (var machine in week_print_avg) - { - double a = (machine.Value / max); - PrintPerWeekSeries.SeriesColors.Add(Color.FromArgb((byte)(255d * (machine.Value / max)), 0, 200, 0)); - } - - //Init columns. - int index = 0; - - foreach (var machine in week_print_avg) - { - var series = new ColumnSeries() - { - Title = machine.Key.Name, - Values = new ChartValues<int>() { (int)machine.Value }, - Fill = new SolidColorBrush(PrintPerWeekSeries.SeriesColors[index++]), - DataLabels = true, - ToolTip = machine.Key.SerialNumber, - }; - - PrintPerWeekSeries.SeriesCollection.Add(series); - } - } - - #endregion - - #region Filter by Date - public void OnDateRangeChanged() - { - if (_job_runs != null)// && _job_runs.Count > 0)// && _loaded) - { - GenerateTimelineJobStatusChart(); - GeneratePieFailedReasonsChart(); - GeneratePrintPerWeekChart(); - } - } - #endregion - - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs deleted file mode 100644 index ae1592d8d..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs +++ /dev/null @@ -1,729 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Data.Entity; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.BL; -using Tango.BL.Builders; -using Tango.BL.Entities; -using Tango.BL.Enumerations; -using Tango.Core.Commands; -using Tango.MachineStudio.Common; -using Tango.MachineStudio.Common.Notifications; -using Tango.MachineStudio.Statistics.Models; -using Tango.SharedUI; -using Tango.SharedUI.Components; -using Tango.AutoComplete.Editors; -using System.Windows.Media; -using LiveCharts.Wpf; -using LiveCharts; -using Tango.BL.ValueObjects; -using System.Diagnostics; -using Microsoft.Win32; -using Tango.CSV; -using System.ComponentModel; - -namespace Tango.MachineStudio.Statistics.ViewModels -{ - public enum HeadCleaningSelectionEnum - { - [Description("Exclude")] - Exclude = 0, - [Description("Include")] - Include = 1, - [Description("Only")] - Only = 2 - }; - - - public class JobRunsViewVM : ViewModel - { - private INotificationProvider _notification; - private List<Machine> _allMachines; - private List<User> _allUsers; - private List<RmlModel> _rmlsModels; - - - - #region Properties - - private ObservableCollection<JobRunModel> _jobRuns; - /// <summary> - /// Gets or sets the job runs. Contains filtered data of JobRunModel. - /// </summary> - public ObservableCollection<JobRunModel> JobRuns - { - get { return _jobRuns; } - set - { - _jobRuns = value; - RaisePropertyChangedAuto(); - } - } - - private JobRunModel _selectedJobRun = null; - /// <summary> - /// Gets or sets the JobRunModel. Binding to selected item of grid items. - /// </summary> - public JobRunModel SelectedJobRun - { - get { return _selectedJobRun; } - set - { - _selectedJobRun = value; - RaisePropertyChangedAuto(); - } - } - - private SelectedObjectCollection<Machine> _selectedMachines; - /// <summary> - /// Gets or sets the selected machines. Contains all available machines and selected machines. Binding to ComboBox Machines. - /// </summary> - public SelectedObjectCollection<Machine> SelectedMachines - { - get { return _selectedMachines; } - set - { - _selectedMachines = value; - RaisePropertyChangedAuto(); - } - } - - private DateTime _startSelectedDate; - /// <summary> - /// Gets or sets the start selected date. - /// </summary> - public DateTime StartSelectedDate - { - get { return _startSelectedDate; } - set { _startSelectedDate = value; - RaisePropertyChangedAuto(); - } - } - - private DateTime _endSelectedDate; - /// <summary> - /// Gets or sets the end selected date. - /// </summary> - public DateTime EndSelectedDate - { - get { return _endSelectedDate; } - set { _endSelectedDate = value; RaisePropertyChangedAuto(); } - } - - protected Double _lengthLowerValue; - /// <summary> - /// Gets or sets the length lower value of Range Slider - /// </summary> - public Double LengthLowerValue - { - get { return _lengthLowerValue; } - set - { - _lengthLowerValue = value; - RaisePropertyChangedAuto(); - } - } - - protected Double _lengthUpperValue; - /// <summary> - /// Gets or sets the length upper value of Range Slider. - /// </summary> - public Double LengthUpperValue - { - get { return _lengthUpperValue; } - set - { - _lengthUpperValue = value; - RaisePropertyChangedAuto(); - } - } - - private SelectedObjectCollection<JobSource> _jobRunSelectedSources; - /// <summary> - /// Gets or sets the job run selected sources. Binding to ComboBox "Source". - /// </summary> - public SelectedObjectCollection<JobSource> JobRunSelectedSources - { - get { return _jobRunSelectedSources; } - set { _jobRunSelectedSources = value; RaisePropertyChangedAuto(); } - } - - private SelectedObjectCollection<JobRunStatus> _jobRunSelectedStatuses; - /// <summary> - /// Gets or sets the job run selected statuses. Binding to ComboBox "Status". - /// </summary> - public SelectedObjectCollection<JobRunStatus> JobRunSelectedStatuses - { - get { return _jobRunSelectedStatuses; } - set { _jobRunSelectedStatuses = value; RaisePropertyChangedAuto(); } - } - - public SelectedObjectCollection<bool> _isGradientSelection; - /// <summary> - /// Gets or sets the is gradient selection. Binding to ComboBox "IsGradient". - /// </summary> - public SelectedObjectCollection<bool> IsGradientSelection - { - get { return _isGradientSelection; } - set - { - _isGradientSelection = value; - RaisePropertyChangedAuto(); - } - } - - private SelectedObjectCollection<RmlModel> _selectedThreads; - /// <summary> - /// Gets or sets the selected threads. Contains all available threads and selected threads. Binding to ComboBox "Thread". - /// </summary> - public SelectedObjectCollection<RmlModel> SelectedThreads - { - get { return _selectedThreads; } - set - { - _selectedThreads = value; - RaisePropertyChangedAuto(); - } - } - - private HeadCleaningSelectionEnum _headCleaningSelected; - - public HeadCleaningSelectionEnum HeadCleaningSelected - { - get { return _headCleaningSelected; } - set - { - _headCleaningSelected = value; - RaisePropertyChangedAuto(); - } - } - - - /// <summary> - /// Gets or sets the JobRuns providers. - /// </summary> - public ISuggestionProvider JobsProvider { get; set; } - - private Job _selectedJob; - /// <summary> - /// Gets or sets the job. - /// </summary> - public Job SelectedJob - { - get { return _selectedJob; } - set - { - _selectedJob = value; - RaisePropertyChangedAuto(); - } - } - - /// <summary> - /// Gets or sets the statistics value collection. Class - container included calculated statistic values. - /// </summary> - public StatisticsValueCollection StatisticsValueCollection { get; set; } - - #endregion - - public RelayCommand LoadJobRunsCommand { get; set; } - - public RelayCommand ExportToExcelCommand { get; set; } - - public JobRunsViewVM(INotificationProvider notificationProvider) - { - _notification = notificationProvider; - JobRuns = new ObservableCollection<JobRunModel>(); - LoadJobRunsCommand = new RelayCommand(async () => await LoadJobRuns(), () => IsFree); - ExportToExcelCommand = new RelayCommand(ExportToExcel, () => IsFree); - LengthUpperValue = 10000.0; - LengthLowerValue = 0.0; - DateTime now = DateTime.Now; - StartSelectedDate = now.AddMonths(-1); - EndSelectedDate = now; - - JobRunSelectedSources = new SelectedObjectCollection<JobSource>(new ObservableCollection<JobSource>() - { - JobSource.Local, - JobSource.Remote - }, new ObservableCollection<JobSource>() - { - JobSource.Local, - JobSource.Remote - }); - JobRunSelectedSources.SelectionChanged -= (x, y) => RaisePropertyChanged(nameof(JobRunSelectedSources)); - JobRunSelectedSources.SelectionChanged += (x, y) => RaisePropertyChanged(nameof(JobRunSelectedSources)); - - JobRunSelectedStatuses = new SelectedObjectCollection<JobRunStatus>(new ObservableCollection<JobRunStatus>() - { - JobRunStatus.Aborted, - JobRunStatus.Completed, - JobRunStatus.Failed, - - }, new ObservableCollection<JobRunStatus>() - { - JobRunStatus.Aborted, - JobRunStatus.Completed, - JobRunStatus.Failed, - - }); - JobRunSelectedStatuses.SelectionChanged -= (x, y) => RaisePropertyChanged(nameof(JobRunSelectedStatuses)); - JobRunSelectedStatuses.SelectionChanged += (x, y) => RaisePropertyChanged(nameof(JobRunSelectedStatuses)); - - IsGradientSelection = new SelectedObjectCollection<bool>(new ObservableCollection<bool> - { - true, - false - }, new ObservableCollection<bool> - { - true, - false - }); - IsGradientSelection.SelectionChanged -= (x, y) => RaisePropertyChanged(nameof(IsGradientSelection)); - IsGradientSelection.SelectionChanged += (x, y) => RaisePropertyChanged(nameof(IsGradientSelection)); - - HeadCleaningSelected = HeadCleaningSelectionEnum.Exclude; - - JobsProvider = new SuggestionProvider((filter) => - { - try - { - if (filter != null) - { - using (ObservablesContext db = ObservablesContext.CreateDefault()) - { - return db.Jobs.Where(x => x.Name != null && x.Name.ToLower().Contains(filter.ToLower())).ToList(); - } - } - else - { - return new List<Job>(); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error loading jobs."); - return null; - } - }); - - StatisticsValueCollection = new StatisticsValueCollection(); - } - - /// <summary> - /// Initializes this instance. Called form main view VM in OnApplicationReady - /// </summary> - public async void Init() - { - using (_notification.PushTaskItem("Loading job runs...")) - { - try - { - IsFree = false; - - using (var db = ObservablesContext.CreateDefault()) - { - _allMachines = await db.Machines.ToListAsync(); - _allUsers = await db.Users.Include(x => x.Contact).ToListAsync(); - _rmlsModels = await db.Rmls.Select(x => new RmlModel() { Name = x.Name, Guid = x.Guid }).ToListAsync(); - SelectedMachines = new SelectedObjectCollection<Machine>(_allMachines.ToObservableCollection(), new ObservableCollection<Machine>()); - SelectedThreads = new SelectedObjectCollection<RmlModel>(_rmlsModels.ToObservableCollection(), new ObservableCollection<RmlModel>()); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error loading job runs."); - } - finally - { - IsFree = true; - } - } - - } - - /// <summary> - /// Loads the job runs by filters. - /// </summary> - private async Task LoadJobRuns() - { - using (_notification.PushTaskItem("Loading job runs...")) - { - try - { - IsFree = false; - - using (var db = ObservablesContext.CreateDefault()) - { - DateTime startUtc = new DateTime(StartSelectedDate.Year, StartSelectedDate.Month, StartSelectedDate.Day, 0, 0, 0).ToUniversalTime(); - TimeSpan offsetTime = (EndSelectedDate.Date == DateTime.Now.Date) ? DateTime.Now.TimeOfDay : new TimeSpan(23, 59, 59); - DateTime endUtc = EndSelectedDate.ToUniversalTime() + offsetTime; - - string jobName = SelectedJob == null ? "" : SelectedJob.Name; - - var db_JobRuns = db.JobRuns.Where(x => (x.StartDate <= endUtc && x.StartDate >= startUtc)) - .Select(x => new - { - x.ID, - x.ActualStartDate, - x.EndDate, - x.EndPosition, - x.GradientResolutionCm, - x.Guid, - x.HeatingStartDate, - x.IsGradient, - x.JobGuid, - x.JobLength, - x.JobName, - x.JobSource, - x.MachineGuid, - x.RmlGuid, - x.StartDate, - x.Status, - x.UploadingStartDate, - x.UserGuid, - x.CyanQuantity, - x.MagentaQuantity, - x.YellowQuantity, - x.BlackQuantity, - x.TransparentQuantity, - x.LubricantQuantity, - x.CleanerQuantity, - x.IsHeadCleaning - }); - var machineIDs = new HashSet<string>(SelectedMachines.SynchedSource.ToList().Select(p => p.Guid)); - if (machineIDs.Count > 0) - { - db_JobRuns = db_JobRuns.Where(x => machineIDs.Contains(x.MachineGuid)); - } - int[] jobRunSourceArr = JobRunSelectedSources.SynchedSource.Select(x => (int)x).ToArray(); - if (jobRunSourceArr.Length > 0) - { - db_JobRuns = db_JobRuns.Where(x => jobRunSourceArr.Contains(x.JobSource)); - } - int[] jobRunStatusArr = JobRunSelectedStatuses.SynchedSource.Select(x => (int)x).ToArray(); - if (jobRunStatusArr.Length > 0) - { - db_JobRuns = db_JobRuns.Where(x => jobRunStatusArr.Contains(x.Status)); - } - bool[] isGradientArr = IsGradientSelection.SynchedSource.Select(x => (bool)x).ToArray(); - if (isGradientArr.Length > 0) - { - db_JobRuns = db_JobRuns.Where(x => isGradientArr.Contains(x.IsGradient)); - } - - if(HeadCleaningSelected != HeadCleaningSelectionEnum.Include) - { - bool isHeadCleaning = HeadCleaningSelected == HeadCleaningSelectionEnum.Only; - db_JobRuns = db_JobRuns.Where(x => isHeadCleaning == x.IsHeadCleaning); - } - - List<String> rmlGuids = SelectedThreads.SynchedSource.Select(y => y.Guid).ToList(); - if (rmlGuids != null && rmlGuids.Count > 0) - { - db_JobRuns = db_JobRuns.Where(x => rmlGuids.Contains(x.RmlGuid)); - } - if (!String.IsNullOrEmpty(jobName)) - { - db_JobRuns = db_JobRuns.Where(x => x.JobName.ToLower().StartsWith(jobName.ToLower())); - } - - var runs_db = await db_JobRuns.ToListAsync(); //Execute actual query. - - - List<JobRun> runs = runs_db.Where(x => (x.JobLength < LengthUpperValue && x.JobLength >= LengthLowerValue)) - .Select(x => new JobRun() - { - ID = x.ID, - ActualStartDate = x.ActualStartDate, - EndDate = x.EndDate, - EndPosition = x.EndPosition, - GradientResolutionCm = x.GradientResolutionCm, - Guid = x.Guid, - HeatingStartDate = x.HeatingStartDate, - IsGradient = x.IsGradient, - JobGuid = x.JobGuid, - JobLength = x.JobLength, - JobName = x.JobName, - JobSource = x.JobSource, - MachineGuid = x.MachineGuid, - RmlGuid = x.RmlGuid, - StartDate = x.StartDate, - Status = x.Status, - UploadingStartDate = x.UploadingStartDate, - UserGuid = x.UserGuid, - CyanQuantity = x.CyanQuantity, - MagentaQuantity = x.MagentaQuantity, - YellowQuantity = x.YellowQuantity, - BlackQuantity = x.BlackQuantity, - TransparentQuantity = x.TransparentQuantity, - LubricantQuantity = x.LubricantQuantity, - CleanerQuantity = x.CleanerQuantity, - IsHeadCleaning = x.IsHeadCleaning - }).ToList(); - - var modelList = runs.Select(x => new JobRunModel() - { - JobRun = x, - Machine = _allMachines.FirstOrDefault(y => y.Guid == x.MachineGuid), - User = _allUsers.SingleOrDefault(y => y.Guid == x.UserGuid), - Rml = _rmlsModels.SingleOrDefault(y => y.Guid == x.RmlGuid), - }).OrderByDescending(x => x.JobRun.StartDate).ToList(); - - modelList.ForEach(x => x.Init()); - JobRuns = modelList.ToObservableCollection(); - GenerateStatistics(); - } - - - } - catch (Exception ex) - { - LogManager.Log(ex, "Error loading job runs."); - } - finally - { - IsFree = true; - } - } - } - - private void ExportToExcel() - { - SaveFileDialog dlg = new SaveFileDialog(); - dlg.Title = "Job Runs Statistic Report"; - dlg.Filter = "CSV Files|*.csv"; - dlg.FileName = $"Statistics_Job_runs"; - dlg.DefaultExt = ".csv"; - if (dlg.ShowDialog().Value) - { - try - { - CsvFile<ExcelModel> csvFile = new CsvFile<ExcelModel>(new CsvDestination(dlg.FileName), new CsvDefinition() - { - Columns = new List<String>() - { - "ID", - "Machine", - "User", - "Job Name", - "Thread", - "Length", - "Source", - "Upload Duration", - "Heating Duration", - "Start Time", - "IsGradient", - "Gradient Resolution", - "Status", - "End Date", - "End Position", - "Cyan", - "Magenta", - "Yellow", - "Black", - "Transparent", - "Lubricant", - "Cleaner" - }, - }); - var selection = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.JobRun.EndDate != null && z.JobRun.ActualStartDate != null); - foreach (var jobRunModel in selection) - { - ExcelModel excel_model = new ExcelModel(); - excel_model.ID = jobRunModel.JobRun.ID.ToString(); - excel_model.Machine = jobRunModel.Machine != null ? jobRunModel.Machine.SerialNumber : ""; - excel_model.User = jobRunModel.User != null ? jobRunModel.User.Contact.FullName: ""; - excel_model.JobName = jobRunModel.JobRun.JobName; - excel_model.Thread = jobRunModel.Rml != null ? jobRunModel.Rml.Name : ""; - excel_model.Length = String.Format("{0:0.##}", jobRunModel.JobRun.JobLength); - excel_model.Source = jobRunModel.JobRun.Source.ToString(); - excel_model.UploadDuration = jobRunModel.UploadDuration != null ? ((TimeSpan)(jobRunModel.UploadDuration)).ToString(@"hh\:mm\:ss") : TimeSpan.FromSeconds(0).ToString(@"hh\:mm\:ss"); - excel_model.HeatingDuration = jobRunModel.HeatingDuration != null ? ((TimeSpan)(jobRunModel.HeatingDuration)).ToString(@"hh\:mm\:ss") : TimeSpan.FromSeconds(0).ToString(@"hh\:mm\:ss"); - excel_model.StartTime = jobRunModel.JobRun.ActualStartDate != null ? ((DateTime)jobRunModel.JobRun.ActualStartDate).ToLocalTime().ToString("MM/dd/yy HH:mm"): ""; - excel_model.IsGradient = jobRunModel.JobRun.IsGradient ? "Yes" : "No"; - excel_model.GR = jobRunModel.JobRun.GradientResolutionCm.ToString(); - excel_model.Status = jobRunModel.JobRun.JobRunStatus.ToString(); - excel_model.EndTime = jobRunModel.JobRun.EndDate != null ? ((DateTime)jobRunModel.JobRun.EndDate).ToLocalTime().ToString("MM/dd/yy HH:mm"): ""; - excel_model.EndPosition = String.Format("{0:0.##}", jobRunModel.JobRun.EndPosition); - excel_model.Cyan = jobRunModel.JobRun.CyanQuantity < 0 ? "" :jobRunModel.JobRun.CyanQuantity.ToString(); - excel_model.Magenta = jobRunModel.JobRun.MagentaQuantity < 0 ? "" : jobRunModel.JobRun.MagentaQuantity.ToString(); - excel_model.Yellow = jobRunModel.JobRun.YellowQuantity < 0 ? "" : jobRunModel.JobRun.YellowQuantity.ToString(); - excel_model.Black = jobRunModel.JobRun.BlackQuantity < 0 ? "" : jobRunModel.JobRun.BlackQuantity.ToString(); - excel_model.Transparent = jobRunModel.JobRun.TransparentQuantity < 0 ? "" : jobRunModel.JobRun.TransparentQuantity.ToString(); - excel_model.Lubricant = jobRunModel.JobRun.LubricantQuantity < 0 ? "" : jobRunModel.JobRun.LubricantQuantity.ToString(); - excel_model.Cleaner = jobRunModel.JobRun.CleanerQuantity < 0 ? "" : jobRunModel.JobRun.CleanerQuantity.ToString(); - csvFile.Append(excel_model); - - } - - csvFile.Dispose(); - _notification.ShowInfo("Report generated successfully."); - } - catch (Exception ex) - { - LogManager.Log(ex, "Error generating Statistics Job Runs report."); - _notification.ShowError($"Error generating Statistics Job Runs report..\n{ex.Message}"); - } - } - } - #region GenerateS_StatisticsValueCollection - - /// <summary> - /// Generates the statistics. - /// </summary> - protected void GenerateStatistics() - { - StatisticsValueCollection.Clean(); - if (JobRuns.Count() == 0) - return; - GenerateTotalRunsCount(); - GenerateTotalRunsLength(); - GenerateTotalThreadConsumption(); - GenerateRunsDuration(); - GenerateAverageUploadDuration(); - GenerateAverageHeatingDuration(); - - GeneratePieCharts(); - CreateThreadConsumptionPerThread(); - GenerateAllLiquidQuantities(); - } - - protected void GenerateTotalRunsCount() - {//Total Runs: - int val = JobRuns.Count(); - StatisticsValueCollection.AddStatisticsValue("Total Runs ", val, " "); - } - - /// <summary> - /// Generates the total length of the job runs. - /// </summary> - protected void GenerateTotalRunsLength() - { - double val = JobRuns.Where(z => z.JobRun.EndPosition > 0).Sum(x => x.JobRun.JobLength); - StatisticsValueCollection.AddStatisticsValue("Total Runs Length", val, " m"); - } - - /// <summary> - /// Generates the duration and average of the job runs. - /// </summary> - protected void GenerateRunsDuration() - { - var selection = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.JobRun.EndDate != null && z.JobRun.ActualStartDate != null); - double val = 0d; - double average = 0d; - if (selection != null && selection.Count<JobRunModel>() > 0) - { - val = selection.Sum(x => (x.JobRun.EndDate - x.JobRun.ActualStartDate).Value.TotalHours); - average = selection.Average(x => (x.JobRun.EndDate - x.JobRun.ActualStartDate).Value.TotalMilliseconds); - } - StatisticsValueCollection.AddStatisticsValue("Total Dyeing Time", val, " hours"); - StatisticsValueCollection.AddStatisticsValue("Average Dyeing Time", Math.Max(TimeSpan.FromMilliseconds(average).TotalHours, 0), " hours"); - } - - /// <summary> - /// Generates the average upload duration of the job runs. - /// </summary> - protected void GenerateAverageUploadDuration() - { - var average = (long)JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.UploadDuration != null).Average(x => x.UploadDuration.Value.TotalMilliseconds); - StatisticsValueCollection.AddStatisticsValue("Average Upload Duration", Math.Max(TimeSpan.FromMilliseconds(average).TotalMinutes, 0), " minutes"); - } - - /// <summary> - /// Generates the average duration heating of the job runs. - /// </summary> - protected void GenerateAverageHeatingDuration() - { - var average = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.HeatingDuration != null && z.HeatingDuration.Value.Ticks > 0).Average(x => x.HeatingDuration.Value.TotalMilliseconds); - StatisticsValueCollection.AddStatisticsValue("Average Heating Duration", Math.Max(TimeSpan.FromMilliseconds(average).TotalMinutes, 0), " minutes"); - } - - /// <summary> - /// Generates the total thread consumption by EndPosition. - /// </summary> - protected void GenerateTotalThreadConsumption() - { - double val = JobRuns.Where(z => z.JobRun.EndPosition > 0).Sum(x => x.JobRun.EndPosition); - StatisticsValueCollection.AddStatisticsValue("Total Dyeing Length", val, " m"); - } - - /// <summary> - /// Generates the pie charts in percentage: JobSource, JobRunStatus, Gradient. - /// </summary> - protected void GeneratePieCharts() - { - int PPCCount = JobRuns.Count(x => x.JobRun.Source == JobSource.Local); - int MSCount = JobRuns.Count(x => x.JobRun.Source == JobSource.Remote); - StatisticsValueCollection.GeneratePieJobSource(PPCCount, MSCount); - - int failedCount = JobRuns.Count(x => x.JobRun.JobRunStatus == JobRunStatus.Failed); - int abortedCount = JobRuns.Count(x => x.JobRun.JobRunStatus == JobRunStatus.Aborted); - int completedCount = JobRuns.Count(x => x.JobRun.JobRunStatus == JobRunStatus.Completed); - StatisticsValueCollection.GeneratePieJobRunStatus(failedCount, abortedCount, completedCount); - - int gradientCount = JobRuns.Count(x => x.JobRun.IsGradient == true); - int solidCount = JobRuns.Count(x => x.JobRun.IsGradient == false); - StatisticsValueCollection.GeneratePieGradientSolid(gradientCount, solidCount); - - } - - /// <summary> - /// Creates the thread consumption per thread. - /// </summary> - protected void CreateThreadConsumptionPerThread() - { - var temp = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.Rml != null).GroupBy(x => x.Rml.Name); - List<StatisticsValue> result = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.Rml != null && !String.IsNullOrEmpty(z.Rml.Name)).GroupBy(x => x.Rml.Name).Select(y => new StatisticsValue { Name = y.Key, Value = y.Sum(x => x.JobRun.EndPosition), Unit = "m" }).ToList(); - StatisticsValueCollection.CreateThreadConsumptionPerThread(result); - } - - /// <summary> - /// Generates all liquid quantities. - /// </summary> - protected void GenerateAllLiquidQuantities() - { - var runs = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.JobRun.LiquidQuantitiesFast.Count > 0).ToList(); - - Dictionary<LiquidTypes, ulong> total_quantities = new Dictionary<LiquidTypes, ulong>(); - - foreach (LiquidTypes ltype in (LiquidTypes[])Enum.GetValues(typeof(LiquidTypes))) - { - total_quantities[ltype] = 0; - } - - foreach (var run in runs) - { - foreach (var lq in run.JobRun.LiquidQuantitiesFast) - { - if (lq.Quantity < 0) - { - Debug.WriteLine($"Warning: JobRun '{run.JobRun.ID}' contains an invalid value '{lq.Quantity}' for {lq.LiquidType} quantity."); - } - - total_quantities[lq.LiquidType] += Convert.ToUInt64(Math.Max(lq.Quantity, 0)); - } - } - - List<TotalLiquidQuantityModel> allLiquidQuantities = total_quantities.Select(x => new TotalLiquidQuantityModel() - { - LiquidType = x.Key, - Quantity = x.Value - }).ToList(); - - - //foreach (LiquidTypes ltype in (LiquidTypes[])Enum.GetValues(typeof(LiquidTypes))) - //{ - // var liquidQuantityByTypeList = db_liquidQuantities.Select(x => x.FirstOrDefault(y => y.LiquidType == ltype)).Where(x => x != null); - // var count = liquidQuantityByTypeList != null ? liquidQuantityByTypeList.Sum(x => x.Quantity) : 0; - // JobRunLiquidQuantity lq = new JobRunLiquidQuantity() { LiquidType = ltype, Quantity = count }; - // allLiquidQuantities.Add(lq); - //} - StatisticsValueCollection.GenerateStatisticsLiquidQuantity(allLiquidQuantities); - } - #endregion - - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/MainViewVM.cs index e7e2013c5..ef9561d0b 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/MainViewVM.cs @@ -7,49 +7,360 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Media; using Tango.BL; +using Tango.BL.Entities; using Tango.BL.Enumerations; using Tango.Core.Helpers; using Tango.MachineStudio.Common; using Tango.MachineStudio.Statistics.Models; using System.Data.Entity; using Tango.MachineStudio.Common.Notifications; -using Tango.BL.Entities; namespace Tango.MachineStudio.Statistics.ViewModels { public class MainViewVM : StudioViewModel { + private ObservablesContext _context; + private List<JobRun> _job_runs; + private bool rendered; private INotificationProvider _notification; + private bool _loaded; + + private LabeledSeriesCollection _timelineJobStatusSeries; + public LabeledSeriesCollection TimelineJobStatusSeries + { + get { return _timelineJobStatusSeries; } + set { _timelineJobStatusSeries = value; RaisePropertyChangedAuto(); } + } + + private LabeledSeriesCollection _pieJobFailedReasons; + public LabeledSeriesCollection PieJobFailedReasons + { + get { return _pieJobFailedReasons; } + set { _pieJobFailedReasons = value; RaisePropertyChangedAuto(); } + } + + private LabeledSeriesCollection _printPerWeekSeries; + public LabeledSeriesCollection PrintPerWeekSeries + { + get { return _printPerWeekSeries; } + set { _printPerWeekSeries = value; RaisePropertyChangedAuto(); } + } - private ChartsViewVM _chartsViewVM; - public ChartsViewVM ChartsViewVM + private DateTime _startDate; + public DateTime StartDate { - get { return _chartsViewVM; } - set { _chartsViewVM = value; RaisePropertyChangedAuto(); } + get { return _startDate; } + set { _startDate = value; RaisePropertyChangedAuto(); OnDateRangeChanged(); } } - private JobRunsViewVM _jobRunsViewVM; - public JobRunsViewVM JobRunsViewVM + private DateTime _endDate; + public DateTime EndDate { - get { return _jobRunsViewVM; } - set { _jobRunsViewVM = value; RaisePropertyChangedAuto(); } + get { return _endDate; } + set { _endDate = value; RaisePropertyChangedAuto(); OnDateRangeChanged(); } } - + + private DateTime _minDate; + public DateTime MinDate + { + get { return _minDate; } + set { _minDate = value; RaisePropertyChangedAuto(); } + } + + private DateTime _maxDate; + public DateTime MaxDate + { + get { return _maxDate; } + set { _maxDate = value; RaisePropertyChangedAuto(); } + } + + public MainViewVM(INotificationProvider notificationProvider) { _notification = notificationProvider; - ChartsViewVM = new ChartsViewVM(_notification); - JobRunsViewVM = new JobRunsViewVM(_notification); + + StartDate = DateTime.Now.AddMonths(-1); + EndDate = DateTime.Now; } public override void OnApplicationReady() { - JobRunsViewVM.Init(); + } - public override void OnNavigatedTo() + private List<JobRun> GetJobRunsByDateRange(DateTime startDate, DateTime endTime, JobRunStatus? status = null) + { + return _job_runs.Where(x => x.StartDate.ToLocalTime() >= startDate && x.StartDate.ToLocalTime() <= endTime && (status == null || x.JobRunStatus == status)).ToList(); + } + + private List<JobRun> GetJobRunsByDate(DateTime date, JobRunStatus? status = null) + { + return _job_runs.Where(x => x.StartDate.ToLocalTime().Date == date.Date && (status == null || x.JobRunStatus == status)).ToList(); + } + + private IEnumerable<DateTime> CreateDates(DateTime start, DateTime end) + { + for (DateTime date = start.Date; date.Date <= end.Date; date = date.AddDays(1)) + { + yield return date; + } + } + + + + public override async void OnNavigatedTo() { base.OnNavigatedTo(); + + if (rendered) return; + + rendered = true; + + + using (_notification.PushTaskItem("Loading statistics...")) + { + IsFree = false; + + await Task.Factory.StartNew(() => + { + _context = ObservablesContext.CreateDefault(); + _job_runs = _context.JobRuns.Include(x => x.Job).Include(x => x.Job.Machine).OrderBy(x => x.StartDate).ToList(); + }); + + if (_job_runs.Count > 0) + { + MinDate = _job_runs.Min(x => x.StartDate); + MaxDate = _job_runs.Max(x => x.StartDate); + } + + InvokeUIOnIdle(() => + { + OnDateRangeChanged(); + }); + + _loaded = true; + + IsFree = true; + } + } + + private void OnDateRangeChanged() + { + if (_job_runs != null && _job_runs.Count > 0 && _loaded) + { + GenerateTimelineJobStatusChart(); + GeneratePieFailedReasonsChart(); + GeneratePrintPerWeekChart(); + } + } + + private void GenerateTimelineJobStatusChart() + { + TimelineJobStatusSeries = new LabeledSeriesCollection() + { + Title = "Job Runs Status", + ChartTitle = "Number Of Runs", + LabelsTitle = "Date", + SeriesColors = new List<Color>() + { + Colors.Green, + Colors.Orange, + Colors.Red, + }, + }; + + Series completed_job_runs = new ColumnSeries() + { + Title = "Completed", + Values = new ChartValues<int>(), + Fill = Brushes.Green, + MinWidth = 1, + + }; + Series aborted_job_runs = new ColumnSeries() + { + Title = "Aborted", + Values = new ChartValues<int>(), + Fill = Brushes.Orange, + MinWidth = 1, + }; + Series failed_job_runs = new ColumnSeries() + { + Title = "Failed", + Values = new ChartValues<int>(), + Fill = Brushes.Red, + MinWidth = 1, + }; + + if (EndDate - StartDate > TimeSpan.FromDays(40)) + { + completed_job_runs = new LineSeries() + { + Title = "Completed", + Values = new ChartValues<int>(), + Fill = new SolidColorBrush(Colors.Green) { Opacity = 0.5 }, + MinWidth = 1, + PointGeometry = null, + StrokeThickness = 0, + + }; + aborted_job_runs = new LineSeries() + { + Title = "Aborted", + Values = new ChartValues<int>(), + Fill = new SolidColorBrush(Colors.Orange) { Opacity = 0.5 }, + MinWidth = 1, + PointGeometry = null, + StrokeThickness = 0, + }; + failed_job_runs = new LineSeries() + { + Title = "Failed", + Values = new ChartValues<int>(), + Fill = new SolidColorBrush(Colors.Red) { Opacity = 0.5 }, + MinWidth = 1, + PointGeometry = null, + StrokeThickness = 0, + }; + } + + foreach (var date in CreateDates(StartDate, EndDate)) + { + completed_job_runs.Values.Add(GetJobRunsByDate(date, JobRunStatus.Completed).Count()); + aborted_job_runs.Values.Add(GetJobRunsByDate(date, JobRunStatus.Aborted).Count()); + failed_job_runs.Values.Add(GetJobRunsByDate(date, JobRunStatus.Failed).Count()); + + TimelineJobStatusSeries.Labels.Add(date.ToShortDateString()); + } + + + + TimelineJobStatusSeries.SeriesCollection.Add(failed_job_runs); + TimelineJobStatusSeries.SeriesCollection.Add(aborted_job_runs); + TimelineJobStatusSeries.SeriesCollection.Add(completed_job_runs); + } + + private void GeneratePieFailedReasonsChart() + { + var groups = GetJobRunsByDateRange(StartDate, EndDate, JobRunStatus.Failed).GroupBy(x => x.FailedMessage).OrderBy(x => x.Count()); + + List<Color> colors = new List<Color>(); + + int max = groups.Count() > 0 ? groups.Max(x => x.Count()) : 0; + + for (int i = 0; i < groups.Count(); i++) + { + int count = groups.ElementAt(i).Count(); + double alpha = Math.Max(((double)(count) / max * 200), 20); + colors.Add(Color.FromArgb((byte)alpha, 200, 0, 0)); + } + + PieJobFailedReasons = new LabeledSeriesCollection() + { + Title = "Job Failure Reasons", + SeriesColors = colors, + }; + + int index = 0; + + foreach (var group in groups) + { + int count = group.Count(); + + var series = new PieSeries() + { + Title = group.First().FailedMessage, + Values = new ChartValues<int>() { count }, + Fill = new SolidColorBrush(colors[index++]), + DataLabels = true, + ToolTip = group.First().FailedMessage, + }; + + PieJobFailedReasons.SeriesCollection.Add(series); + } + } + + private void GeneratePrintPerWeekChart() + { + List<JobRun> range_job_runs = GetJobRunsByDateRange(StartDate, EndDate); + + Dictionary<Machine, List<double>> weeks_print_avg = new Dictionary<Machine, List<double>>(); + + //Init machines weeks averages dictionary. + foreach (var machine in range_job_runs.Select(x => x.Job.Machine).OrderBy(x => x.Name).DistinctBy(x => x.Guid)) + { + weeks_print_avg[machine] = new List<double>(); + } + + //Create all available dates + List<DateTime> all_dates = range_job_runs.Select(x => x.StartDate).ToList(); + + //get first Sunday. + DateTime current_sunday = all_dates.FirstOrDefault(x => x.DayOfWeek == DayOfWeek.Sunday); + + if (current_sunday != null && all_dates.Count > 0) + { + //Iterate over each week starting from the earliest Sunday. + while (current_sunday <= all_dates.Last()) + { + var week_job_runs = range_job_runs.Where(x => x.EndPosition > 10 && x.StartDate >= current_sunday && x.StartDate <= current_sunday.AddDays(7)).ToList(); + + foreach (var machine_job_runs in week_job_runs.GroupBy(x => x.Job.Machine)) + { + weeks_print_avg[machine_job_runs.Key].Add(machine_job_runs.Select(x => x.EndPosition).Average()); + } + + current_sunday = current_sunday.AddDays(8); + } + } + + Dictionary<Machine, double> week_print_avg = new Dictionary<Machine, double>(); + + //Init machines week average dictionary. + foreach (var machine in weeks_print_avg) + { + if (machine.Value.Count > 0) + { + week_print_avg[machine.Key] = machine.Value.Average(); + } + } + + //Init chart series + PrintPerWeekSeries = new LabeledSeriesCollection() + { + Title = "Average Printed Thread Per Week (m)", + ChartTitle = "Average Print Per Week (m)", + LabelsTitle = "Date", + SeriesColors = new List<Color>() + { + + }, + }; + + //Init series colors intensity by number of prints. + double max = week_print_avg.Count > 0 ? week_print_avg.Max(x => x.Value) : 0; + foreach (var machine in week_print_avg) + { + double a = (machine.Value / max); + PrintPerWeekSeries.SeriesColors.Add(Color.FromArgb((byte)(255d * (machine.Value / max)), 0, 200, 0)); + } + + //Init columns. + int index = 0; + + foreach (var machine in week_print_avg) + { + var series = new ColumnSeries() + { + Title = machine.Key.Name, + Values = new ChartValues<int>() { (int)machine.Value }, + Fill = new SolidColorBrush(PrintPerWeekSeries.SeriesColors[index++]), + DataLabels = true, + ToolTip = machine.Key.SerialNumber, + }; + + PrintPerWeekSeries.SeriesCollection.Add(series); + } } } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml deleted file mode 100644 index b76154941..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml +++ /dev/null @@ -1,145 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.Statistics.Views.ChartsView" - 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:vm="clr-namespace:Tango.MachineStudio.Statistics.ViewModels" - xmlns:global="clr-namespace:Tango.MachineStudio.Statistics" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:localrule="clr-namespace:Tango.MachineStudio.Statistics.ValidationRules" - xmlns:local="clr-namespace:Tango.MachineStudio.Statistics.Views" - xmlns:tooltips="clr-namespace:Tango.MachineStudio.Statistics.Tooltips" - xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf" - mc:Ignorable="d" - d:DesignHeight="450" d:DesignWidth="800"> - <Grid IsEnabled="{Binding IsFree}"> - <Grid.RowDefinitions> - <RowDefinition Height="80"/> - <RowDefinition Height="337*"/> - </Grid.RowDefinitions> - - - <StackPanel Margin="60 20 0 0" VerticalAlignment="Center" HorizontalAlignment="Left" Orientation="Horizontal" DockPanel.Dock="Left"> - <StackPanel> - <TextBlock FontSize="10">Start Date:</TextBlock> - <DatePicker x:Name="startdatePicker" SelectedDateChanged="StartDatePicker_SelectedDateChanged" materialDesign:HintAssist.Hint="Pick start date" Width="200" VerticalAlignment="Bottom" FontSize="16"> - <DatePicker.SelectedDate> - <Binding Path="StartDate" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True"> - <Binding.ValidationRules> - <localrule:DateExpiredRule x:Name="StartDateExpiredRule"/> - </Binding.ValidationRules> - </Binding> - </DatePicker.SelectedDate> - </DatePicker> - </StackPanel> - - <StackPanel Margin="40 0 0 0"> - <TextBlock FontSize="10">End Date:</TextBlock> - <DatePicker x:Name="endDatePicker" materialDesign:HintAssist.Hint="Pick end date" Width="200" VerticalAlignment="Bottom" FontSize="16" SelectedDateChanged="EndDatePicker_SelectedDateChanged"> - <DatePicker.SelectedDate> - <Binding Path="EndDate" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True"> - <Binding.ValidationRules> - <localrule:DateExpiredRule x:Name="EndDateExpiredRule"/> - </Binding.ValidationRules> - </Binding> - </DatePicker.SelectedDate> - </DatePicker> - </StackPanel> - <Button Width="100" Margin="60 0 0 0" Command="{Binding LoadJobRunsCommand}" VerticalAlignment="Bottom" HorizontalAlignment="Right" Content="LOAD"> - <Button.Style> - <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"> - <Setter Property="IsEnabled" Value="False"/> - <Style.Triggers> - <MultiDataTrigger> - <MultiDataTrigger.Conditions> - <Condition Binding="{Binding Path=(Validation.HasError), Source={x:Reference startdatePicker}}" Value="False"/> - <Condition Binding="{Binding Path=(Validation.HasError), Source={x:Reference endDatePicker}}" Value="False"/> - </MultiDataTrigger.Conditions> - <Setter Property="IsEnabled" Value="True"/> - </MultiDataTrigger> - </Style.Triggers> - </Style> - </Button.Style> - </Button> - </StackPanel> - - - <UniformGrid Columns="3" Margin="50 20 50 50" Rows="2" Grid.Row="1"> - <Border BorderBrush="{StaticResource Statistics.BorderBrush}" Padding="5" BorderThickness="1" CornerRadius="5" Margin="10"> - <DockPanel> - <TextBlock DockPanel.Dock="Top" FontSize="16" FontWeight="Bold" HorizontalAlignment="Center" Padding="10" Text="{Binding TimelineJobStatusSeries.Title}"></TextBlock> - <lvc:CartesianChart Series="{Binding TimelineJobStatusSeries.SeriesCollection}" LegendLocation="Bottom"> - <lvc:CartesianChart.DataTooltip> - <lvc:DefaultTooltip BulletSize="20" Background="{StaticResource TransparentBackgroundBrush450}" Foreground="{StaticResource Dialog.Foreground}"/> - </lvc:CartesianChart.DataTooltip> - <lvc:CartesianChart.AxisX> - <lvc:Axis Title="{Binding TimelineJobStatusSeries.LabelsTitle}" Labels="{Binding TimelineJobStatusSeries.Labels}" Foreground="{StaticResource DarkGrayBrush200}"> - <lvc:Axis.Separator> - <lvc:Separator Stroke="#A5A5A5" /> - </lvc:Axis.Separator> - </lvc:Axis> - </lvc:CartesianChart.AxisX> - <lvc:CartesianChart.AxisY> - <lvc:Axis Title="{Binding TimelineJobStatusSeries.ChartTitle}" MinValue="0" Foreground="{StaticResource DarkGrayBrush200}" > - <lvc:Axis.Separator> - <lvc:Separator Stroke="#B0B0B0" /> - </lvc:Axis.Separator> - </lvc:Axis> - </lvc:CartesianChart.AxisY> - </lvc:CartesianChart> - </DockPanel> - </Border> - - <Border BorderBrush="{StaticResource Statistics.BorderBrush}" Padding="5" BorderThickness="1" CornerRadius="5" Margin="10"> - <DockPanel> - <TextBlock DockPanel.Dock="Top" FontSize="16" FontWeight="Bold" HorizontalAlignment="Center" Padding="10" Text="{Binding PieJobFailedReasons.Title}"></TextBlock> - <UniformGrid Columns="2"> - <lvc:PieChart DataHover="PieChart_DataHover" Series="{Binding PieJobFailedReasons.SeriesCollection}" LegendLocation="None" Background="Transparent"> - <lvc:PieChart.Resources> - <Style TargetType="lvc:PieSeries"> - <Setter Property="Stroke" Value="#99F9F9F9"></Setter> - <Setter Property="StrokeThickness" Value="2"/> - </Style> - </lvc:PieChart.Resources> - <lvc:PieChart.DataTooltip> - <tooltips:PieChartTooltipControl Visibility="Hidden" /> - </lvc:PieChart.DataTooltip> - </lvc:PieChart> - - <TextBlock x:Name="txtPieTitle" TextWrapping="Wrap"></TextBlock> - </UniformGrid> - </DockPanel> - </Border> - - <Border BorderBrush="{StaticResource Statistics.BorderBrush}" Padding="5" BorderThickness="1" CornerRadius="5" Margin="10"> - <DockPanel> - <TextBlock DockPanel.Dock="Top" FontSize="16" FontWeight="Bold" HorizontalAlignment="Center" Padding="10" Text="{Binding PrintPerWeekSeries.Title}"></TextBlock> - <lvc:CartesianChart Series="{Binding PrintPerWeekSeries.SeriesCollection}" LegendLocation="Bottom" > - <lvc:CartesianChart.Resources> - <Style TargetType="lvc:ColumnSeries"> - <Setter Property="Foreground" Value="{StaticResource DarkGrayBrush200}"></Setter> - </Style> - </lvc:CartesianChart.Resources> - <lvc:CartesianChart.AxisX> - <lvc:Axis Title="{Binding PrintPerWeekSeries.LabelsTitle}" Labels="{Binding PrintPerWeekSeries.Labels}" Foreground="{StaticResource DarkGrayBrush200}"> - <lvc:Axis.Separator> - <lvc:Separator Stroke="#A5A5A5" /> - </lvc:Axis.Separator> - </lvc:Axis> - </lvc:CartesianChart.AxisX> - <lvc:CartesianChart.AxisY> - <lvc:Axis Title="{Binding PrintPerWeekSeries.ChartTitle}" MinValue="0" Foreground="{StaticResource DarkGrayBrush200}" > - <lvc:Axis.Separator> - <lvc:Separator Stroke="#6F6F6F" /> - </lvc:Axis.Separator> - </lvc:Axis> - </lvc:CartesianChart.AxisY> - <lvc:CartesianChart.DataTooltip> - <lvc:DefaultTooltip BulletSize="20" Background="{StaticResource TransparentBackgroundBrush450}" Foreground="{StaticResource Dialog.Foreground}"/> - </lvc:CartesianChart.DataTooltip> - </lvc:CartesianChart> - </DockPanel> - </Border> - </UniformGrid> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml.cs deleted file mode 100644 index bd97ed2bc..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/ChartsView.xaml.cs +++ /dev/null @@ -1,74 +0,0 @@ -using LiveCharts; -using LiveCharts.Wpf; -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.Statistics.Views -{ - /// <summary> - /// Interaction logic for ChartsView.xaml - /// </summary> - public partial class ChartsView : UserControl - { - public ChartsView() - { - InitializeComponent(); - } - private void PieChart_DataHover(object sender, ChartPoint chartPoint) - { - var tooltip = ((chartPoint.ChartView as PieChart).DataTooltip as Tooltips.PieChartTooltipControl).Title; - txtPieTitle.Text = tooltip; - } - private void StartDatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e) - { - DatePicker datePickerObj = sender as DatePicker; - if (datePickerObj != null && datePickerObj.SelectedDate != null && endDatePicker.SelectedDate != null) - { - if (datePickerObj.SelectedDate > endDatePicker.SelectedDate) - { - BindingExpression start_be = datePickerObj.GetBindingExpression(DatePicker.SelectedDateProperty); - ValidationError validationError = new ValidationError(StartDateExpiredRule, start_be); - validationError.ErrorContent = "The start time must be less than or equal to end time."; - Validation.MarkInvalid(start_be, validationError); - } - else if (Validation.GetHasError(endDatePicker)) - { - BindingExpression end_be = endDatePicker.GetBindingExpression(DatePicker.SelectedDateProperty); - Validation.ClearInvalid(end_be); - } - } - } - - private void EndDatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e) - { - DatePicker datePickerObj = sender as DatePicker; - if (datePickerObj.SelectedDate != null && startdatePicker.SelectedDate != null) - { - if (datePickerObj != null && datePickerObj.SelectedDate < startdatePicker.SelectedDate) - { - BindingExpression end_be = datePickerObj.GetBindingExpression(DatePicker.SelectedDateProperty); - ValidationError validationError = new ValidationError(EndDateExpiredRule, end_be); - validationError.ErrorContent = "The end time must be greater than or equal to the start time."; - Validation.MarkInvalid(end_be, validationError); - } - else if (Validation.GetHasError(startdatePicker)) - { - BindingExpression start_be = startdatePicker.GetBindingExpression(DatePicker.SelectedDateProperty); - Validation.ClearInvalid(start_be); - } - } - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml deleted file mode 100644 index bc99c1bfa..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml +++ /dev/null @@ -1,787 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.Statistics.Views.JobRunsView" - 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:sharedConverters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:localConverters="clr-namespace:Tango.MachineStudio.Statistics.Converters" - xmlns:localrule="clr-namespace:Tango.MachineStudio.Statistics.ValidationRules" - xmlns:mahapps="http://metro.mahapps.com/winfx/xaml/controls" - xmlns:autoComplete="clr-namespace:Tango.AutoComplete.Editors;assembly=Tango.AutoComplete" - xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf" - xmlns:tooltips="clr-namespace:Tango.MachineStudio.Statistics.Tooltips" - xmlns:sys="clr-namespace:System;assembly=mscorlib" - xmlns:enumerations="clr-namespace:Tango.BL.Enumerations;assembly=Tango.BL" - xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" - xmlns:local="clr-namespace:Tango.MachineStudio.Statistics.Views" - xmlns:model="clr-namespace:Tango.MachineStudio.Statistics.Models" - xmlns:vs="clr-namespace:Tango.MachineStudio.Statistics.ViewModels" - xmlns:wellknowntypes="clr-namespace:Google.Protobuf.WellKnownTypes;assembly=Google.Protobuf" - mc:Ignorable="d" - d:DesignHeight="450" d:DesignWidth="1800" Foreground="{StaticResource JobFieldForeground}"> - <UserControl.Resources> - <sharedConverters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> - <sharedConverters:BooleanToYesNoConverter x:Key="BooleanToYesNoConverter"/> - <sharedConverters:EnumToDescriptionConverter x:Key="EnumToDescriptionConverter" /> - <localConverters:DateTimeToStringFormatConverter x:Key="DateTimeToStringFormatConverter" /> - <sharedConverters:DateTimeUTCToShortDateTimeConverter x:Key="DateTimeUTCToShortDateTimeConverter"/> - <localConverters:StringToBoolYesNoNullConverter x:Key="StringToBoolYesNoNullConverter"/> - <localConverters:LiquidTypeToColorConverter x:Key="LiquidTypeToColorConverter"/> - <localConverters:CollectionConverter x:Key="CollectionConverter"/> - <localConverters:StringToFirstLetterConverter x:Key="StringToFirstLetterConverter"/> - <localConverters:MidTankLevelToElementHeightConverter x:Key="MidTankLevelToElementHeightConverter"/> - <localConverters:JobLengthConverter x:Key="JobLengthConverter"/> - <localConverters:NanoLiterToLiterFormatConverter x:Key="NanoLiterToLiterFormatConverter"/> - <localConverters:LiquidQuantityToFormatStringConverter x:Key="LiquidQuantityToFormatStringConverter"/> - <localConverters:TooltipLiquidQuantityFormatConverter x:Key="TooltipLiquidQuantityFormatConverter"/> - - <ResourceDictionary x:Key="SelectAllTextBoxResource"> - <Style TargetType="TextBox"> - <EventSetter Event="GotFocus" Handler="TextBox_GotFocus"></EventSetter> - <EventSetter Event="MouseDown" Handler="TextBox_PreviewMouseUp"></EventSetter> - </Style> - </ResourceDictionary> - - <ObjectDataProvider x:Key="HeadCleaning" MethodName="GetValues" ObjectType="{x:Type sys:Enum}"> - <ObjectDataProvider.MethodParameters> - <x:Type TypeName="vs:HeadCleaningSelectionEnum"/> - </ObjectDataProvider.MethodParameters> - </ObjectDataProvider> - - <Style TargetType="{x:Type TextBlock}" x:Key="WrapText"> - <Setter Property="TextWrapping" Value="Wrap"/> - </Style> - - <Style TargetType="lvc:PieSeries"> - <Setter Property="Stroke" Value="#99F9F9F9"></Setter> - <Setter Property="StrokeThickness" Value="2"/> - <Setter Property="Foreground" Value="#FF1C1C1F" /> - </Style> - <Style TargetType="lvc:PieChart"> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="LegendLocation" Value="None"/> - </Style> - - <DataTemplate x:Key="PopUpDataTemplate"> - <CheckBox VerticalAlignment="Center" FontSize="11" DockPanel.Dock="Left" IsChecked="{Binding IsSelected}" Click="CheckBox_StayChecked" Tag="{Binding Path=ItemsSource, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}},Mode=OneWay}"> - <CheckBox.Content> - <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Text="{Binding Data}"></TextBlock> - </CheckBox.Content> - </CheckBox> - </DataTemplate> - - <DataTemplate x:Key="PopupBoolDataTemplate"> - <CheckBox VerticalAlignment="Center" FontSize="11" DockPanel.Dock="Left" IsChecked="{Binding IsSelected}" Click="CheckBox_StayChecked" Tag="{Binding Path=ItemsSource, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}},Mode=OneWay}"> - <CheckBox.Content> - <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Text="{Binding Data, Converter={StaticResource BooleanToYesNoConverter}}"/> - </CheckBox.Content> - </CheckBox> - </DataTemplate> - - - <Style x:Key="{x:Type ToolTip}" TargetType="{x:Type ToolTip}" BasedOn="{StaticResource MaterialDesignToolTip}"> - <Setter Property="Background" Value="{StaticResource Logging.Background}" /> - <Setter Property="Foreground" Value="{StaticResource MainWindow.Foreground}" /> - </Style> - - </UserControl.Resources> - - <Grid IsEnabled="{Binding IsFree}" > - <Grid.ColumnDefinitions> - <ColumnDefinition Width="3*"/> - <ColumnDefinition Width="1*"/> - </Grid.ColumnDefinitions> - <Grid.RowDefinitions> - <RowDefinition Height="Auto"/> - <RowDefinition Height="*"/> - <RowDefinition Height="Auto"/> - </Grid.RowDefinitions> - <Grid Grid.Row="0" Background="{StaticResource WhiteBackgroundBrush}" Width="Auto" Margin="20 0 0 1" > - <Border Padding="14 14 12 14" BorderBrush="DimGray" BorderThickness="0" Background="{StaticResource Logging.Background}" HorizontalAlignment="Stretch" CornerRadius="2" > - <Border.Effect> - <DropShadowEffect ShadowDepth="4" BlurRadius="10" Opacity="0.5"/> - </Border.Effect> - <Grid> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="*"/> - <ColumnDefinition Width="Auto"/> - </Grid.ColumnDefinitions> - - <Grid > - <Grid.RowDefinitions> - <RowDefinition Height="1*"/> - <RowDefinition Height="1*"/> - </Grid.RowDefinitions> - <StackPanel Orientation="Horizontal" Grid.Row="0"> - <StackPanel Margin="10 5 0 0" Orientation="Vertical" HorizontalAlignment="Center"> - <TextBlock Text="Machine:" VerticalAlignment="Center" FontSize="11"></TextBlock> - <ToggleButton Width="140" Margin="0 10 0 0" x:Name="selectMachineButton" HorizontalAlignment="Left" FontSize="16" VerticalAlignment="Center"> - <ToggleButton.Template> - <ControlTemplate> - <Grid> - <Border CornerRadius="3" BorderBrush="{StaticResource borderBrush}" BorderThickness="1" TextElement.Foreground="Black" Height="24"> - <DockPanel> - <Button x:Name="selectMachineButton" Width="18" Padding="0" Height="16" DockPanel.Dock="Right" BorderBrush="{x:Null}" HorizontalAlignment="Left" Click="Button_Click" Style="{StaticResource MaterialDesignFlatButton}" Foreground="{StaticResource MainWindow.Foreground}"> - <materialDesign:PackIcon Width="16" Height="16" Kind="ChevronDown" VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" HorizontalAlignment="Right"/> - </Button> - <TextBlock VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" FontSize="11" Margin="5"> - <TextBlock.Style> - <Style TargetType="{x:Type TextBlock}"> - <Setter Property="Text" Value="{Binding SelectedMachines.SynchedSource.Count, StringFormat={}Selected Machines({0})}"> - </Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding SelectedMachines.SynchedSource.Count}" Value="0"> - <Setter Property="Text" Value="All machines"/> - </DataTrigger> - </Style.Triggers> - </Style> - </TextBlock.Style> - </TextBlock> - </DockPanel> - </Border> - <Popup AllowsTransparency="True" StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }"> - <Border Padding="3" CornerRadius="0 0 3 3" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}" Margin="5" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}" > - <Border.Effect> - <DropShadowEffect Opacity="0.2" /> - </Border.Effect> - <controls:AllSelectedCheckboxList Style="{StaticResource AllSelectedCheckBoxListStyle}" MaxHeight="600" ItemsSource="{Binding SelectedMachines}" Background="{StaticResource ComboBox.Floating.Background}" Foreground="{StaticResource MainWindow.Foreground}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" SelectionMode="Multiple" AllSelected="True" FontSize="11" FontFamily="{StaticResource FontName}"> - <controls:AllSelectedCheckboxList.ItemTemplate> - <DataTemplate > - <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Text="{Binding Data.SerialNumber}" ToolTip="{Binding Data.SerialNumber}" FontFamily="{StaticResource FontName}" Background="{DynamicResource TransparentBackgroundBrush}" FontSize="11"></TextBlock> - - </DataTemplate> - </controls:AllSelectedCheckboxList.ItemTemplate> - </controls:AllSelectedCheckboxList> - </Border> - </Popup> - </Grid> - </ControlTemplate> - </ToggleButton.Template> - </ToggleButton> - </StackPanel> - - <StackPanel Margin="30 10 0 0" HorizontalAlignment="Center"> - <TextBlock FontSize="11">Start Date:</TextBlock> - <DatePicker x:Name="startdatePicker" SelectedDateChanged="StartDatePicker_SelectedDateChanged" Margin="0 5 0 0" materialDesign:HintAssist.Hint="Pick start date" Width="130" VerticalAlignment="Center" FontSize="11" > - <DatePicker.SelectedDate> - <Binding Path="StartSelectedDate" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True"> - <Binding.ValidationRules> - <localrule:DateExpiredRule x:Name="StartDateExpiredRule"/> - </Binding.ValidationRules> - </Binding> - </DatePicker.SelectedDate> - </DatePicker> - </StackPanel> - <StackPanel Margin="30 10 0 0" HorizontalAlignment="Center"> - <TextBlock FontSize="11">End Date:</TextBlock> - <DatePicker x:Name="endDatePicker" Margin="0 5 0 0" materialDesign:HintAssist.Hint="Pick end date" Width="130" VerticalAlignment="Center" FontSize="11" SelectedDateChanged="EndDatePicker_SelectedDateChanged"> - <DatePicker.SelectedDate> - <Binding Path="EndSelectedDate" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True"> - <Binding.ValidationRules> - <localrule:DateExpiredRule x:Name="EndDateExpiredRule"/> - </Binding.ValidationRules> - </Binding> - </DatePicker.SelectedDate> - - </DatePicker> - </StackPanel> - </StackPanel> - - <StackPanel Orientation="Horizontal" Grid.Row="1"> - <StackPanel Margin="10 10 0 0" Orientation="Vertical" HorizontalAlignment="Center"> - <TextBlock Text="Job Name:" VerticalAlignment="Center" FontSize="11"></TextBlock> - <autoComplete:AutoCompleteTextBox Margin="0 10 0 0" Provider="{Binding JobsProvider}" Width="140" FontSize="11" LoadingContent="Loading..." SelectedItem="{Binding SelectedJob,Mode=TwoWay}" materialDesign:HintAssist.Hint="All" DisplayMember="Name" materialDesign:HintAssist.IsFloating="False"> - <autoComplete:AutoCompleteTextBox.ItemTemplate> - <DataTemplate> - <StackPanel> - <TextBlock Text="{Binding Name}" FontWeight="Bold" FontStyle="Italic"></TextBlock> - </StackPanel> - </DataTemplate> - </autoComplete:AutoCompleteTextBox.ItemTemplate> - </autoComplete:AutoCompleteTextBox> - </StackPanel> - <StackPanel Margin="30 10 0 0" Orientation="Vertical" HorizontalAlignment="Center"> - <TextBlock Text="Source:" VerticalAlignment="Center" FontSize="11"></TextBlock> - <ToggleButton Width="130" Height="24" Margin="0 10 0 0" x:Name="selectJobRunSources" HorizontalAlignment="Left" FontSize="16" VerticalAlignment="Center"> - <ToggleButton.Template> - <ControlTemplate> - <Grid> - <Border CornerRadius="3" BorderBrush="{StaticResource borderBrush}" BorderThickness="1" TextElement.Foreground="Black" > - <DockPanel> - <Button x:Name="jobRunSourcesButton" Width="18" Padding="0" Height="16" DockPanel.Dock="Right" BorderBrush="{x:Null}" HorizontalAlignment="Left" Click="JobRunSourcesButton_Click" Style="{StaticResource MaterialDesignFlatButton}" Foreground="{StaticResource MainWindow.Foreground}"> - <materialDesign:PackIcon Width="16" Height="16" Kind="ChevronDown" VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" HorizontalAlignment="Right"/> - </Button> - <TextBlock VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" FontSize="11" Margin="5" Text="{Binding JobRunSelectedSources.SynchedSource, Converter={StaticResource CollectionConverter}}"/> - </DockPanel> - </Border> - <Popup AllowsTransparency="True" StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }"> - <Border Padding="3" CornerRadius="0 0 3 3" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}" Margin="5" Background="{StaticResource TransparentBackgroundBrush200}" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}" > - <Border.Effect> - <DropShadowEffect Opacity="0.2" /> - </Border.Effect> - <ItemsControl ItemsSource="{Binding JobRunSelectedSources}" Foreground="{StaticResource MainWindow.Foreground}" ItemTemplate="{StaticResource PopUpDataTemplate}"/> - - </Border> - </Popup> - </Grid> - </ControlTemplate> - </ToggleButton.Template> - </ToggleButton> - </StackPanel> - <StackPanel Margin="30 10 0 0" Orientation="Vertical" HorizontalAlignment="Center"> - <TextBlock Text="Gradient:" VerticalAlignment="Center" FontSize="11"></TextBlock> - <ToggleButton Height="24" Width="130" Margin="0 10 0 0" x:Name="selectIsGradient" HorizontalAlignment="Left" FontSize="16" VerticalAlignment="Center"> - <ToggleButton.Template> - <ControlTemplate> - <Grid> - <Border CornerRadius="3" BorderBrush="{StaticResource borderBrush}" BorderThickness="1" TextElement.Foreground="Black" > - <DockPanel> - <Button x:Name="isGradientButton" Width="18" Padding="0" Height="16" DockPanel.Dock="Right" BorderBrush="{x:Null}" HorizontalAlignment="Left" Click="IsGradientButton_Click" Style="{StaticResource MaterialDesignFlatButton}" Foreground="{StaticResource MainWindow.Foreground}"> - <materialDesign:PackIcon Width="16" Height="16" Kind="ChevronDown" VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" HorizontalAlignment="Right"/> - </Button> - <TextBlock VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" FontSize="11" Margin="5 0 2 0"> - <Run Text="{Binding IsGradientSelection.SynchedSource, Converter={StaticResource CollectionConverter}, ConverterParameter='No, Yes'}"></Run> - </TextBlock> - </DockPanel> - </Border> - <Popup AllowsTransparency="True" StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }"> - <Border Padding="3" CornerRadius="0 0 3 3" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}" Margin="5" Background="{StaticResource TransparentBackgroundBrush200}" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}"> - <Border.Effect> - <DropShadowEffect Opacity="0.2" /> - </Border.Effect> - <ItemsControl ItemsSource="{Binding IsGradientSelection}" Foreground="{StaticResource MainWindow.Foreground}" ItemTemplate="{StaticResource PopupBoolDataTemplate}"/> - - </Border> - </Popup> - </Grid> - </ControlTemplate> - </ToggleButton.Template> - </ToggleButton> - </StackPanel> - <StackPanel Margin="30 10 0 0" Orientation="Vertical" HorizontalAlignment="Center"> - <TextBlock Text="Length:" VerticalAlignment="Center" FontSize="11"></TextBlock> - <Border BorderThickness="1" CornerRadius="3" BorderBrush="{StaticResource borderBrush}" Margin="0 10 0 0" Height="24" Padding="10 0"> - <StackPanel Orientation="Horizontal"> - <TextBlock Text="{Binding LengthLowerValue, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" FontSize="11" Width="30"></TextBlock> - <mahapps:RangeSlider Focusable="True" Height="40" Margin="5 5 5 5" Minimum="0" Maximum="10000" Width="140" ExtendedMode="True" - LowerValue="{Binding LengthLowerValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" - UpperValue="{Binding LengthUpperValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" - VerticalAlignment="Center" IsSnapToTickEnabled="True" FontSize="8"/> - <TextBlock Text="{Binding LengthUpperValue}" VerticalAlignment="Center" FontSize="11" Width="30"></TextBlock> - </StackPanel> - </Border> - </StackPanel> - <StackPanel Margin="30 10 0 0" Orientation="Vertical" HorizontalAlignment="Center"> - <TextBlock Text="Status:" VerticalAlignment="Center" FontSize="11"></TextBlock> - <ToggleButton Height="24" Width="170" Margin="0 10 0 0" x:Name="selectJobRunStatus" HorizontalAlignment="Left" FontSize="16" VerticalAlignment="Center"> - <ToggleButton.Template> - <ControlTemplate> - <Grid> - <Border CornerRadius="3" BorderBrush="{StaticResource borderBrush}" BorderThickness="1" TextElement.Foreground="Black" > - <DockPanel> - <Button x:Name="jobRunStatusButton" Width="18" Padding="0" Height="16" DockPanel.Dock="Right" BorderBrush="{x:Null}" HorizontalAlignment="Left" Click="JobRunStatusButton_Click" Style="{StaticResource MaterialDesignFlatButton}" Foreground="{StaticResource MainWindow.Foreground}"> - <materialDesign:PackIcon Width="16" Height="16" Kind="ChevronDown" VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" HorizontalAlignment="Right"/> - </Button> - <TextBlock VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" FontSize="11" Margin="5" Text="{Binding JobRunSelectedStatuses.SynchedSource, Converter={StaticResource CollectionConverter}}"/> - </DockPanel> - </Border> - <Popup AllowsTransparency="True" StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }"> - <Border Padding="3" CornerRadius="0 0 3 3" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}" Margin="5" Background="{StaticResource TransparentBackgroundBrush200}" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}" > - <Border.Effect> - <DropShadowEffect Opacity="0.2" /> - </Border.Effect> - <ItemsControl ItemsSource="{Binding JobRunSelectedStatuses}" Foreground="{StaticResource MainWindow.Foreground}" ItemTemplate="{StaticResource PopUpDataTemplate}"/> - </Border> - </Popup> - </Grid> - </ControlTemplate> - </ToggleButton.Template> - </ToggleButton> - </StackPanel> - <StackPanel Margin="30 10 0 0" Orientation="Vertical" HorizontalAlignment="Center"> - <TextBlock Text="Threads:" VerticalAlignment="Center" FontSize="11"></TextBlock> - <ToggleButton Width="100" Margin="0 10 0 0" x:Name="selectThreadsButton" HorizontalAlignment="Left" FontSize="16" VerticalAlignment="Center"> - <ToggleButton.Template> - <ControlTemplate> - <Grid> - <Border CornerRadius="3" BorderBrush="{StaticResource borderBrush}" BorderThickness="1" TextElement.Foreground="Black" Height="24"> - <DockPanel> - <Button x:Name="selectThreadButton" Width="18" Padding="0" Height="16" DockPanel.Dock="Right" BorderBrush="{x:Null}" HorizontalAlignment="Left" Click="SelectMachineButton_Click" Style="{StaticResource MaterialDesignFlatButton}" Foreground="{StaticResource MainWindow.Foreground}"> - <materialDesign:PackIcon Width="16" Height="16" Kind="ChevronDown" VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" HorizontalAlignment="Right"/> - </Button> - <TextBlock VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" FontSize="11" Margin="5" > - <TextBlock.Style> - <Style TargetType="{x:Type TextBlock}"> - <Setter Property="Text" Value="{Binding SelectedThreads.SynchedSource.Count, StringFormat={}Selected Threads({0})}"> - </Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding SelectedThreads.SynchedSource.Count}" Value="0"> - <Setter Property="Text" Value="All threads"/> - </DataTrigger> - </Style.Triggers> - </Style> - </TextBlock.Style> - </TextBlock> - </DockPanel> - </Border> - <Popup AllowsTransparency="True" StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }"> - <Border Padding="3" CornerRadius="0 0 3 3" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}" Margin="5" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}" > - <Border.Effect> - <DropShadowEffect Opacity="0.2" /> - </Border.Effect> - <controls:AllSelectedCheckboxList Style="{StaticResource AllSelectedCheckBoxListStyle}" MaxHeight="600" ItemsSource="{Binding SelectedThreads}" Background="{StaticResource ComboBox.Floating.Background}" Foreground="{StaticResource MainWindow.Foreground}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" SelectionMode="Multiple" AllSelected="True" FontSize="11" FontFamily="{StaticResource FontName}"> - <controls:AllSelectedCheckboxList.ItemTemplate> - <DataTemplate > - <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Text="{Binding Data.Name}" ToolTip="{Binding Data.Name}" FontFamily="{StaticResource FontName}"></TextBlock> - </DataTemplate> - </controls:AllSelectedCheckboxList.ItemTemplate> - </controls:AllSelectedCheckboxList> - </Border> - </Popup> - </Grid> - </ControlTemplate> - </ToggleButton.Template> - </ToggleButton> - </StackPanel> - <StackPanel Margin="30 10 0 0" Orientation="Vertical" HorizontalAlignment="Center"> - <TextBlock Text="HeadCleaning:" VerticalAlignment="Center" FontSize="11"></TextBlock> - <ToggleButton Height="24" Width="120" Margin="0 10 0 0" x:Name="isHeadCleaningToggleButton" HorizontalAlignment="Left" FontSize="16" VerticalAlignment="Center"> - <ToggleButton.Template> - <ControlTemplate> - <Grid> - <Border CornerRadius="3" BorderBrush="{StaticResource borderBrush}" BorderThickness="1" TextElement.Foreground="Black" > - <DockPanel> - <Button x:Name="IsHeadCleaningButton" Width="18" Padding="0" Height="16" DockPanel.Dock="Right" BorderBrush="{x:Null}" HorizontalAlignment="Left" Click="IsHeadCleaningButton_Click" Style="{StaticResource MaterialDesignFlatButton}" Foreground="{StaticResource MainWindow.Foreground}"> - <materialDesign:PackIcon Width="16" Height="16" Kind="ChevronDown" VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" HorizontalAlignment="Right"/> - </Button> - <TextBlock VerticalAlignment="Center" Foreground="{StaticResource MainWindow.Foreground}" FontSize="11" Margin="5 0 2 0" Text="{Binding HeadCleaningSelected, Converter={StaticResource EnumToDescriptionConverter}}"> - - </TextBlock> - </DockPanel> - </Border> - <Popup AllowsTransparency="True" StaysOpen="False" IsOpen="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=IsChecked }"> - <Border Padding="3" CornerRadius="0 0 3 3" MinWidth="{Binding RelativeSource={RelativeSource AncestorType=ToggleButton},Path=Width}" Margin="5" Background="{StaticResource TransparentBackgroundBrush200}" BorderBrush="{StaticResource AutoCompleteTextBox.Popup.BorderBrush}"> - <Border.Effect> - <DropShadowEffect Opacity="0.2" /> - </Border.Effect> - <ListBox x:Name="HeadCleaningListBoxItem" ItemsSource="{Binding Source={StaticResource HeadCleaning}}" Foreground="{StaticResource MainWindow.Foreground}" SelectedItem="{Binding HeadCleaningSelected, Mode=TwoWay}" SelectionMode="Single" > - <ListBox.ItemTemplate> - <DataTemplate> - <CheckBox x:Name="HeadCleaningCheckBox" Selector.IsSelected="True" VerticalAlignment="Center" FontSize="11" DockPanel.Dock="Left" IsChecked="{Binding IsSelected, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, UpdateSourceTrigger=PropertyChanged}" Click="CheckBox_PreventUndoCheck"> - <CheckBox.Content> - <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Text="{Binding Converter={StaticResource EnumToDescriptionConverter}}"/> - </CheckBox.Content> - </CheckBox> - </DataTemplate> - </ListBox.ItemTemplate> - </ListBox> - </Border> - </Popup> - </Grid> - </ControlTemplate> - </ToggleButton.Template> - </ToggleButton> - </StackPanel> - </StackPanel> - </Grid> - <Button Grid.Column="1" HorizontalAlignment="Right" Command="{Binding LoadJobRunsCommand}" Margin="0 0 10 0" Padding="30 15" Height="Auto" VerticalAlignment="Center" Content="ANALYZE"> - <Button.Style> - <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"> - <Setter Property="IsEnabled" Value="False"/> - <Style.Triggers> - <MultiDataTrigger> - <MultiDataTrigger.Conditions> - <Condition Binding="{Binding Path=(Validation.HasError), Source={x:Reference startdatePicker}}" Value="False"/> - <Condition Binding="{Binding Path=(Validation.HasError), Source={x:Reference endDatePicker}}" Value="False"/> - </MultiDataTrigger.Conditions> - <Setter Property="IsEnabled" Value="True"/> - </MultiDataTrigger> - </Style.Triggers> - </Style> - </Button.Style> - </Button> - </Grid> - </Border> - </Grid> - - <DataGrid x:Name="ItemsGrid" GridLinesVisibility="None" Grid.Row="1" Margin="20 0 0 10" SelectionMode="Single" SelectionUnit="FullRow" BorderBrush="{StaticResource borderBrush}" IsReadOnly="True" BorderThickness="1" RowHeight="80" - Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserReorderColumns="False" - CanUserAddRows="False" CanUserDeleteRows="False" ItemsSource="{Binding JobRuns}" HorizontalScrollBarVisibility="Disabled" CanUserResizeColumns="False" CanUserResizeRows="False" - SelectedItem="{Binding SelectedJobRun}" CanUserSortColumns="True" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" FontSize="11"> - - <DataGrid.Resources> - <Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}"> - <Setter Property="HorizontalAlignment" Value="Left"></Setter> - <Setter Property="HorizontalContentAlignment" Value="Left"></Setter> - <Setter Property="Padding" Value="0 8 0 8"></Setter> - <Setter Property="Margin" Value="0 0 0 0"></Setter> - <Setter Property="FontWeight" Value="SemiBold"/> - </Style> - </DataGrid.Resources> - - <DataGrid.CellStyle> - <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="FocusVisualStyle" Value="{x:Null}"/> - <Setter Property="VerticalContentAlignment" Value="Center"></Setter> - <Setter Property="VerticalAlignment" Value="Center"/> - <Setter Property="HorizontalAlignment" Value="Left"/> - <Setter Property="Margin" Value="0 0 10 0"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="{x:Type DataGridCell}"> - <ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> - </ControlTemplate> - </Setter.Value> - </Setter> - <Style.Triggers> - <Trigger Property="IsSelected" Value="True"> - <Setter Property="Background" Value="Transparent"></Setter> - <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" /> - </Trigger> - </Style.Triggers> - </Style> - </DataGrid.CellStyle> - <DataGrid.RowStyle> - <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}"> - <Setter Property="BorderThickness" Value="0 0 0 1"/> - <Setter Property="BorderBrush" Value="LightGray"/> - <Style.Triggers> - <Trigger Property="IsMouseOver" Value="True"> - <Setter Property="Background" Value="Transparent"></Setter> - <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" /> - <Setter Property="Cursor" Value="Hand"></Setter> - </Trigger> - <Trigger Property="IsSelected" Value="True"> - <Setter Property="Background" Value="Transparent"></Setter> - </Trigger> - <Trigger Property="IsFocused" Value="True"> - <Setter Property="Background" Value="Transparent"></Setter> - </Trigger> - </Style.Triggers> - </Style> - </DataGrid.RowStyle> - - <DataGrid.Columns> - <DataGridTemplateColumn Header="" Width="50"> - <DataGridTemplateColumn.CellTemplate> - <DataTemplate> - <materialDesign:PackIcon Width="24" Height="24" Margin="8 -5 0 0"> - <materialDesign:PackIcon.Style> - <Style TargetType="materialDesign:PackIcon"> - <Setter Property="Kind" Value="Check"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding JobRun.JobRunStatus}" Value="Completed"> - <Setter Property="Kind" Value="Check"></Setter> - <Setter Property="Foreground" Value="{StaticResource GreenOpenFileBrush}"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding JobRun.JobRunStatus}" Value="Aborted"> - <Setter Property="Kind" Value="Alert"></Setter> - <Setter Property="Foreground" Value="{StaticResource OrangeBrush}"></Setter> - </DataTrigger> - <DataTrigger Binding="{Binding JobRun.JobRunStatus}" Value="Failed"> - <Setter Property="Kind" Value="AlertOctagon"></Setter> - <Setter Property="Foreground" Value="{StaticResource RedBrush100}"></Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </materialDesign:PackIcon.Style> - </materialDesign:PackIcon> - </DataTemplate> - </DataGridTemplateColumn.CellTemplate> - </DataGridTemplateColumn> - <DataGridTextColumn Header="ID" Binding="{Binding JobRun.ID}" Width="50" ElementStyle="{StaticResource WrapText}"/> - <DataGridTextColumn Header="Machine" Binding="{Binding Machine.SerialNumber}" Width="100" ></DataGridTextColumn> - <DataGridTextColumn Header="User" Binding="{Binding User.Contact.FullName,TargetNullValue='PPC',FallbackValue='PPC'}" Width="100" ElementStyle="{StaticResource WrapText}" /> - <DataGridTextColumn Header="Job Name" Binding="{Binding JobRun.JobName}" Width="100" ElementStyle="{StaticResource WrapText}"/> - <DataGridTextColumn Header="Thread" Binding="{Binding Rml.Name}" Width="80" ElementStyle="{StaticResource WrapText}"/> - <DataGridTextColumn Header="Length" Binding="{Binding JobRun.JobLength, StringFormat={}{0:0.00}}" Width="60" /> - <DataGridTextColumn Header="Source" Binding="{Binding JobRun.Source, Converter={StaticResource EnumToDescriptionConverter}}" Width="60" /> - <DataGridTextColumn Header="Upload Duration" Binding="{Binding UploadDuration, Converter={StaticResource DateTimeToStringFormatConverter}, FallbackValue='N/A',TargetNullValue='N/A'}" Width="80"/> - <DataGridTextColumn Header="Heating Duration" Binding="{Binding HeatingDuration, Converter={StaticResource DateTimeToStringFormatConverter}, FallbackValue='N/A',TargetNullValue='N/A'}" Width="80" /> - <DataGridTextColumn Header="Start Time" Binding="{Binding JobRun.ActualStartDate, Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="95" /> - <DataGridTextColumn Header="IsGradient" Binding="{Binding JobRun.IsGradient}" Width="70" /> - <DataGridTextColumn Header="GR" Binding="{Binding JobRun.GradientResolutionCm}" Width="30" /> - <DataGridTextColumn Header="Status" Binding="{Binding JobRun.JobRunStatus, Converter={StaticResource EnumToDescriptionConverter}}" Width="70"/> - <DataGridTextColumn Header="End Time" Binding="{Binding JobRun.EndDate, Converter={StaticResource DateTimeUTCToShortDateTimeConverter}}" Width="95" /> - <DataGridTextColumn Header="End Position" Binding="{Binding JobRun.EndPosition, StringFormat={}{0:0.00}}" Width="70" /> - <DataGridTemplateColumn Header="Liquid Quantities" Width="1*"> - <DataGridTemplateColumn.CellStyle> - <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="FocusVisualStyle" Value="{x:Null}"/> - <Setter Property="VerticalContentAlignment" Value="Center"></Setter> - <Setter Property="VerticalAlignment" Value="Center"/> - <Setter Property="HorizontalAlignment" Value="Stretch"/> - <Setter Property="Margin" Value="0 0 10 0"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="{x:Type DataGridCell}"> - <ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> - </ControlTemplate> - </Setter.Value> - </Setter> - <Style.Triggers> - <Trigger Property="IsSelected" Value="True"> - <Setter Property="Background" Value="Transparent"></Setter> - <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" /> - </Trigger> - </Style.Triggers> - </Style> - </DataGridTemplateColumn.CellStyle> - <DataGridTemplateColumn.CellTemplate> - <DataTemplate> - <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> - <Grid.RowDefinitions> - <RowDefinition Height="1*"/> - <RowDefinition Height="20"/> - </Grid.RowDefinitions> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="1*" MaxWidth="200"/> - </Grid.ColumnDefinitions> - <ItemsControl ItemsSource="{Binding JobRun.LiquidQuantitiesFast,Mode=OneWay}" Margin="0 0 0 0" Height="70"> - <ItemsControl.ItemContainerStyle> - <Style TargetType="ContentPresenter"> - <Setter Property="Visibility" Value="Visible"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding Quantity}" Value="0"> - <Setter Property="Visibility" Value="Collapsed"></Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </ItemsControl.ItemContainerStyle> - <ItemsControl.ItemsPanel> - <ItemsPanelTemplate> - <StackPanel Orientation="Horizontal" IsItemsHost="True"></StackPanel> - </ItemsPanelTemplate> - </ItemsControl.ItemsPanel> - <ItemsControl.ItemTemplate> - <DataTemplate> - <DockPanel ToolTip="{Binding Quantity, Converter={StaticResource TooltipLiquidQuantityFormatConverter}, ConverterParameter='#,#\\'}" ToolTipService.Placement="Center" ToolTipService.VerticalOffset="10"> - <Grid DockPanel.Dock="Top" Height="40" Margin="0 5 8 0" Width="16" > - <Border x:Name="LiquidTypeBorder" BorderThickness="1" BorderBrush="{StaticResource borderBrush}" CornerRadius="2" > - <Canvas x:Name="LiquidCanvas" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="0" ClipToBounds="True" ToolTip="{Binding Quantity}" ToolTipService.Placement="Left" ToolTipService.VerticalOffset="10"> - <Border Height="{Binding RelativeSource={RelativeSource AncestorType=Canvas}, Path=ActualHeight }" Width="{Binding RelativeSource={RelativeSource AncestorType=Canvas}, Path=ActualWidth }" > - <Border.Background> - <SolidColorBrush Color="{Binding LiquidType,Converter={StaticResource LiquidTypeToColorConverter}}" /> - </Border.Background> - <Border.Style> - <Style> - <Setter Property="Canvas.Top" > - <Setter.Value> - <MultiBinding Converter="{StaticResource MidTankLevelToElementHeightConverter}"> - <Binding RelativeSource="{RelativeSource Self}" Path="ActualHeight" /> - <Binding Path="Quantity" /> - </MultiBinding> - </Setter.Value> - </Setter> - </Style> - </Border.Style> - </Border> - <Border Background="Transparent" ToolTip="{Binding Quantity, Converter={StaticResource TooltipLiquidQuantityFormatConverter}, ConverterParameter='#,#\\'}" Height="{Binding RelativeSource={RelativeSource AncestorType=Canvas}, Path=ActualHeight }" Width="{Binding RelativeSource={RelativeSource AncestorType=Canvas}, Path=ActualWidth }"></Border> - </Canvas> - </Border> - </Grid> - <TextBlock DockPanel.Dock="Bottom" FontSize="9" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0 0 10 0" Text="{Binding LiquidType,Converter={StaticResource StringToFirstLetterConverter}}" Foreground="Gray"/> - </DockPanel> - - </DataTemplate> - </ItemsControl.ItemTemplate> - </ItemsControl> - <Border Grid.Row="1" Grid.Column="0" Background="Transparent" HorizontalAlignment="Stretch" Height="8" BorderThickness="1" BorderBrush="{StaticResource borderBrush}"> - <Rectangle Margin="0 0 -1 0" Fill="{StaticResource AccentColorBrush}" HorizontalAlignment="Left" VerticalAlignment="Stretch" ToolTip="{Binding JobRun.EndPosition}"> - <Rectangle.Width> - <MultiBinding Converter="{StaticResource JobLengthConverter}"> - <Binding Path="JobRun.JobLength" /> - <Binding Path="JobRun.EndPosition"/> - <Binding Path="ActualWidth" RelativeSource="{RelativeSource AncestorType=Border}"/> - </MultiBinding> - </Rectangle.Width> - </Rectangle> - </Border> - </Grid> - </DataTemplate> - </DataGridTemplateColumn.CellTemplate> - </DataGridTemplateColumn> - </DataGrid.Columns> - </DataGrid> - <Border Grid.Row="1" Grid.Column="1" Grid.RowSpan="2" Margin="20, 0, 20, 20" BorderBrush="{StaticResource borderBrush}" Background="{StaticResource TransparentBackgroundBrush}" BorderThickness="1"> - - <StackPanel> - <TextBlock Margin="10" Text="{Binding SelectedJobName}"></TextBlock> - </StackPanel> - </Border> - <Border Grid.Row="2" Margin="20, 0, 0, 20" Height="200" BorderBrush="{StaticResource borderBrush}" Background="{StaticResource TransparentBackgroundBrush}" BorderThickness="1"> - <Grid > - <Grid.ColumnDefinitions> - <ColumnDefinition Width="*"/> - <ColumnDefinition Width="2"/> - <ColumnDefinition Width="*"/> - <ColumnDefinition Width="2"/> - <ColumnDefinition Width="*"/> - </Grid.ColumnDefinitions> - <Border Grid.Column="0" BorderBrush="{StaticResource borderBrush}" Padding="5" BorderThickness="1" CornerRadius="5" Margin="10"> - <StackPanel Orientation="Vertical" Margin="5"> - <ItemsControl ItemsSource="{Binding StatisticsValueCollection.StatisticsCollection}"> - <ItemsControl.ItemTemplate> - <DataTemplate> - <StackPanel Orientation="Horizontal" Margin="0 3"> - <TextBlock Text="{Binding Name}" FontWeight="SemiBold"/> - <TextBlock Text=": "/> - <TextBlock Text="{Binding Value, StringFormat={}{0:N2}}"/> - <TextBlock Text="{Binding Unit}"/> - </StackPanel> - </DataTemplate> - </ItemsControl.ItemTemplate> - </ItemsControl> - <TextBlock Visibility="Collapsed" Margin="0 10 0 0" Text="Total Thread Consumption per thread:" FontWeight="SemiBold"> - <TextBlock.Style> - <Style TargetType="TextBlock"> - <Setter Property="Visibility" Value="Visible" /> - <Style.Triggers> - <DataTrigger Binding="{Binding StatisticsValueCollection.ThreadConsumptionPerThreadCollection.Count}" Value="0"> - <Setter Property="Visibility" Value="Collapsed" /> - </DataTrigger> - </Style.Triggers> - </Style> - </TextBlock.Style> - </TextBlock> - <ItemsControl Visibility="Collapsed" ItemsSource="{Binding StatisticsValueCollection.ThreadConsumptionPerThreadCollection}"> - <ItemsControl.ItemsPanel> - <ItemsPanelTemplate> - <UniformGrid Rows="3" /> - </ItemsPanelTemplate> - </ItemsControl.ItemsPanel> - <ItemsControl.Resources> - <DataTemplate DataType="{x:Type model:StatisticsValue}"> - <StackPanel Orientation="Horizontal"> - <TextBlock Text="{Binding Name}" FontWeight="SemiBold"/> - <TextBlock Text=": "/> - <TextBlock Text="{Binding Value, StringFormat={}{0:0.0}}"/> - <TextBlock Text="{Binding Unit}"/> - </StackPanel> - </DataTemplate> - <DataTemplate DataType="{x:Type model:MoreValue}"> - <Border BorderThickness="0"> - <TextBlock Text="{Binding Text}" Tag="{Binding Path=DataContext.StatisticsValueCollection.ThreadConsumptionPerThread, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemsControl}}}" HorizontalAlignment="Left" VerticalAlignment="Center" > - <TextBlock.ToolTip > - <ToolTip DataContext="{Binding RelativeSource={RelativeSource Self},Path=PlacementTarget.Tag}" Placement="Right" Background="{StaticResource Logging.Background}"> - <Border CornerRadius="5"> - <ItemsControl ItemsSource="{Binding }"> - <ItemsControl.ItemTemplate> - <DataTemplate> - <StackPanel Orientation="Horizontal" Margin="2"> - <TextBlock Margin="5 0 0 0" Text="{Binding Name}" FontWeight="SemiBold"/> - <TextBlock Text=": "/> - <TextBlock Text="{Binding Value, StringFormat={}{0:N0}}"/> - <TextBlock Text="{Binding Unit}"/> - </StackPanel> - </DataTemplate> - </ItemsControl.ItemTemplate> - </ItemsControl> - </Border> - </ToolTip> - </TextBlock.ToolTip> - </TextBlock> - </Border> - </DataTemplate> - </ItemsControl.Resources> - </ItemsControl> - </StackPanel> - </Border> - <Border Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Stretch" Width="2" Background="{StaticResource borderBrush}" Margin="0 4" Visibility="Visible"></Border> - <Border Grid.Column="2" BorderBrush="{StaticResource borderBrush}" Padding="5" BorderThickness="1" CornerRadius="5" Margin="10"> - <DockPanel> - <UniformGrid Columns="3"> - <DockPanel> - <TextBlock DockPanel.Dock="Top" FontSize="12" FontWeight="Bold" HorizontalAlignment="Center" Padding="2" Text="PPC/MS"></TextBlock> - <lvc:PieChart Series="{Binding StatisticsValueCollection.PieJobSource.SeriesCollection}" > - <lvc:PieChart.DataTooltip> - <tooltips:PieChartTooltipControl Visibility="Visible" /> - </lvc:PieChart.DataTooltip> - </lvc:PieChart> - </DockPanel> - <DockPanel> - <TextBlock DockPanel.Dock="Top" FontSize="12" FontWeight="Bold" HorizontalAlignment="Center" Padding="2" Text="Failed/Aborted/Completed"></TextBlock> - <lvc:PieChart Series="{Binding StatisticsValueCollection.PieJobRunStatus.SeriesCollection}"> - <lvc:PieChart.DataTooltip> - <tooltips:PieChartTooltipControl Visibility="Visible" /> - </lvc:PieChart.DataTooltip> - </lvc:PieChart> - </DockPanel> - <DockPanel> - <TextBlock DockPanel.Dock="Top" FontSize="12" FontWeight="Bold" HorizontalAlignment="Center" Padding="2" Text="Gradient/Solid"></TextBlock> - <lvc:PieChart Series="{Binding StatisticsValueCollection.PieGradientSolid.SeriesCollection}" > - <lvc:PieChart.DataTooltip> - <tooltips:PieChartTooltipControl Visibility="Visible" /> - </lvc:PieChart.DataTooltip> - </lvc:PieChart> - </DockPanel> - </UniformGrid> - </DockPanel> - </Border> - - <Border Grid.Column="3" HorizontalAlignment="Center" VerticalAlignment="Stretch" Width="2" Background="{StaticResource borderBrush}" Margin="0 6" CornerRadius="1"/> - - <Border Grid.Column="4" BorderBrush="{StaticResource borderBrush}" Padding="5" BorderThickness="1" CornerRadius="5" Margin="10"> - <DockPanel> - <ItemsControl DockPanel.Dock="Top" ItemsSource="{Binding StatisticsValueCollection.LiquidQuantities}"> - <ItemsControl.ItemsPanel> - <ItemsPanelTemplate> - <UniformGrid Columns="3"/> - </ItemsPanelTemplate> - </ItemsControl.ItemsPanel> - <ItemsControl.ItemTemplate> - <DataTemplate> - <Border Background="Transparent" ToolTip="{Binding Quantity, Converter={StaticResource TooltipLiquidQuantityFormatConverter}, ConverterParameter='#,#\\'}"> - <StackPanel Orientation="Horizontal" Margin="4"> - <Ellipse Width="30" Height="30"> - <Ellipse.Fill> - <SolidColorBrush Color="{Binding LiquidType,Converter={StaticResource LiquidTypeToColorConverter}}" /> - </Ellipse.Fill> - </Ellipse> - <StackPanel Orientation="Vertical" Margin="4"> - <TextBlock Text="{Binding LiquidType,Converter={StaticResource EnumToDescriptionConverter}}" FontWeight="SemiBold"></TextBlock> - <TextBlock > - <Run Text="{Binding Quantity, Converter={StaticResource NanoLiterToLiterFormatConverter}, ConverterParameter='0.00'}"></Run> - <Run Text=" liters"></Run> - </TextBlock> - </StackPanel> - </StackPanel> - </Border> - </DataTemplate> - </ItemsControl.ItemTemplate> - </ItemsControl> - <Border Background="Transparent" ToolTip="{Binding StatisticsValueCollection.TotalLiquidQuantities, Converter={StaticResource TooltipLiquidQuantityFormatConverter}, ConverterParameter='#,#\\'}"> - <TextBlock DockPanel.Dock="Bottom" Margin="4 10 0 0 "> - <Run Text="Total liquid quantities for all: " FontWeight="SemiBold"/> - <Run Text="{Binding StatisticsValueCollection.TotalLiquidQuantities, Converter={StaticResource NanoLiterToLiterFormatConverter}, ConverterParameter='0.00'}"></Run> - <Run Text=" liters"></Run> - <TextBlock.Style> - <Style TargetType="TextBlock"> - <Setter Property="Visibility" Value="Visible" /> - <Style.Triggers> - <DataTrigger Binding="{Binding StatisticsValueCollection.LiquidQuantities.Count}" Value="0"> - <Setter Property="Visibility" Value="Collapsed" /> - </DataTrigger> - </Style.Triggers> - </Style> - </TextBlock.Style> - </TextBlock> - </Border> - </DockPanel> - </Border> - </Grid> - </Border> - <Grid Grid.Row="0" Grid.Column="1" Margin="20 0 20 0"> - <Border Padding="14 14 12 14" BorderBrush="DimGray" BorderThickness="0" Background="{StaticResource Logging.Background}" HorizontalAlignment="Stretch" CornerRadius="2" > - <Border.Effect> - <DropShadowEffect ShadowDepth="4" BlurRadius="10" Opacity="0.5"/> - </Border.Effect> - - <Button Grid.Column="1" HorizontalAlignment="Right" Command="{Binding ExportToExcelCommand}" Margin="0 0 10 0" Padding="10 15" Height="Auto" VerticalAlignment="Center" Width="Auto">EXPORT TO EXCEL</Button> - </Border> - </Grid> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml.cs deleted file mode 100644 index 961d7f691..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml.cs +++ /dev/null @@ -1,175 +0,0 @@ -using LiveCharts; -using LiveCharts.Wpf; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -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; -using Tango.SharedUI.Components; - -namespace Tango.MachineStudio.Statistics.Views -{ - /// <summary> - /// Interaction logic for JobRunsView.xaml - /// </summary> - public partial class JobRunsView : UserControl - { - private int _lastSelectedGridItemIndex; - public JobRunsView() - { - InitializeComponent(); - _lastSelectedGridItemIndex = -1; - } - - - private void Button_Click(object sender, RoutedEventArgs e) - { - selectMachineButton.IsChecked = true; - e.Handled = true; - } - - private void JobRunSourcesButton_Click(object sender, RoutedEventArgs e) - { - selectJobRunSources.IsChecked = true; - e.Handled = true; - } - private void IsGradientButton_Click(object sender, RoutedEventArgs e) - { - selectIsGradient.IsChecked = true; - e.Handled = true; - } - private void JobRunStatusButton_Click(object sender, RoutedEventArgs e) - { - selectJobRunStatus.IsChecked = true; - e.Handled = true; - } - - private async void TextBox_GotFocus(object sender, RoutedEventArgs e) - { - await Task.Delay(200); - TextBox txtBox = sender as TextBox; - txtBox.SelectAll(); - } - - private void TextBox_PreviewMouseUp(object sender, MouseButtonEventArgs e) - { - e.Handled = true; - } - - private void SelectMachineButton_Click(object sender, RoutedEventArgs e) - { - selectThreadsButton.IsChecked = true; - e.Handled = true; - } - - private void IsHeadCleaningButton_Click(object sender, RoutedEventArgs e) - { - isHeadCleaningToggleButton.IsChecked = true; - e.Handled = true; - } - - private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) - { - DataGrid dataGrid = sender as DataGrid; - _lastSelectedGridItemIndex = -1; - if (e.AddedItems != null && e.AddedItems.Count > 0) - { - DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromItem(e.AddedItems[0]); - if (row != null) - { - _lastSelectedGridItemIndex = row.GetIndex(); - } - } - } - - private void StartDatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e) - { - DatePicker datePickerObj = sender as DatePicker; - if(datePickerObj != null && datePickerObj.SelectedDate != null && endDatePicker.SelectedDate != null) - { - if(datePickerObj.SelectedDate> endDatePicker.SelectedDate) - { - BindingExpression start_be = datePickerObj.GetBindingExpression(DatePicker.SelectedDateProperty); - ValidationError validationError = new ValidationError(StartDateExpiredRule, start_be); - validationError.ErrorContent = "The start time must be less than or equal to end time."; - Validation.MarkInvalid(start_be, validationError); - } - else if (Validation.GetHasError(endDatePicker)) - { - BindingExpression end_be = endDatePicker.GetBindingExpression(DatePicker.SelectedDateProperty); - Validation.ClearInvalid(end_be); - } - } - } - - private void EndDatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e) - { - DatePicker datePickerObj = sender as DatePicker; - if (datePickerObj.SelectedDate != null && startdatePicker.SelectedDate != null ) - { - if(datePickerObj != null && datePickerObj.SelectedDate < startdatePicker.SelectedDate) - { - BindingExpression end_be = datePickerObj.GetBindingExpression(DatePicker.SelectedDateProperty); - ValidationError validationError = new ValidationError(EndDateExpiredRule, end_be); - validationError.ErrorContent = "The end time must be greater than or equal to the start time."; - Validation.MarkInvalid(end_be, validationError); - } - else if (Validation.GetHasError(startdatePicker)) - { - BindingExpression start_be = startdatePicker.GetBindingExpression(DatePicker.SelectedDateProperty); - Validation.ClearInvalid(start_be); - } - } - } - - private void CheckBox_PreventUndoCheck(object sender, RoutedEventArgs e) - { - if( sender is CheckBox) - { - CheckBox cb = sender as CheckBox; - if (cb.IsChecked == false) - { - cb.IsChecked = true; - e.Handled = true; - return; - } - } - e.Handled = false; - } - private void CheckBox_StayChecked(object sender, RoutedEventArgs e) - { - if (sender is CheckBox) - { - CheckBox cb = sender as CheckBox; - if (cb.IsChecked == false) - { - var col = cb.Tag; - Type type = col.GetType(); - if (col != null && col.GetType().GetGenericTypeDefinition() == typeof(SelectedObjectCollection<>)) - { - dynamic dSynchedSource = type.GetProperty("SynchedSource").GetValue(col); - if(dSynchedSource != null && dSynchedSource.GetType().GetGenericTypeDefinition() == typeof(ObservableCollection<>) && dSynchedSource.Count == 0) - { - cb.IsChecked = true; - e.Handled = true; - return; - } - } - } - } - e.Handled = false; - } - - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/MainView.xaml index 21c099db9..55804c7b3 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/MainView.xaml @@ -11,28 +11,100 @@ xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf" 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> + <Grid IsEnabled="{Binding IsFree}"> <Grid.RowDefinitions> - <RowDefinition Height="1*"/> - <RowDefinition Height="20"/> + <RowDefinition Height="80"/> + <RowDefinition Height="337*"/> </Grid.RowDefinitions> - <Grid Grid.Row="0" IsEnabled="{Binding IsFree}"> - <TabControl Background="Transparent" Margin="0,40,0,0" x:Name="chartsTabControl" Padding="0 25 0 0"> - <TabControl.Resources> - <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="JOB RUNS" Margin="-100 0 0 0 "> - <local:JobRunsView x:Name="jobRunsView" DataContext="{Binding JobRunsViewVM}"/> - </TabItem> - <TabItem Header="STATS" Margin="-100 0 0 0 "> - <local:ChartsView x:Name="processParametersView" DataContext="{Binding ChartsViewVM}"/> - </TabItem> - </TabControl> - </Grid> + + <StackPanel Margin="60 20 0 0" VerticalAlignment="Center" HorizontalAlignment="Left" Orientation="Horizontal"> + <StackPanel> + <TextBlock FontSize="10">Start Date:</TextBlock> + <DatePicker DisplayDateStart="{Binding MinDate}" DisplayDateEnd="{Binding MaxDate}" SelectedDate="{Binding StartDate}" materialDesign:HintAssist.Hint="Pick start date" Width="200" VerticalAlignment="Bottom" FontSize="16"></DatePicker> + </StackPanel> + + <StackPanel Margin="40 0 0 0"> + <TextBlock FontSize="10">End Date:</TextBlock> + <DatePicker DisplayDateStart="{Binding MinDate}" DisplayDateEnd="{Binding MaxDate}" SelectedDate="{Binding EndDate}" materialDesign:HintAssist.Hint="Pick end date" Width="200" VerticalAlignment="Bottom" FontSize="16"></DatePicker> + </StackPanel> + </StackPanel> + + <UniformGrid Columns="3" Margin="50 20 50 50" Rows="2" Grid.Row="1"> + <Border BorderBrush="{StaticResource Statistics.BorderBrush}" Padding="5" BorderThickness="1" CornerRadius="5" Margin="10"> + <DockPanel> + <TextBlock DockPanel.Dock="Top" FontSize="16" FontWeight="Bold" HorizontalAlignment="Center" Padding="10" Text="{Binding TimelineJobStatusSeries.Title}"></TextBlock> + <lvc:CartesianChart Series="{Binding TimelineJobStatusSeries.SeriesCollection}" LegendLocation="Bottom" SeriesColors="{Binding TimelineJobStatusSeries.SeriesColors}"> + <lvc:CartesianChart.DataTooltip> + <lvc:DefaultTooltip BulletSize="20" Background="{StaticResource TransparentBackgroundBrush450}" Foreground="{StaticResource Dialog.Foreground}"/> + </lvc:CartesianChart.DataTooltip> + <lvc:CartesianChart.AxisX> + <lvc:Axis Title="{Binding TimelineJobStatusSeries.LabelsTitle}" Labels="{Binding TimelineJobStatusSeries.Labels}" Foreground="{StaticResource DarkGrayBrush200}"> + <lvc:Axis.Separator> + <lvc:Separator Stroke="#A5A5A5" /> + </lvc:Axis.Separator> + </lvc:Axis> + </lvc:CartesianChart.AxisX> + <lvc:CartesianChart.AxisY> + <lvc:Axis Title="{Binding TimelineJobStatusSeries.ChartTitle}" MinValue="0" Foreground="{StaticResource DarkGrayBrush200}" > + <lvc:Axis.Separator> + <lvc:Separator Stroke="#B0B0B0" /> + </lvc:Axis.Separator> + </lvc:Axis> + </lvc:CartesianChart.AxisY> + </lvc:CartesianChart> + </DockPanel> + </Border> + + <Border BorderBrush="{StaticResource Statistics.BorderBrush}" Padding="5" BorderThickness="1" CornerRadius="5" Margin="10"> + <DockPanel> + <TextBlock DockPanel.Dock="Top" FontSize="16" FontWeight="Bold" HorizontalAlignment="Center" Padding="10" Text="{Binding PieJobFailedReasons.Title}"></TextBlock> + <UniformGrid Columns="2"> + <lvc:PieChart DataHover="PieChart_DataHover" Series="{Binding PieJobFailedReasons.SeriesCollection}" LegendLocation="None" SeriesColors="{Binding PieJobFailedReasons.SeriesColors}" Background="Transparent"> + <lvc:PieChart.Resources> + <Style TargetType="lvc:PieSeries"> + <Setter Property="Stroke" Value="#99F9F9F9"></Setter> + <Setter Property="StrokeThickness" Value="2"/> + </Style> + </lvc:PieChart.Resources> + <lvc:PieChart.DataTooltip> + <tooltips:PieChartTooltipControl Visibility="Hidden" /> + </lvc:PieChart.DataTooltip> + </lvc:PieChart> + + <TextBlock x:Name="txtPieTitle" TextWrapping="Wrap"></TextBlock> + </UniformGrid> + </DockPanel> + </Border> + + <Border BorderBrush="{StaticResource Statistics.BorderBrush}" Padding="5" BorderThickness="1" CornerRadius="5" Margin="10"> + <DockPanel> + <TextBlock DockPanel.Dock="Top" FontSize="16" FontWeight="Bold" HorizontalAlignment="Center" Padding="10" Text="{Binding PrintPerWeekSeries.Title}"></TextBlock> + <lvc:CartesianChart Series="{Binding PrintPerWeekSeries.SeriesCollection}" LegendLocation="Bottom" SeriesColors="{Binding PrintPerWeekSeries.SeriesColors}" > + <lvc:CartesianChart.Resources> + <Style TargetType="lvc:ColumnSeries"> + <Setter Property="Foreground" Value="{StaticResource DarkGrayBrush200}"></Setter> + </Style> + </lvc:CartesianChart.Resources> + <lvc:CartesianChart.AxisX> + <lvc:Axis Title="{Binding PrintPerWeekSeries.LabelsTitle}" Labels="{Binding PrintPerWeekSeries.Labels}" Foreground="{StaticResource DarkGrayBrush200}"> + <lvc:Axis.Separator> + <lvc:Separator Stroke="#A5A5A5" /> + </lvc:Axis.Separator> + </lvc:Axis> + </lvc:CartesianChart.AxisX> + <lvc:CartesianChart.AxisY> + <lvc:Axis Title="{Binding PrintPerWeekSeries.ChartTitle}" MinValue="0" Foreground="{StaticResource DarkGrayBrush200}" > + <lvc:Axis.Separator> + <lvc:Separator Stroke="#6F6F6F" /> + </lvc:Axis.Separator> + </lvc:Axis> + </lvc:CartesianChart.AxisY> + <lvc:CartesianChart.DataTooltip> + <lvc:DefaultTooltip BulletSize="20" Background="{StaticResource TransparentBackgroundBrush450}" Foreground="{StaticResource Dialog.Foreground}"/> + </lvc:CartesianChart.DataTooltip> + </lvc:CartesianChart> + </DockPanel> + </Border> + </UniformGrid> </Grid> </UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/MainView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/MainView.xaml.cs index f0d1c39a7..3948c4e5a 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/MainView.xaml.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/MainView.xaml.cs @@ -28,6 +28,10 @@ namespace Tango.MachineStudio.Statistics.Views InitializeComponent(); } - + private void PieChart_DataHover(object sender, ChartPoint chartPoint) + { + var tooltip = ((chartPoint.ChartView as PieChart).DataTooltip as Tooltips.PieChartTooltipControl).Title; + txtPieTitle.Text = tooltip; + } } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/packages.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/packages.config index 6938c8a4b..31c5f029f 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/packages.config +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/packages.config @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <packages> <package id="EntityFramework" version="6.2.0" targetFramework="net461" /> - <package id="Google.Protobuf" version="3.4.1" targetFramework="net461" /> <package id="LiveCharts" version="0.9.7" targetFramework="net461" /> <package id="LiveCharts.Wpf" version="0.9.7" targetFramework="net461" /> <package id="MahApps.Metro" version="1.5.0" targetFramework="net461" /> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Storage/Tango.MachineStudio.Storage_yjpbed13_wpftmp.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Storage/Tango.MachineStudio.Storage_yjpbed13_wpftmp.csproj deleted file mode 100644 index 698c6fe82..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Storage/Tango.MachineStudio.Storage_yjpbed13_wpftmp.csproj +++ /dev/null @@ -1,154 +0,0 @@ -<?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>{5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}</ProjectGuid> - <OutputType>library</OutputType> - <RootNamespace>Tango.MachineStudio.Storage</RootNamespace> - <AssemblyName>Tango.MachineStudio.Storage</AssemblyName> - <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> - <FileAlignment>512</FileAlignment> - <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> - <WarningLevel>4</WarningLevel> - <Deterministic>true</Deterministic> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>..\..\..\Build\Machine Studio\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\Machine Studio\Release\</OutputPath> - <DefineConstants>TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup> - <Compile Include="..\..\..\Versioning\GlobalVersionInfo.cs"> - <Link>GlobalVersionInfo.cs</Link> - </Compile> - <Compile Include="Converters\StorageItemToImageConverter.cs" /> - <Compile Include="Helpers\FileIconHelper.cs" /> - <Compile Include="Models\StorageFileHandlerModel.cs" /> - <Compile Include="Models\StorageFileHandlerType.cs" /> - <Compile Include="StorageModule.cs" /> - <Compile Include="ViewModelLocator.cs" /> - <Compile Include="ViewModels\MainViewVM.cs" /> - <Compile Include="Views\MainView.xaml.cs"> - <DependentUpon>MainView.xaml</DependentUpon> - </Compile> - </ItemGroup> - <ItemGroup> - <Compile Include="Properties\AssemblyInfo.cs"> - <SubType>Code</SubType> - </Compile> - <Compile Include="Properties\Resources.Designer.cs"> - <AutoGen>True</AutoGen> - <DesignTime>True</DesignTime> - <DependentUpon>Resources.resx</DependentUpon> - </Compile> - <Compile Include="Properties\Settings.Designer.cs"> - <AutoGen>True</AutoGen> - <DependentUpon>Settings.settings</DependentUpon> - <DesignTimeSharedInput>True</DesignTimeSharedInput> - </Compile> - <EmbeddedResource Include="Properties\Resources.resx"> - <Generator>ResXFileCodeGenerator</Generator> - <LastGenOutput>Resources.Designer.cs</LastGenOutput> - </EmbeddedResource> - <None Include="app.config" /> - <None Include="packages.config" /> - <None Include="Properties\Settings.settings"> - <Generator>SettingsSingleFileGenerator</Generator> - <LastGenOutput>Settings.Designer.cs</LastGenOutput> - </None> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\..\..\Tango.BL\Tango.BL.csproj"> - <Project>{f441feee-322a-4943-b566-110e12fd3b72}</Project> - <Name>Tango.BL</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Core\Tango.Core.csproj"> - <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project> - <Name>Tango.Core</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Integration\Tango.Integration.csproj"> - <Project>{4206ac58-3b57-4699-8835-90bf6db01a61}</Project> - <Name>Tango.Integration</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Logging\Tango.Logging.csproj"> - <Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project> - <Name>Tango.Logging</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.SharedUI\Tango.SharedUI.csproj"> - <Project>{8491d07b-c1f6-4b62-a412-41b9fd2d6538}</Project> - <Name>Tango.SharedUI</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Tango.Transport\Tango.Transport.csproj"> - <Project>{74e700b0-1156-4126-be40-ee450d3c3026}</Project> - <Name>Tango.Transport</Name> - </ProjectReference> - <ProjectReference Include="..\..\..\Utilities\Tango.FirmwarePackageGenerator\Tango.FirmwarePackageGenerator.csproj"> - <Project>{43135fb9-41db-4f87-9771-cf2c762027c0}</Project> - <Name>Tango.FirmwarePackageGenerator</Name> - </ProjectReference> - <ProjectReference Include="..\..\Tango.MachineStudio.Common\Tango.MachineStudio.Common.csproj"> - <Project>{cb0b0aa2-bb24-4bca-a720-45e397684e12}</Project> - <Name>Tango.MachineStudio.Common</Name> - </ProjectReference> - </ItemGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup> - </ItemGroup> - <ItemGroup /> - <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> - <ItemGroup> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.SqlServer.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Utilities\Debug\fpgen.exe" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\packages\MahApps.Metro.1.5.0\lib\net45\MahApps.Metro.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\packages\MaterialDesignColors.1.1.2\lib\net45\MaterialDesignColors.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\packages\MaterialDesignThemes.2.3.1.953\lib\net45\MaterialDesignThemes.Wpf.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Microsoft.CSharp.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\PresentationCore.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\PresentationFramework.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.ComponentModel.DataAnnotations.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Core.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.DataSetExtensions.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Drawing.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\packages\MahApps.Metro.1.5.0\lib\net45\System.Windows.Interactivity.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xaml.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml.Linq.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.BL.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.Core.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.Integration.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.Logging.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Machine Studio\Debug\Tango.MachineStudio.Common.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.SharedUI.dll" /> - <ReferencePath Include="C:\DATA\Development\Tango\Software\Visual_Studio\Build\Core\Debug\Tango.Transport.dll" /> - <ReferencePath Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\WindowsBase.dll" /> - </ItemGroup> - <ItemGroup> - <Compile Include="C:\DATA\Development\Tango\Software\Visual_Studio\MachineStudio\Modules\Tango.MachineStudio.Storage\obj\Debug\App.g.cs" /> - <Compile Include="C:\DATA\Development\Tango\Software\Visual_Studio\MachineStudio\Modules\Tango.MachineStudio.Storage\obj\Debug\Views\MainView.g.cs" /> - <Compile Include="C:\DATA\Development\Tango\Software\Visual_Studio\MachineStudio\Modules\Tango.MachineStudio.Storage\obj\Debug\GeneratedInternalTypeHelper.g.cs" /> - </ItemGroup> -</Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/BlowerElementEditor.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/BlowerElementEditor.xaml index dae945940..524dd79c5 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/BlowerElementEditor.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/BlowerElementEditor.xaml @@ -56,8 +56,8 @@ </i:Interaction.Triggers> </visuals:AnalogSwitch> - <Border Background="#1B1B1B" Margin="8" CornerRadius="3" Padding="5" Grid.Column="1"> - <Grid > + <Border Background="{StaticResource DarkGrayBrush}" Margin="8" CornerRadius="3" Padding="5" Grid.Column="1"> + <Grid> <mahapps:NumericUpDown Style="{x:Null}" InterceptMouseWheel="True" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" HorizontalContentAlignment="Right" HideUpDownButtons="True" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled" HasDecimals="True" Minimum="0" Maximum="10000" Padding="0" Value="{Binding HardwareBlower.Voltage,FallbackValue='0.0',Mode=TwoWay}" VerticalAlignment="Center" FontSize="44" FontFamily="{StaticResource digital-7}" Foreground="#FFD400" Margin="0 0 16 0"> <mahapps:NumericUpDown.Resources> <Style TargetType="TextBox"> @@ -72,7 +72,7 @@ <Button Style="{x:Null}" Grid.Column="2" Margin="8" Cursor="Hand" Command="{Binding SetCommand}"> <Button.Template> <ControlTemplate TargetType="Button"> - <Grid Background="#3E3E3E"> + <Grid Background="{StaticResource GrayBrush280}"> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Gainsboro" FontSize="16" FontWeight="SemiBold">SET</TextBlock> </Grid> <ControlTemplate.Triggers> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ControllerElementEditor.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ControllerElementEditor.xaml index e71f7e1e0..27530ab10 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ControllerElementEditor.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ControllerElementEditor.xaml @@ -86,7 +86,7 @@ <RowDefinition Height="70*"/> <RowDefinition Height="90*"/> </Grid.RowDefinitions> - <Border Background="#1B1B1B" Margin="0 3 0 0" CornerRadius="3" Padding="5"> + <Border Background="{StaticResource DarkGrayBrush}" Margin="0 3 0 0" CornerRadius="3" Padding="5"> <Grid> <TextBlock Text="{Binding EffectiveValue,StringFormat=0.0,FallbackValue='0.0'}" Foreground="#FF6F78" HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="44" FontFamily="{StaticResource digital-7}" Margin="0 0 12 0"> @@ -95,7 +95,7 @@ </Grid> </Border> - <Border Background="#1B1B1B" Grid.Row="1" Margin="0 10 0 0" CornerRadius="3" Padding="5"> + <Border Background="{StaticResource DarkGrayBrush}" Grid.Row="1" Margin="0 10 0 0" CornerRadius="3" Padding="5"> <Grid> <mahapps:NumericUpDown Style="{x:Null}" InterceptMouseWheel="True" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" HorizontalContentAlignment="Right" HideUpDownButtons="True" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled" StringFormat="0.0" HasDecimals="True" Minimum="{Binding ElementName=fader,Path=Minimum}" Maximum="{Binding ElementName=fader,Path=Maximum}" Padding="0" Value="{Binding Value,Mode=TwoWay,StringFormat=0.0,FallbackValue=0.0}" VerticalAlignment="Center" FontSize="44" FontFamily="{StaticResource digital-7}" Foreground="#FFD400" Margin="0 0 12 0"> <mahapps:NumericUpDown.Resources> @@ -111,7 +111,7 @@ <Button Style="{x:Null}" Grid.Row="2" VerticalAlignment="Bottom" Height="60" Cursor="Hand" Command="{Binding SetCommand}"> <Button.Template> <ControlTemplate TargetType="Button"> - <Grid Background="#1B1B1B"> + <Grid Background="{StaticResource GrayBrush280}"> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Gainsboro" FontSize="16" FontWeight="SemiBold">SET</TextBlock> </Grid> <ControlTemplate.Triggers> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/DispenserElementEditor.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/DispenserElementEditor.xaml index e0da8aa03..90e18d43e 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/DispenserElementEditor.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/DispenserElementEditor.xaml @@ -170,7 +170,7 @@ </Grid> <StackPanel HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0 0 -65 0"> - <Border Background="#1B1B1B" CornerRadius="3" Padding="3"> + <Border Background="{StaticResource DarkGrayBrush}" CornerRadius="3" Padding="3"> <mahapps:NumericUpDown BorderThickness="0" Background="Transparent" HideUpDownButtons="True" HasDecimals="False" Minimum="0" Maximum="10000" StringFormat="0" Value="{Binding Speed,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,StringFormat=0,FallbackValue=5000}" HorizontalAlignment="Center" HorizontalContentAlignment="Center" FontSize="22" VerticalAlignment="Center" Foreground="{StaticResource RedBrush400}" FontFamily="{StaticResource digital-7}"></mahapps:NumericUpDown> </Border> <visuals:Knob Width="50" Height="50" TicksHighlightBrush="{StaticResource RedBrush400}" KnobType="MetroDark" TicksWidth="2" Margin="0 5 0 0" TicksHeight="5" Minimum="0" Maximum="5000" Value="{Binding Speed,Mode=TwoWay}" /> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/HeaterElementEditor.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/HeaterElementEditor.xaml index ffeb1f134..190b4d3c8 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/HeaterElementEditor.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/HeaterElementEditor.xaml @@ -48,7 +48,7 @@ </Grid> <Grid Grid.Row="1"> - <Border Background="#1B1B1B" Margin="0 3 0 0" CornerRadius="3" Padding="5"> + <Border Background="{StaticResource DarkGrayBrush}" Margin="0 3 0 0" CornerRadius="3" Padding="5"> <Grid> <TextBlock Text="{Binding HeaterState.CurrentValue,StringFormat=0.00,FallbackValue='0.00'}" HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="80" FontFamily="{StaticResource digital-7}" Margin="0 0 12 0"> <TextBlock.Style> @@ -75,7 +75,7 @@ <Image Source="../Images/temperature.png" Margin="0 10 20 10" RenderOptions.BitmapScalingMode="Fant"></Image> - <Border Background="#1B1B1B" Margin="0 3 0 0" CornerRadius="3" Padding="5" Grid.Column="1"> + <Border Background="{StaticResource DarkGrayBrush}" Margin="0 3 0 0" CornerRadius="3" Padding="5" Grid.Column="1"> <Grid> <mahapps:NumericUpDown x:Name="txtSetPoint" InterceptMouseWheel="True" IsHitTestVisible="{Binding IsEditing}" InterceptArrowKeys="True" Background="Transparent" BorderThickness="0" HorizontalContentAlignment="Right" HideUpDownButtons="True" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled" HasDecimals="True" Minimum="0" Maximum="400" Padding="0" Value="{Binding SetPoint,FallbackValue='0.0',Mode=TwoWay}" VerticalAlignment="Center" FontSize="44" FontFamily="{StaticResource digital-7}" Foreground="#FFD400" Margin="0 0 12 0"> <mahapps:NumericUpDown.Resources> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/JobRunnerElementEditor.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/JobRunnerElementEditor.xaml index b57db3d3f..5165e9819 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/JobRunnerElementEditor.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/JobRunnerElementEditor.xaml @@ -43,7 +43,7 @@ <!--Content--> <Grid> - <Border Padding="10" BorderThickness="1" BorderBrush="{StaticResource DarkGrayBrush}" Background="{StaticResource TransparentBackgroundBrush}" CornerRadius="5"> + <Border Padding="10" BorderThickness="1" BorderBrush="{StaticResource DarkGrayBrush}" Background="#88FFFFFF" CornerRadius="5"> <DockPanel> <TextBox Foreground="{StaticResource DarkGrayBrush}" FontSize="14" DockPanel.Dock="Top" Text="{Binding Job.Name}"></TextBox> <ItemsControl Margin="0 10 0 0" DockPanel.Dock="Top" ItemsSource="{Binding BrushStop.LiquidVolumes}" VerticalAlignment="Center"> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/MotorElementEditor.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/MotorElementEditor.xaml index 77cccaf8f..7c3728d1e 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/MotorElementEditor.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/MotorElementEditor.xaml @@ -154,7 +154,7 @@ </Viewbox> <StackPanel HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0 0 -65 5"> - <Border Background="#1B1B1B" CornerRadius="3" Padding="3"> + <Border Background="{StaticResource DarkGrayBrush}" CornerRadius="3" Padding="3"> <mahapps:NumericUpDown BorderThickness="0" Background="Transparent" HideUpDownButtons="True" HasDecimals="False" Minimum="0" Maximum="10000" StringFormat="0" Value="{Binding Speed,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,StringFormat=0,FallbackValue=5000}" HorizontalAlignment="Center" HorizontalContentAlignment="Center" FontSize="22" VerticalAlignment="Center" Foreground="{StaticResource RedBrush400}" FontFamily="{StaticResource digital-7}"></mahapps:NumericUpDown> </Border> <visuals:Knob Width="50" Height="50" TicksHighlightBrush="{StaticResource RedBrush400}" KnobType="MetroDark" TicksWidth="2" Margin="0 5 0 0" TicksHeight="5" Minimum="0" Maximum="5000" Value="{Binding Speed,Mode=TwoWay}" /> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ProcessParametersElementEditor.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ProcessParametersElementEditor.xaml index b86f52688..3c4373097 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ProcessParametersElementEditor.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ProcessParametersElementEditor.xaml @@ -57,8 +57,8 @@ <Grid Margin="0 2" Focusable="False" Background="Transparent" Style="{StaticResource draggableDroppableGrid}" dragAndDrop:DragAndDropService.Drop="OnProcessParametersDropped" dragAndDrop:DragAndDropService.DraggingSurface="{Binding RelativeSource={RelativeSource AncestorType=editors:ParameterizedEditor},Path=DraggingSurface}"> <ContentControl Focusable="False"> <DockPanel Focusable="False"> - <TextBlock Focusable="False" Width="150" FontSize="12" Foreground="#1B1B1B" DockPanel.Dock="Left" IsHitTestVisible="False" Margin="0 5 0 5" Text="{Binding Name}"></TextBlock> - <mahapps:NumericUpDown FontSize="14" Minimum="0" Margin="0 0 5 0" HorizontalContentAlignment="Left" HideUpDownButtons="True" Maximum="10000" StringFormat="0.0" InterceptArrowKeys="True" InterceptMouseWheel="True" HasDecimals="True" Value="{Binding Value,Mode=TwoWay}" Background="{StaticResource TransparentBackgroundBrush600}"></mahapps:NumericUpDown> + <TextBlock Focusable="False" Width="150" FontSize="12" Foreground="{StaticResource DarkGrayBrush}" DockPanel.Dock="Left" IsHitTestVisible="False" Margin="0 5 0 5" Text="{Binding Name}"></TextBlock> + <mahapps:NumericUpDown FontSize="14" Minimum="0" Margin="0 0 5 0" HorizontalContentAlignment="Left" HideUpDownButtons="True" Maximum="10000" StringFormat="0.0" InterceptArrowKeys="True" InterceptMouseWheel="True" HasDecimals="True" Value="{Binding Value,Mode=TwoWay}" Background="#6EFFFFFF"></mahapps:NumericUpDown> </DockPanel> </ContentControl> </Grid> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ThreadMotionElementEditor.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ThreadMotionElementEditor.xaml index d59a8ddbb..ac440ad64 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ThreadMotionElementEditor.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ThreadMotionElementEditor.xaml @@ -68,7 +68,7 @@ </Viewbox> <StackPanel HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0 0 -65 5"> - <Border Background="#1B1B1B" CornerRadius="3" Padding="3"> + <Border Background="{StaticResource DarkGrayBrush}" CornerRadius="3" Padding="3"> <mahapps:NumericUpDown BorderThickness="0" Background="Transparent" HideUpDownButtons="True" HasDecimals="False" Minimum="0" Maximum="10000" StringFormat="0" Value="{Binding Speed,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,StringFormat=0,FallbackValue=5000}" HorizontalAlignment="Center" HorizontalContentAlignment="Center" FontSize="22" VerticalAlignment="Center" Foreground="{StaticResource RedBrush400}" FontFamily="{StaticResource digital-7}"></mahapps:NumericUpDown> </Border> <visuals:Knob Width="50" Height="50" TicksHighlightBrush="{StaticResource RedBrush400}" KnobType="MetroDark" TicksWidth="2" Margin="0 5 0 0" TicksHeight="5" Minimum="0" Maximum="5000" Value="{Binding Speed,Mode=TwoWay}" /> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ValveElementEditor.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ValveElementEditor.xaml index 20e4b46ff..59b9fa2af 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ValveElementEditor.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/Editors/ValveElementEditor.xaml @@ -46,7 +46,7 @@ <Button Margin="8" Cursor="Hand" Command="{Binding SetCommand}" CommandParameter="{Binding TechValve.State1}"> <Button.Style> <Style TargetType="Button"> - <Setter Property="Background" Value="#3E3E3E"></Setter> + <Setter Property="Background" Value="{StaticResource GrayBrush280}"></Setter> <Setter Property="IsEnabled" Value="True"></Setter> </Style> </Button.Style> @@ -80,7 +80,7 @@ </Button.Template> </Button> - <Border Background="#1B1B1B" Margin="8" CornerRadius="3" Padding="5" Grid.Column="1"> + <Border Background="{StaticResource DarkGrayBrush}" Margin="8" CornerRadius="3" Padding="5" Grid.Column="1"> <StackPanel> <TextBlock FontFamily="{StaticResource digital-7}" Text="Valve Controller" FontSize="13" Foreground="#E94A4A" HorizontalAlignment="Center"></TextBlock> <Image Source="../Images/valve.png" RenderOptions.BitmapScalingMode="Fant" Margin="10" Stretch="Uniform" Height="36" /> @@ -90,7 +90,7 @@ <Button Margin="8" Cursor="Hand" Grid.Column="2" Command="{Binding SetCommand}" CommandParameter="{Binding TechValve.State2}"> <Button.Style> <Style TargetType="Button"> - <Setter Property="Background" Value="#3E3E3E"></Setter> + <Setter Property="Background" Value="{StaticResource GrayBrush280}"></Setter> <Setter Property="IsEnabled" Value="True"></Setter> </Style> </Button.Style> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs index 8f5c67f96..f6b8a35df 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Technician/ViewModels/MachineTechViewVM.cs @@ -41,7 +41,6 @@ using RealTimeGraphX.WPF; using Tango.Core.ExtensionMethods; using System.Diagnostics; using Tango.BL.Builders; -using Tango.Core; namespace Tango.MachineStudio.Technician.ViewModels { @@ -80,12 +79,6 @@ namespace Tango.MachineStudio.Technician.ViewModels private DateTime _last_time = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0); private Machine _machine; private List<PackColor> _packsColors; - private int _diagnostics_index = 0; - private DateTime _diagnosticsStartTime; - private DateTime _diagnosticsNowTime; - - private ProducerConsumerQueue<StartDiagnosticsResponse> _framesQueue; - private Thread _populateFramesThread; #region Properties @@ -120,8 +113,6 @@ namespace Tango.MachineStudio.Technician.ViewModels { _selectedTab.IsSelected = true; } - - EnableRenderingForSelectedTabGraphs(); } } @@ -318,8 +309,6 @@ namespace Tango.MachineStudio.Technician.ViewModels /// <param name="notificationProvider">The notification provider.</param> public MachineTechViewVM(IStudioApplicationManager applicationManager, INotificationProvider notificationProvider, IDiagnosticsFrameProvider diagnosticsFrameProvider, IEventLogger eventLogger) { - _framesQueue = new ProducerConsumerQueue<StartDiagnosticsResponse>(); - Tabs = new ObservableCollection<MachineTechTabVM>(); Tabs.Add(new MachineTechTabVM() { IsSelected = true, Name = "Untitled" }); SelectedTab = Tabs.First(); @@ -422,7 +411,7 @@ namespace Tango.MachineStudio.Technician.ViewModels PackColor pc = new PackColor(); pc.Index = pack.PackIndex; pc.Name = pack.LiquidType.Name; - + if (pack.LiquidType.LiquidTypeColor == Colors.Black) { pc.Color = Colors.Gray; @@ -454,51 +443,25 @@ namespace Tango.MachineStudio.Technician.ViewModels /// <param name="response">The response.</param> private void DiagnosticsFrameProvider_FrameReceived(object sender, StartDiagnosticsResponse response) { - _framesQueue.BlockEnqueue(response); + PopulateDiagnosticsData(response); } #endregion #region Populate Diagnostics Data - private void PopulateFramesThreadMethod() - { - while (!ApplicationManager.IsShuttingDown) - { - var frame = _framesQueue.BlockDequeue(); - PopulateDiagnosticsData(frame); - } - } - /// <summary> /// Populates the diagnostics data to the proper elements. /// </summary> /// <param name="data">The data.</param> private void PopulateDiagnosticsData(StartDiagnosticsResponse data) { - if (data.Monitors == null || _machineOperator == null || _machineOperator.DeviceInformation == null) return; - - _diagnostics_index++; - uint interval = _machineOperator.DeviceInformation.DiagnosticsInterval; + if (data.Monitors == null) return; TimeSpan delta_base = DateTime.Now - _start_time; TimeSpan delta = (DateTime.Now - _last_time); - _last_time = DateTime.Now; - - if (data.ElapsedMilli > 0) - { - _diagnosticsNowTime = DateTime.ParseExact(data.DateTime, "MM/dd/yyyy HH:mm:ss.fff", null); //_diagnosticsNowTime.Add(TimeSpan.FromMilliseconds(data.ElapsedMilli)); - //var now = _diagnosticsStartTime.Add(TimeSpan.FromMilliseconds(interval * _diagnostics_index)); - //Debug.WriteLine("DeltaBase Before: " + delta_base); - delta_base = _diagnosticsNowTime - _start_time; - //Debug.WriteLine("DeltaBase After: " + delta_base); - - //Debug.WriteLine("Delta Before: " + delta); - delta = TimeSpan.FromMilliseconds(data.ElapsedMilli); - //Debug.WriteLine("Delta After: " + delta); - } - double delta_mili = delta.TotalMilliseconds; + _last_time = DateTime.Now; if (DateTime.Now > _lastDiagnosticsResponseUpdate.AddMilliseconds(MIN_DIAGNOSTICS_UPDATE_MILI)) { @@ -516,11 +479,7 @@ namespace Tango.MachineStudio.Technician.ViewModels if (prop != null) { var points = GetDataArray(techMonitor, prop.GetValue(data.Monitors)); - - if (points.Count > 0) - { - sr.PushData(points, delta_base, delta); - } + sr.PushData(points, delta_base, delta); } } @@ -533,20 +492,15 @@ namespace Tango.MachineStudio.Technician.ViewModels if (prop != null) { var points = GetDataMatrix(techMonitor, prop.GetValue(data.Monitors)); - if (points.Count > 0) - { - mr.PushData(points, delta_base, delta); - } + mr.PushData(points, delta_base, delta); } } lock (_elementsLock) { var elements = Tabs.SelectMany(x => x.Elements).ToList(); - var selectedTabElements = SelectedTab.Elements.ToList(); - //Can be updated only when visible - foreach (var item in selectedTabElements.Select(x => x.HostedElement as TechItem)) + foreach (var item in elements.Select(x => x.HostedElement as TechItem)) { if (item.GetType() == typeof(MonitorItem)) { @@ -576,79 +530,7 @@ namespace Tango.MachineStudio.Technician.ViewModels } } } - else if (item.GetType() == typeof(DigitalOutItem)) - { - DigitalOutItem digitalOutItem = item as DigitalOutItem; - - var digitalPin = data.DigitalInterfaceStates.SingleOrDefault(x => x.InterfaceIO == (InterfaceIOs)digitalOutItem.TechIo.Code); - - if (digitalPin != null) - { - digitalOutItem.EffectiveValue = digitalPin.Value; - } - } - else if (item.GetType() == typeof(DigitalInItem)) - { - DigitalInItem digitalInItem = item as DigitalInItem; - - var digitalPin = data.DigitalInterfaceStates.SingleOrDefault(x => x.InterfaceIO == (InterfaceIOs)digitalInItem.TechIo.Code); - - if (digitalPin != null) - { - digitalInItem.Value = digitalPin.Value; - } - } - else if (item.GetType() == typeof(HeaterItem)) - { - HeaterItem heaterItem = item as HeaterItem; - - var heaterState = data.HeatersStates.SingleOrDefault(x => x.HeaterType == (HeaterType)heaterItem.TechHeater.Code); - - if (heaterState != null) - { - heaterItem.HeaterState = heaterState; - } - } - else if (item.GetType() == typeof(ValveItem)) - { - ValveItem valveItem = item as ValveItem; - - var valveState = data.ValvesStates.SingleOrDefault(x => x.ValveType == (ValveType)valveItem.TechValve.Code); - - if (valveState != null) - { - valveItem.EffectiveState = valveState.State; - } - } - else if (item.GetType() == typeof(BlowerItem)) - { - BlowerItem blowerItem = item as BlowerItem; - - if (data.Monitors.BlowerVoltage.Count > 0) - { - blowerItem.EffectiveActive = data.Monitors.BlowerVoltage.Last() > 0; - } - } - else if (item.GetType() == typeof(ControllerItem)) - { - ControllerItem controllerItem = item as ControllerItem; - - if (DateTime.Now > controllerItem.LastUpdateTime.AddMilliseconds(controllerItem.UpdateInterval)) - { - var componentState = data.ComponentsStates.SingleOrDefault(x => (int)x.Component == controllerItem.TechController.Code); - - if (componentState != null) - { - controllerItem.EffectiveValue = componentState.Value; - } - } - } - } - - //Must be updated all the time. - foreach (var item in elements.Select(x => x.HostedElement as TechItem)) - { - if (item.GetType() == typeof(SingleGraphItem)) + else if (item.GetType() == typeof(SingleGraphItem)) { SingleGraphItem graphItem = item as SingleGraphItem; @@ -662,23 +544,20 @@ namespace Tango.MachineStudio.Technician.ViewModels { var points = GetDataArray(graphItem.TechMonitor, prop.GetValue(data.Monitors)); - if (points.Count > 0) - { - List<TimeSpanDataPoint> times = new List<TimeSpanDataPoint>(); - var dPoints = points.Select(x => new DoubleDataPoint(x)).ToList(); + List<TimeSpanDataPoint> times = new List<TimeSpanDataPoint>(); + var dPoints = points.Select(x => new DoubleDataPoint(x)).ToList(); - for (int i = 0; i < points.Count; i++) - { - times.Add(delta_base.Add(TimeSpan.FromMilliseconds((delta_mili / points.Count) * i))); - } + for (int i = 0; i < points.Count; i++) + { + times.Add(delta_base.Add(TimeSpan.FromMilliseconds((delta_mili / points.Count) * i))); + } - controller.PushData(times, dPoints); + controller.PushData(times, dPoints); - var _graph_recording = _single_graphs_recordings.SingleOrDefault(x => x.Tag == graphItem); - if (_graph_recording != null) - { - _graph_recording.PushData(points, delta_base, delta); - } + var _graph_recording = _single_graphs_recordings.SingleOrDefault(x => x.Tag == graphItem); + if (_graph_recording != null) + { + _graph_recording.PushData(points, delta_base, delta); } } } @@ -741,82 +620,70 @@ namespace Tango.MachineStudio.Technician.ViewModels } } } - } - } - } + else if (item.GetType() == typeof(DigitalOutItem)) + { + DigitalOutItem digitalOutItem = item as DigitalOutItem; - #endregion + var digitalPin = data.DigitalInterfaceStates.SingleOrDefault(x => x.InterfaceIO == (InterfaceIOs)digitalOutItem.TechIo.Code); - #region Private Methods + if (digitalPin != null) + { + digitalOutItem.EffectiveValue = digitalPin.Value; + } + } + else if (item.GetType() == typeof(DigitalInItem)) + { + DigitalInItem digitalInItem = item as DigitalInItem; - private void EnableRenderingForSelectedTabGraphs() - { - if (SelectedTab != null) - { - lock (_elementsLock) - { - var elements = Tabs.SelectMany(x => x.Elements).ToList(); + var digitalPin = data.DigitalInterfaceStates.SingleOrDefault(x => x.InterfaceIO == (InterfaceIOs)digitalInItem.TechIo.Code); - foreach (var element in elements) - { - if (SelectedTab.Elements.Contains(element)) + if (digitalPin != null) { - var item = element.HostedElement as TechItem; + digitalInItem.Value = digitalPin.Value; + } + } + else if (item.GetType() == typeof(HeaterItem)) + { + HeaterItem heaterItem = item as HeaterItem; - if (item != null) - { - if (item.GetType() == typeof(SingleGraphItem)) - { - SingleGraphItem graphItem = item as SingleGraphItem; + var heaterState = data.HeatersStates.SingleOrDefault(x => x.HeaterType == (HeaterType)heaterItem.TechHeater.Code); - TechGraphController controller = null; + if (heaterState != null) + { + heaterItem.HeaterState = heaterState; + } + } + else if (item.GetType() == typeof(ValveItem)) + { + ValveItem valveItem = item as ValveItem; - if (_singleControllers.TryGetValue(graphItem, out controller)) - { - controller.DisableRendering = false; - } - } - else if (item.GetType() == typeof(MultiGraphItem)) - { - MultiGraphItem graphItem = item as MultiGraphItem; + var valveState = data.ValvesStates.SingleOrDefault(x => x.ValveType == (ValveType)valveItem.TechValve.Code); - TechGraphController controller = null; + if (valveState != null) + { + valveItem.EffectiveState = valveState.State; + } + } + else if (item.GetType() == typeof(BlowerItem)) + { + BlowerItem blowerItem = item as BlowerItem; - if (_multiControllers.TryGetValue(graphItem, out controller)) - { - controller.DisableRendering = false; - } - } - } + if (data.Monitors.BlowerVoltage.Count > 0) + { + blowerItem.EffectiveActive = data.Monitors.BlowerVoltage.Last() > 0; } - else + } + else if (item.GetType() == typeof(ControllerItem)) + { + ControllerItem controllerItem = item as ControllerItem; + + if (DateTime.Now > controllerItem.LastUpdateTime.AddMilliseconds(controllerItem.UpdateInterval)) { - var item = element.HostedElement as TechItem; + var componentState = data.ComponentsStates.SingleOrDefault(x => (int)x.Component == controllerItem.TechController.Code); - if (item != null) + if (componentState != null) { - if (item.GetType() == typeof(SingleGraphItem)) - { - SingleGraphItem graphItem = item as SingleGraphItem; - - TechGraphController controller = null; - - if (_singleControllers.TryGetValue(graphItem, out controller)) - { - controller.DisableRendering = true; - } - } - else if (item.GetType() == typeof(MultiGraphItem)) - { - MultiGraphItem graphItem = item as MultiGraphItem; - - TechGraphController controller = null; - - if (_multiControllers.TryGetValue(graphItem, out controller)) - { - controller.DisableRendering = true; - } - } + controllerItem.EffectiveValue = componentState.Value; } } } @@ -824,6 +691,10 @@ namespace Tango.MachineStudio.Technician.ViewModels } } + #endregion + + #region Private Methods + /// <summary> /// Gets the last data point from a protobuf repeated field. /// </summary> @@ -1380,6 +1251,7 @@ namespace Tango.MachineStudio.Technician.ViewModels catch (Exception ex) { LogManager.Log(ex, String.Format("Error executing technician set valve state command on '{0}'.", item.TechName)); + _eventLogger.Log(ex, String.Format("Error executing technician set valve state command on '{0}'.", item.TechName)); } }; } @@ -1400,6 +1272,7 @@ namespace Tango.MachineStudio.Technician.ViewModels catch (Exception ex) { LogManager.Log(ex, $"Error executing SetBlowerState command for blower {item.HardwareBlower.HardwareBlowerType.Name}."); + _eventLogger.Log(ex, $"Error executing SetBlowerState command for blower {item.HardwareBlower.HardwareBlowerType.Name}."); } }; } @@ -1420,6 +1293,7 @@ namespace Tango.MachineStudio.Technician.ViewModels catch (Exception ex) { LogManager.Log(ex, $"Error executing SetHeaterState command for heater {item.TechHeater.Name}."); + _eventLogger.Log(ex, $"Error executing SetHeaterState command for heater {item.TechHeater.Name}."); } }; } @@ -1516,6 +1390,7 @@ namespace Tango.MachineStudio.Technician.ViewModels item.HomingProgress = 0; item.HomingMaximumProgress = 0; LogManager.Log(ex, String.Format("Error executing technician command '{0}' on item '{1}'.", action, item.TechName)); + _eventLogger.Log(ex, String.Format("Error executing technician command '{0}' on item '{1}'.", action, item.TechName)); } }; } @@ -1613,6 +1488,7 @@ namespace Tango.MachineStudio.Technician.ViewModels item.HomingProgress = 0; item.HomingMaximumProgress = 0; LogManager.Log(ex, String.Format("Error executing technician command '{0}' on item '{1}'.", action, item.TechName)); + _eventLogger.Log(ex, String.Format("Error executing technician command '{0}' on item '{1}'.", action, item.TechName)); } }; } @@ -1766,6 +1642,7 @@ namespace Tango.MachineStudio.Technician.ViewModels catch (Exception ex) { LogManager.Log(ex, String.Format(String.Format("Error executing technician command '{0}' on item '{1}'.", action, item.TechName))); + _eventLogger.Log(ex, String.Format("Error executing technician command '{0}' on item '{1}'.", action, item.TechName)); } }; } @@ -1849,6 +1726,7 @@ namespace Tango.MachineStudio.Technician.ViewModels catch (Exception ex) { LogManager.Log(ex, String.Format("Error executing technician command '{0}' on item '{1}'.", action, item.TechName)); + _eventLogger.Log(ex, String.Format("Error executing technician command '{0}' on item '{1}'.", action, item.TechName)); } }; } @@ -1869,6 +1747,7 @@ namespace Tango.MachineStudio.Technician.ViewModels catch (Exception ex) { LogManager.Log(ex, String.Format("Error executing technician set digital out command on '{0}'.", item.TechName)); + _eventLogger.Log(ex, String.Format("Error executing technician set digital out command on '{0}'.", item.TechName)); } }; } @@ -1893,6 +1772,7 @@ namespace Tango.MachineStudio.Technician.ViewModels catch (Exception ex) { LogManager.Log(ex, String.Format("Error executing technician set value component command on '{0}'.", item.TechName)); + _eventLogger.Log(ex, String.Format("Error executing technician set value component command on '{0}'.", item.TechName)); } }; } @@ -1918,6 +1798,7 @@ namespace Tango.MachineStudio.Technician.ViewModels catch (Exception ex) { String msg = "Error uploading process parameters:" + Environment.NewLine + parameters.ToJsonString(); + _eventLogger.Log(ex, msg); LogManager.Log(ex, msg); _notification.ShowError("Could not upload process parameters." + Environment.NewLine + ex.Message); } @@ -2216,41 +2097,16 @@ namespace Tango.MachineStudio.Technician.ViewModels { var to_remove = Tabs.ToList(); - var name = _notification.ShowTextInput("Enter project name", "Project Name", "untitled"); - - if (String.IsNullOrWhiteSpace(name)) - { - return; - } - - SaveFileDialog dlg = new SaveFileDialog(); - dlg.Title = "Select Technician Project Location"; - dlg.Filter = "Technician Project File|*.tpf"; - dlg.DefaultExt = ".tpf"; - dlg.FileName = name; - - if (!dlg.ShowDialog().Value) + if (AddNewTab()) { - return; - } - - _singleControllers.Clear(); - _multiControllers.Clear(); - _multi_graph_recordings.Clear(); - _multi_monitors_recordings.Clear(); - _single_graphs_recordings.Clear(); - _single_monitors_recordings.Clear(); + _singleControllers.Clear(); + _multiControllers.Clear(); - foreach (var tab in to_remove) - { - Tabs.Remove(tab); + foreach (var tab in to_remove) + { + Tabs.Remove(tab); + } } - - AddNewTab(name); - - _lastTechProjectFile = dlg.FileName; - File.AppendAllText(_lastTechProjectFile, ""); - SaveProject(); } /// <summary> @@ -2323,12 +2179,7 @@ namespace Tango.MachineStudio.Technician.ViewModels public override void OnApplicationReady() { - if (_populateFramesThread == null) - { - _populateFramesThread = new Thread(PopulateFramesThreadMethod); - _populateFramesThread.IsBackground = true; - _populateFramesThread.Start(); - } + } #endregion diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Converters/RoleEnumToVisibleConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Converters/RoleEnumToVisibleConverter.cs deleted file mode 100644 index 350257fdd..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Converters/RoleEnumToVisibleConverter.cs +++ /dev/null @@ -1,32 +0,0 @@ -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.Enumerations; - -namespace Tango.MachineStudio.UsersAndRoles.Converters -{ - public class RoleEnumToVisibleConverter : IValueConverter - { - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - if(value.GetType().IsEnum && Enum.IsDefined(typeof(Roles), value)) - { - Roles roleEnum = (Roles)value; - if (roleEnum.ToString().StartsWith("FSE")) - return Visibility.Collapsed; - } - - return Visibility.Visible; - } - - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/login.png b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/login.png Binary files differdeleted file mode 100644 index 9f7d0b9ba..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Images/login.png +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Tango.MachineStudio.UsersAndRoles.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Tango.MachineStudio.UsersAndRoles.csproj index 687544c1b..82376b751 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Tango.MachineStudio.UsersAndRoles.csproj +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Tango.MachineStudio.UsersAndRoles.csproj @@ -49,9 +49,6 @@ <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\..\..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> </Reference> - <Reference Include="SimpleValidator, Version=0.6.1.0, Culture=neutral, processorArchitecture=MSIL"> - <HintPath>..\..\..\packages\SimpleValidator.0.6.1.0\lib\net40\SimpleValidator.dll</HintPath> - </Reference> <Reference Include="System" /> <Reference Include="System.ComponentModel.DataAnnotations" /> <Reference Include="System.Data" /> @@ -75,7 +72,6 @@ <Compile Include="..\..\..\Versioning\GlobalVersionInfo.cs"> <Link>GlobalVersionInfo.cs</Link> </Compile> - <Compile Include="Converters\RoleEnumToVisibleConverter.cs" /> <Compile Include="Navigation\UsersAndRolesNavigationManager.cs" /> <Compile Include="Navigation\UsersAndRolesNavigationView.cs" /> <Compile Include="Providers\PlaceAddress.cs" /> @@ -84,7 +80,6 @@ <Compile Include="UsersAndRolesModule.cs" /> <Compile Include="ViewModelLocator.cs" /> <Compile Include="ViewModels\MainViewVM.cs" /> - <Compile Include="ViewModels\UserCreationDialogVM.cs" /> <Compile Include="Views\AddressView.xaml.cs"> <DependentUpon>AddressView.xaml</DependentUpon> </Compile> @@ -100,9 +95,6 @@ <Compile Include="Views\OrganizationSelectionView.xaml.cs"> <DependentUpon>OrganizationSelectionView.xaml</DependentUpon> </Compile> - <Compile Include="Views\UserCreationDialog.xaml.cs"> - <DependentUpon>UserCreationDialog.xaml</DependentUpon> - </Compile> <Compile Include="Views\UserManagementView.xaml.cs"> <DependentUpon>UserManagementView.xaml</DependentUpon> </Compile> @@ -128,9 +120,7 @@ <Generator>ResXFileCodeGenerator</Generator> <LastGenOutput>Resources.Designer.cs</LastGenOutput> </EmbeddedResource> - <None Include="app.config"> - <SubType>Designer</SubType> - </None> + <None Include="app.config" /> <None Include="packages.config" /> <None Include="Properties\Settings.settings"> <Generator>SettingsSingleFileGenerator</Generator> @@ -196,10 +186,6 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="Views\UserCreationDialog.xaml"> - <SubType>Designer</SubType> - <Generator>MSBuild:Compile</Generator> - </Page> <Page Include="Views\UserManagementView.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -224,9 +210,6 @@ <ItemGroup> <Resource Include="Images\roles.png" /> </ItemGroup> - <ItemGroup> - <Resource Include="Images\login.png" /> - </ItemGroup> <ItemGroup /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <ProjectExtensions> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs index 16395d6bc..a46d5f456 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/MainViewVM.cs @@ -15,10 +15,6 @@ using Tango.MachineStudio.UsersAndRoles.Providers; using Tango.SharedUI; using System.Data.Entity; using Tango.BL.Builders; -using Tango.BL.ActionLogs; -using Tango.BL.DTO; -using Tango.BL.Enumerations; -using Tango.MachineStudio.Common.Authentication; namespace Tango.MachineStudio.UsersAndRoles.ViewModels { @@ -29,10 +25,6 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels private ObservablesContext _userContext; private UsersAndRolesNavigationManager _navigation; private INotificationProvider _notification; - private IActionLogManager _actionLogManager; - private OrganizationDTO _organizationBeforeSave; - private IAuthenticationProvider _authenticationProvider; - private UserDTO _userBeforeSave; private ObservableCollection<Organization> _organizations; public ObservableCollection<Organization> Organizations @@ -113,21 +105,6 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels } } - private bool _showDeleted; - public bool ShowDeleted - { - get { return _showDeleted; } - set - { - _showDeleted = value; - if (_showDeleted) - { - //ShowDeletedUsers(); - } - } - } - - public RelayCommand ManageOrganizationCommand { get; set; } public RelayCommand BackToOrganizationsCommand { get; set; } @@ -146,18 +123,14 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels public RelayCommand SaveManagedUserCommand { get; set; } - public RelayCommand RestoreAndSaveManagedUserCommand { get; set; } - public RelayCommand AddUserCommand { get; set; } public RelayCommand RemoveUserCommand { get; set; } - public MainViewVM(UsersAndRolesNavigationManager navigation, INotificationProvider notification, IActionLogManager actionLogManager, IAuthenticationProvider authenticationProvider) + public MainViewVM(UsersAndRolesNavigationManager navigation, INotificationProvider notification) { _navigation = navigation; _notification = notification; - _actionLogManager = actionLogManager; - _authenticationProvider = authenticationProvider; ManageOrganizationCommand = new RelayCommand(LoadSelectedOrganization, () => SelectedOrganization != null); BackToOrganizationsCommand = new RelayCommand(BackToOrganizations); @@ -168,10 +141,8 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels BackToManagedOrganizationCommand = new RelayCommand(BackToManagedOrganization); RemoveRoleCommand = new RelayCommand<Role>(RemoveUserRole); SaveManagedUserCommand = new RelayCommand(SaveManagedUser); - RestoreAndSaveManagedUserCommand = new RelayCommand(RestoreAndSaveManagedUser); AddUserCommand = new RelayCommand(AddNewUser); RemoveUserCommand = new RelayCommand(RemoveSelectedUser, () => SelectedUser != null); - _showDeleted = false; } public override void OnApplicationReady() @@ -193,7 +164,6 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels org.Contact = new Contact(); _organizationsContext.Organizations.Add(org); await org.SaveAsync(_organizationsContext); - _actionLogManager.InsertLog(ActionLogType.OrganizationCreated, _authenticationProvider.CurrentUser, org.Name, org, "Organization created using Machine Studio."); Organizations = _organizationsContext.Organizations.ToObservableCollection(); SelectedOrganization = org; LoadSelectedOrganization(); @@ -208,7 +178,6 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels using (_notification.PushTaskItem("Removing organization...")) { await SelectedOrganization.DeleteCascadeAsync(_organizationsContext); - _actionLogManager.InsertLog(ActionLogType.OrganizationDeleted, _authenticationProvider.CurrentUser, SelectedOrganization.Name, SelectedOrganization, "Organization deleted using Machine Studio."); await LoadOrganizations(); } } @@ -218,13 +187,7 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels { using (_notification.PushTaskItem("Saving organization address and contact...")) { - var organizationAfter = OrganizationDTO.FromObservable(ManagedOrganization); - await ManagedOrganization.SaveAsync(_manageContext); - _actionLogManager.InsertLog(ActionLogType.OrganizationSaved, _authenticationProvider.CurrentUser, ManagedOrganization.Name, _organizationBeforeSave, organizationAfter, "Organization saved using Machine Studio."); - - _organizationBeforeSave = organizationAfter; - await LoadOrganizations(); SelectedOrganization = Organizations.SingleOrDefault(x => x.Guid == ManagedOrganization.Guid); } @@ -239,10 +202,8 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels _userContext = ObservablesContext.CreateDefault(); Roles = new RolesCollectionBuilder(_userContext).SetAll().WithPermission().Build(); - ManagedUser = new UserBuilder(_userContext).WithDeleted().Set(SelectedUser.Guid).WithRolesAndPermissions().Build(); + ManagedUser = new UserBuilder(_userContext).Set(SelectedUser.Guid).WithRolesAndPermissions().Build(); ManagedUserRoles = ManagedUser.Roles.ToObservableCollection(); - - _userBeforeSave = UserDTO.FromObservable(ManagedUser); }); _navigation.NavigateTo(UsersAndRolesNavigationView.UserManagementView); @@ -274,11 +235,6 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels try { ManagedUser.Validate(_userContext); - - if (ManagedUser.Roles.GroupBy(x => x.RoleEnum).Any(x => x.Count() > 1)) - { - throw new InvalidOperationException("Cannot save user with duplicate roles."); - } } catch (Exception ex) { @@ -288,45 +244,11 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels using (_notification.PushTaskItem("Saving user details...")) { - var userAfter = UserDTO.FromObservable(ManagedUser); await ManagedUser.SaveAsync(_userContext); - _actionLogManager.InsertLog(ActionLogType.UserSaved, _authenticationProvider.CurrentUser, ManagedUser.Email, _userBeforeSave, userAfter, "User saved using Machine Studio."); - _userBeforeSave = userAfter; LoadSelectedOrganization(); } } - private async void RestoreAndSaveManagedUser() - { - try - { - ManagedUser.Validate(_userContext); - - if (ManagedUser.Roles.GroupBy(x => x.RoleEnum).Any(x => x.Count() > 1)) - { - throw new InvalidOperationException("Cannot save user with duplicate roles."); - } - } - catch (Exception ex) - { - _notification.ShowError(ex.Message); - return; - } - if (_notification.ShowQuestion("Are you sure you wish to re-activate this account?")) - { - using (_notification.PushTaskItem("Saving user details...")) - { - ManagedUser.Deleted = false; - - var userAfter = UserDTO.FromObservable(ManagedUser); - await ManagedUser.SaveAsync(_userContext); - _actionLogManager.InsertLog(ActionLogType.UserRestored, _authenticationProvider.CurrentUser, ManagedUser.Email, _userBeforeSave, userAfter, "User restored using Machine Studio."); - _userBeforeSave = userAfter; - LoadSelectedOrganization(); - } - } - } - private async void LoadSelectedOrganization() { using (_notification.PushTaskItem("Loading organization...")) @@ -335,9 +257,7 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels { _manageContext = ObservablesContext.CreateDefault(); - ManagedOrganization = new OrganizationBuilder(_manageContext).Set(SelectedOrganization.Guid).WithUsers(true).Build(); - - _organizationBeforeSave = OrganizationDTO.FromObservable(ManagedOrganization); + ManagedOrganization = new OrganizationBuilder(_manageContext).Set(SelectedOrganization.Guid).WithUsers().Build(); }); _navigation.NavigateTo(UsersAndRolesNavigationView.OrganizationManagementView); @@ -374,25 +294,25 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels using (_notification.PushTaskItem("Removing user...")) { await SelectedUser.DeleteCascadeAsync(_manageContext); - _actionLogManager.InsertLog(ActionLogType.UserDeleted, _authenticationProvider.CurrentUser, SelectedUser.Email, SelectedUser, "User deleted using Machine Studio."); LoadSelectedOrganization(); } } } - private void AddNewUser() + private async void AddNewUser() { - _notification.ShowModalDialog<UserCreationDialogVM>(async (vm) => + String email = _notification.ShowTextInput("Enter user email", "email"); + + if (!String.IsNullOrWhiteSpace(email)) { User user = new User(); - user.Email = vm.Email; - user.Password = User.GetPasswordHash(vm.Password); - user.PasswordChangeRequired = true; + user.Email = email; + user.Password = "1111"; user.Contact = new Contact() { - FirstName = vm.FirstName, - LastName = vm.LastName, - Email = vm.Email, + FirstName = "Twine", + LastName = "User", + Email = email, }; user.Address = new Address(); @@ -403,25 +323,9 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels Role = _manageContext.Roles.SingleOrDefault(x => x.Code == (int)BL.Enumerations.Roles.User) }); - user.UsersRoles.Add(new UsersRole() - { - User = user, - Role = _manageContext.Roles.SingleOrDefault(x => x.Code == (int)BL.Enumerations.Roles.MachineStudioUser) - }); - - user.UsersRoles.Add(new UsersRole() - { - User = user, - Role = _manageContext.Roles.SingleOrDefault(x => x.Code == (int)BL.Enumerations.Roles.PPCUser) - }); - try { - if (!user.Validate(_manageContext)) - { - _notification.ShowError(String.Join(Environment.NewLine, user.ValidationErrors)); - return; - } + user.Validate(_manageContext); } catch (Exception ex) { @@ -434,13 +338,10 @@ namespace Tango.MachineStudio.UsersAndRoles.ViewModels using (_notification.PushTaskItem("Adding new user...")) { await ManagedOrganization.SaveAsync(_manageContext); - _actionLogManager.InsertLog(ActionLogType.UserCreated, _authenticationProvider.CurrentUser, user.Email, user, "User created using Machine Studio."); await LoadOrganizations(); SelectedOrganization = Organizations.SingleOrDefault(x => x.Guid == ManagedOrganization.Guid); - SelectedUser = user; - LoadSelectedUser(); } - }); + } } private void SetUserPlace(Place place) diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/UserCreationDialogVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/UserCreationDialogVM.cs deleted file mode 100644 index 08762ac96..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/ViewModels/UserCreationDialogVM.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using SimpleValidator.Extensions; -using Tango.SharedUI; - -namespace Tango.MachineStudio.UsersAndRoles.ViewModels -{ - public class UserCreationDialogVM : DialogViewVM - { - private static Random rnd = new Random(); - - private String _email; - [Required(ErrorMessage = "Email is required")] - [EmailAddress(ErrorMessage = "Please provide a valid email")] - public String Email - { - get { return _email; } - set { _email = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } - } - - private String _password; - public String Password - { - get { return _password; } - set { _password = value; RaisePropertyChangedAuto(); } - } - - private String _firstName; - [Required(ErrorMessage = "First name is required")] - public String FirstName - { - get { return _firstName; } - set { _firstName = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } - } - - private String _lastName; - [Required(ErrorMessage = "Last name is required")] - public String LastName - { - get { return _lastName; } - set { _lastName = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } - } - - protected override void Accept() - { - if (Validate()) - { - base.Accept(); - } - } - - public override void OnShow() - { - base.OnShow(); - Password = GetRandomPassword(4); - } - - private String GetRandomPassword(int count) - { - String pass = String.Empty; - - for (int i = 0; i < count; i++) - { - pass += rnd.Next(0, 9).ToString(); - } - - return pass; - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationManagementView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationManagementView.xaml index a14d59949..d5a5d41d7 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationManagementView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/OrganizationManagementView.xaml @@ -82,10 +82,6 @@ </Button> </StackPanel> </Grid> - <StackPanel Orientation="Horizontal" DockPanel.Dock="Bottom" VerticalAlignment="Center" Margin="0 10 0 5" HorizontalAlignment="Left"> - <CheckBox Name="cbShowDeleted" IsChecked="{Binding ShowDeleted}" VerticalAlignment="Center"></CheckBox> - <TextBlock Margin="10 0 0 0" VerticalAlignment="Center" Text="Show deleted accounts" FontSize="16" FontWeight="Normal"></TextBlock> - </StackPanel> <Grid DockPanel.Dock="Bottom"> <StackPanel VerticalAlignment="Center" Orientation="Horizontal" HorizontalAlignment="Left" Margin="0 0 0 0"> <Button Margin="0 0 10 0" MinWidth="160" Height="50" Background="{StaticResource RedBrush300}" BorderBrush="{StaticResource RedBrush300}" Command="{Binding RemoveUserCommand}"> @@ -117,28 +113,6 @@ <Setter Property="BorderThickness" Value="0"/> <Setter Property="FocusVisualStyle" Value="{x:Null}"/> <Setter Property="VerticalContentAlignment" Value="Center"></Setter> - <Setter Property="Visibility" Value="Visible" /> - <Style.Triggers> - <MultiDataTrigger> - <MultiDataTrigger.Conditions> - <Condition Binding="{Binding ElementName=cbShowDeleted, Path=IsChecked}" Value="False"/> - <Condition Binding="{Binding Deleted}" Value="True"/> - </MultiDataTrigger.Conditions> - <MultiDataTrigger.Setters> - <Setter Property="Visibility" Value="Collapsed" /> - </MultiDataTrigger.Setters> - </MultiDataTrigger> - <MultiDataTrigger> - <MultiDataTrigger.Conditions> - <Condition Binding="{Binding ElementName=cbShowDeleted, Path=IsChecked}" Value="true"/> - <Condition Binding="{Binding Deleted}" Value="True"/> - </MultiDataTrigger.Conditions> - <MultiDataTrigger.Setters> - <Setter Property="Visibility" Value="Visible" /> - <Setter Property="Foreground" Value="{StaticResource RedBrush100}" /> - </MultiDataTrigger.Setters> - </MultiDataTrigger> - </Style.Triggers> </Style> </DataGrid.CellStyle> <DataGrid.Columns> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserCreationDialog.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserCreationDialog.xaml deleted file mode 100644 index 7433d3768..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserCreationDialog.xaml +++ /dev/null @@ -1,53 +0,0 @@ -<UserControl x:Class="Tango.MachineStudio.UsersAndRoles.Views.UserCreationDialog" - 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:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" - xmlns:global="clr-namespace:Tango.MachineStudio.UsersAndRoles" - xmlns:vm="clr-namespace:Tango.MachineStudio.UsersAndRoles.ViewModels" - xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:local="clr-namespace:Tango.MachineStudio.UsersAndRoles.Views" - mc:Ignorable="d" - d:DesignHeight="400" d:DesignWidth="700" Height="400" Width="700" Background="{StaticResource WhiteBackgroundBrush}" d:DataContext="{d:DesignInstance Type=vm:UserCreationDialogVM, IsDesignTimeCreatable=False}"> - <Grid Margin="10"> - <DockPanel> - <Grid DockPanel.Dock="Top"> - <StackPanel Orientation="Horizontal"> - <Grid> - <Image Source="../Images/login.png" Width="80" RenderOptions.BitmapScalingMode="Fant"></Image> - <materialDesign:PackIcon HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0 0 -14 -10" Kind="PlusCircle" Foreground="#15C315" Width="42" Height="42" /> - </Grid> - <TextBlock Margin="30 0 0 0" VerticalAlignment="Bottom" FontSize="22">NEW USER</TextBlock> - </StackPanel> - </Grid> - - <Grid DockPanel.Dock="Bottom"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Right" DockPanel.Dock="Bottom"> - <Button Command="{Binding CloseCommand}" Width="140" Height="40" Margin="0 0 10 0"> - CANCEL - </Button> - <Button Command="{Binding OKCommand}" IsDefault="True" Width="140" Height="40"> - CREATE - </Button> - </StackPanel> - </Grid> - - <Grid> - <StackPanel Width="400" HorizontalAlignment="Center" Margin="20"> - <controls:TableGrid RowHeight="40"> - <TextBlock>EMAIL</TextBlock> - <TextBox Text="{Binding Email,UpdateSourceTrigger=LostFocus,NotifyOnValidationError=True,ValidatesOnDataErrors=True,ValidatesOnNotifyDataErrors=True}"></TextBox> - <TextBlock>FIRST NAME</TextBlock> - <TextBox Text="{Binding FirstName,UpdateSourceTrigger=LostFocus,NotifyOnValidationError=True,ValidatesOnDataErrors=True,ValidatesOnNotifyDataErrors=True}"></TextBox> - <TextBlock>LAST NAME</TextBlock> - <TextBox Text="{Binding LastName,UpdateSourceTrigger=LostFocus,NotifyOnValidationError=True,ValidatesOnDataErrors=True,ValidatesOnNotifyDataErrors=True}"></TextBox> - </controls:TableGrid> - - <TextBox Margin="0 -15 0 0" Style="{x:Null}" BorderThickness="0" FontSize="30" HorizontalAlignment="Center" Text="{Binding Password}" IsReadOnly="True"></TextBox> - <TextBlock HorizontalAlignment="Center" Margin="0 5 0 0" Foreground="{StaticResource GrayBrush}">Provide this password to the user</TextBlock> - </StackPanel> - </Grid> - </DockPanel> - </Grid> -</UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserCreationDialog.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserCreationDialog.xaml.cs deleted file mode 100644 index cfa389ed1..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserCreationDialog.xaml.cs +++ /dev/null @@ -1,28 +0,0 @@ -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.UsersAndRoles.Views -{ - /// <summary> - /// Interaction logic for UserCreationDialog.xaml - /// </summary> - public partial class UserCreationDialog : UserControl - { - public UserCreationDialog() - { - InitializeComponent(); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml index 2a8621e5c..bb003f525 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserManagementView.xaml @@ -14,15 +14,11 @@ xmlns:entities="clr-namespace:Tango.BL.Entities;assembly=Tango.BL" xmlns:local="clr-namespace:Tango.MachineStudio.UsersAndRoles.Views" xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" - xmlns:localconverters="clr-namespace:Tango.MachineStudio.UsersAndRoles.Converters" mc:Ignorable="d" d:DesignHeight="1080" d:DesignWidth="1920" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> <UserControl.Resources> <providers:PlacesProvider x:Key="PlacesProvider" /> - <converters:BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"></converters:BooleanToVisibilityConverter> - <converters:BooleanToVisibilityInverseConverter x:Key="BooleanToVisibilityInverseConverter"></converters:BooleanToVisibilityInverseConverter> - <localconverters:RoleEnumToVisibleConverter x:Key="RoleEnumToVisibleConverter"/> </UserControl.Resources> <Grid> @@ -52,7 +48,7 @@ <StackPanel> <TextBlock FontSize="16" FontWeight="SemiBold">LOGIN</TextBlock> <Border Width="300" BorderThickness="1" BorderBrush="Gray" Margin="0 5 0 0" Padding="15 5" Height="150" Background="{StaticResource TransparentBackgroundBrush500}"> - <local:UserView VerticalAlignment="Top" Margin="0 15 0 0" FontSize="10" DataContext="{Binding ManagedUser}" /> + <local:UserView FontSize="10" DataContext="{Binding ManagedUser}" /> </Border> </StackPanel> <StackPanel Margin="10 0 0 0"> @@ -78,18 +74,12 @@ </Grid> </Grid> <Grid DockPanel.Dock="Bottom"> - <Button Margin="0 10 0 0" MinWidth="200" Height="60" Command="{Binding SaveManagedUserCommand}" HorizontalAlignment="Right" Visibility="{Binding Path=ManagedUser.Deleted, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> + <Button Margin="0 10 0 0" MinWidth="200" Height="60" Command="{Binding SaveManagedUserCommand}" HorizontalAlignment="Right"> <StackPanel Orientation="Horizontal"> <TextBlock FontSize="18" VerticalAlignment="Center">SAVE</TextBlock> <materialDesign:PackIcon Margin="5 0 0 0" Kind="ContentSave" Width="30" Height="30" /> </StackPanel> </Button> - <Button Margin="0 10 0 0" MinWidth="200" Height="60" Background="{StaticResource OrangeBrush300}" BorderBrush="{StaticResource OrangeBrush300}" Command="{Binding RestoreAndSaveManagedUserCommand}" HorizontalAlignment="Right" Visibility="{Binding Path=ManagedUser.Deleted, Converter={StaticResource BoolToVisibilityConverter}}"> - <StackPanel Orientation="Horizontal"> - <TextBlock FontSize="18" VerticalAlignment="Center" Text="RESTORE & SAVE"/> - <materialDesign:PackIcon Margin="5 0 0 0" Kind="ContentSave" Width="30" Height="30" /> - </StackPanel> - </Button> </Grid> <Grid> <DockPanel Margin="0 20 0 0"> @@ -105,7 +95,7 @@ </ListBox.ItemsPanel> <ListBox.ItemTemplate> <DataTemplate DataType="{x:Type entities:Role}"> - <Grid Visibility="{Binding RoleEnum, Converter={StaticResource RoleEnumToVisibleConverter}}"> + <Grid> <Grid.ToolTip> <StackPanel Background="Transparent"> <TextBlock Text="{Binding Description}" FontSize="10" Margin="0 0 0 10"></TextBlock> @@ -177,7 +167,7 @@ <ListBox ItemsSource="{Binding Roles}" ItemContainerStyle="{StaticResource basicListBoxItem}" HorizontalContentAlignment="Stretch" Background="Transparent"> <ListBox.ItemTemplate> <DataTemplate> - <Grid Background="Transparent" IsHitTestVisible="True" Style="{StaticResource draggableGrid}" dragAndDrop:DragAndDropService.DraggableBorderBrush="{StaticResource AccentColorBrush}" dragAndDrop:DragAndDropService.Draggable="True" dragAndDrop:DragAndDropService.DraggingSurface="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DraggingSurface}" Visibility="{Binding RoleEnum, Converter={StaticResource RoleEnumToVisibleConverter}}"> + <Grid Background="Transparent" IsHitTestVisible="True" Style="{StaticResource draggableGrid}" dragAndDrop:DragAndDropService.DraggableBorderBrush="{StaticResource AccentColorBrush}" dragAndDrop:DragAndDropService.Draggable="True" dragAndDrop:DragAndDropService.DraggingSurface="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DraggingSurface}"> <Grid.ToolTip> <StackPanel Background="Transparent"> <TextBlock Text="{Binding Description}" FontSize="10" Margin="0 0 0 10"></TextBlock> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserView.xaml index 37f649a7a..0858d7e08 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/Views/UserView.xaml @@ -16,6 +16,8 @@ <controls:TableGrid> <TextBlock Text="EMAIL"></TextBlock> <TextBox Text="{Binding Email}"></TextBox> + <TextBlock Text="PASSWORD"></TextBlock> + <PasswordBox MaxLength="30" pass:PasswordHelper.Attach="True" pass:PasswordHelper.Password="{Binding PasswordGateWay,Mode=TwoWay}"></PasswordBox> </controls:TableGrid> </Grid> </UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/packages.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/packages.config index 8696cb880..fe4f26e87 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/packages.config +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.UsersAndRoles/packages.config @@ -7,5 +7,4 @@ <package id="MaterialDesignColors" version="1.1.2" targetFramework="net46" /> <package id="MaterialDesignThemes" version="2.3.1.953" targetFramework="net46" /> <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" /> - <package id="SimpleValidator" version="0.6.1.0" targetFramework="net461" /> </packages>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/IAuthenticationProvider.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/IAuthenticationProvider.cs index 2929ea405..74969fd27 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/IAuthenticationProvider.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Authentication/IAuthenticationProvider.cs @@ -29,7 +29,7 @@ namespace Tango.MachineStudio.Common.Authentication /// <param name="email">The email.</param> /// <param name="password">The password.</param> /// <returns></returns> - AuthenticationLoginResult Login(String email, String password, LoginMethod method, bool bypassVersionCheck = false, Action<String> logAction = null); + AuthenticationLoginResult Login(String email, String password, bool bypassVersionCheck = false); /// <summary> /// Logs-out the current logged-in user. diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/EventLogging/DefaultEventLogger.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/EventLogging/DefaultEventLogger.cs index 89b8920d9..11d156292 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/EventLogging/DefaultEventLogger.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/EventLogging/DefaultEventLogger.cs @@ -18,7 +18,6 @@ using Tango.MachineStudio.Common.StudioApplication; using Tango.PMR.Diagnostics; using Tango.Integration.Operation; using Tango.Core.ExtensionMethods; -using Tango.Transport; namespace Tango.MachineStudio.Common.EventLogging { @@ -29,7 +28,6 @@ namespace Tango.MachineStudio.Common.EventLogging public class DefaultEventLogger : ExtendedObject, IEventLogger { private ObservablesContext _db; - private static object _lockInit = new object(); private Thread _logThread; private ConcurrentQueue<MachinesEvent> _events; private IStudioApplicationManager _application; @@ -48,15 +46,6 @@ namespace Tango.MachineStudio.Common.EventLogging #endregion - #region Properties - - /// <summary> - /// Gets or sets a value indicating whether to save the incoming events to database. - /// </summary> - public bool SaveToDB { get; set; } - - #endregion - #region Constructors /// <summary> @@ -68,8 +57,6 @@ namespace Tango.MachineStudio.Common.EventLogging { _hostName = Environment.MachineName; - SaveToDB = true; - _events = new ConcurrentQueue<MachinesEvent>(); _pendingEvents = new List<MachinesEvent>(); @@ -90,27 +77,24 @@ namespace Tango.MachineStudio.Common.EventLogging private void Init() { - lock (_lockInit) + if (!_isInitialized) { - if (!_isInitialized) + try { - try - { - _db = ObservablesContext.CreateDefault(); - - _db.EventTypes.ToList(); + _db = ObservablesContext.CreateDefault(); - foreach (var type in _db.EventTypes) - { - _eventTypesGuids.Add((EventTypes)type.Code, type); - } + _db.EventTypes.ToList(); - _isInitialized = true; - } - catch + foreach (var type in _db.EventTypes) { - _isInitialized = false; + _eventTypesGuids.Add((EventTypes)type.Code, type); } + + _isInitialized = true; + } + catch + { + _isInitialized = false; } } } @@ -143,8 +127,6 @@ namespace Tango.MachineStudio.Common.EventLogging machine.RequestSent += Machine_RequestSent; machine.RequestFailed += Machine_RequestFailed; machine.ResponseReceived += Machine_ResponseReceived; - - SaveToDB = !(machine is IExternalBridgeSecureClient); } } @@ -155,7 +137,7 @@ namespace Tango.MachineStudio.Common.EventLogging /// <param name="message">The message.</param> private void Machine_RequestSent(object sender, IMessage message) { - //Log(EventTypes.REQUEST_SENT, String.Format("Sending request '{0}'...{1}{2}", message.GetType().Name, Environment.NewLine, message.ToJsonString())); + Log(EventTypes.REQUEST_SENT, String.Format("Sending request '{0}'...{1}{2}", message.GetType().Name, Environment.NewLine, message.ToJsonString())); } /// <summary> @@ -165,7 +147,7 @@ namespace Tango.MachineStudio.Common.EventLogging /// <param name="e">The <see cref="RequestFailedEventArgs"/> instance containing the event data.</param> private void Machine_RequestFailed(object sender, RequestFailedEventArgs e) { - //Log(EventTypes.REQUEST_FAILED, String.Format("Request failed '{0}'...{1}{2}{1}{3}", e.Message.GetType().Name, Environment.NewLine, e.Message.ToJsonString(), e.Exception.ToString())); + Log(EventTypes.REQUEST_FAILED, String.Format("Request failed '{0}'...{1}{2}{1}{3}", e.Message.GetType().Name, Environment.NewLine, e.Message.ToJsonString(), e.Exception.ToString())); } /// <summary> @@ -175,7 +157,7 @@ namespace Tango.MachineStudio.Common.EventLogging /// <param name="message">The message.</param> private void Machine_ResponseReceived(object sender, IMessage message) { - //Log(EventTypes.RESPONSE_RECEIVED, String.Format("Response received '{0}'...{1}{2}", message.GetType().Name, Environment.NewLine, message.ToJsonString())); + Log(EventTypes.RESPONSE_RECEIVED, String.Format("Response received '{0}'...{1}{2}", message.GetType().Name, Environment.NewLine, message.ToJsonString())); } /// <summary> @@ -198,10 +180,10 @@ namespace Tango.MachineStudio.Common.EventLogging /// <param name="events">The events.</param> private void MachineEventsStateProvider_EventsResolved(object sender, IEnumerable<MachinesEvent> events) { - //foreach (var ev in events) - //{ - // Log(String.Format("Event '{0}' resolved.", ev.EventType.Name)); - //} + foreach (var ev in events) + { + Log(String.Format("Event '{0}' resolved.", ev.EventType.Name)); + } } #endregion @@ -214,8 +196,6 @@ namespace Tango.MachineStudio.Common.EventLogging /// <param name="machineEvent">The machine event.</param> public void Log(MachinesEvent machineEvent) { - Init(); - machineEvent.HostName = _hostName; machineEvent.EventType = _eventTypesGuids[machineEvent.Type]; @@ -263,7 +243,7 @@ namespace Tango.MachineStudio.Common.EventLogging machineEvent.EventType = _eventTypesGuids[eventType]; machineEvent.EventTypeGuid = machineEvent.EventType.Guid; - if (write_to_db && SaveToDB) + if (write_to_db) { Log(machineEvent); } @@ -327,11 +307,6 @@ namespace Tango.MachineStudio.Common.EventLogging /// </summary> public void FlushAll() { - if (!SaveToDB) - { - return; - } - bool _saveChanges = false; while (_events.Count > 0) diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/EventLogging/IEventLogger.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/EventLogging/IEventLogger.cs index 44916ec21..ceb399d24 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/EventLogging/IEventLogger.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/EventLogging/IEventLogger.cs @@ -20,11 +20,6 @@ namespace Tango.MachineStudio.Common.EventLogging event EventHandler<MachinesEvent> NewLog; /// <summary> - /// Gets or sets a value indicating whether to save the incoming events to database. - /// </summary> - bool SaveToDB { get; set; } - - /// <summary> /// Logs the specified machine event. /// </summary> /// <param name="machineEvent">The machine event.</param> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Black.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Black.otf Binary files differdeleted file mode 100644 index 0341d05db..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Black.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-BlackIt.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-BlackIt.otf Binary files differdeleted file mode 100644 index e0823abdf..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-BlackIt.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Bold.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Bold.otf Binary files differdeleted file mode 100644 index 2b9144e5c..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Bold.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-BoldIt.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-BoldIt.otf Binary files differdeleted file mode 100644 index f21ed044d..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-BoldIt.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Demi.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Demi.otf Binary files differdeleted file mode 100644 index ada716012..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Demi.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-DemiIt.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-DemiIt.otf Binary files differdeleted file mode 100644 index ab9a133a5..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-DemiIt.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Heavy.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Heavy.otf Binary files differdeleted file mode 100644 index b3630c982..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Heavy.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-HeavyIt.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-HeavyIt.otf Binary files differdeleted file mode 100644 index e47f75546..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-HeavyIt.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-It.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-It.otf Binary files differdeleted file mode 100644 index 6f9b5fa49..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-It.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Light.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Light.otf Binary files differdeleted file mode 100644 index 27af39094..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Light.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-LightIt.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-LightIt.otf Binary files differdeleted file mode 100644 index 89085eeca..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-LightIt.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Medium.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Medium.otf Binary files differdeleted file mode 100644 index 04b2a8853..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Medium.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-MediumIt.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-MediumIt.otf Binary files differdeleted file mode 100644 index 91996979e..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-MediumIt.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Regular.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Regular.otf Binary files differdeleted file mode 100644 index 2703ba3f3..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Regular.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Thin.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Thin.otf Binary files differdeleted file mode 100644 index 666c69931..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-Thin.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-ThinIt.otf b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-ThinIt.otf Binary files differdeleted file mode 100644 index b039daffe..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Fonts/Flexo-ThinIt.otf +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/machine_new.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/machine_new.png Binary files differdeleted file mode 100644 index 116e1e9c7..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/machine_new.png +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/machine_new_small.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/machine_new_small.png Binary files differdeleted file mode 100644 index 378879ce1..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Images/machine_new_small.png +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs index 25dfc2dc8..c307a8e33 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/MachineStudioSettings.cs @@ -8,10 +8,8 @@ using System.Windows; using Tango.BL; using Tango.Integration.Operation; using Tango.Logging; -using Tango.MachineStudio.Common.Web; using Tango.PMR.Printing; using Tango.Settings; -using Tango.Transport.Adapters; using Tango.Web; namespace Tango.MachineStudio.Common @@ -42,11 +40,6 @@ namespace Tango.MachineStudio.Common public String LastLoginPassword { get; set; } /// <summary> - /// Gets or sets the last login method. - /// </summary> - public LoginMethod LastLoginMethod { get; set; } - - /// <summary> /// Gets or sets a value indicating whether to save the user credentials. /// </summary> public bool RememberMe { get; set; } @@ -57,6 +50,11 @@ namespace Tango.MachineStudio.Common public String LastVirtualMachineSerialNumber { get; set; } /// <summary> + /// Gets or sets the logging categories. + /// </summary> + public List<LogCategory> LoggingCategories { get; set; } + + /// <summary> /// Gets or sets the last bounds. /// </summary> public Rect LastBounds { get; set; } @@ -137,26 +135,6 @@ namespace Tango.MachineStudio.Common public TimeSpan ExternalBridgeRequestTimeout { get; set; } /// <summary> - /// Gets or sets the external bridge continuous request timeout. - /// </summary> - public TimeSpan ExternalBridgeContinuousRequestTimeout { get; set; } - - /// <summary> - /// Gets or sets the external bridge SignalR hub. - /// </summary> - public String ExternalBridgeSignalRHub { get; set; } - - /// <summary> - /// Gets or sets a value indicating whether to enable external bridge scanning via SignalR. - /// </summary> - public bool EnableExternalBridgeSignalR { get; set; } - - /// <summary> - /// Gets or sets the TCP transport adapter write mode. - /// </summary> - public TcpTransportAdapterWriteMode TcpTransportAdapterWriteMode { get; set; } - - /// <summary> /// Gets the machine service address. /// </summary> public String MachineServiceAddress @@ -184,6 +162,7 @@ namespace Tango.MachineStudio.Common public MachineStudioSettings() { LastBounds = new Rect(); + LoggingCategories = new List<LogCategory>(); DefaultIssueReportTags = new List<string>(); StudioModulesBounds = new List<StudioModuleBounds>(); Environment = WorkingEnvironment.Remote; @@ -194,10 +173,6 @@ namespace Tango.MachineStudio.Common Theme = MachineStudioTheme.Light; JobUnitsMethod = JobUnitsMethods.Operator; ExternalBridgeRequestTimeout = TimeSpan.FromSeconds(5); - ExternalBridgeContinuousRequestTimeout = TimeSpan.FromSeconds(5); - ExternalBridgeSignalRHub = "ExternalBridgeHub"; - EnableExternalBridgeSignalR = true; - TcpTransportAdapterWriteMode = TcpTransportAdapterWriteMode.Interval; } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/MachineStudioPublisher.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/MachineStudioPublisher.cs index eeafa513f..92326f26f 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/MachineStudioPublisher.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/MachineStudioPublisher.cs @@ -12,7 +12,6 @@ using Tango.AdvancedInstaller; using Tango.Core; using Tango.Core.Cryptography; using Tango.Core.Helpers; -using Tango.Git; using Tango.MachineStudio.Common.Web; using Tango.Transport.Web; using Tango.Web; @@ -256,55 +255,6 @@ namespace Tango.MachineStudio.Common.Publish throw new InvalidOperationException("The remote version does not seems to have been updated."); } - if (Options.CreateTag) - { - String repoPath = Path.GetFullPath("../../../../../"); - String tagVersion = System.Version.Parse(GetLocalVersion()).ToString(3); - String tagName = $"Machine_Studio_v{tagVersion}"; - - using (GitRepositoryManager git = new GitRepositoryManager(repoPath, Options.Email, Options.PersonalAccessToken)) - { - OnPublishProgress(0, 100, "Checking repository changes..."); - int changes = git.GetChanges().Count; - if (changes > 0) - { - if (Options.AutoCommitAndPush) - { - OnPublishProgress(0, 100, "Committing repository changes..."); - git.Commit(tagName); - } - else - { - throw new InvalidOperationException($"There are {changes} uncommitted changes on the repository. Please commit and push all changes before creating the Tag"); - } - } - - OnPublishProgress(0, 100, "Checking outgoing commits..."); - int commits = git.GetOutgoingCommits().Count; - if (commits > 0) - { - if (Options.AutoCommitAndPush) - { - OnPublishProgress(0, 100, "Pushing repository changes..."); - git.Sync(); - } - else - { - throw new InvalidOperationException($"There are {commits} outgoing commits on the repository. Please push all commits before creating the Tag"); - } - } - - git.Progress += (x, e) => - { - OnPublishProgress(e.Progress.Value, e.Progress.Maximum, $"Pushing Tag '{tagName}'..."); - }; - - OnPublishProgress(0, 100, $"Creating Tag '{tagName}'..."); - - git.CreatePushTag(tagName, Options.Comments, "Roy Ben Shabat"); - } - } - OnPublishProgress(0, 0, "Version published successfully."); } catch (Exception ex) diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/PublishOptions.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/PublishOptions.cs index c0983eb8b..c5db355b1 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/PublishOptions.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Publish/PublishOptions.cs @@ -81,27 +81,6 @@ namespace Tango.MachineStudio.Common.Publish set { _installerOutputFolder = value; RaisePropertyChangedAuto(); } } - private String _personalAccessToken; - public String PersonalAccessToken - { - get { return _personalAccessToken; } - set { _personalAccessToken = value; RaisePropertyChangedAuto(); } - } - - private bool _createTag; - public bool CreateTag - { - get { return _createTag; } - set { _createTag = value; RaisePropertyChangedAuto(); } - } - - private bool _autoCommitAndSync; - public bool AutoCommitAndPush - { - get { return _autoCommitAndSync; } - set { _autoCommitAndSync = value; RaisePropertyChangedAuto(); } - } - public PublishOptions() { BasePath = AppDomain.CurrentDomain.BaseDirectory + "..\\"; diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Resources/MaterialDesign.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Resources/MaterialDesign.xaml index d8e2017ec..177a4fe75 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Resources/MaterialDesign.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Resources/MaterialDesign.xaml @@ -4,13 +4,12 @@ xmlns:editors="clr-namespace:Tango.AutoComplete.Editors;assembly=Tango.AutoComplete" xmlns:dragAndDrop="clr-namespace:Tango.DragAndDrop;assembly=Tango.DragAndDrop" xmlns:sharedConverters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" - xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" xmlns:mahApps="http://metro.mahapps.com/winfx/xaml/controls" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:Tango.MachineStudio.Common.Resources" xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"> <ResourceDictionary.MergedDictionaries> - + <!--WPF Extended Toolkit--> <!--<ResourceDictionary Source="pack://application:,,,/Xceed.Wpf.Toolkit;component/Themes/Generic/Brushes.xaml"/> <ResourceDictionary Source="pack://application:,,,/Xceed.Wpf.Toolkit;component/Themes/Generic/Buttons.xaml"/> @@ -29,9 +28,7 @@ <!--<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml"> </ResourceDictionary> - --> - <!--Material Design--> - <!-- + --><!--Material Design--><!-- <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Dark.xaml"> </ResourceDictionary>--> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml"> @@ -66,13 +63,6 @@ <!--Fonts--> <ResourceDictionary> <FontFamily x:Key="digital-7">../Fonts/#digital-7</FontFamily> - <FontFamily x:Key="flexo">../Fonts/#flexo</FontFamily> - </ResourceDictionary> - - <!--Images--> - <ResourceDictionary> - <BitmapImage x:Key="MachineBig" UriSource="../Images/machine_new.png"></BitmapImage> - <BitmapImage x:Key="MachineSmall" UriSource="../Images/machine_new_small.png"></BitmapImage> </ResourceDictionary> <!--Styles--> @@ -536,19 +526,23 @@ </Setter.Value> </Setter> </Style> - + <ControlTemplate x:Key="TransparentPopupContentDownTemplate" TargetType="ContentControl"> <Grid MinWidth="{Binding ElementName=templateRoot, Path=ActualWidth, Converter={StaticResource MathAddConverter}, ConverterParameter=32}" Margin="6" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="*" /> </Grid.RowDefinitions> - <Border Background="Transparent" BorderBrush="{DynamicResource MaterialDesignShadowBrush}" BorderThickness="1" CornerRadius="2"> + <Border Background="Transparent" + BorderBrush="{DynamicResource MaterialDesignShadowBrush}" + BorderThickness="1" + CornerRadius="2"> <Border.Effect> <BlurEffect Radius="6"/> </Border.Effect> </Border> - <Grid Margin="1" SnapsToDevicePixels="True"> + <Grid Margin="1" + SnapsToDevicePixels="True"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> @@ -567,18 +561,29 @@ <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> - <Border Grid.Column="0" Width="{StaticResource PopupLeftRightMargin}" Background="{DynamicResource ComboBox.Floating.Background}" /> - <Grid Grid.Column="1" - Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type materialDesign:ComboBoxPopup}}, Path=VisiblePlacementWidth}" - Height="0"/> - <Border Grid.Column="2" MinWidth="{StaticResource PopupLeftRightMargin}" Background="{DynamicResource ComboBox.Floating.Background}"/> + <Border Grid.Column="0" + Width="{StaticResource PopupLeftRightMargin}" + Background="{DynamicResource ComboBox.Floating.Background}" + /> + <Grid Grid.Column="1" + Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type materialDesign:ComboBoxPopup}}, Path=VisiblePlacementWidth}" + Height="{Binding ElementName=templateRoot, Path=ActualHeight}"/> + <Border Grid.Column="2" + MinWidth="{StaticResource PopupLeftRightMargin}" + Background="{DynamicResource ComboBox.Floating.Background}" + /> </Grid> - <Border Grid.Row="2" Background="{DynamicResource ComboBox.Floating.Background}" Height="0"/> + <Border Grid.Row="2" + Background="{DynamicResource ComboBox.Floating.Background}" + Height="{StaticResource PopupContentPresenterExtend}"/> <ContentPresenter Grid.Row="3"/> - <Border Grid.Row="4" CornerRadius="0 0 2 2" Height="{StaticResource PopupTopBottomMargin}" Background="{DynamicResource ComboBox.Floating.Background}" /> + <Border Grid.Row="4" + CornerRadius="0 0 2 2" + Height="{StaticResource PopupTopBottomMargin}" + Background="{DynamicResource ComboBox.Floating.Background}" /> </Grid> </Grid> </ControlTemplate> @@ -645,7 +650,7 @@ Visibility="{Binding Path=(materialDesign:TextFieldAssist.DecorationVisibility), RelativeSource={RelativeSource TemplatedParent}}"/> <materialDesign:ComboBoxPopup x:Name="PART_Popup" - + AllowsTransparency="true" Focusable="False" HorizontalOffset="-11.5" @@ -655,9 +660,9 @@ UseLayoutRounding="True" Placement="Custom" PopupAnimation="Fade" - VerticalOffset="-10" + VerticalOffset="0" DefaultVerticalOffset="5" - DownVerticalOffset="{Binding ElementName=templateRoot, Path=ActualHeight}" + DownVerticalOffset="-15.5" UpVerticalOffset="15" ClassicMode="{Binding Path=(materialDesign:ComboBoxAssist.ClassicMode), RelativeSource={RelativeSource TemplatedParent}}" UpContentTemplate="{StaticResource PopupContentUpTemplate}" @@ -678,7 +683,7 @@ <Setter Property="ItemContainerStyle" Value="{StaticResource MaterialDesignComboBoxItemStyle}" /> </Trigger> <Trigger SourceName="PART_Popup" Property="IsOpen" Value="True"> - <Setter Property="Background" TargetName="templateRoot" Value="Transparent" /> + <Setter Property="Background" TargetName="templateRoot" Value="{DynamicResource ComboBox.Floating.Background}" /> </Trigger> <Trigger Property="IsEnabled" Value="False"> <Setter TargetName="templateRoot" Property="Opacity" Value="0.56"/> @@ -769,101 +774,6 @@ </Setter.Value> </Setter> </Style> - - <Style TargetType="{x:Type controls:SearchComboBox}" BasedOn="{StaticResource MaterialDesignComboBox}"> - <Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Once"></Setter> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="{x:Type controls:SearchComboBox}"> - <Border Background="{TemplateBinding Background}" - BorderBrush="{TemplateBinding BorderBrush}" - BorderThickness="{TemplateBinding BorderThickness}"> - - <Grid Background="Transparent"> - <DockPanel> - <Grid VerticalAlignment="Center" Margin="15 10 10 10" DockPanel.Dock="Right" Width="10" Height="10"> - <Path Stretch="Uniform" Data="M7,10L12,15L17,10H7Z" Fill="{StaticResource BlackBrush}"> - - </Path> - </Grid> - <ContentControl Focusable="False" FocusVisualStyle="{x:Null}" Content="{TemplateBinding SelectedItem}" ContentTemplate="{TemplateBinding ItemTemplate}"> - - </ContentControl> - </DockPanel> - <ToggleButton x:Name="btnToggle" Focusable="False" FocusVisualStyle="{x:Null}" KeyboardNavigation.DirectionalNavigation="Once" Opacity="0" Style="{x:Null}" IsChecked="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=IsOpened,Mode=TwoWay}"> - - </ToggleButton> - - <Popup StaysOpen="False" MinWidth="{Binding ElementName=btnToggle,Path=ActualWidth}" PlacementTarget="{Binding ElementName=btnToggle}" Placement="Bottom" IsOpen="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=IsOpened,Mode=TwoWay}" MaxHeight="{TemplateBinding MaxDropDownHeight}" AllowsTransparency="True"> - <Border Margin="5" Background="{StaticResource WhiteBrush}" CornerRadius="3" Padding="5" MinWidth="{Binding ElementName=btnToggle,Path=ActualWidth}"> - <Border.Effect> - <DropShadowEffect ShadowDepth="0" /> - </Border.Effect> - <DockPanel> - <TextBox x:Name="txt" KeyboardNavigation.DirectionalNavigation="Once" DockPanel.Dock="Top" Margin="10" Padding="0 5" Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=SearchFilter,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox> - <ListBox x:Name="list" FocusVisualStyle="{x:Null}" ItemsSource="{TemplateBinding ListItemsSource}" ItemTemplate="{TemplateBinding ItemTemplate}"> - - </ListBox> - </DockPanel> - </Border> - </Popup> - </Grid> - - </Border> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - - <Style x:Key="CheckBoxListBoxItem" TargetType="{x:Type ListBoxItem}"> - <Setter Property="SnapsToDevicePixels" Value="true" /> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="ListBoxItem"> - <CheckBox Margin="5,2" IsChecked="{TemplateBinding IsSelected}" x:Name="CheckBoxItem" - Command="{Binding RelativeSource={RelativeSource AncestorType=controls:AllSelectedCheckboxList}, Path=ClickCheckBoxCommand}" CommandParameter="{Binding RelativeSource={RelativeSource TemplatedParent}}"> - <ContentPresenter /> - </CheckBox> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - - <Style x:Key="AllSelectedCheckBoxListStyle" TargetType="{x:Type controls:AllSelectedCheckboxList}" BasedOn="{StaticResource MaterialDesignListBox}"> - <!--<Setter Property="OverridesDefaultStyle" Value="true" />--> - <Setter Property="SnapsToDevicePixels" Value="true" /> - <Setter Property="SelectionMode" Value="Multiple"/> - <Setter Property="ItemContainerStyle" Value="{StaticResource CheckBoxListBoxItem}"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="{x:Type controls:AllSelectedCheckboxList}"> - <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true"> - <DockPanel> - <CheckBox x:Name="SelectAllCheckBox" DockPanel.Dock="Top" VerticalAlignment="Center" IsChecked="{Binding AllSelected, Mode=TwoWay,RelativeSource={RelativeSource AncestorType=controls:AllSelectedCheckboxList}}" Margin="5"> - <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Text="SelectAll" FontSize="{TemplateBinding FontSize}" FontFamily="{TemplateBinding FontFamily}"></TextBlock> - </CheckBox> - <ScrollViewer DockPanel.Dock="Bottom" Focusable="false" Padding="{TemplateBinding Padding}"> - <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> - </ScrollViewer> - </DockPanel> - </Border> - <ControlTemplate.Triggers> - <MultiTrigger> - <MultiTrigger.Conditions> - <Condition Property="IsGrouping" Value="true"/> - <Condition Property="VirtualizingPanel.IsVirtualizingWhenGrouping" Value="false"/> - </MultiTrigger.Conditions> - <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> - </MultiTrigger> - </ControlTemplate.Triggers> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - - <Style TargetType="Window"> - <Setter Property="FontFamily" Value="{StaticResource flexo}"></Setter> - </Style> </ResourceDictionary> </ResourceDictionary.MergedDictionaries> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs index fabe3e02f..3e54a327b 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs @@ -21,11 +21,6 @@ namespace Tango.MachineStudio.Common.StudioApplication event EventHandler ApplicationReady; /// <summary> - /// Occurs when the connected machine session has been lost and an automatic reconnection with the last machine is required. - /// </summary> - event EventHandler ReconnectionRequired; - - /// <summary> /// Occurs when the connected machine property has changed. /// </summary> event EventHandler<IExternalBridgeClient> ConnectedMachineChanged; 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 a14bb4e2a..7c0851d01 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 @@ -59,9 +59,6 @@ <HintPath>..\..\Referenced Assemblies\SMO\Microsoft.SqlServer.AzureStorageEnum.dll</HintPath> </Reference> <Reference Include="Microsoft.WindowsAzure.Storage, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> - <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> - <HintPath>..\..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> - </Reference> <Reference Include="System" /> <Reference Include="System.ComponentModel.DataAnnotations" /> <Reference Include="System.Data" /> @@ -86,9 +83,6 @@ <Reference Include="PresentationFramework" /> </ItemGroup> <ItemGroup> - <Compile Include="..\..\PPC\Tango.PPC.Common\Publish\PublishInfo.cs"> - <Link>Tup\PublishInfo.cs</Link> - </Compile> <Compile Include="..\..\Versioning\GlobalVersionInfo.cs"> <Link>GlobalVersionInfo.cs</Link> </Compile> @@ -101,11 +95,6 @@ <Compile Include="Converters\UserRoleToVisibilityConverter.cs" /> <Compile Include="MachineStudioTheme.cs" /> <Compile Include="Resources\SharedResourceDictionary.cs" /> - <Compile Include="Tup\TupFileBuilder.cs" /> - <Compile Include="Tup\TupFileBuilderProgressEventArgs.cs" /> - <Compile Include="Web\DownloadLatestPPCVersionRequest.cs" /> - <Compile Include="Web\DownloadLatestPPCVersionResponse.cs" /> - <Compile Include="Web\LoginMethod.cs" /> <Compile Include="Web\LoginRequest.cs" /> <Compile Include="Web\LoginResponse.cs" /> <Compile Include="AutoComplete\MachinesProvider.cs" /> @@ -128,22 +117,6 @@ <Compile Include="ExtensionMethods\CommonDialogExtensions.cs" /> <Compile Include="ExtensionMethods\TangoIOCExtensions.cs" /> <Compile Include="FirmwareUpgrade\IFirmwareUpgrader.cs" /> - <Resource Include="Fonts\Flexo-Black.otf" /> - <Resource Include="Fonts\Flexo-BlackIt.otf" /> - <Resource Include="Fonts\Flexo-Bold.otf" /> - <Resource Include="Fonts\Flexo-BoldIt.otf" /> - <Resource Include="Fonts\Flexo-Demi.otf" /> - <Resource Include="Fonts\Flexo-DemiIt.otf" /> - <Resource Include="Fonts\Flexo-Heavy.otf" /> - <Resource Include="Fonts\Flexo-HeavyIt.otf" /> - <Resource Include="Fonts\Flexo-It.otf" /> - <Resource Include="Fonts\Flexo-Light.otf" /> - <Resource Include="Fonts\Flexo-LightIt.otf" /> - <Resource Include="Fonts\Flexo-Medium.otf" /> - <Resource Include="Fonts\Flexo-MediumIt.otf" /> - <Resource Include="Fonts\Flexo-Regular.otf" /> - <Resource Include="Fonts\Flexo-Thin.otf" /> - <Resource Include="Fonts\Flexo-ThinIt.otf" /> <None Include="Helpers\GraphsHelper.cs" /> <Compile Include="IStudioViewModel.cs" /> <Compile Include="MachineStudioSettings.cs" /> @@ -298,10 +271,6 @@ <Project>{de2f2b86-025b-4f26-83a4-38bd48224ed5}</Project> <Name>Tango.Editors</Name> </ProjectReference> - <ProjectReference Include="..\..\Tango.Git\Tango.Git.csproj"> - <Project>{99081c0e-065c-4d68-bf60-f82330cca02d}</Project> - <Name>Tango.Git</Name> - </ProjectReference> <ProjectReference Include="..\..\Tango.Integration\Tango.Integration.csproj"> <Project>{4206ac58-3b57-4699-8835-90bf6db01a61}</Project> <Name>Tango.Integration</Name> @@ -322,10 +291,6 @@ <Project>{8491d07b-c1f6-4b62-a412-41b9fd2d6538}</Project> <Name>Tango.SharedUI</Name> </ProjectReference> - <ProjectReference Include="..\..\Tango.SQLExaminer\Tango.SQLExaminer.csproj"> - <Project>{e1e66ed9-597d-45fa-8048-de90a6930484}</Project> - <Name>Tango.SQLExaminer</Name> - </ProjectReference> <ProjectReference Include="..\..\Tango.Transport\Tango.Transport.csproj"> <Project>{74e700b0-1156-4126-be40-ee450d3c3026}</Project> <Name>Tango.Transport</Name> @@ -422,20 +387,10 @@ <ItemGroup> <Resource Include="Images\ti-tm4c129x.png" /> </ItemGroup> - <ItemGroup> - <Resource Include="Images\machine_new.png" /> - </ItemGroup> - <ItemGroup> - <Resource Include="Images\machine_new_small.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" /> </VisualStudio> </ProjectExtensions> - <PropertyGroup> - <PreBuildEvent> - </PreBuildEvent> - </PropertyGroup> </Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Themes/DarkThemeColors.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Themes/DarkThemeColors.xaml index d9819e5ce..8dd4efc32 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Themes/DarkThemeColors.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Themes/DarkThemeColors.xaml @@ -171,7 +171,6 @@ <Color x:Key="graphGridLinesColor">#5C5C5C</Color> <Color x:Key="graphsMarkerColor">#5C5C5C</Color> <Color x:Key="materialColor">#FF03A9F4</Color> - <Color x:Key="whiteColor">#181818</Color> <!--Brushes--> <SolidColorBrush x:Key="borderBrush" Color="{StaticResource borderColor}"></SolidColorBrush> @@ -270,10 +269,6 @@ <GradientStop Color="#FEBDBDBD" Offset="0" /> <GradientStop Color="#004E4E4E" Offset="0.9" /> </LinearGradientBrush> - <LinearGradientBrush x:Key="infoBrush" StartPoint="0.5,0" EndPoint="0.5,1"> - <GradientStop Color="Black"/> - <GradientStop Color="#3C3C3C" Offset="1"/> - </LinearGradientBrush> <Style x:Key="{x:Type ToolTip}" TargetType="ToolTip"> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Themes/LightThemeColors.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Themes/LightThemeColors.xaml index 95d55d63e..0f5727e5b 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Themes/LightThemeColors.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Themes/LightThemeColors.xaml @@ -9,20 +9,20 @@ <ResourceDictionary> <system:Double x:Key = "HomeImageOpacity">1</system:Double> <SolidColorBrush x:Key="OrangeBrush" Color="#FFA300"/> - <SolidColorBrush x:Key="OrangeBrush200" Color="#FFA65F"/> - <SolidColorBrush x:Key="OrangeBrush250" Color="#E79F20"/> + <SolidColorBrush x:Key="OrangeBrush200" Color="#FFA65F"/> + <SolidColorBrush x:Key="OrangeBrush250" Color="#E79F20"/> <SolidColorBrush x:Key="OrangeCanceledBrush" Color="#EF832B"/> <!--Background for all duplicate buttons--> <SolidColorBrush x:Key="OrangeBrush300" Color="#FF9A6A"/> - <SolidColorBrush x:Key="OrangeBrush400" Color="#F38B76"/> + <SolidColorBrush x:Key="OrangeBrush400" Color="#F38B76"/> - <SolidColorBrush x:Key="RedBrush100" Color="#FF5151"/> + <SolidColorBrush x:Key="RedBrush100" Color="#FF5151"/> <SolidColorBrush x:Key="RedBrush200" Color="#FF6F6F"/> <!--Background for all remove/delete buttons--> <SolidColorBrush x:Key="RedBrush300" Color="#FF7272"/> - <SolidColorBrush x:Key="RedBrush400" Color="#FF8585"/> - <SolidColorBrush x:Key="RedBrush500" Color="#E14141"/> - <SolidColorBrush x:Key="OrangeUploadBrush" Color="#E76311"/> + <SolidColorBrush x:Key="RedBrush400" Color="#FF8585"/> + <SolidColorBrush x:Key="RedBrush500" Color="#E14141"/> + <SolidColorBrush x:Key="OrangeUploadBrush" Color="#E76311"/> <SolidColorBrush x:Key="GreenBrush" Color="#04CB04"/> @@ -40,72 +40,72 @@ <SolidColorBrush x:Key="DarkBlueBrush" Color="#3C7EF4"/> - <SolidColorBrush x:Key="DodgerBlueBrush" Color="DodgerBlue"/> - <SolidColorBrush x:Key="BlueBrush100" Color="#03A9F4" /> - <SolidColorBrush x:Key="BlueBrush" Color="#64B8EC"/> - <SolidColorBrush x:Key="BlueSelectionStrokBrush" Color="#1EA9FF"/> + <SolidColorBrush x:Key="DodgerBlueBrush" Color="DodgerBlue"/> + <SolidColorBrush x:Key="BlueBrush100" Color="#03A9F4" /> + <SolidColorBrush x:Key="BlueBrush" Color="#64B8EC"/> + <SolidColorBrush x:Key="BlueSelectionStrokBrush" Color="#1EA9FF"/> - <SolidColorBrush x:Key="LilacBrush" Color="#833CEC"/> - <SolidColorBrush x:Key="LilacBrush100" Color="#682EBE"/> - <SolidColorBrush x:Key="LilacBrush200" Color="#532990"/> + <SolidColorBrush x:Key="LilacBrush" Color="#833CEC"/> + <SolidColorBrush x:Key="LilacBrush100" Color="#682EBE"/> + <SolidColorBrush x:Key="LilacBrush200" Color="#532990"/> - <SolidColorBrush x:Key="WhiteTextBrush" Color="White"/> - <SolidColorBrush x:Key="WhiteBackgroundBrush" Color="White"/> - <SolidColorBrush x:Key="WhiteBrush" Color="#E6FFFFFF"/> - <SolidColorBrush x:Key="WhiteBrush50" Color="#FFF1F1F1"/> - - <SolidColorBrush x:Key="WhiteBrush100" Color="#ECECEC"/> - <SolidColorBrush x:Key="LightGrayBrush" Color="#A5A4A4"/> - <SolidColorBrush x:Key="LightGrayBrush100" Color="#BBBBBB"/> - <SolidColorBrush x:Key="LightGrayBrush150" Color="#CBCBCB"/> - <SolidColorBrush x:Key="LightGrayBrush200" Color="#D9D9D9"/> + <SolidColorBrush x:Key="WhiteTextBrush" Color="White"/> + <SolidColorBrush x:Key="WhiteBackgroundBrush" Color="White"/> + <SolidColorBrush x:Key="WhiteBrush" Color="#E6FFFFFF"/> + <SolidColorBrush x:Key="WhiteBrush50" Color="#FFF1F1F1"/> + + <SolidColorBrush x:Key="WhiteBrush100" Color="#ECECEC"/> + <SolidColorBrush x:Key="LightGrayBrush" Color="#A5A4A4"/> + <SolidColorBrush x:Key="LightGrayBrush100" Color="#BBBBBB"/> + <SolidColorBrush x:Key="LightGrayBrush150" Color="#CBCBCB"/> + <SolidColorBrush x:Key="LightGrayBrush200" Color="#D9D9D9"/> <!-- used for regular text color --> - <SolidColorBrush x:Key="BlackForegroundBrush" Color="black"/> - <SolidColorBrush x:Key="DarkGrayBrush" Color="#1B1B1B"/> - <SolidColorBrush x:Key="DarkGrayBrush100" Color="#101010"/> - <SolidColorBrush x:Key="DarkGrayBrush200" Color="#202020"/> - <SolidColorBrush x:Key="GrayBrush300" Color="#303030"/> + <SolidColorBrush x:Key="BlackForegroundBrush" Color="black"/> + <SolidColorBrush x:Key="DarkGrayBrush" Color="#1B1B1B"/> + <SolidColorBrush x:Key="DarkGrayBrush100" Color="#101010"/> + <SolidColorBrush x:Key="DarkGrayBrush200" Color="#202020"/> + <SolidColorBrush x:Key="GrayBrush300" Color="#303030"/> <!--used for Foreground Storage--> - <SolidColorBrush x:Key="GrayBrush310" Color="#363636"/> - <SolidColorBrush x:Key="GrayBrush280" Color="#3E3E3E"/> - <SolidColorBrush x:Key="GrayBrush290" Color="#404040"/> - <!-- used for text color--> - <SolidColorBrush x:Key="GrayBrush250" Color="#5E5E5E"/> - <SolidColorBrush x:Key="GrayBrush200" Color="#616161"/> - <SolidColorBrush x:Key="GrayBrush50" Color="#7A7A7A"/> - <SolidColorBrush x:Key="GrayBrush" Color="Gray"/> - <SolidColorBrush x:Key="DimGrayBrush" Color="DimGray"/> + <SolidColorBrush x:Key="GrayBrush310" Color="#363636"/> + <SolidColorBrush x:Key="GrayBrush280" Color="#3E3E3E"/> + <SolidColorBrush x:Key="GrayBrush290" Color="#404040"/> + <!-- used for text color--> + <SolidColorBrush x:Key="GrayBrush250" Color="#5E5E5E"/> + <SolidColorBrush x:Key="GrayBrush200" Color="#616161"/> + <SolidColorBrush x:Key="GrayBrush50" Color="#7A7A7A"/> + <SolidColorBrush x:Key="GrayBrush" Color="Gray"/> + <SolidColorBrush x:Key="DimGrayBrush" Color="DimGray"/> <SolidColorBrush x:Key="SideBarBackgroundBrush" Color="white" /> <SolidColorBrush x:Key="JobFieldForeground" Color="#FF494949"/> <SolidColorBrush x:Key="HomePageForeground" Color="#FF494949"/> <!--used for border brush--> <SolidColorBrush x:Key="BorderBrushGainsboro" Color="Gainsboro"/> - + <LinearGradientBrush x:Key="BlueGradientBrush" StartPoint="0.5,0" EndPoint="0.5,1"> - <GradientStop Color="#03A9F4"/> - <GradientStop Color="#0081BB" Offset="1"/> - </LinearGradientBrush> + <GradientStop Color="#03A9F4"/> + <GradientStop Color="#0081BB" Offset="1"/> + </LinearGradientBrush> - <SolidColorBrush x:Key="TransparentBackgroundBrush" Color="#96FFFFFF"/> - <SolidColorBrush x:Key="TransparentBackgroundBrush100" Color="#B9FFFFFF"/> - <SolidColorBrush x:Key="TransparentBackgroundBrush200" Color="#E6FFFFFF"/> - <SolidColorBrush x:Key="TransparentBackgroundBrush300" Color="#D4FFFFFF"/> - <SolidColorBrush x:Key="Transparent200" Color="#C9F6F6F6"/> - <!--MachineJobSelectionView Grid Background--> - <SolidColorBrush x:Key="TransparentBackgroundBrush400" Color="#B1FFFFFF"/> + <SolidColorBrush x:Key="TransparentBackgroundBrush" Color="#96FFFFFF"/> + <SolidColorBrush x:Key="TransparentBackgroundBrush100" Color="#B9FFFFFF"/> + <SolidColorBrush x:Key="TransparentBackgroundBrush200" Color="#E6FFFFFF"/> + <SolidColorBrush x:Key="TransparentBackgroundBrush300" Color="#D4FFFFFF"/> + <SolidColorBrush x:Key="Transparent200" Color="#C9F6F6F6"/> + <!--MachineJobSelectionView Grid Background--> + <SolidColorBrush x:Key="TransparentBackgroundBrush400" Color="#B1FFFFFF"/> <SolidColorBrush x:Key="TransparentBackgroundBrush420" Color="#A6FFFFFF"/> - - <!--Storage.Views.MainView--> + + <!--Storage.Views.MainView--> <SolidColorBrush x:Key="TransparentBackgroundBrush500" Color="#8BFFFFFF"/> <!--MachineTechView--> - <SolidColorBrush x:Key="TransparentBackgroundBrush450" Color="#7EFFFFFF"/> - <SolidColorBrush x:Key="TransparentBackgroundBrush600" Color="#70FFFFFF"/> - <SolidColorBrush x:Key="SelectionFillBrush" Color="#338D8D8D"/> + <SolidColorBrush x:Key="TransparentBackgroundBrush450" Color="#7EFFFFFF"/> + <SolidColorBrush x:Key="TransparentBackgroundBrush600" Color="#70FFFFFF"/> + <SolidColorBrush x:Key="SelectionFillBrush" Color="#338D8D8D"/> <!--Dispenser background--> <SolidColorBrush x:Key="TransparentBackgroundBrush700" Color="#68F6F6F6"/> @@ -154,7 +154,6 @@ <Color x:Key="graphGridLinesColor">#FF464646</Color> <Color x:Key="graphsMarkerColor">Gray</Color> <Color x:Key="materialColor">#FF03A9F4</Color> - <Color x:Key="whiteColor">White</Color> <!--Brushes--> <SolidColorBrush x:Key="borderBrush" Color="{StaticResource borderColor}"></SolidColorBrush> <SolidColorBrush x:Key="graphGridLinesBrush" Color="{StaticResource graphGridLinesColor}"></SolidColorBrush> @@ -162,7 +161,7 @@ <SolidColorBrush x:Key="graphGridLinesLightBrush" Color="{StaticResource graphGridLinesColor}"></SolidColorBrush> <SolidColorBrush x:Key="graphGridLinesDarkBrush" Color="#FF2E2E2E"></SolidColorBrush> <SolidColorBrush x:Key="MaterialDesignFlatButtonClick" Color="#FFDEDEDE"></SolidColorBrush> - + <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" x:Key="graphBackgroundLight"> <GradientStop Color="White"/> <GradientStop Color="#FFE9E9E9" Offset="1"/> @@ -216,10 +215,6 @@ <GradientStop Color="#00EEEEEE" Offset="0" /> <GradientStop Color="#FFB5B5B5" Offset="1" /> </LinearGradientBrush> - <LinearGradientBrush x:Key="infoBrush" StartPoint="0.5,0" EndPoint="0.5,1"> - <GradientStop Color="White"/> - <GradientStop Color="#FFBFBFBF" Offset="1"/> - </LinearGradientBrush> </ResourceDictionary> - </ResourceDictionary.MergedDictionaries> +</ResourceDictionary.MergedDictionaries> </ResourceDictionary>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tup/TupFileBuilder.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tup/TupFileBuilder.cs deleted file mode 100644 index fad6ce949..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tup/TupFileBuilder.cs +++ /dev/null @@ -1,288 +0,0 @@ -using Ionic.Zip; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using Tango.BL; -using Tango.Core; -using Tango.Core.DB; -using Tango.Core.DI; -using Tango.MachineStudio.Common.Web; -using Tango.SQLExaminer; -using Tango.Transport.Web; -using Tango.Core.ExtensionMethods; -using Tango.PPC.Common.Publish; -using Tango.Settings; -using Tango.Core.Components; -using System.Text.RegularExpressions; - -namespace Tango.MachineStudio.Common.Tup -{ - public class TupFileBuilder : ExtendedObject - { - public event EventHandler<TupFileBuilderProgressEventArgs> Progress; - - public Task Build(String serialNumber, String filePath) - { - return Task.Factory.StartNew(() => - { - String tempDbName = "Tango_TUP"; - var tempPackageFolder = TemporaryManager.CreateFolder(); - String tempBackupFolder = "C:\\MachineStudioTUP"; - String tempBackupFile = Path.Combine(tempBackupFolder, tempDbName + ".bak"); - var tempZipFile = TemporaryManager.CreateImaginaryFile(); - DbManager dbManager = null; - - LogManager.Log("Generating tup file..."); - LogManager.Log($"Tup file: '{filePath}.'"); - LogManager.Log($"Temporary db name: '{tempDbName}'."); - LogManager.Log($"Temporary package folder: '{tempPackageFolder}'."); - LogManager.Log($"Temporary db backup folder: '{tempBackupFolder}'."); - LogManager.Log($"Temporary db backup file: '{tempBackupFile}'."); - LogManager.Log($"Temporary zip file: '{tempZipFile}'."); - - try - { - LogManager.Log("Initializing..."); - - OnProgress("Initializing..."); - - Core.DataSource localDataSource = new Core.DataSource() - { - Address = "localhost\\SQLEXPRESS", - IntegratedSecurity = true, - Type = DataSourceType.SQLServer, - Catalog = null, - }; - - try - { - LogManager.Log($"Trying to connect via SQLEXPRESS:\n{localDataSource.ToJsonString()}"); - dbManager = DbManager.FromDataSource(localDataSource); - } - catch (Exception ex) - { - try - { - LogManager.Log(ex, "Could not connect using SQLEXPRESS. Trying local DB..."); - - CmdCommand command = new CmdCommand("sqllocaldb", "start \"MSSQLLocalDB\""); - var result = command.Run().Result; - - command = new CmdCommand("sqllocaldb", "info \"MSSQLLocalDB\""); - result = command.Run().Result; - - String pattern = "np:.+"; - Regex reg = new Regex(pattern); - var match = reg.Match(result.StandardOutput); - String address = match.ToString(); - if (address.Contains("np:")) - { - localDataSource.Address = address; - address = address.Trim().Replace("\r", ""); - } - else - { - throw new ArgumentException("Could not parse LocalDB address string."); - } - - LogManager.Log($"Trying to connect via LocalDB:\n{localDataSource.ToJsonString()}"); - dbManager = DbManager.FromDataSource(localDataSource); - } - catch (Exception x) - { - LogManager.Log(x, "Could not find any database service for this operation."); - throw x; - } - } - - - - OnProgress("Downloading latest PPC version..."); - - LogManager.Log("Connecting to machine service..."); - MachineStudioWebClient client = TangoIOC.Default.GetInstance<MachineStudioWebClient>(); - - LogManager.Log("Requesting latest PPC version from machine service..."); - var response = client.DownloadLatestPPCVersion(new DownloadLatestPPCVersionRequest() { SerialNumber = serialNumber }).Result; - - LogManager.Log($"Machine service response:\n{response.ToJsonString()}"); - - var remoteDataSource = response.DataSource; - - using (AutoFileDownloader downloader = new AutoFileDownloader(response.BlobAddress, response.CdnAddress, tempZipFile)) - { - downloader.Progress += (x, e) => - { - OnProgress($"Downloading latest PPC version '{response.Version}'...", false, e.Current, e.Total); - }; - - downloader.ResolveMode().GetAwaiter().GetResult(); - - LogManager.Log($"Downloading latest PPC version from: '{downloader.Address}'"); - - downloader.Download().Wait(); - } - - LogManager.Log("Extracting PPC version package..."); - - OnProgress("Extracting PPC package..."); - - using (ZipFile zip = new ZipFile(tempZipFile)) - { - int currentEntry = 0; - - zip.ExtractProgress += (x, args) => - { - if (args.EventType == ZipProgressEventType.Extracting_AfterExtractEntry) - { - OnProgress("Extracting PPC package...", false, currentEntry++, zip.Entries.Count); - } - }; - - zip.ExtractAll(tempPackageFolder); - } - - OnProgress("Extracting version information..."); - LogManager.Log("Extracting publish information..."); - PublishInfo publishInfo = PublishInfo.FromJson(File.ReadAllText(Path.Combine(tempPackageFolder, "version.json"))); - LogManager.Log($"Publish Information:\n{publishInfo}"); - - LogManager.Log("Modifying publish information to custom tup file..."); - publishInfo.IsMachineTupPackage = true; - publishInfo.MachineSerialNumber = serialNumber; - publishInfo.MachineDeploymentSlot = SettingsManager.Default.GetOrCreate<MachineStudioSettings>().DeploymentSlot; - - OnProgress("Creating temporary database..."); - - LogManager.Log($"Creating temporary db backup directory '{tempBackupFolder}'"); - - Directory.CreateDirectory(tempBackupFolder); - - LogManager.Log($"Creating new database: '{tempDbName}'"); - - //Create temp db - dbManager.Create(tempDbName, Path.Combine(tempBackupFolder, tempDbName + ".mdf")); - - OnProgress("Generating database snapshot..."); - - LogManager.Log("Starting database synchronization..."); - - Thread.Sleep(2000); - - localDataSource.Catalog = tempDbName; - - ExaminerSequenceConfigurationRunner runner = new ExaminerSequenceConfigurationRunner( - Path.Combine(tempPackageFolder, "Provision Scripts", "config.xml"), - Path.Combine(tempPackageFolder, "Provision Scripts"), - remoteDataSource, - localDataSource, - serialNumber); - - runner.ScriptExecuting += (x, item) => - { - LogManager.Log($"Executing script '{item.FileName}'..."); - OnProgress($"{item.Name}..."); - }; - - runner.Log += (x, log) => - { - LogManager.Log(log); - }; - - runner.Run().GetAwaiter().GetResult(); - - OnProgress("Generating database snapshot..."); - - if (File.Exists(tempBackupFile)) - { - LogManager.Log($"Deleting file '{tempBackupFile}'"); - File.Delete(tempBackupFile); - } - - LogManager.Log($"Generating backup for '{tempDbName}' to '{tempBackupFile}'..."); - - dbManager.Backup(tempDbName, tempBackupFile); - - OnProgress("Injecting database snapshot to PPC package..."); - - using (ZipFile zip = new ZipFile(tempZipFile)) - { - LogManager.Log($"Injecting file '{tempBackupFile}' to original package at '{tempZipFile}'..."); - zip.AddFile(tempBackupFile, "/"); - - LogManager.Log($"Injecting modified publish information..."); - zip.UpdateEntry("version.json", publishInfo.ToJson()); - - zip.Save(); - } - - LogManager.Log($"Copying '{tempZipFile}' to '{filePath}'..."); - - File.Copy(tempZipFile, filePath, true); - - OnProgress("Completed", false, 100, 100); - - LogManager.Log("TUP file generation completed successfully."); - } - catch (Exception ex) - { - LogManager.Log(ex, "TUP file generation failed."); - OnProgress("Failed", false, 0, 100); - throw ex; - } - finally - { - LogManager.Log($"Removing '{tempZipFile}'."); - tempZipFile.Delete(); - LogManager.Log($"Removing '{tempPackageFolder}'."); - tempPackageFolder.Delete(); - - try - { - LogManager.Log($"Removing database '{tempDbName}'."); - dbManager.SetOffline(tempDbName); - dbManager.SetOnline(tempDbName); - dbManager.Delete(tempDbName); - dbManager.Dispose(); - } - catch (Exception ex) - { - LogManager.Log(ex, $"Error removing temp database '{tempDbName}'."); - } - - try - { - LogManager.Log($"Removing '{tempBackupFolder}'."); - Directory.Delete(tempBackupFolder, true); - } - catch (Exception ex) - { - LogManager.Log(ex, $"Error removing folder '{tempBackupFolder}'."); - } - } - }); - } - - public async Task<String> GetLatestPPCVersion(String serialNumber) - { - MachineStudioWebClient client = TangoIOC.Default.GetInstance<MachineStudioWebClient>(); - var response = await client.DownloadLatestPPCVersion(new DownloadLatestPPCVersionRequest() { SerialNumber = serialNumber }); - return response.Version; - } - - private void OnProgress(String message, bool isIntermediate = true, double progress = 0, double total = 100) - { - Progress?.Invoke(this, new TupFileBuilderProgressEventArgs() - { - Message = message, - IsIntermediate = isIntermediate, - Progress = progress, - Total = total, - }); - } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tup/TupFileBuilderProgressEventArgs.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tup/TupFileBuilderProgressEventArgs.cs deleted file mode 100644 index ada69dd40..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tup/TupFileBuilderProgressEventArgs.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Tango.MachineStudio.Common.Tup -{ - public class TupFileBuilderProgressEventArgs - { - public double Progress { get; set; } - public double Total { get; set; } - public bool IsIntermediate { get; set; } - public String Message { get; set; } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/CheckForUpdatesResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/CheckForUpdatesResponse.cs index b78047c85..51608e6c4 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/CheckForUpdatesResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/CheckForUpdatesResponse.cs @@ -17,7 +17,5 @@ namespace Tango.MachineStudio.Common.Web public String Comments { get; set; } public String BlobAddress { get; set; } - - public String CdnAddress { get; set; } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestPPCVersionRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestPPCVersionRequest.cs deleted file mode 100644 index 24d465e69..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestPPCVersionRequest.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.Transport.Web; - -namespace Tango.MachineStudio.Common.Web -{ - public class DownloadLatestPPCVersionRequest : WebRequestMessage - { - public String SerialNumber { get; set; } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestPPCVersionResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestPPCVersionResponse.cs deleted file mode 100644 index 2cc6b731a..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestPPCVersionResponse.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.Core; -using Tango.Transport.Web; - -namespace Tango.MachineStudio.Common.Web -{ - public class DownloadLatestPPCVersionResponse : WebResponseMessage - { - public String Version { get; set; } - - public String BlobAddress { get; set; } - - public String CdnAddress { get; set; } - - public DataSource DataSource { get; set; } - } -} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestVersionResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestVersionResponse.cs index 60251d455..3209b9a2f 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestVersionResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/DownloadLatestVersionResponse.cs @@ -12,7 +12,5 @@ namespace Tango.MachineStudio.Common.Web public String Version { get; set; } public String BlobAddress { get; set; } - - public String CdnAddress { get; set; } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginMethod.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginMethod.cs deleted file mode 100644 index 83f1c0850..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginMethod.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Tango.MachineStudio.Common.Web -{ - public enum LoginMethod - { - [Description("Active Directory")] - ActiveDirectory, - [Description("Standard User")] - StandardUser, - } -} diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginRequest.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginRequest.cs index 1727a2c6e..577f5e208 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginRequest.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginRequest.cs @@ -12,6 +12,5 @@ namespace Tango.MachineStudio.Common.Web public String Version { get; set; } public String Email { get; set; } public String Password { get; set; } - public LoginMethod Method { get; set; } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginResponse.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginResponse.cs index 3515c32d1..4ae22fa93 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginResponse.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/LoginResponse.cs @@ -14,6 +14,5 @@ namespace Tango.MachineStudio.Common.Web public DataSource DataSource { get; set; } public bool VersionChangeRequired { get; set; } public String RequiredVersion { get; set; } - public bool PasswordChangeRequired { get; set; } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/MachineStudioWebClientBase.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/MachineStudioWebClientBase.cs index 72eb4acaa..131f89515 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/MachineStudioWebClientBase.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Web/MachineStudioWebClientBase.cs @@ -41,15 +41,6 @@ namespace Tango.MachineStudio.Common.Web } /// <summary> - /// Initializes a new instance of the <see cref="MachineStudioWebClientBase"/> class. - /// </summary> - /// <param name="cloned">Other instance.</param> - public MachineStudioWebClientBase(MachineStudioWebClientBase cloned) : base(cloned) - { - - } - - /// <summary> /// Executes the CheckForUpdates action and returns Tango.MachineStudio.Common.Web.CheckForUpdatesResponse. /// </summary> /// <returns></returns> @@ -103,14 +94,5 @@ namespace Tango.MachineStudio.Common.Web return Post<Tango.MachineStudio.Common.Web.RefreshTokenRequest, Tango.MachineStudio.Common.Web.RefreshTokenResponse>("RefreshToken", request); } - /// <summary> - /// Executes the DownloadLatestPPCVersion action and returns Tango.MachineStudio.Common.Web.DownloadLatestPPCVersionResponse. - /// </summary> - /// <returns></returns> - public Task<Tango.MachineStudio.Common.Web.DownloadLatestPPCVersionResponse> DownloadLatestPPCVersion(Tango.MachineStudio.Common.Web.DownloadLatestPPCVersionRequest request) - { - return Post<Tango.MachineStudio.Common.Web.DownloadLatestPPCVersionRequest, Tango.MachineStudio.Common.Web.DownloadLatestPPCVersionResponse>("DownloadLatestPPCVersion", request); - } - } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/packages.config b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/packages.config index 6fd5091a8..f871776f5 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/packages.config +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/packages.config @@ -9,5 +9,4 @@ <package id="MahApps.Metro" version="1.5.0" targetFramework="net46" /> <package id="MaterialDesignColors" version="1.1.2" targetFramework="net46" /> <package id="MaterialDesignThemes" version="2.3.1.953" targetFramework="net46" /> - <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" /> </packages>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/MainWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/MainWindow.xaml index cd23547c2..0687ffed7 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/MainWindow.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/MainWindow.xaml @@ -7,7 +7,7 @@ xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" xmlns:web="clr-namespace:Tango.Web;assembly=Tango.Web" mc:Ignorable="d" - Title="Machine Studio Publisher" Height="620" Width="700" WindowStartupLocation="CenterScreen" WindowStyle="ToolWindow" ResizeMode="NoResize" Foreground="#202020" d:DataContext="{d:DesignInstance Type=local:MainWindowVM, IsDesignTimeCreatable=False}"> + Title="Machine Studio Publisher" Height="520" Width="700" WindowStartupLocation="CenterScreen" WindowStyle="ToolWindow" ResizeMode="NoResize" Foreground="#202020" d:DataContext="{d:DesignInstance Type=local:MainWindowVM, IsDesignTimeCreatable=False}"> <Window.Resources> <converters:EnumToItemsSourceConverter x:Key="EnumToItemsSourceConverter" /> @@ -80,12 +80,6 @@ <TextBlock FontSize="16" Margin="0 20 0 0">Comments</TextBlock> <TextBox HorizontalAlignment="Left" Height="70" Margin="0 5 0 0" Width="500" AcceptsReturn="True" TextWrapping="Wrap" Text="{Binding Options.Comments,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox> - <StackPanel Margin="0 20 0 0"> - <CheckBox x:Name="chkCreateTag" IsChecked="{Binding Options.CreateTag}">Create Tag On Repository</CheckBox> - <CheckBox Margin="0 5 0 0" IsChecked="{Binding Options.AutoCommitAndPush}">Auto Commit & Push</CheckBox> - <TextBlock Margin="0 10 0 0">Personal Access Token</TextBlock> - <TextBox BorderThickness="0 0 0 1" IsEnabled="{Binding ElementName=chkCreateTag,Path=IsChecked}" Margin="0 5 0 0" Text="{Binding Options.PersonalAccessToken}"></TextBox> - </StackPanel> </StackPanel> <Grid DockPanel.Dock="Bottom"> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/Tango.MachineStudio.Publisher.UI.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/Tango.MachineStudio.Publisher.UI.csproj index 20dd88a05..7ab758432 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/Tango.MachineStudio.Publisher.UI.csproj +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Publisher.UI/Tango.MachineStudio.Publisher.UI.csproj @@ -139,10 +139,6 @@ <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project> <Name>Tango.Core</Name> </ProjectReference> - <ProjectReference Include="..\..\Tango.Git\Tango.Git.csproj"> - <Project>{99081c0e-065c-4d68-bf60-f82330cca02d}</Project> - <Name>Tango.Git</Name> - </ProjectReference> <ProjectReference Include="..\..\Tango.Settings\Tango.Settings.csproj"> <Project>{d8f1ad85-526a-4f50-b6dc-d437af63d8d8}</Project> <Name>Tango.Settings</Name> @@ -179,7 +175,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/Tango.MachineStudio.UI/App.config b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.config index d70e2180b..59f92d6b9 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.config +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.config @@ -152,10 +152,6 @@ <assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" /> </dependentAssembly> - <dependentAssembly> - <assemblyIdentity name="Z.EntityFramework.Extensions" publicKeyToken="59b66d028979105b" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-4.0.50.0" newVersion="4.0.50.0" /> - </dependentAssembly> </assemblyBinding> </runtime> </configuration>
\ No newline at end of file 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 7eab5066a..8309500b7 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.xaml.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/App.xaml.cs @@ -23,37 +23,21 @@ using Tango.MachineStudio.UI.Views; using Tango.MachineStudio.Common; using Tango.Core; using Tango.BL; -using Tango.Integration.Operation; -using System.Net; -using System.Globalization; -using System.Windows.Markup; namespace Tango.MachineStudio.UI { /// <summary> /// Interaction logic for App.xaml /// </summary> - public partial class App : Application + public partial class App : Application { private WpfGlobalExceptionTrapper exceptionTrapper; private LogManager LogManager = LogManager.Default; - public static String[] StartupArgs { get; set; } = Environment.GetCommandLineArgs().Skip(1).ToArray(); + public static String[] StartupArgs { get; set; } protected override void OnStartup(StartupEventArgs e) { - //Set culture info. - var enUSCulture = new CultureInfo("en-US"); - - Thread.CurrentThread.CurrentCulture = enUSCulture; - Thread.CurrentThread.CurrentUICulture = enUSCulture; - CultureInfo.DefaultThreadCurrentCulture = enUSCulture; - CultureInfo.DefaultThreadCurrentUICulture = enUSCulture; - - FrameworkElement.LanguageProperty.OverrideMetadata( - typeof(FrameworkElement), - new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))); - StartupArgs = e.Args; #if DEBUG @@ -77,14 +61,7 @@ namespace Tango.MachineStudio.UI #if DEBUG LogManager.RegisterLogger(new VSOutputLogger()); #endif - LogManager.RegisterLogger(new FileLogger() { EnableAutoLogRemoval = true, EnableMaxFileSizeLimit = true }); - - var operatorLogger = MachineOperator.EmbeddedLogManager.RegisteredLoggers.SingleOrDefault(x => x is FileLogger) as FileLogger; - if (operatorLogger != null) - { - operatorLogger.EnableAutoLogRemoval = true; - operatorLogger.EnableMaxFileSizeLimit = true; - } + LogManager.RegisterLogger(new FileLogger()); LogManager.Log("Application Started..."); @@ -95,30 +72,24 @@ namespace Tango.MachineStudio.UI base.OnStartup(e); - exceptionTrapper = new WpfGlobalExceptionTrapper(); - exceptionTrapper.Initialize(this); - exceptionTrapper.ApplicationCrashed += ExceptionTrapper_ApplicationCrashed; - - ApplyEFCacheSettings(); + LogManager.Categories.Clear(); - WebRequest.DefaultWebProxy = null; - GetLastApplicationCrashFromWindows(); - } - - private async void GetLastApplicationCrashFromWindows() - { - var logItem = await exceptionTrapper.GetLastApplicationCrashEventLog(); - if (logItem != null) + if (settings.LoggingCategories.Count == 0) { - LogManager.Log(logItem); + settings.LoggingCategories.Add(LogCategory.Critical); + settings.LoggingCategories.Add(LogCategory.Error); + settings.LoggingCategories.Add(LogCategory.Info); + settings.LoggingCategories.Add(LogCategory.Warning); } - } - private void ApplyEFCacheSettings() - { - var settings = SettingsManager.Default.GetOrCreate<MachineStudioSettings>(); + LogManager.Categories.AddRange(settings.LoggingCategories); + + exceptionTrapper = new WpfGlobalExceptionTrapper(); + exceptionTrapper.Initialize(this); + exceptionTrapper.ApplicationCrashed += ExceptionTrapper_ApplicationCrashed; + //Apply Caching if (settings.CachingMode != ObservablesContextInMemoryCachingMode.None) { LogManager.Log("EF Caching is enabled."); @@ -137,7 +108,9 @@ namespace Tango.MachineStudio.UI { LogManager.Log("EF Caching is disabled"); } + } + #region Global Exception Trapping @@ -159,12 +132,15 @@ namespace Tango.MachineStudio.UI } catch { } - if (e.Exception.ToString().Contains("A Task's exception(s) were not observed")) + try { - e.TryRecover = true; - LogManager.Log("Task not observed exception. Ignoring..."); - return; + var eventLogger = TangoIOC.Default.GetInstance<IEventLogger>(); + if (eventLogger != null) + { + eventLogger.Log(e.Exception, "Application Crashed!"); + } } + catch { } Application.Current.Dispatcher.Invoke(() => { 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 26938b203..3cc5e8b49 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Authentication/DefaultAuthenticationProvider.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Authentication/DefaultAuthenticationProvider.cs @@ -90,16 +90,13 @@ namespace Tango.MachineStudio.UI.Authentication /// <param name="password">The password.</param> /// <returns></returns> /// <exception cref="AuthenticationException">Login failed for user " + email</exception> - public AuthenticationLoginResult Login(string email, string password, LoginMethod method, bool bypassVersionCheck = false, Action<String> logAction = null) + public AuthenticationLoginResult Login(string email, string password, bool bypassVersionCheck = false) { _refreshTokenTimer.Stop(); var settings = SettingsManager.Default.GetOrCreate<MachineStudioSettings>(); - if (!App.StartupArgs.Contains("-webDebug")) - { - _client.Environment = settings.DeploymentSlot; - } + _client.Environment = settings.DeploymentSlot; var appVersion = AssemblyHelper.GetCurrentAssemblyVersion().ToString(); @@ -112,15 +109,12 @@ namespace Tango.MachineStudio.UI.Authentication try { - logAction?.Invoke("Logging in to machine service..."); - response = _client.Login(new LoginRequest() { Email = email, Password = password, Version = appVersion, - Method = method, }).Result; } @@ -147,20 +141,9 @@ namespace Tango.MachineStudio.UI.Authentication }; } - if (response.PasswordChangeRequired) - { - return new AuthenticationLoginResult() - { - Response = response - }; - } - try { - ObservablesStaticCollections.Instance.Initialize((x) => - { - logAction.Invoke(x); - }); + ObservablesStaticCollections.Instance.Initialize(); } catch (Exception ex) { @@ -169,7 +152,6 @@ namespace Tango.MachineStudio.UI.Authentication using (ObservablesContext db = ObservablesContext.CreateDefault()) { - logAction.Invoke("Loading user permissions..."); User user = new UserBuilder(db).Set(x => x.Email.ToLower() == email.ToLower()).WithRolesAndPermissions().WithOrganization().Build(); if (user == null) @@ -181,8 +163,6 @@ namespace Tango.MachineStudio.UI.Authentication _refreshTokenTimer.Start(); - logAction.Invoke("Starting application..."); - return new AuthenticationLoginResult() { User = user, diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Console/ConsoleWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Console/ConsoleWindow.xaml index cc2c1fd46..0408319ea 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Console/ConsoleWindow.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Console/ConsoleWindow.xaml @@ -156,12 +156,12 @@ <RowDefinition Height="200*"/> </Grid.RowDefinitions> - <!--<controls:ScriptEditorControl BorderThickness="0 1 0 0" + <controls:ScriptEditorControl BorderThickness="0 1 0 0" BorderBrush="#616161" Text="{Binding Code,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" RunCommand="{Binding RunCommand}" StopCommand="{Binding StopCommand}" IntellisenseTypes="{Binding IntellisenseTypes}" - HighlightTypes="{Binding HighlightTypes}"/>--> + HighlightTypes="{Binding HighlightTypes}"/> <GridSplitter Grid.Row="1" Background="{StaticResource DarkGrayBrush100}" Foreground="{StaticResource DarkGrayBrush200}" BorderBrush="{StaticResource DarkGrayBrush200}" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Center" /> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/active_directory.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/active_directory.png Binary files differdeleted file mode 100644 index 4cced33e0..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/active_directory.png +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-emulator.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-emulator.png Binary files differindex 254fc819a..cb159d4a6 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-emulator.png +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-emulator.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-signalr.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-signalr.png Binary files differdeleted file mode 100644 index bda45ffd2..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-signalr.png +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-tcp.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-tcp.png Binary files differindex 04e47f539..192cbcaa7 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-tcp.png +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-tcp.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-usb.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-usb.png Binary files differindex 07814e7de..414bbab04 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-usb.png +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/external-bridge-usb.png diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/login.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/login.png Binary files differdeleted file mode 100644 index 9f7d0b9ba..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/login.png +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/login_white.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/login_white.png Binary files differdeleted file mode 100644 index 10a054147..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/login_white.png +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/machinestudio_login.png b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/machinestudio_login.png Binary files differdeleted file mode 100644 index 98f1b286a..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/machinestudio_login.png +++ /dev/null diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml index 054d7b9d8..a76749b05 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml @@ -8,7 +8,7 @@ xmlns:views="clr-namespace:Tango.MachineStudio.UI.Views" xmlns:sharedControls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" mc:Ignorable="d" - Title="Tango" Height="800" Width="1280" Foreground="{StaticResource MainWindow.Foreground}" FontFamily="{StaticResource flexo}" + Title="Tango" Height="800" Width="1280" Foreground="{StaticResource MainWindow.Foreground}" BorderThickness="1" BorderBrush="{StaticResource AccentColorBrush}" Background="{DynamicResource MainWindow.Background}" WindowTitleBrush="{StaticResource MainWindow.WindowTitleColorBrush}"> <Grid x:Name="main_grid"> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs index 2e201b6af..915deb484 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/MainWindow.xaml.cs @@ -1,10 +1,8 @@ using MahApps.Metro.Controls; using System; using System.Collections.Generic; -using System.Globalization; using System.Linq; using System.Text; -using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml index 939adf5d5..41405f7fb 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/DialogWindow.xaml @@ -7,7 +7,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Tango.MachineStudio.UI.Windows" mc:Ignorable="d" - Title="Machine Studio" MinHeight="220" SizeToContent="WidthAndHeight" MinWidth="600" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="CenterOwner" Background="Transparent" ShowInTaskbar="False" FontFamily="{StaticResource flexo}" > + Title="Machine Studio" MinHeight="220" SizeToContent="WidthAndHeight" MinWidth="600" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="CenterOwner" Background="Transparent" ShowInTaskbar="False"> <Grid> <Grid> <Border Background="{StaticResource Dialog.Background}" CornerRadius="10" Padding="10" Margin="20"> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/MessageBoxWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/MessageBoxWindow.xaml index c26fae591..988e3c21f 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/MessageBoxWindow.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/MessageBoxWindow.xaml @@ -8,7 +8,7 @@ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" mc:Ignorable="d" - Title="Machine Studio" MinHeight="220" MaxHeight="600" SizeToContent="Height" Width="570" Opacity="0" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="CenterOwner" Background="Transparent" ShowInTaskbar="False" FontFamily="{StaticResource flexo}" > + Title="Machine Studio" MinHeight="220" MaxHeight="600" SizeToContent="Height" Width="570" Opacity="0" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="CenterOwner" Background="Transparent" ShowInTaskbar="False"> <Window.Resources> <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"></BooleanToVisibilityConverter> @@ -31,7 +31,7 @@ <Grid> <StackPanel Orientation="Horizontal" VerticalAlignment="Top" Margin="0 30 0 0"> <materialDesign:PackIcon Kind="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=IconKind}" VerticalAlignment="Top" Width="50" Height="50" Foreground="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=IconColor}" /> - <TextBox Style="{x:Null}" BorderThickness="0" Background="Transparent" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" IsReadOnly="True" Padding="0 10 0 0" TextWrapping="Wrap" Margin="10 0 0 0" VerticalAlignment="Top" FontSize="14" Text="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=Message}" Width="400" Foreground="{StaticResource Dialog.Foreground}"></TextBox> + <TextBlock Padding="0 10 0 0" TextWrapping="Wrap" Margin="10 0 0 0" VerticalAlignment="Top" FontSize="14" Text="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=Message}" Width="400" Foreground="{StaticResource Dialog.Foreground}"></TextBlock> </StackPanel> </Grid> </DockPanel> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/TextInputBoxWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/TextInputBoxWindow.xaml index fc777ac7f..a43fafb46 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/TextInputBoxWindow.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Notifications/TextInputBoxWindow.xaml @@ -8,7 +8,7 @@ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" mc:Ignorable="d" - Title="Machine Studio" MinHeight="220" MaxHeight="600" SizeToContent="Height" Width="570" Opacity="0" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="CenterOwner" Background="Transparent" ShowInTaskbar="False" FontFamily="{StaticResource flexo}" Foreground="{StaticResource Dialog.Foreground}" > + Title="Machine Studio" MinHeight="220" MaxHeight="600" SizeToContent="Height" Width="570" Opacity="0" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="CenterOwner" Background="Transparent" ShowInTaskbar="False"> <Window.Resources> <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"></BooleanToVisibilityConverter> 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 4f9bee934..9d843369e 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.2.6.0")] +[assembly: AssemblyVersion("4.0.31.0")] [assembly: ComVisible(false)]
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs index feed9e193..0235f8cca 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs @@ -42,7 +42,6 @@ namespace Tango.MachineStudio.UI.StudioApplication private INotificationProvider _notification; private List<Window> _openedWindows; private List<IStudioViewModel> _notified_view_models; - private bool _isDialogShown; /// <summary> /// Occurs when the application is ready. @@ -50,11 +49,6 @@ namespace Tango.MachineStudio.UI.StudioApplication public event EventHandler ApplicationReady; /// <summary> - /// Occurs when the connected machine session has been lost and an automatic reconnection with the last machine is required. - /// </summary> - public event EventHandler ReconnectionRequired; - - /// <summary> /// Initializes a new instance of the <see cref="DefaultStudioApplicationManager" /> class. /// </summary> /// <param name="navigationManager">The navigation manager.</param> @@ -138,28 +132,15 @@ namespace Tango.MachineStudio.UI.StudioApplication { String failed_reason = (sender as IMachineOperator).FailedStateException.Message; - if (!_isDialogShown) + ConnectionLostViewVM vm = new ConnectionLostViewVM() { - _isDialogShown = true; + Exception = failed_reason + }; - ConnectionLostViewVM vm = new ConnectionLostViewVM() - { - Exception = failed_reason, - AutoReconnect = true, - }; - - InvokeUI(() => - { - _notification.ShowModalDialog<ConnectionLostViewVM, ConnectionLostView>(vm, (x) => - { - _isDialogShown = false; - ReconnectionRequired?.Invoke(this, new EventArgs()); - }, () => - { - _isDialogShown = false; - }); - }); - } + InvokeUI(() => + { + _notification.ShowModalDialog<ConnectionLostViewVM, ConnectionLostView>(vm, (x) => { }, () => { }); + }); } } } @@ -291,7 +272,7 @@ namespace Tango.MachineStudio.UI.StudioApplication var eventLogger = TangoIOC.Default.GetInstance<IEventLogger>(); if (eventLogger != null) { - //eventLogger.Log(EventTypes.APPLICATION_TERMINATED, "Application Terminated!"); + eventLogger.Log(EventTypes.APPLICATION_TERMINATED, "Application Terminated!"); eventLogger.FlushAll(); } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs index b716ed1fb..31b330c3f 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs @@ -15,10 +15,8 @@ using Tango.Core.Helpers; using Tango.Core.IO; using Tango.Integration.Operation; using Tango.Logging; -using Tango.MachineStudio.Common; using Tango.MachineStudio.Common.Authentication; using Tango.MachineStudio.Common.StudioApplication; -using Tango.Settings; using Tango.SharedUI.Helpers; using Tango.TFS; @@ -161,7 +159,6 @@ namespace Tango.MachineStudio.UI.TFS item.Severity = Severity.Medium; item.State = State.New; item.Type = WorkItemType.Bug; - item.Environment = SettingsManager.Default.GetOrCreate<MachineStudioSettings>().DeploymentSlot.ToDescription(); foreach (var window in Application.Current.Windows.OfType<Window>().Where(x => !String.IsNullOrWhiteSpace(x.Title))) { @@ -188,22 +185,6 @@ namespace Tango.MachineStudio.UI.TFS return item; } - private string[] GetLogFiles(FileLogger logger) - { - string[] fileEntries = new string[1]; - fileEntries[0] = logger.LogFile; - string fileName = Path.GetFileNameWithoutExtension(logger.LogFile); - int indexPos = fileName.IndexOf(FileLogger.FILE_SET_EXTENSION); - if (indexPos > 0) - { - string extension = Path.GetExtension(logger.LogFile); - fileName = fileName.Substring(0, indexPos); - fileEntries = Directory.GetFiles(logger.Folder, $"{fileName}*{extension}").Where(x => Path.GetFileName(x).StartsWith(logger.Tag)).OrderBy(x => x.Length).ThenBy(x => x).ToArray(); - } - - return fileEntries; - } - public void FinalizeBug(WorkItem item) { IAuthenticationProvider auth = TangoIOC.Default.GetInstance<IAuthenticationProvider>(); @@ -211,55 +192,31 @@ namespace Tango.MachineStudio.UI.TFS FileLogger appFileLogger = LogManager.Default.RegisteredLoggers.FirstOrDefault(x => x.GetType() == typeof(FileLogger)) as FileLogger; FileLogger embeddedFileLogger = MachineOperator.EmbeddedLogManager.RegisteredLoggers.FirstOrDefault(x => x.GetType() == typeof(FileLogger)) as FileLogger; - + if (appFileLogger != null) { - string[] logFiles = GetLogFiles(appFileLogger); - foreach( string file in logFiles) - { - var appLogFile = _tempFolder.CreateImaginaryFile(); - File.Copy(file, appLogFile.Path); - item.Attachments.Add(new Attachment() - { - Description = "Application Log File", - FilePath = appLogFile.Path, - Name = Path.GetFileName(file), - }); - } - } + var appLogFile = _tempFolder.CreateImaginaryFile(); + File.Copy(appFileLogger.LogFile, appLogFile.Path); - if (embeddedFileLogger != null && File.Exists(embeddedFileLogger.LogFile)) - { - string[] logFiles = GetLogFiles(embeddedFileLogger); - foreach (string file in logFiles) + item.Attachments.Add(new Attachment() { - var embeddedLogFile = _tempFolder.CreateImaginaryFile(); - File.Copy(file, embeddedLogFile.Path); - item.Attachments.Add(new Attachment() - { - Description = "Embedded Log File", - FilePath = embeddedLogFile.Path, - Name = Path.GetFileName(file), - }); - } + Description = "Application Log File", + FilePath = appLogFile.Path, + Name = Path.GetFileName(appFileLogger.LogFile), + }); } - //Add session log file.. - if (MachineOperator.EnableSessionLogFile) + if (embeddedFileLogger != null && File.Exists(embeddedFileLogger.LogFile)) { - var file = MachineOperator.SessionLogger.LogFile; + var embeddedLogFile = _tempFolder.CreateImaginaryFile(); + File.Copy(embeddedFileLogger.LogFile, embeddedLogFile.Path); - if (file != null && File.Exists(file)) + item.Attachments.Add(new Attachment() { - var sessionLogFile = _tempFolder.CreateImaginaryFile(); - File.Copy(file, sessionLogFile.Path); - item.Attachments.Add(new Attachment() - { - Description = "Session Log File", - FilePath = sessionLogFile.Path, - Name = Path.GetFileName(file), - }); - } + Description = "Embedded Log File", + FilePath = embeddedLogFile.Path, + Name = Path.GetFileName(embeddedFileLogger.LogFile), + }); } SystemInformationModel sysModel = new SystemInformationModel(); diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamMembersProvider.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamMembersProvider.cs index 464599452..0691ca6bd 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamMembersProvider.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamMembersProvider.cs @@ -13,8 +13,7 @@ namespace Tango.MachineStudio.UI.TFS { public IEnumerable GetSuggestions(string filter) { - var members = TangoIOC.Default.GetInstance<TeamFoundationServiceExtendedClient>().Project.Members; - return members.Where(x => x.AssignName.ToLower().Contains(filter.ToLower())); + return TangoIOC.Default.GetInstance<TeamFoundationServiceExtendedClient>().Project.Members.Where(x => x.AssignName.ToLower().Contains(filter.ToLower())); } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj index cd4eb4dd3..3379ef4ae 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj @@ -36,7 +36,7 @@ <WarningLevel>4</WarningLevel> </PropertyGroup> <PropertyGroup> - <ApplicationIcon>machine_new_small.ico</ApplicationIcon> + <ApplicationIcon>machine.ico</ApplicationIcon> </PropertyGroup> <ItemGroup> <Reference Include="Dragablz, Version=0.0.3.197, Culture=neutral, processorArchitecture=MSIL"> @@ -343,6 +343,14 @@ <DependentUpon>Settings.settings</DependentUpon> <DesignTimeSharedInput>True</DesignTimeSharedInput> </Compile> + <Content Include="..\..\Build\ColorLib\Debug\Tango.ColorLib_v1.dll"> + <Link>Tango.ColorLib_v1.dll</Link> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\..\Build\ColorLib\Debug\Tango.ColorLib_v2.dll"> + <Link>Tango.ColorLib_v2.dll</Link> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="..\..\tcc\benchmarks\benchmarks_rgb_lab.csv"> <Link>TCC\benchmarks_rgb_lab.csv</Link> <CopyToOutputDirectory>Always</CopyToOutputDirectory> @@ -351,12 +359,6 @@ <Link>TCC\template.bmp</Link> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> - <Resource Include="Images\login_white.png" /> - <Resource Include="Images\login.png" /> - <Resource Include="Images\active_directory.png" /> - <Resource Include="Images\machinestudio_login.png" /> - <Resource Include="Images\external-bridge-signalr.png" /> - <Resource Include="machine_new_small.ico" /> <Resource Include="Images\Statuses\dyeing.png" /> <Resource Include="Images\Statuses\dyeing_Anim.gif" /> <Resource Include="Images\Statuses\error_Anim.gif" /> @@ -418,10 +420,6 @@ <Project>{63561e19-ff5a-414b-a5ef-e30711543e1d}</Project> <Name>Tango.Emulations</Name> </ProjectReference> - <ProjectReference Include="..\..\Tango.Git\Tango.Git.csproj"> - <Project>{99081c0e-065c-4d68-bf60-f82330cca02d}</Project> - <Name>Tango.Git</Name> - </ProjectReference> <ProjectReference Include="..\..\Tango.Integration\Tango.Integration.csproj"> <Project>{4206ac58-3b57-4699-8835-90bf6db01a61}</Project> <Name>Tango.Integration</Name> @@ -446,10 +444,6 @@ <Project>{8491d07b-c1f6-4b62-a412-41b9fd2d6538}</Project> <Name>Tango.SharedUI</Name> </ProjectReference> - <ProjectReference Include="..\..\Tango.SQLExaminer\Tango.SQLExaminer.csproj"> - <Project>{e1e66ed9-597d-45fa-8048-de90a6930484}</Project> - <Name>Tango.SQLExaminer</Name> - </ProjectReference> <ProjectReference Include="..\..\Tango.TFS\Tango.TFS.csproj"> <Project>{998f8471-dc1b-41b6-9d96-354e1b4e7a32}</Project> <Name>Tango.TFS</Name> @@ -466,18 +460,22 @@ <Project>{f69da3a8-f823-461e-87cf-a9275abc0b15}</Project> <Name>Tango.MachineStudio.Dispensers</Name> </ProjectReference> - <ProjectReference Include="..\Modules\Tango.MachineStudio.ActionLogs\Tango.MachineStudio.ActionLogs.csproj"> - <Project>{447ecb9f-f730-47d6-8df8-d232bf4a0315}</Project> - <Name>Tango.MachineStudio.ActionLogs</Name> - </ProjectReference> <ProjectReference Include="..\Modules\Tango.MachineStudio.Catalogs\Tango.MachineStudio.Catalogs.csproj"> <Project>{7d0fce3c-9a37-439c-9f9f-b26cfd6a8a33}</Project> <Name>Tango.MachineStudio.Catalogs</Name> </ProjectReference> + <ProjectReference Include="..\Modules\Tango.MachineStudio.ColorLab\Tango.MachineStudio.ColorLab.csproj"> + <Project>{4d183aca-552b-4135-ae81-7c5a8e5fc3b1}</Project> + <Name>Tango.MachineStudio.ColorLab</Name> + </ProjectReference> <ProjectReference Include="..\Modules\Tango.MachineStudio.DataCapture\Tango.MachineStudio.DataCapture.csproj"> <Project>{fc337a7f-1214-41d8-9992-78092a3b961e}</Project> <Name>Tango.MachineStudio.DataCapture</Name> </ProjectReference> + <ProjectReference Include="..\Modules\Tango.MachineStudio.DB\Tango.MachineStudio.DB.csproj"> + <Project>{94f7acf8-55e1-4a02-b9bc-a818413fdbbf}</Project> + <Name>Tango.MachineStudio.DB</Name> + </ProjectReference> <ProjectReference Include="..\Modules\Tango.MachineStudio.Developer\Tango.MachineStudio.Developer.csproj"> <Project>{ce4a0d11-08a2-4cd6-9908-d6c62e80d805}</Project> <Name>Tango.MachineStudio.Developer</Name> @@ -498,10 +496,6 @@ <Project>{d0186ac0-0fcf-4d3b-9619-54812b6e524b}</Project> <Name>Tango.MachineStudio.RML</Name> </ProjectReference> - <ProjectReference Include="..\Modules\Tango.MachineStudio.Sites\Tango.MachineStudio.Sites.csproj"> - <Project>{18a27902-9881-4556-8163-f6df2236a14d}</Project> - <Name>Tango.MachineStudio.Sites</Name> - </ProjectReference> <ProjectReference Include="..\Modules\Tango.MachineStudio.Statistics\Tango.MachineStudio.Statistics.csproj"> <Project>{8a65ad6a-a9b4-48c0-9301-4b7434b712f8}</Project> <Name>Tango.MachineStudio.Statistics</Name> @@ -526,37 +520,6 @@ <Project>{cb0b0aa2-bb24-4bca-a720-45e397684e12}</Project> <Name>Tango.MachineStudio.Common</Name> </ProjectReference> - - <!--ColorLib--> - <ProjectReference Include="..\..\ColorLib\Tango.ColorLib_v4\Tango.ColorLib_v4.vcxproj"> - <Project>{E9528353-7D41-4AA8-BBAC-D65B7FE3A0D6}</Project> - <Name>Tango.ColorLib_v4</Name> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - <OutputItemType>Content</OutputItemType> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </ProjectReference> - <ProjectReference Include="..\..\ColorLib\Tango.ColorLib_v3\Tango.ColorLib_v3.vcxproj"> - <Project>{A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}</Project> - <Name>Tango.ColorLib_v3</Name> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - <OutputItemType>Content</OutputItemType> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </ProjectReference> - <ProjectReference Include="..\..\ColorLib\Tango.ColorLib_v2\Tango.ColorLib_v2.vcxproj"> - <Project>{1A3FC7FB-403C-4B3D-B705-28FCE11317DD}</Project> - <Name>Tango.ColorLib_v2</Name> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - <OutputItemType>Content</OutputItemType> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </ProjectReference> - <ProjectReference Include="..\..\ColorLib\Tango.ColorLib_v1\Tango.ColorLib_v1.vcxproj"> - <Project>{CF4C66B0-CD13-4D31-8133-339A01E7E6F2}</Project> - <Name>Tango.ColorLib_v1</Name> - <ReferenceOutputAssembly>false</ReferenceOutputAssembly> - <OutputItemType>Content</OutputItemType> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </ProjectReference> - <!--ColorLib--> </ItemGroup> <ItemGroup> <Resource Include="Images\design.png" /> @@ -683,9 +646,7 @@ copy /Y "$(SolutionDir)Referenced Assemblies\vcruntime140d.dll" "$(TargetDir)" copy /Y "$(SolutionDir)Referenced Assemblies\Microsoft.WITDataStore32.dll" "$(TargetDir)" if $(ConfigurationName) == Release del *.xml -if $(ConfigurationName) == Release RD /S /Q "$(TargetDir)ProtoCompilers\" -if $(ConfigurationName) == Release RD /S /Q "$(TargetDir)Roslyn\" -if $(ConfigurationName) == Release RD /S /Q "$(TargetDir)lib\"</PostBuildEvent> +if $(ConfigurationName) == Release RD /S /Q "$(TargetDir)ProtoCompilers\"</PostBuildEvent> </PropertyGroup> <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')" /> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> @@ -696,7 +657,7 @@ if $(ConfigurationName) == Release RD /S /Q "$(TargetDir)lib\"</PostBuildEvent> </Target> <ProjectExtensions> <VisualStudio> - <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_BuildVersioningStyle="None.None.Increment.DeltaBaseYearDayOfYear" BuildVersion_UpdateFileVersion="True" BuildVersion_DetectChanges="True" BuildVersion_UseGlobalSettings="False" /> + <UserProperties BuildVersion_UseGlobalSettings="False" BuildVersion_DetectChanges="True" BuildVersion_UpdateFileVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.DeltaBaseYearDayOfYear" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_StartDate="2000/1/1" /> </VisualStudio> </ProjectExtensions> </Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs index e0338a319..3fffd69fd 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs @@ -1,7 +1,5 @@ using System; -using System.Linq; using System.Windows; -using Tango.BL.ActionLogs; using Tango.Core.DI; using Tango.Integration.ExternalBridge; using Tango.Logging; @@ -71,19 +69,9 @@ namespace Tango.MachineStudio.UI TangoIOC.Default.Unregister<IDispatcherProvider>(); TangoIOC.Default.Unregister<IFirmwareUpgrader>(); TangoIOC.Default.Unregister<MachineStudioWebClient>(); - TangoIOC.Default.Unregister<IActionLogManager>(); - - if (App.StartupArgs.Contains("-webDebug")) - { - TangoIOC.Default.Register<MachineStudioWebClient, MachineStudioWebClient>(new MachineStudioWebClient("http://localhost:1111", null)); - } - else - { - TangoIOC.Default.Register<MachineStudioWebClient, MachineStudioWebClient>(new MachineStudioWebClient()); - } - + TangoIOC.Default.Register<MachineStudioWebClient, MachineStudioWebClient>(new MachineStudioWebClient()); TangoIOC.Default.Register<IDispatcherProvider, DefaultDispatcherProvider>(new DefaultDispatcherProvider(Application.Current.Dispatcher)); TangoIOC.Default.Register<INotificationProvider, DefaultNotificationProvider>(); TangoIOC.Default.Register<IAuthenticationProvider, DefaultAuthenticationProvider>(); @@ -95,9 +83,8 @@ namespace Tango.MachineStudio.UI TangoIOC.Default.Register<IEventLogger, DefaultEventLogger>(); TangoIOC.Default.Register<ISpeechProvider, DefaultSpeechProvider>(); TangoIOC.Default.Register<IFirmwareUpgrader, DefaultFirmwareUpgrader>(); - TangoIOC.Default.Register<IActionLogManager, DefaultActionLogManager>(new DefaultActionLogManager() { IsAsync = true }); - TangoIOC.Default.Register<TeamFoundationServiceExtendedClient>(new TeamFoundationServiceExtendedClient("https://twinetfs.visualstudio.com", String.Empty, "pyulwgs7m3v7pizz3oxusypdkdfw43txggo5mjwu2ouyv2qwprhq")); - + TangoIOC.Default.Register<TeamFoundationServiceExtendedClient>(new TeamFoundationServiceExtendedClient("https://twinetfs.visualstudio.com", String.Empty, "szzfokrceo4rhd4eqi5qpmxn3pa5iwl3q7tlqd36l2m7smz2ynoa")); + TangoIOC.Default.Register<MainViewVM>(); TangoIOC.Default.Register<LoadingViewVM>(); diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ConnectedMachineViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ConnectedMachineViewVM.cs index 30b2c83fd..16f6938a0 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ConnectedMachineViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ConnectedMachineViewVM.cs @@ -95,11 +95,11 @@ namespace Tango.MachineStudio.UI.ViewModels using (ObservablesContext db = ObservablesContext.CreateDefault()) { - var jobRuns = await db.JobRuns.Where(x => x.MachineGuid == ApplicationManager.Machine.Guid).Select(x => new { x.StartDate, x.EndDate, x.EndPosition }).ToListAsync(); + var jobs = await db.Jobs.Include(x => x.JobRuns).Where(x => x.MachineGuid == ApplicationManager.Machine.Guid).ToListAsync(); - TotalMachineWorkTime = TimeSpan.FromHours(jobRuns.Select(x => x.EndDate - x.StartDate).Sum(x => x.TotalHours)).ToStringUnlimitedHours(); + TotalMachineWorkTime = TimeSpan.FromHours(jobs.SelectMany(x => x.JobRuns).Select(x => x.EndDate - x.StartDate).Sum(x => x.TotalHours)).ToString(@"hh\:mm\:ss"); - int meters = (int)jobRuns.Select(x => x.EndPosition).Sum(); + int meters = (int)jobs.SelectMany(x => x.JobRuns).Select(x => x.EndPosition).Sum(); TotalMachineMeters = $"{meters.ToString("N0")} meters"; } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ConnectionLostViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ConnectionLostViewVM.cs index e96f0ab62..f1f4f69c0 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ConnectionLostViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/ConnectionLostViewVM.cs @@ -3,76 +3,12 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using System.Timers; -using System.Windows.Threading; using Tango.SharedUI; namespace Tango.MachineStudio.UI.ViewModels { public class ConnectionLostViewVM : DialogViewVM { - private Timer _reconnectTimer; - public String Exception { get; set; } - - private int _reconnectinSeconds; - public int ReconnectinSeconds - { - get { return _reconnectinSeconds; } - set { _reconnectinSeconds = value; RaisePropertyChangedAuto(); } - } - - private bool _autoReconnect; - public bool AutoReconnect - { - get { return _autoReconnect; } - set { _autoReconnect = value; RaisePropertyChangedAuto(); } - } - - - public ConnectionLostViewVM() : base() - { - ReconnectinSeconds = 10; - _reconnectTimer = new Timer(); - _reconnectTimer.Interval = TimeSpan.FromSeconds(1).TotalMilliseconds; - _reconnectTimer.Elapsed += _reconnectTimer_Elapsed; - } - - private void _reconnectTimer_Elapsed(object sender, ElapsedEventArgs e) - { - ReconnectinSeconds--; - - if (ReconnectinSeconds == -1) - { - _reconnectTimer.Stop(); - - InvokeUI(() => - { - Accept(); - }); - } - } - - public override void OnShow() - { - base.OnShow(); - - if (AutoReconnect) - { - _reconnectTimer.Start(); - } - } - - protected override void Accept() - { - _reconnectTimer.Stop(); - base.Accept(); - } - - protected override void Cancel() - { - base.Cancel(); - _reconnectTimer.Stop(); - } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs index 7d2d8b401..e45c29f73 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/FirmwareUpgradeViewVM.cs @@ -202,17 +202,11 @@ namespace Tango.MachineStudio.UI.ViewModels { IsFree = true; CanClose = true; - _stream?.Dispose(); UpgradeError = ex.FlattenMessage(); CurrentPage = 3; } } - protected override bool CanOK() - { - return base.CanOK() && CanClose; - } - private async void AbortUpgrade() { CanClose = true; diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs index f4645ecf2..cf34764d9 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoginViewVM.cs @@ -22,9 +22,6 @@ using Tango.MachineStudio.UI.Messages; using Tango.Settings; using Tango.SharedUI; using Tango.Web; -using SimpleValidator.Extensions; -using Tango.BL.Entities; -using System.Data.Entity; namespace Tango.MachineStudio.UI.ViewModels { @@ -41,7 +38,6 @@ namespace Tango.MachineStudio.UI.ViewModels private Rfc2898Cryptographer cryptographer; private MachineStudioSettings _settings; private MachineStudioWebClient _machineStudioWebClient; - private TaskCompletionSource<object> _updatePasswordCompletionSource; private String _email; /// <summary> @@ -86,14 +82,6 @@ namespace Tango.MachineStudio.UI.ViewModels set { _isLogging = value; RaisePropertyChangedAuto(); } } - private bool _showLogginDetails; - public bool ShowLoggingDetails - { - get { return _showLogginDetails; } - set { _showLogginDetails = value; RaisePropertyChangedAuto(); } - } - - private bool _rememberMe; /// <summary> /// Gets or sets a value indicating whether to remember the last user email and password. @@ -114,47 +102,6 @@ namespace Tango.MachineStudio.UI.ViewModels set { _enableSlotSelection = value; RaisePropertyChangedAuto(); } } - private bool _isActiveDirectory; - public bool IsActiveDirectory - { - get { return _isActiveDirectory; } - set { _isActiveDirectory = value; RaisePropertyChangedAuto(); if (value) IsStandardUser = false; } - } - - private bool _isStandardUser; - public bool IsStandardUser - { - get { return _isStandardUser; } - set { _isStandardUser = value; RaisePropertyChangedAuto(); if (value) IsActiveDirectory = false; } - } - - private String _progressLog; - public String ProgressLog - { - get { return _progressLog; } - set { _progressLog = value; RaisePropertyChangedAuto(); } - } - - private bool _isChangingPassword; - public bool IsChangingPassword - { - get { return _isChangingPassword; } - set { _isChangingPassword = value; RaisePropertyChangedAuto(); } - } - - private String _newPassword1; - public String NewPassword1 - { - get { return _newPassword1; } - set { _newPassword1 = value; RaisePropertyChangedAuto(); } - } - - private String _newPassword2; - public String NewPassword2 - { - get { return _newPassword2; } - set { _newPassword2 = value; RaisePropertyChangedAuto(); } - } /// <summary> /// Gets or sets the login command. @@ -162,11 +109,6 @@ namespace Tango.MachineStudio.UI.ViewModels public RelayCommand LoginCommand { get; set; } /// <summary> - /// Gets or sets the update password command. - /// </summary> - public RelayCommand UpdatePasswordCommand { get; set; } - - /// <summary> /// Initializes a new instance of the <see cref="LoginViewVM"/> class. /// </summary> /// <param name="authenticationProvider">The authentication provider.</param> @@ -175,7 +117,6 @@ namespace Tango.MachineStudio.UI.ViewModels public LoginViewVM(MachineStudioWebClient machineStudioWebClient, IAuthenticationProvider authenticationProvider, INavigationManager navigationManager, INotificationProvider notificationProvider, IEventLogger eventLogger) { EnableSlotSelection = true; - ShowLoggingDetails = true; _machineStudioWebClient = machineStudioWebClient; _settings = SettingsManager.Default.GetOrCreate<MachineStudioSettings>(); @@ -185,22 +126,12 @@ namespace Tango.MachineStudio.UI.ViewModels _authenticationProvider = authenticationProvider; _eventLogger = eventLogger; LoginCommand = new RelayCommand(Login, () => !IsLogging); - UpdatePasswordCommand = new RelayCommand(UpdatePassword, () => IsChangingPassword); cryptographer = new Rfc2898Cryptographer(); Email = _settings.LastLoginEmail; DeploymentSlot = _settings.DeploymentSlot; RememberMe = _settings.RememberMe; - if (_settings.LastLoginMethod == LoginMethod.ActiveDirectory) - { - IsActiveDirectory = true; - } - else - { - IsStandardUser = true; - } - try { Password = cryptographer.Decrypt(_settings.LastLoginPassword); @@ -221,22 +152,13 @@ namespace Tango.MachineStudio.UI.ViewModels try { IsLogging = true; - ShowLoggingDetails = false; - NewPassword1 = String.Empty; - NewPassword2 = String.Empty; - InvalidateRelayCommands(); - LoginMethod loginMethod = IsActiveDirectory ? LoginMethod.ActiveDirectory : LoginMethod.StandardUser; - await Task.Factory.StartNew(() => { _settings.DeploymentSlot = DeploymentSlot; - LoginResponse result = _authenticationProvider.Login(Email, Password, loginMethod, _settings.ByPassEnvironmentVersionCheck, (progress) => - { - ProgressLog = progress; - }).Response; + LoginResponse result = _authenticationProvider.Login(Email, Password, _settings.ByPassEnvironmentVersionCheck).Response; if (result.VersionChangeRequired && !_settings.ByPassEnvironmentVersionCheck) { @@ -255,113 +177,31 @@ namespace Tango.MachineStudio.UI.ViewModels return; } - if (result.PasswordChangeRequired) - { - StartUpdatePassword().Task.GetAwaiter().GetResult(); - Password = NewPassword1; - Login(); - return; - } - - //_eventLogger.Log(EventTypes.APPLICATION_STARTED, "Application Started!"); + _eventLogger.Log(EventTypes.APPLICATION_STARTED, "Application Started!"); _navigationManager.NavigateTo(NavigationView.MainView); _settings.LastLoginEmail = Email; _settings.RememberMe = RememberMe; - _settings.LastLoginMethod = loginMethod; _settings.LastLoginPassword = RememberMe ? cryptographer.Encrypt(Password) : null; _settings.Save(); - EnableSlotSelection = false; + _eventLogger.Log("User logged in."); - IsLogging = false; - ShowLoggingDetails = true; - IsChangingPassword = false; - InvalidateRelayCommands(); + EnableSlotSelection = false; }); } catch (Exception ex) { - IsLogging = false; - ShowLoggingDetails = true; - IsChangingPassword = false; - InvalidateRelayCommands(); LogManager.Log(ex, "Login Error."); _notificationProvider.ShowError($"An error occurred while trying to perform the log-in operation.\n{ex.FlattenMessage()}"); } - } - } - - private TaskCompletionSource<object> StartUpdatePassword() - { - _updatePasswordCompletionSource = new TaskCompletionSource<object>(); - - IsChangingPassword = true; - ShowLoggingDetails = false; - IsLogging = false; - InvalidateRelayCommands(); - - return _updatePasswordCompletionSource; - } - - private async void UpdatePassword() - { - await Task.Factory.StartNew(() => - { - try - { - if (!Validate()) - { - return; - } - - ProgressLog = "Updating your password..."; - IsChangingPassword = false; - IsLogging = true; - InvalidateRelayCommands(); - - using (var db = ObservablesContext.CreateDefault()) - { - var user = db.Users.SingleOrDefault(x => x.Email == Email); - user.PasswordChangeRequired = false; - user.Password = User.GetPasswordHash(NewPassword1); - db.SaveChanges(); - } - - _updatePasswordCompletionSource.SetResult(true); - } - catch (Exception ex) - { - IsLogging = false; - IsChangingPassword = false; - ShowLoggingDetails = true; - InvalidateRelayCommands(); - _updatePasswordCompletionSource.SetException(ex); - } finally { + IsLogging = false; InvalidateRelayCommands(); } - }); - } - - protected override void OnValidating() - { - if (IsChangingPassword) - { - if (!NewPassword1.IsBetweenLength(6, 8)) - { - InsertError(nameof(NewPassword1), "Password must be 6 to 8 characters long"); - } - - if (NewPassword1 != NewPassword2) - { - InsertError(nameof(NewPassword2), "Passwords do not match"); - } } - - base.OnValidating(); } } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs index 5e44bf43d..d1f3cc69e 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineConnectionViewVM.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core.Commands; -using Tango.Core.DI; using Tango.Emulations.ExternalBridge; using Tango.Integration.ExternalBridge; using Tango.MachineStudio.Common; @@ -53,18 +52,7 @@ namespace Tango.MachineStudio.UI.ViewModels { if (_scanner == null) { - var settings = SettingsManager.Default.GetOrCreate<MachineStudioSettings>(); _scanner = new ExternalBridgeScanner(); - _scanner.SignalRConfiguration.Enabled = settings.EnableExternalBridgeSignalR; - if (App.StartupArgs.Contains("-webDebug")) - { - _scanner.SignalRConfiguration.Address = "http://localhost:1111/"; //settings.DeploymentSlot.ToAddress(); - } - else - { - _scanner.SignalRConfiguration.Address = settings.DeploymentSlot.ToAddress(); - } - _scanner.SignalRConfiguration.Hub = settings.ExternalBridgeSignalRHub; } EnableDiagnostics = true; @@ -120,8 +108,6 @@ namespace Tango.MachineStudio.UI.ViewModels catch (Exception ex) { LogManager.Log(ex, "Error starting external bridge scanner."); - Cancel(); - TangoIOC.Default.GetInstance<INotificationProvider>().ShowError($"There is a problem with machine scanning.\n{ex.FlattenMessage()}"); } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineLoginViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineLoginViewVM.cs index 81d3f4243..7584617ed 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineLoginViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MachineLoginViewVM.cs @@ -27,11 +27,6 @@ namespace Tango.MachineStudio.UI.ViewModels public ExternalBridgeLoginIntent Intent { get; set; } /// <summary> - /// Gets or sets a value indicating whether to require safety level operations permission from the remote machine. - /// </summary> - public bool RequireSafetyOperations { get; set; } - - /// <summary> /// Gets or sets the login command. /// </summary> public RelayCommand<String> LoginCommand { get; set; } @@ -46,7 +41,7 @@ namespace Tango.MachineStudio.UI.ViewModels /// </summary> public MachineLoginViewVM() { - Intent = ExternalBridgeLoginIntent.Diagnostics; + Intent = ExternalBridgeLoginIntent.FullControl; LoginCommand = new RelayCommand<string>(Login); CancelCommand = new RelayCommand(Cancel); } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs index 4f8c8a9b1..90fe25c8f 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs @@ -58,9 +58,6 @@ namespace Tango.MachineStudio.UI.ViewModels private IEventLogger _eventLogger; private MachineStudioSettings _settings; private MachineStudioWebClient _machineStudioWebClient; - private IExternalBridgeClient _reconnectionMachine; - private MachineLoginViewVM _reconnectionMachineConfig; - private bool _lastUploadHardwareConfigLocal; /// <summary> /// Gets or sets the current loaded module. @@ -347,20 +344,6 @@ namespace Tango.MachineStudio.UI.ViewModels AboutCommand = new RelayCommand(ShowAboutDialog); ChangeAppThemeCommand = new RelayCommand<MachineStudioTheme>(ChangeTheme); - - ApplicationManager.ReconnectionRequired += ApplicationManager_ReconnectionRequired; - } - - private async void ApplicationManager_ReconnectionRequired(object sender, EventArgs e) - { - if (_reconnectionMachine is IExternalBridgeSecureClient client) - { - ConnectToMachineSecure(client, _reconnectionMachineConfig); - } - else - { - await ConnectToMachineLocal(_reconnectionMachine, _reconnectionMachine.Machine, _lastUploadHardwareConfigLocal); - } } private void MachineEventsStateProvider_EventsResolved(object sender, IEnumerable<MachinesEvent> e) @@ -418,11 +401,13 @@ namespace Tango.MachineStudio.UI.ViewModels String serial = ApplicationManager.ConnectedMachine.SerialNumber; await ApplicationManager.ConnectedMachine.Disconnect(); ApplicationManager.SetConnectedMachine(null); + _eventLogger.Log("Disconnected from machine " + serial); PostMessage(new MachineConnectionChangedMessage() { Machine = null }); } catch (Exception ex) { + _eventLogger.Log(ex, "Error disconnecting from machine."); LogManager.Log(ex, "Could not disconnect from machine."); } finally @@ -470,23 +455,71 @@ namespace Tango.MachineStudio.UI.ViewModels x.SelectedMachine.EnableEventsNotification = x.EnableDiagnostics; x.SelectedMachine.UseKeepAlive = x.EnableKeepAlive; x.SelectedMachine.JobUnitsMethod = _settings.JobUnitsMethod; - x.SelectedMachine.JobRunsLogger.JobSource = BL.Enumerations.JobSource.Remote; if (x.SelectedMachine is ExternalBridgeTcpClient) { x.SelectedMachine.As<ExternalBridgeTcpClient>().EnableApplicationLogs = x.EnableApplicationLogs; x.SelectedMachine.RequestTimeout = _settings.ExternalBridgeRequestTimeout; - x.SelectedMachine.ContinuousRequestTimeout = _settings.ExternalBridgeContinuousRequestTimeout; - } - - if (x.SelectedMachine.Adapter is TcpTransportAdapter) - { - (x.SelectedMachine.Adapter as TcpTransportAdapter).WriteMode = _settings.TcpTransportAdapterWriteMode; } if (x.SelectedMachine.RequiresAuthentication) { - ConnectToMachineSecure(x.SelectedMachine as IExternalBridgeSecureClient); + //Check machine exist on my database first + if (x.SelectedMachine.Machine == null) + { + _notificationProvider.ShowError($"The specified machine '{x.SelectedMachine.SerialNumber}' could not be found on the database. Aborting connection."); + return; + } + + _notificationProvider.ShowModalDialog<MachineLoginViewVM>(async (login) => + { + using (NotificationProvider.PushTaskItem("Connecting to machine " + x.SelectedMachine.ToString() + "...")) + { + try + { + await x.SelectedMachine.As<IExternalBridgeSecureClient>().Connect(new PMR.Integration.ExternalBridgeLoginRequest() + { + AppID = "Machine Studio", + HostName = Environment.MachineName, + Password = login.Password, + UserGuid = AuthenticationProvider.CurrentUser.Guid, + Intent = login.Intent, + }); + + ApplicationManager.SetConnectedMachine(x.SelectedMachine); + (x.SelectedMachine as IExternalBridgeSecureClient).SessionClosed += (_, __) => + { + InvokeUI(() => + { + _notificationProvider.ShowError("The remote machine has closed the current session. Machine disconnected."); + ApplicationManager.SetConnectedMachine(null); + }); + }; + PostMessage(new MachineConnectionChangedMessage() { Machine = x.SelectedMachine }); + _eventLogger.Log(String.Format("Successfully connected to machine {0} via TCP", x.SelectedMachine.SerialNumber)); + + //if (x.UploadHardwareConfiguration) + //{ + // UploadHardwareConfiguration(false); + //} + + } + catch (ResponseErrorException ex) + { + LogManager.Log(ex); + _eventLogger.Log(ex, "Error connecting to machine " + x.SelectedMachine.SerialNumber); + _notificationProvider.ShowError("Could not connect to the selected machine." + Environment.NewLine + ex.Container.ErrorMessage); + } + catch (Exception ex) + { + LogManager.Log(ex); + _eventLogger.Log(ex, "Error connecting to machine " + x.SelectedMachine.SerialNumber); + _notificationProvider.ShowError("Could not connect to the selected machine." + Environment.NewLine + ex.Message); + } + + InvalidateRelayCommands(); + } + }); } else { @@ -494,15 +527,47 @@ namespace Tango.MachineStudio.UI.ViewModels { if (vm.SelectedMachine != null) { - await ConnectToMachineLocal(x.SelectedMachine, vm.SelectedMachine, x.UploadHardwareConfiguration); + using (NotificationProvider.PushTaskItem("Connecting to " + x.SelectedMachine.ToString() + "...")) + { + try + { + await x.SelectedMachine.Connect(); + x.SelectedMachine.SerialNumber = vm.SelectedMachine.SerialNumber; + ApplicationManager.SetConnectedMachine(x.SelectedMachine); + + PostMessage(new MachineConnectionChangedMessage() { Machine = x.SelectedMachine }); + _eventLogger.Log(String.Format("Successfully connected to machine {0} via USB", x.SelectedMachine.SerialNumber)); + _settings.LastVirtualMachineSerialNumber = vm.SelectedMachine.SerialNumber; + _settings.Save(); + + if (x.UploadHardwareConfiguration) + { + UploadHardwareConfiguration(false); + } + } + catch (Exception ex) + { + LogManager.Log(ex); + + if (x.SelectedMachine != null) + { + _eventLogger.Log(ex, "Error connecting to machine " + x.SelectedMachine.SerialNumber); + } + + _notificationProvider.ShowError("Could not connect to the selected machine." + Environment.NewLine + ex.Message); + + } + + InvalidateRelayCommands(); + } } }); } - base.InvalidateRelayCommands(); + InvalidateRelayCommands(); } - base.InvalidateRelayCommands(); + InvalidateRelayCommands(); }); } else @@ -567,115 +632,6 @@ namespace Tango.MachineStudio.UI.ViewModels InvalidateRelayCommands(); } - private async Task ConnectToMachineLocal(IExternalBridgeClient client, Machine machine, bool uploadHardwareConfig) - { - using (NotificationProvider.PushTaskItem("Connecting to " + client.ToString() + "...")) - { - try - { - _reconnectionMachine = client; - - await client.Connect(); - client.SerialNumber = machine.SerialNumber; - ApplicationManager.SetConnectedMachine(client); - - PostMessage(new MachineConnectionChangedMessage() { Machine = client }); - _settings.LastVirtualMachineSerialNumber = machine.SerialNumber; - _settings.Save(); - - _lastUploadHardwareConfigLocal = uploadHardwareConfig; - - if (uploadHardwareConfig) - { - UploadHardwareConfiguration(false); - } - } - catch (Exception ex) - { - LogManager.Log(ex); - - _notificationProvider.ShowError("Could not connect to the selected machine." + Environment.NewLine + ex.Message); - - } - - InvalidateRelayCommands(); - } - } - - private async void ConnectToMachineSecure(IExternalBridgeSecureClient machine, MachineLoginViewVM config) - { - using (NotificationProvider.PushTaskItem("Connecting to machine " + machine.ToString() + "...")) - { - try - { - await machine.Connect(new PMR.Integration.ExternalBridgeLoginRequest() - { - AppID = "Machine Studio", - HostName = Environment.MachineName, - Password = config.Password, - UserGuid = AuthenticationProvider.CurrentUser.Guid, - Intent = config.Intent, - UserName = AuthenticationProvider.CurrentUser.Contact.FullName, - RequireSafetyLevelOperations = config.RequireSafetyOperations - }, new PMR.Integration.ConfigureProtocolRequest() - { - EnableCompression = true, - GenericProtocol = PMR.Integration.GenericMessageProtocol.Bson - }); - - _reconnectionMachine = machine; - _reconnectionMachineConfig = config; - - ApplicationManager.SetConnectedMachine(machine); - machine.SessionClosed -= Machine_SessionClosed; - machine.SessionClosed += Machine_SessionClosed; - PostMessage(new MachineConnectionChangedMessage() { Machine = machine }); - - //if (x.UploadHardwareConfiguration) - //{ - // UploadHardwareConfiguration(false); - //} - - } - catch (ResponseErrorException ex) - { - LogManager.Log(ex); - _notificationProvider.ShowError("Could not connect to the selected machine." + Environment.NewLine + ex.Container.ErrorMessage); - } - catch (Exception ex) - { - LogManager.Log(ex); - _notificationProvider.ShowError("Could not connect to the selected machine." + Environment.NewLine + ex.Message); - } - - InvalidateRelayCommands(); - } - } - - private void ConnectToMachineSecure(IExternalBridgeSecureClient machine) - { - //Check machine exist on my database first - if (machine.Machine == null) - { - _notificationProvider.ShowError($"The specified machine '{machine.SerialNumber}' could not be found on the database. Aborting connection."); - return; - } - - _notificationProvider.ShowModalDialog<MachineLoginViewVM>((login) => - { - ConnectToMachineSecure(machine, login); - }); - } - - private void Machine_SessionClosed(object sender, EventArgs e) - { - InvokeUI(() => - { - _notificationProvider.ShowError("The remote machine has closed the current session. Machine disconnected."); - ApplicationManager.SetConnectedMachine(null); - }); - } - private async void UploadHardwareConfiguration(bool showSuccessMessage = true) { try @@ -711,7 +667,7 @@ namespace Tango.MachineStudio.UI.ViewModels /// Starts the specified module. /// </summary> /// <param name="module">The module.</param> - internal async void StartModule(IStudioModule module) + internal void StartModule(IStudioModule module) { IsMenuOpened = false; @@ -736,9 +692,10 @@ namespace Tango.MachineStudio.UI.ViewModels m.IsLoaded = false; } + CurrentModule = module; + if (module != null) { - CurrentModule = module; CurrentModule.IsLoaded = true; IsModuleLoaded = true; @@ -749,10 +706,7 @@ namespace Tango.MachineStudio.UI.ViewModels { IsModuleLoaded = false; LogManager.Log(String.Format("Navigating to Home...")); - (MainView.Self as MainView).NavigationControl.NavigateTo("Home", () => - { - CurrentModule = module; - }); + (MainView.Self as MainView).NavigationControl.NavigateTo("Home"); } } @@ -760,7 +714,7 @@ namespace Tango.MachineStudio.UI.ViewModels /// Opens the module in a new window. /// </summary> /// <param name="module">The module.</param> - private async void OpenModuleInWindow(IStudioModule module, Rect? bounds = null, WindowState? state = null, bool setHomeModule = true) + private void OpenModuleInWindow(IStudioModule module, Rect? bounds = null, WindowState? state = null) { if (module == null) return; @@ -768,12 +722,7 @@ namespace Tango.MachineStudio.UI.ViewModels { module.InNewWindow = true; - if (setHomeModule) - { - StartModule(null); - } - - await Task.Delay(1000); + StartModule(null); LogManager.Log(String.Format("Starting module '{0}' in new window...", module.Name)); @@ -969,7 +918,7 @@ namespace Tango.MachineStudio.UI.ViewModels if (module != null && !module.InNewWindow) { - OpenModuleInWindow(module, item.Bounds, item.State, false); + OpenModuleInWindow(module, item.Bounds, item.State); } } diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs index 160041b5f..2ee8574b1 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/UpdateViewVM.cs @@ -179,7 +179,6 @@ namespace Tango.MachineStudio.UI.ViewModels _updateInfo = new CheckForUpdatesResponse(); _updateInfo.BlobAddress = response.BlobAddress; _updateInfo.Version = response.Version; - _updateInfo.CdnAddress = response.CdnAddress; LatestVersion = _updateInfo.Version; StartUpdate(); @@ -271,7 +270,7 @@ namespace Tango.MachineStudio.UI.ViewModels { logManager.Log("Creating temporary file " + tempFile); - using (AutoFileDownloader downloader = new AutoFileDownloader(_updateInfo.BlobAddress, _updateInfo.CdnAddress, tempFile.Path)) + using (StorageBlobDownloader downloader = new StorageBlobDownloader(_updateInfo.BlobAddress, tempFile.Path)) { downloader.Progress += (x, e) => { 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 22c1a5c00..f7e90d4f5 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/AboutView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/AboutView.xaml @@ -9,7 +9,6 @@ xmlns:pmrPrinting="clr-namespace:Tango.PMR.Printing;assembly=Tango.PMR" xmlns:operation="clr-namespace:Tango.Integration.Operation;assembly=Tango.Integration" xmlns:bl="clr-namespace:Tango.BL;assembly=Tango.BL" - xmlns:adapters="clr-namespace:Tango.Transport.Adapters;assembly=Tango.Transport" xmlns:local="clr-namespace:Tango.MachineStudio.UI.Views" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" Width="600" Height="700" Background="{StaticResource Dialog.Background}" d:DataContext="{d:DesignInstance Type=vm:AboutViewVM, IsDesignTimeCreatable=False}" DataContext="{Binding AboutViewVM, Source={StaticResource Locator}}" Foreground="{StaticResource MainWindow.Foreground}"> @@ -29,7 +28,7 @@ <Grid> <StackPanel Orientation="Horizontal" Margin="10"> - <Image Source="{StaticResource MachineSmall}" Width="60" RenderOptions.BitmapScalingMode="Fant"></Image> + <Image Source="/Images/machine-trans.png" RenderOptions.BitmapScalingMode="Fant"></Image> <TextBlock Text="About" VerticalAlignment="Center" Margin="10 0 0 0" FontSize="20"></TextBlock> </StackPanel> </Grid> @@ -76,9 +75,6 @@ <TextBlock FontWeight="SemiBold">Job Units Duplication Method:</TextBlock> <ComboBox HorizontalAlignment="Left" Width="150" DockPanel.Dock="Left" ItemsSource="{Binding Source={x:Type operation:JobUnitsMethods},Converter={StaticResource EnumToItemsSourceConverter}}" SelectedValue="{Binding MachineStudioSettings.JobUnitsMethod}" SelectedValuePath="Value" DisplayMemberPath="DisplayName"></ComboBox> - <TextBlock FontWeight="SemiBold">External Bridge TCP Write Mode:</TextBlock> - <ComboBox HorizontalAlignment="Left" Width="150" DockPanel.Dock="Left" ItemsSource="{Binding Source={x:Type adapters:TcpTransportAdapterWriteMode},Converter={StaticResource EnumToItemsSourceConverter}}" SelectedValue="{Binding MachineStudioSettings.TcpTransportAdapterWriteMode}" SelectedValuePath="Value" DisplayMemberPath="DisplayName"></ComboBox> - </controls:TableGrid> <DockPanel Margin="0 0 0 0"> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml index 600104095..e69ac516e 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectedMachineView.xaml @@ -19,8 +19,6 @@ <converters:BooleanToVisibilityInverseConverter x:Key="BooleanToVisibilityInverseConverter"></converters:BooleanToVisibilityInverseConverter> <converters:BooleanInverseConverter x:Key="BooleanInverseConverter"></converters:BooleanInverseConverter> <converters:ByteArrayToFileSizeConverter x:Key="ByteArrayToFileSizeConverter" /> - <converters:GenericMessageProtocolToStringConverter x:Key="GenericMessageProtocolToStringConverter" /> - <converters:BooleanToYesNoConverter x:Key="BooleanToYesNoConverter" /> </UserControl.Resources> <Grid> @@ -34,10 +32,6 @@ <StackPanel Orientation="Horizontal" Margin="10"> <ContentControl Content="{Binding ApplicationManager.ConnectedMachine}"> <ContentControl.Resources> - <DataTemplate DataType="{x:Type integration:ExternalBridgeSignalRClient}"> - <Image Source="/Images/external-bridge-signalr.png" Width="48" Height="48" RenderOptions.BitmapScalingMode="Fant"></Image> - </DataTemplate> - <DataTemplate DataType="{x:Type integration:ExternalBridgeTcpClient}"> <Image Source="/Images/external-bridge-tcp.png" Width="48" Height="48" RenderOptions.BitmapScalingMode="Fant"></Image> </DataTemplate> @@ -71,54 +65,6 @@ <Grid d:DataContext="{d:DesignInstance Type=integ:MachineOperator, IsDesignTimeCreatable=False}"> <ContentControl Content="{Binding ApplicationManager.ConnectedMachine}"> <ContentControl.Resources> - - <DataTemplate DataType="{x:Type integration:ExternalBridgeSignalRClient}"> - <controls:TableGrid RowHeight="22"> - <TextBlock FontWeight="SemiBold" Text="Serial Number:" /> - <TextBlock Text="{Binding SerialNumber}" /> - <TextBlock FontWeight="SemiBold" Text="Name:" /> - <TextBlock Text="{Binding Machine.Name}" /> - <TextBlock FontWeight="SemiBold" Text="Organization:" /> - <TextBlock Text="{Binding Machine.Organization.Name}" /> - <TextBlock FontWeight="SemiBold" Text="Total Dye Time:" /> - <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.TotalMachineWorkTime}" /> - <TextBlock FontWeight="SemiBold" Text="Total Dye Meters:" /> - <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.TotalMachineMeters}" /> - <TextBlock FontWeight="SemiBold" Text="Embedded Software Version:" /> - <TextBlock Text="{Binding DeviceInformation.Version}" /> - <TextBlock FontWeight="SemiBold" Text="Address:" /> - <TextBlock Text="{Binding Adapter.Address}" /> - <TextBlock FontWeight="SemiBold" Text="Total Bytes Sent:" /> - <TextBlock Text="{Binding Adapter.TotalBytesSent,Converter={StaticResource ByteArrayToFileSizeConverter},Mode=OneWay}" /> - <TextBlock FontWeight="SemiBold" Text="Total Bytes Received:" /> - <TextBlock Text="{Binding Adapter.TotalBytesReceived,Converter={StaticResource ByteArrayToFileSizeConverter},Mode=OneWay}" /> - <TextBlock FontWeight="SemiBold" Text="Transfer Rate:" /> - <TextBlock> - <Run Text="{Binding Adapter.TransferRate,Converter={StaticResource ByteArrayToFileSizeConverter},Mode=OneWay}"></Run> - <Run Text="/ sec"></Run> - </TextBlock> - <TextBlock FontWeight="SemiBold" Text="Compression:" /> - <TextBlock Text="{Binding Adapter.EnableCompression,Mode=OneWay,Converter={StaticResource BooleanToYesNoConverter}}" /> - <TextBlock FontWeight="SemiBold" Text="Generic Protocol:" /> - <TextBlock Text="{Binding GenericProtocol,Mode=OneWay,Converter={StaticResource GenericMessageProtocolToStringConverter}}" /> - <TextBlock FontWeight="SemiBold" Text="Diagnostics Frame Rate:" /> - <TextBlock> - <Run Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.DiagnosticsFrameProvider.FrameRate,Mode=OneWay,IsAsync=True}"></Run> - <Run Text="/ sec"></Run> - </TextBlock> - <TextBlock FontWeight="SemiBold" Text="Enable Diagnostics:" /> - <ToggleButton IsChecked="{Binding EnableDiagnostics}" HorizontalAlignment="Left"></ToggleButton> - <TextBlock FontWeight="SemiBold" Text="Enable Embedded Debug Logs:" /> - <ToggleButton IsChecked="{Binding EnableEmbeddedDebugging}" HorizontalAlignment="Left"></ToggleButton> - <TextBlock FontWeight="SemiBold" Text="Enable KeepAlive:" /> - <ToggleButton IsChecked="{Binding UseKeepAlive}" HorizontalAlignment="Left"></ToggleButton> - <TextBlock FontWeight="SemiBold" Text="Enable Events:" /> - <ToggleButton IsChecked="{Binding EnableEventsNotification}" HorizontalAlignment="Left"></ToggleButton> - <TextBlock FontWeight="SemiBold" Text="Enable Application Logs:" /> - <ToggleButton IsChecked="{Binding EnableApplicationLogs}" HorizontalAlignment="Left"></ToggleButton> - </controls:TableGrid> - </DataTemplate> - <DataTemplate DataType="{x:Type integration:ExternalBridgeTcpClient}"> <controls:TableGrid RowHeight="22"> <TextBlock FontWeight="SemiBold" Text="Serial Number:" /> @@ -144,10 +90,6 @@ <Run Text="{Binding Adapter.TransferRate,Converter={StaticResource ByteArrayToFileSizeConverter},Mode=OneWay}"></Run> <Run Text="/ sec"></Run> </TextBlock> - <TextBlock FontWeight="SemiBold" Text="Compression:" /> - <TextBlock Text="{Binding Adapter.EnableCompression,Mode=OneWay,Converter={StaticResource BooleanToYesNoConverter}}" /> - <TextBlock FontWeight="SemiBold" Text="Generic Protocol:" /> - <TextBlock Text="{Binding GenericProtocol,Mode=OneWay,Converter={StaticResource GenericMessageProtocolToStringConverter}}" /> <TextBlock FontWeight="SemiBold" Text="Diagnostics Frame Rate:" /> <TextBlock> <Run Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.DiagnosticsFrameProvider.FrameRate,Mode=OneWay,IsAsync=True}"></Run> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectionLostView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectionLostView.xaml index ba5624592..b2fa2b3e3 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectionLostView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ConnectionLostView.xaml @@ -7,7 +7,7 @@ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:local="clr-namespace:Tango.MachineStudio.UI.Views" mc:Ignorable="d" - Width="559" Height="350" Background="{StaticResource Dialog.Background}" d:DataContext="{d:DesignInstance Type=vm:ConnectionLostViewVM, IsDesignTimeCreatable=False}" Foreground="{StaticResource MainWindow.Foreground}"> + Width="559" Height="266" Background="{StaticResource Dialog.Background}" d:DataContext="{d:DesignInstance Type=vm:ConnectionLostViewVM, IsDesignTimeCreatable=False}" Foreground="{StaticResource MainWindow.Foreground}"> <Grid> <Grid> <Grid.RowDefinitions> @@ -18,7 +18,7 @@ <Grid> <StackPanel Orientation="Horizontal" Margin="10"> <Grid> - <Image Source="{StaticResource MachineSmall}" Width="60" RenderOptions.BitmapScalingMode="Fant"></Image> + <Image Source="/Images/machine-trans.png" RenderOptions.BitmapScalingMode="Fant"></Image> <Ellipse Fill="#FF2626" HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="30" Height="30" Margin="0 0 -5 -5"> </Ellipse> @@ -50,12 +50,7 @@ </Grid> <Grid Grid.Row="1"> - <TextBlock Visibility="{Binding AutoReconnect,Converter={StaticResource BoolToVisConverter}}" HorizontalAlignment="Left" VerticalAlignment="Center" Foreground="{StaticResource GrayBrush}"> - <Run>Reconnecting in</Run> - <Run Text="{Binding ReconnectinSeconds}" Foreground="{StaticResource RedBrush300}"></Run> - <Run>seconds...</Run> - </TextBlock> - <Button HorizontalAlignment="Right" Width="140" Command="{Binding CloseCommand}">CLOSE</Button> + <Button HorizontalAlignment="Right" Width="140" Command="{Binding OKCommand}">CLOSE</Button> </Grid> </Grid> </Grid> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/FirmwareUpgradeView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/FirmwareUpgradeView.xaml index 5cf23e79e..233f8e4cb 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/FirmwareUpgradeView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/FirmwareUpgradeView.xaml @@ -87,7 +87,7 @@ <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock HorizontalAlignment="Center" FontSize="18" FontWeight="SemiBold">Upgrading Machine Firmware</TextBlock> <TextBlock Margin="0 40 0 0" HorizontalAlignment="Center" Foreground="{StaticResource GrayBrush}" Text="{Binding Handler.Message,Converter={StaticResource EnumToDescriptionConverter},Mode=OneWay}"></TextBlock> - <ProgressBar Height="15" Width="600" Margin="0 5 0 0" Maximum="{Binding Handler.Total,Mode=OneWay}" Value="{Binding Handler.Current,Mode=OneWay}" IsIndeterminate="{Binding Handler.IsIndeterminate,Mode=OneWay}"></ProgressBar> + <ProgressBar Height="15" Width="600" Margin="0 5 0 0" Maximum="{Binding Handler.Total,Mode=OneWay}" Value="{Binding Handler.Current,Mode=OneWay}" ></ProgressBar> <Button Width="150" Background="{StaticResource RedBrush100}" BorderBrush="{StaticResource RedBrush100}" Margin="0 40 0 0" Height="35" Command="{Binding AbortCommand}">ABORT</Button> </StackPanel> </Grid> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml index 14fcc3a37..df1c1b831 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoadingView.xaml @@ -16,7 +16,7 @@ <Grid> <Grid HorizontalAlignment="Center" VerticalAlignment="Center"> <StackPanel> - <Image Source="{StaticResource MachineBig}" RenderOptions.BitmapScalingMode="Fant" Width="130"></Image> + <Image Source="/Images/machine-trans.png" RenderOptions.BitmapScalingMode="Fant" Width="100"></Image> <StackPanel Orientation="Horizontal"> <TextBlock FontSize="70" Foreground="{StaticResource AccentColorBrush}">Machine Studio</TextBlock> </StackPanel> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml index 9a3b3405e..ec6091988 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/LoginView.xaml @@ -42,102 +42,38 @@ </Grid.Style> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="40"> - <Image Source="{StaticResource MachineBig}" RenderOptions.BitmapScalingMode="Fant" Width="100"></Image> + <Image Source="/Images/machine-trans.png" RenderOptions.BitmapScalingMode="Fant" Width="100"></Image> <TextBlock Margin="20 0 0 0" VerticalAlignment="Center" FontSize="70" Foreground="{StaticResource AccentColorBrush}">Machine Studio</TextBlock> </StackPanel> + <DockPanel HorizontalAlignment="Center" VerticalAlignment="Center" Width="320" Margin="0 120 0 0" Height="510"> - <Grid> - <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Margin="-600 110 0 0" Visibility="{Binding ShowLoggingDetails,Converter={StaticResource BooleanToVisibilityConverter}}"> - <RadioButton ToolTip="Login using your an active directory account" IsChecked="{Binding IsActiveDirectory}" FontSize="16" VerticalContentAlignment="Center" Padding="10 0 0 0"> - <Image Source="/Images/active_directory.png" Stretch="Uniform" Height="80" RenderOptions.BitmapScalingMode="Fant" /> - </RadioButton> - <RadioButton ToolTip="Login using a standard Machine Studio account" IsChecked="{Binding IsStandardUser}" FontSize="16" Margin="0 20 0 0" VerticalContentAlignment="Center" Padding="10 0 0 0"> - <Image Source="/Images/machinestudio_login.png" Stretch="Uniform" Height="55" RenderOptions.BitmapScalingMode="Fant" /> - </RadioButton> - </StackPanel> - <DockPanel HorizontalAlignment="Center" VerticalAlignment="Center" Width="320" Margin="0 120 0 0" Height="510"> + <Button DockPanel.Dock="Bottom" AutomationProperties.AutomationId="{x:Static automation:UI.LoginButton}" Margin="25 20 0 0" Height="50" Command="{Binding LoginCommand}" Content="LOGIN"></Button> - <Grid DockPanel.Dock="Bottom" Margin="25 20 0 0" > - <Button AutomationProperties.AutomationId="{x:Static automation:UI.LoginButton}" Height="50" Command="{Binding LoginCommand}" Content="LOGIN"> - <Button.Style> - <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"> - <Setter Property="Visibility" Value="Visible"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding IsChangingPassword}" Value="True"> - <Setter Property="Visibility" Value="Hidden"></Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </Button.Style> - </Button> + <Grid> + <StackPanel Visibility="{Binding IsLogging,Converter={StaticResource BooleanToVisibilityInverseConverter}}"> + <TextBlock HorizontalAlignment="Center" FontSize="24">Login to your account</TextBlock> + <Image Source="/Images/account.png" RenderOptions.BitmapScalingMode="Fant" Width="100" Margin="0 20 0 0"></Image> + <DockPanel Margin="0 20 0 0"> + <materialDesign:PackIcon Margin="0 0 0 0" Width="20" Height="20" VerticalAlignment="Top" Foreground="{Binding ElementName=txtEmail, Path=BorderBrush}" Kind="EmailOutline" /> + <TextBox x:Name="txtEmail" IsTabStop="True" Margin="5 0 0 0" materialDesign:HintAssist.FloatingScale="0.50" materialDesign:HintAssist.Hint="Email" materialDesign:TextFieldAssist.TextBoxViewMargin="1 0 1 0" FontSize="20" Style="{StaticResource MaterialDesignFloatingHintTextBox}" Text="{Binding Email,UpdateSourceTrigger=PropertyChanged,ValidatesOnNotifyDataErrors=True}" AutomationProperties.IsRequiredForForm="True" /> + </DockPanel> + <DockPanel Margin="0 20 0 0"> + <materialDesign:PackIcon Margin="0 0 0 0" Width="20" Height="20" VerticalAlignment="Top" Foreground="{Binding ElementName=txtPass, Path=BorderBrush}" Kind="Key" /> + <PasswordBox x:Name="txtPass" helpers:PasswordHelper.Attach="True" helpers:PasswordHelper.Password="{Binding Password,Mode=TwoWay}" Margin="5 0 0 0" materialDesign:HintAssist.FloatingScale="0.50" materialDesign:HintAssist.Hint="Password" materialDesign:TextFieldAssist.TextBoxViewMargin="1 0 1 0" FontSize="20" Style="{StaticResource MaterialDesignFloatingHintPasswordBox}" AutomationProperties.IsRequiredForForm="True" /> + </DockPanel> + <DockPanel Margin="0 40 0 0" IsEnabled="{Binding EnableSlotSelection}"> + <materialDesign:PackIcon Margin="0 0 0 0" Width="20" Height="20" VerticalAlignment="Top" Foreground="{Binding ElementName=combo, Path=BorderBrush}" Kind="Settings" /> + <ComboBox x:Name="combo" ItemsSource="{Binding Source={x:Type web:DeploymentSlot},Converter={StaticResource EnumToItemsSourceConverter}}" SelectedValue="{Binding DeploymentSlot}" SelectedValuePath="Value" DisplayMemberPath="DisplayName" Margin="5 0 0 0" materialDesign:HintAssist.FloatingScale="0.50" materialDesign:HintAssist.Hint="Environment" materialDesign:TextFieldAssist.TextBoxViewMargin="1 0 1 0" FontSize="20" /> + </DockPanel> + <TextBlock Visibility="{Binding EnableSlotSelection,Converter={StaticResource BooleanToVisibilityInverseConverter}}" Margin="25 0 0 0" FontSize="10" Foreground="Gray">Environment selection requires restarting the application</TextBlock> + <CheckBox Margin="25 20 0 0" IsChecked="{Binding RememberMe}">Remember me</CheckBox> + </StackPanel> - <Button AutomationProperties.AutomationId="{x:Static automation:UI.LoginButton}" Height="50" Command="{Binding UpdatePasswordCommand}" Content="CHANGE PASSWORD"> - <Button.Style> - <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"> - <Setter Property="Visibility" Value="Hidden"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding IsChangingPassword}" Value="True"> - <Setter Property="Visibility" Value="Visible"></Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </Button.Style> - </Button> - </Grid> - - <Grid> - <StackPanel Visibility="{Binding ShowLoggingDetails,Converter={StaticResource BooleanToVisibilityConverter}}"> - <TextBlock HorizontalAlignment="Center" FontSize="24">Login to your account</TextBlock> - <Image Source="/Images/login.png" RenderOptions.BitmapScalingMode="Fant" Width="100" Margin="0 20 0 0"></Image> - <DockPanel Margin="0 20 0 0"> - <materialDesign:PackIcon Margin="0 0 0 0" Width="20" Height="20" VerticalAlignment="Top" Foreground="{Binding ElementName=txtEmail, Path=BorderBrush}" Kind="EmailOutline" /> - <TextBox x:Name="txtEmail" IsTabStop="True" Margin="5 0 0 0" materialDesign:HintAssist.FloatingScale="0.50" materialDesign:TextFieldAssist.TextBoxViewMargin="1 0 1 0" FontSize="20" Text="{Binding Email,UpdateSourceTrigger=PropertyChanged,ValidatesOnNotifyDataErrors=True}" AutomationProperties.IsRequiredForForm="True"> - <TextBox.Style> - <Style TargetType="TextBox" BasedOn="{StaticResource MaterialDesignFloatingHintTextBox}"> - <Setter Property="materialDesign:HintAssist.Hint" Value="Active Directory Email"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding IsStandardUser}" Value="True"> - <Setter Property="materialDesign:HintAssist.Hint" Value="Machine Studio Email"></Setter> - </DataTrigger> - </Style.Triggers> - </Style> - </TextBox.Style> - </TextBox> - </DockPanel> - <DockPanel Margin="0 20 0 0"> - <materialDesign:PackIcon Margin="0 0 0 0" Width="20" Height="20" VerticalAlignment="Top" Foreground="{Binding ElementName=txtPass, Path=BorderBrush}" Kind="Key" /> - <PasswordBox x:Name="txtPass" helpers:PasswordHelper.Attach="True" helpers:PasswordHelper.Password="{Binding Password,Mode=TwoWay}" Margin="5 0 0 0" materialDesign:HintAssist.FloatingScale="0.50" materialDesign:HintAssist.Hint="Password" materialDesign:TextFieldAssist.TextBoxViewMargin="1 0 1 0" FontSize="20" Style="{StaticResource MaterialDesignFloatingHintPasswordBox}" AutomationProperties.IsRequiredForForm="True" /> - </DockPanel> - <DockPanel Margin="0 40 0 0" IsEnabled="{Binding EnableSlotSelection}"> - <materialDesign:PackIcon Margin="0 0 0 0" Width="20" Height="20" VerticalAlignment="Top" Foreground="{Binding ElementName=combo, Path=BorderBrush}" Kind="Settings" /> - <ComboBox x:Name="combo" ItemsSource="{Binding Source={x:Type web:DeploymentSlot},Converter={StaticResource EnumToItemsSourceConverter}}" SelectedValue="{Binding DeploymentSlot}" SelectedValuePath="Value" DisplayMemberPath="DisplayName" Margin="5 0 0 0" materialDesign:HintAssist.FloatingScale="0.50" materialDesign:HintAssist.Hint="Environment" materialDesign:TextFieldAssist.TextBoxViewMargin="1 0 1 0" FontSize="20" /> - </DockPanel> - <TextBlock Visibility="{Binding EnableSlotSelection,Converter={StaticResource BooleanToVisibilityInverseConverter}}" Margin="25 0 0 0" FontSize="10" Foreground="Gray">Environment selection requires restarting the application</TextBlock> - <CheckBox Margin="25 20 0 0" IsChecked="{Binding RememberMe}">Remember me</CheckBox> - </StackPanel> - - <StackPanel Visibility="{Binding IsLogging,Converter={StaticResource BooleanToVisibilityConverter}}" VerticalAlignment="Center"> - <Grid> - <ProgressBar Width="300" Height="300" HorizontalAlignment="Center" VerticalAlignment="Center" IsIndeterminate="{Binding IsLogging}" Style="{StaticResource MaterialDesignCircularProgressBar}" Value="0" /> - <Image Source="{StaticResource MachineBig}" Width="200" RenderOptions.BitmapScalingMode="Fant"></Image> - </Grid> - <TextBlock HorizontalAlignment="Center" Margin="0 30 0 0" FontSize="16" FontStyle="Italic" Foreground="{StaticResource GrayBrush200}" Text="{Binding ProgressLog}"></TextBlock> - </StackPanel> - - <StackPanel Visibility="{Binding IsChangingPassword,Converter={StaticResource BooleanToVisibilityConverter}}"> - <TextBlock HorizontalAlignment="Center" FontSize="24">Password change required</TextBlock> - <Image Source="/Images/login.png" RenderOptions.BitmapScalingMode="Fant" Width="100" Margin="0 20 0 0"></Image> - <DockPanel Margin="0 40 0 0"> - <materialDesign:PackIcon Margin="0 0 0 0" Width="20" Height="20" VerticalAlignment="Top" Foreground="{Binding ElementName=txtNewPass1, Path=BorderBrush}" Kind="Key" /> - <PasswordBox x:Name="txtNewPass1" helpers:PasswordHelper.Attach="True" helpers:PasswordHelper.Password="{Binding NewPassword1,Mode=TwoWay,UpdateSourceTrigger=LostFocus,NotifyOnValidationError=True,ValidatesOnDataErrors=True,ValidatesOnNotifyDataErrors=True}" Margin="5 0 0 0" materialDesign:HintAssist.FloatingScale="0.50" materialDesign:HintAssist.Hint="New Password" materialDesign:TextFieldAssist.TextBoxViewMargin="1 0 1 0" FontSize="20" Style="{StaticResource MaterialDesignFloatingHintPasswordBox}" AutomationProperties.IsRequiredForForm="True" /> - </DockPanel> - <DockPanel Margin="0 40 0 0"> - <materialDesign:PackIcon Margin="0 0 0 0" Width="20" Height="20" VerticalAlignment="Top" Foreground="{Binding ElementName=txtNewPass2, Path=BorderBrush}" Kind="Key" /> - <PasswordBox x:Name="txtNewPass2" helpers:PasswordHelper.Attach="True" helpers:PasswordHelper.Password="{Binding NewPassword2,Mode=TwoWay,UpdateSourceTrigger=LostFocus,NotifyOnValidationError=True,ValidatesOnDataErrors=True,ValidatesOnNotifyDataErrors=True}" Margin="5 0 0 0" materialDesign:HintAssist.FloatingScale="0.50" materialDesign:HintAssist.Hint="Confirm Password" materialDesign:TextFieldAssist.TextBoxViewMargin="1 0 1 0" FontSize="20" Style="{StaticResource MaterialDesignFloatingHintPasswordBox}" AutomationProperties.IsRequiredForForm="True" /> - </DockPanel> - </StackPanel> - </Grid> - </DockPanel> - </Grid> + <StackPanel Visibility="{Binding IsLogging,Converter={StaticResource BooleanToVisibilityConverter}}" VerticalAlignment="Center"> + <mahapps:ProgressRing Width="80" Height="80" IsActive="{Binding IsLogging}"></mahapps:ProgressRing> + <TextBlock HorizontalAlignment="Center" Margin="0 30 0 0" FontSize="18" FontStyle="Italic">Logging you in...</TextBlock> + </StackPanel> + </Grid> + </DockPanel> </Grid> </UserControl> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml index 78557a42e..69ce4c855 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineConnectionView.xaml @@ -10,7 +10,7 @@ xmlns:emulations="clr-namespace:Tango.Emulations.ExternalBridge;assembly=Tango.Emulations" xmlns:local="clr-namespace:Tango.MachineStudio.UI.Views" mc:Ignorable="d" - d:DesignHeight="300" d:DesignWidth="400" Width="700" Height="500" Background="{StaticResource Dialog.Background}" DataContext="{Binding MachineConnectionViewVM, Source={StaticResource Locator}}" Foreground="{StaticResource MainWindow.Foreground}"> + d:DesignHeight="300" d:DesignWidth="300" Width="630" Height="400" Background="{StaticResource Dialog.Background}" DataContext="{Binding MachineConnectionViewVM, Source={StaticResource Locator}}" Foreground="{StaticResource MainWindow.Foreground}"> <UserControl.Resources> <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"></converters:BooleanToVisibilityConverter> @@ -27,7 +27,7 @@ <Grid> <StackPanel Orientation="Horizontal" Margin="10"> - <Image Source="{StaticResource MachineSmall}" Width="60" RenderOptions.BitmapScalingMode="Fant"></Image> + <Image Source="/Images/machine-trans.png" RenderOptions.BitmapScalingMode="Fant"></Image> <TextBlock Text="Machine Connection" VerticalAlignment="Center" Margin="10 0 0 0" FontSize="20"></TextBlock> </StackPanel> </Grid> @@ -55,28 +55,10 @@ <Grid Grid.Row="1"> <ListBox ItemsSource="{Binding Scanner.AvailableMachines}" SelectedItem="{Binding SelectedMachine}" Margin="0 0 0 7" BorderThickness="1" BorderBrush="{StaticResource BorderBrushGainsboro}" HorizontalContentAlignment="Stretch"> <ListBox.Resources> - <DataTemplate DataType="{x:Type integration:ExternalBridgeSignalRClient}"> - <DockPanel> - <StackPanel Orientation="Horizontal"> - <Image Source="/Images/external-bridge-signalr.png" Height="45" RenderOptions.BitmapScalingMode="Fant"></Image> - <StackPanel Margin="10 0 0 0"> - <TextBlock FontSize="11"> - <Run FontWeight="Bold">S/N:</Run> <Run Text="{Binding SerialNumber,Mode=OneWay}"></Run> - </TextBlock> - <TextBlock FontSize="11"> - <Run FontWeight="Bold">Address:</Run> <Run Text="{Binding IPAddress,Mode=OneWay}"></Run> - </TextBlock> - <TextBlock FontSize="11"> - <Run FontWeight="Bold">Organization:</Run> <Run Text="{Binding Machine.Organization.Name,Mode=OneWay}"></Run> - </TextBlock> - </StackPanel> - </StackPanel> - </DockPanel> - </DataTemplate> <DataTemplate DataType="{x:Type integration:ExternalBridgeTcpClient}"> <DockPanel> <StackPanel Orientation="Horizontal"> - <Image Source="/Images/external-bridge-tcp.png" Height="45" RenderOptions.BitmapScalingMode="Fant"></Image> + <Image Source="/Images/external-bridge-tcp.png" Width="38" Height="38" RenderOptions.BitmapScalingMode="Fant"></Image> <StackPanel Margin="10 0 0 0"> <TextBlock FontSize="11"> <Run FontWeight="Bold">S/N:</Run> <Run Text="{Binding SerialNumber,Mode=OneWay}"></Run> @@ -94,7 +76,7 @@ <DataTemplate DataType="{x:Type integration:ExternalBridgeUsbClient}"> <DockPanel> <StackPanel Orientation="Horizontal"> - <Image Source="/Images/external-bridge-usb.png" Height="45" RenderOptions.BitmapScalingMode="Fant"></Image> + <Image Source="/Images/external-bridge-usb.png" Width="38" Height="38" RenderOptions.BitmapScalingMode="Fant"></Image> <StackPanel Margin="10 0 0 0"> <TextBlock FontSize="11"> <Run FontWeight="Bold">Port:</Run> <Run Text="{Binding ComPort,Mode=OneWay}"></Run> @@ -109,7 +91,7 @@ <DataTemplate DataType="{x:Type emulations:EmulatorExternalBridge}"> <DockPanel> <StackPanel Orientation="Horizontal"> - <Image Source="/Images/external-bridge-emulator.png" Height="45" RenderOptions.BitmapScalingMode="Fant"></Image> + <Image Source="/Images/external-bridge-emulator.png" Width="38" Height="38" RenderOptions.BitmapScalingMode="Fant"></Image> <StackPanel Margin="10 0 0 0"> <TextBlock FontSize="11"> <Run Text="External Bridge Emulator"></Run> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineLoginView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineLoginView.xaml index e4cdfe199..7d0b2e25c 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineLoginView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineLoginView.xaml @@ -17,26 +17,19 @@ <Grid> <DockPanel LastChildFill="True"> - <Grid DockPanel.Dock="Bottom"> - - <CheckBox IsChecked="{Binding RequireSafetyOperations}" VerticalAlignment="Center" Margin="68 0 0 0" ToolTip="Require safety level operations permission from a near-by machine user"> - <TextBlock Margin="0 -2 0 0">Require Safety Level Operations</TextBlock> - </CheckBox> - - <StackPanel Margin="10" Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Right"> - <Button Command="{Binding LoginCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=Password}" Style="{StaticResource MaterialDesignFlatButton}" IsDefault="True" Margin="0 8 8 0"> - LOGIN - </Button> - <Button Command="{Binding CancelCommand}" Style="{StaticResource MaterialDesignFlatButton}" Margin="0 8 0 0"> - CANCEL - </Button> - </StackPanel> - </Grid> + <StackPanel Margin="10" Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Right" DockPanel.Dock="Bottom"> + <Button Command="{Binding LoginCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=Password}" Style="{StaticResource MaterialDesignFlatButton}" IsDefault="True" Margin="0 8 8 0"> + LOGIN + </Button> + <Button Command="{Binding CancelCommand}" Style="{StaticResource MaterialDesignFlatButton}" Margin="0 8 0 0"> + CANCEL + </Button> + </StackPanel> <Grid Margin="10"> <StackPanel> <StackPanel Orientation="Horizontal" VerticalAlignment="Top"> <Grid> - <Image Source="{StaticResource MachineSmall}" Width="60" RenderOptions.BitmapScalingMode="Fant"></Image> + <Image Source="../Images/machine-trans.png" Width="42" RenderOptions.BitmapScalingMode="Fant"></Image> <materialDesign:PackIcon Kind="Lock" VerticalAlignment="Bottom" Width="24" Height="24" HorizontalAlignment="Right" Foreground="{StaticResource AccentColorBrush}" /> </Grid> <TextBlock Padding="0 10 0 0" TextWrapping="Wrap" Margin="10 0 0 0" VerticalAlignment="Top" FontSize="18" Text="Machine Login" Width="400"></TextBlock> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineSerialView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineSerialView.xaml index 2393ab6e7..eea90c7b9 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineSerialView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MachineSerialView.xaml @@ -23,7 +23,7 @@ <Grid> <StackPanel Orientation="Horizontal" Margin="10"> - <Image Source="{StaticResource MachineSmall}" Width="60" RenderOptions.BitmapScalingMode="Fant"></Image> + <Image Source="/Images/machine-trans.png" RenderOptions.BitmapScalingMode="Fant"></Image> <TextBlock Text="Virtual Machine" VerticalAlignment="Center" Margin="10 0 0 0" FontSize="20"></TextBlock> </StackPanel> </Grid> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml index ea6e93412..d427be9e5 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml @@ -47,27 +47,51 @@ <materialDesign:DrawerHost IsLeftDrawerOpen="{Binding Source={x:Reference MenuToggleButton}, Path=IsChecked}"> <materialDesign:DrawerHost.LeftDrawerContent> - <DockPanel LastChildFill="False" > - <DockPanel.Style> - <Style TargetType="{x:Type DockPanel}"> - <Setter Property="TextElement.Foreground" Value="{StaticResource MainWindow.Foreground}"/> - </Style> - </DockPanel.Style> - <StackPanel MinWidth="300" DockPanel.Dock="Top" > + <DockPanel LastChildFill="False" TextElement.Foreground="{StaticResource MainWindow.Foreground}" > + <StackPanel MinWidth="300" DockPanel.Dock="Top"> <Grid> - <Button Style="{StaticResource MaterialDesignFlatButton}" Command="{Binding HomeCommand}" HorizontalAlignment="Left" HorizontalContentAlignment="Left" Margin="5 10 0 0" Width="200" Height="40" Padding="5 8 8 8" Foreground="{StaticResource BlackBrush}"> - <StackPanel Orientation="Horizontal"> - <materialDesign:PackIcon VerticalAlignment="Center" Kind="Home" Width="32" Height="32" Foreground="{StaticResource HomePageForeground}"></materialDesign:PackIcon> - <TextBlock FontSize="16" VerticalAlignment="Center" Margin="10 0 0 0" Foreground="{StaticResource HomePageForeground}">Home</TextBlock> - </StackPanel> - </Button> - <ToggleButton Style="{StaticResource MaterialDesignHamburgerToggleButton}" HorizontalAlignment="Right" Margin="16" IsChecked="{Binding Source={x:Reference MenuToggleButton}, Path=IsChecked, Mode=TwoWay}" /> + + <StackPanel Margin="5 0 0 0" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center"> + <Image Source="/Images/account.png" RenderOptions.BitmapScalingMode="Fant" VerticalAlignment="Center" Width="50" Height="50"></Image> + <StackPanel Margin="0 5 0 0"> + <TextBlock FontSize="16" TextTrimming="CharacterEllipsis" MaxWidth="170" FontStyle="Italic" FontWeight="Bold" Margin="10 0 0 0" VerticalAlignment="Center" Text="{Binding AuthenticationProvider.CurrentUser.Contact.FullName}"></TextBlock> + <TextBlock FontSize="12" TextTrimming="CharacterEllipsis" MaxWidth="170" FontStyle="Italic" Margin="10 5 0 0" VerticalAlignment="Center"> + <Run Text="{Binding AuthenticationProvider.CurrentUser.Organization.Name}"></Run> + , + <Run Text="{Binding AuthenticationProvider.CurrentUser.Roles[0].Name}"> + <Run.ToolTip> + <ItemsControl ItemsSource="{Binding AuthenticationProvider.CurrentUser.Roles}"> + <ItemsControl.ItemTemplate> + <DataTemplate> + <StackPanel Orientation="Horizontal" Margin="2"> + <materialDesign:PackIcon Kind="AccountKey" Width="16" Height="16" /> + <TextBlock Margin="5 0 0 0" Text="{Binding Name}"></TextBlock> + </StackPanel> + </DataTemplate> + </ItemsControl.ItemTemplate> + </ItemsControl> + </Run.ToolTip> + </Run> + <Run>...</Run> + </TextBlock> + </StackPanel> + </StackPanel> </Grid> <StackPanel Margin="0 16 0 0"> - + <ListBoxItem> + <i:Interaction.Triggers> + <i:EventTrigger EventName="PreviewMouseUp"> + <i:InvokeCommandAction Command="{Binding HomeCommand}"></i:InvokeCommandAction> + </i:EventTrigger> + </i:Interaction.Triggers> + <StackPanel Orientation="Horizontal"> + <materialDesign:PackIcon VerticalAlignment="Center" Kind="Home" Width="32" Height="32"></materialDesign:PackIcon> + <TextBlock FontSize="16" VerticalAlignment="Center" Margin="10 0 0 0">Home</TextBlock> + </StackPanel> + </ListBoxItem> </StackPanel> <StackPanel Margin="10 10 0 0"> <TextBlock Foreground="{StaticResource borderBrush}" FontSize="16" FontWeight="Bold" FontStyle="Italic">MODULES</TextBlock> @@ -75,7 +99,7 @@ </StackPanel> <ListBox ItemsSource="{Binding StudioModuleLoader.UserModules}" HorizontalContentAlignment="Stretch" FontSize="14"> <ListBox.ItemContainerStyle> - <Style TargetType="ListBoxItem" BasedOn="{StaticResource MaterialDesignListBoxItem}"> + <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}"> <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> <Setter Property="VerticalContentAlignment" Value="Stretch"></Setter> <Setter Property="Visibility" Value="{Binding InNewWindow,Converter={StaticResource BooleanToVisibilityInverseConverter}}"></Setter> @@ -124,36 +148,8 @@ <materialDesign:ColorZone Padding="16" materialDesign:ShadowAssist.ShadowDepth="Depth2" Mode="PrimaryMid" DockPanel.Dock="Top" Background="{StaticResource MainWindow.Header}"> <DockPanel> - <StackPanel Orientation="Horizontal"> - <ToggleButton VerticalAlignment="Center" Style="{StaticResource MaterialDesignHamburgerToggleButton}" IsChecked="{Binding IsMenuOpened}" + <ToggleButton Style="{StaticResource MaterialDesignHamburgerToggleButton}" IsChecked="{Binding IsMenuOpened}" x:Name="MenuToggleButton"/> - - <StackPanel Margin="10 0 0 0" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center"> - <Image Source="/Images/login_white.png" RenderOptions.BitmapScalingMode="Fant" VerticalAlignment="Center" Width="50" Height="50"></Image> - <StackPanel Margin="0 5 0 0"> - <TextBlock FontSize="16" TextTrimming="CharacterEllipsis" MaxWidth="170" FontStyle="Italic" FontWeight="Bold" Margin="10 0 0 0" VerticalAlignment="Center" Text="{Binding AuthenticationProvider.CurrentUser.Contact.FullName}"></TextBlock> - <TextBlock FontSize="12" TextTrimming="CharacterEllipsis" MaxWidth="170" FontStyle="Italic" Margin="10 5 0 0" VerticalAlignment="Center"> - <Run Text="{Binding AuthenticationProvider.CurrentUser.Organization.Name}"></Run> - , - <Run Text="{Binding AuthenticationProvider.CurrentUser.Roles[0].Name}"> - <Run.ToolTip> - <ItemsControl ItemsSource="{Binding AuthenticationProvider.CurrentUser.Roles}"> - <ItemsControl.ItemTemplate> - <DataTemplate> - <StackPanel Orientation="Horizontal" Margin="2"> - <materialDesign:PackIcon Kind="AccountKey" Width="16" Height="16" /> - <TextBlock Margin="5 0 0 0" Text="{Binding Name}"></TextBlock> - </StackPanel> - </DataTemplate> - </ItemsControl.ItemTemplate> - </ItemsControl> - </Run.ToolTip> - </Run> - <Run>...</Run> - </TextBlock> - </StackPanel> - </StackPanel> - </StackPanel> <materialDesign:PopupBox DockPanel.Dock="Right" PlacementMode="BottomAndAlignRightEdges" StaysOpen="False" > <StackPanel> <Button Command="{Binding ConnectCommand}"> @@ -235,71 +231,10 @@ </StackPanel> </materialDesign:PopupBox> <Grid> - - <Grid> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Height="60" HorizontalAlignment="Center"> - <StackPanel.Style> - <Style TargetType="StackPanel"> - <Style.Triggers> - <DataTrigger Binding="{Binding IsModuleLoaded}" Value="True"> - <DataTrigger.EnterActions> - <BeginStoryboard> - <Storyboard> - <DoubleAnimation Storyboard.TargetProperty="Opacity" To="0" Duration="00:00:0.5" /> - </Storyboard> - </BeginStoryboard> - </DataTrigger.EnterActions> - <DataTrigger.ExitActions> - <BeginStoryboard> - <Storyboard> - <DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="00:00:0.5" /> - </Storyboard> - </BeginStoryboard> - </DataTrigger.ExitActions> - </DataTrigger> - </Style.Triggers> - </Style> - </StackPanel.Style> - <Image Source="{StaticResource MachineSmall}" RenderOptions.BitmapScalingMode="Fant"></Image> - <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" FontSize="36" Text="Machine Studio"> - </TextBlock> - </StackPanel> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Height="60" HorizontalAlignment="Center"> - <StackPanel.Style> - <Style TargetType="StackPanel"> - <Setter Property="Opacity" Value="0"></Setter> - <Style.Triggers> - <DataTrigger Binding="{Binding IsModuleLoaded}" Value="True"> - <DataTrigger.EnterActions> - <BeginStoryboard> - <Storyboard> - <DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="00:00:0.5" /> - </Storyboard> - </BeginStoryboard> - </DataTrigger.EnterActions> - <DataTrigger.ExitActions> - <BeginStoryboard> - <Storyboard> - <DoubleAnimation Storyboard.TargetProperty="Opacity" To="0" Duration="00:00:0.5" /> - </Storyboard> - </BeginStoryboard> - </DataTrigger.ExitActions> - </DataTrigger> - </Style.Triggers> - </Style> - </StackPanel.Style> - <Grid> - <Ellipse Height="50" Width="50" VerticalAlignment="Center" StrokeThickness="1" Stroke="White"> - <Ellipse.Fill> - <ImageBrush ImageSource="{Binding CurrentModule.Image}" RenderOptions.BitmapScalingMode="Fant" /> - </Ellipse.Fill> - </Ellipse> - <Image Source="{StaticResource MachineSmall}" RenderOptions.BitmapScalingMode="Fant" Width="25" Margin="-40 0 0 -30" ></Image> - </Grid> - <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" FontSize="36" Text="{Binding CurrentModule.Name}"> - </TextBlock> - </StackPanel> - </Grid> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Height="60" HorizontalAlignment="Center"> + <Image Source="/Images/machine-trans.png" RenderOptions.BitmapScalingMode="Fant"></Image> + <TextBlock Text="Machine Studio" VerticalAlignment="Center" Margin="20 0 0 0" FontSize="36"/> + </StackPanel> <Grid HorizontalAlignment="Right"> <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> @@ -372,9 +307,6 @@ <DataTrigger Binding="{Binding ApplicationManager.ConnectedMachine.Status}" Value="{x:Static operations:MachineStatuses.Disconnected}"> <Setter Property="gif:ImageBehavior.AnimatedSource" Value="/Images/Statuses/machine_off_Anim.gif"></Setter> </DataTrigger> - <DataTrigger Binding="{Binding ApplicationManager.ConnectedMachine.Status}" Value="{x:Static operations:MachineStatuses.PowerUp}"> - <Setter Property="gif:ImageBehavior.AnimatedSource" Value="/Images/Statuses/getting_ready_Anim.gif"></Setter> - </DataTrigger> <DataTrigger Binding="{Binding ApplicationManager.ConnectedMachine.Status}" Value="{x:Static operations:MachineStatuses.Standby}"> <Setter Property="gif:ImageBehavior.AnimatedSource" Value="/Images/Statuses/standby_Anim.gif"></Setter> </DataTrigger> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ReportIssueView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ReportIssueView.xaml index aac712f59..ef9667b6d 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ReportIssueView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ReportIssueView.xaml @@ -12,7 +12,7 @@ xmlns:tfs="clr-namespace:Tango.TFS;assembly=Tango.TFS" xmlns:tfss="clr-namespace:Tango.MachineStudio.UI.TFS" xmlns:local="clr-namespace:Tango.MachineStudio.UI.Views" - mc:Ignorable="d" Width="530" Height="660" Background="{StaticResource Dialog.Background}" d:DataContext="{d:DesignInstance Type=vm:ReportIssueViewVM, IsDesignTimeCreatable=False}" Foreground="{StaticResource MainWindow.Foreground}"> + mc:Ignorable="d" Width="530" Height="720" Background="{StaticResource Dialog.Background}" d:DataContext="{d:DesignInstance Type=vm:ReportIssueViewVM, IsDesignTimeCreatable=False}" Foreground="{StaticResource MainWindow.Foreground}"> <UserControl.Resources> <converters:EnumToItemsSourceConverter x:Key="EnumToItemsSourceConverter" /> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml index 6bda3fe2d..cc1060b2a 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/ShutdownView.xaml @@ -10,7 +10,7 @@ <Grid> <Grid HorizontalAlignment="Center" VerticalAlignment="Center"> <StackPanel> - <Image Source="{StaticResource MachineSmall}" RenderOptions.BitmapScalingMode="Fant" Width="130"></Image> + <Image Source="/Images/machine-trans.png" RenderOptions.BitmapScalingMode="Fant" Width="100"></Image> <StackPanel Orientation="Horizontal"> <TextBlock FontSize="70" Foreground="Gray">Machine Studio</TextBlock> </StackPanel> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Windows/ExceptionWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Windows/ExceptionWindow.xaml index 01f08491a..25fe4af5d 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Windows/ExceptionWindow.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Windows/ExceptionWindow.xaml @@ -5,7 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Tango.MachineStudio.UI.Windows" mc:Ignorable="d" - WindowStyle="None" ResizeMode="NoResize" Topmost="True" AllowsTransparency="True" WindowStartupLocation="CenterScreen" Width="800" Height="600" Background="Transparent" d:DataContext="{d:DesignInstance Type=local:ExceptionWindow, IsDesignTimeCreatable=False}" FontFamily="{StaticResource flexo}" Foreground="{StaticResource Dialog.Foreground}"> + WindowStyle="None" ResizeMode="NoResize" Topmost="True" AllowsTransparency="True" WindowStartupLocation="CenterScreen" Width="800" Height="600" Background="Transparent" d:DataContext="{d:DesignInstance Type=local:ExceptionWindow, IsDesignTimeCreatable=False}"> <Grid> <Border BorderThickness="1" BorderBrush="DodgerBlue" Background="{StaticResource Dialog.Background}" Margin="10" CornerRadius="10"> <Border.Effect> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Windows/ModuleWindow.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Windows/ModuleWindow.xaml index 5db0277cc..47b36070a 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Windows/ModuleWindow.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Windows/ModuleWindow.xaml @@ -10,7 +10,7 @@ xmlns:views="clr-namespace:Tango.MachineStudio.UI.Views" xmlns:sharedControls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" mc:Ignorable="d" - Title="Machine Studio" Height="800" Width="1280" WindowStartupLocation="CenterOwner" WindowState="Maximized" Foreground="#494949" BorderThickness="1" BorderBrush="{StaticResource AccentColorBrush}" FontFamily="{StaticResource flexo}"> + Title="{Binding RelativeSource={RelativeSource Self},Path=ModuleContext.Module.Name}" Height="800" Width="1280" WindowStartupLocation="CenterOwner" WindowState="Maximized" Foreground="#494949" BorderThickness="1" BorderBrush="{StaticResource AccentColorBrush}"> <Window.Resources> <converters:StringEllipsisConverter x:Key="StringEllipsisConverter" /> @@ -29,16 +29,8 @@ <DockPanel> <Grid> <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Height="60" HorizontalAlignment="Center"> - <Grid> - <Ellipse Height="50" Width="50" VerticalAlignment="Center" StrokeThickness="1" Stroke="White"> - <Ellipse.Fill> - <ImageBrush ImageSource="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=ModuleContext.Module.Image}" RenderOptions.BitmapScalingMode="Fant" /> - </Ellipse.Fill> - </Ellipse> - <Image Source="{StaticResource MachineSmall}" RenderOptions.BitmapScalingMode="Fant" Width="25" Margin="-40 0 0 -30" ></Image> - </Grid> - <TextBlock VerticalAlignment="Center" Margin="20 0 0 0" FontSize="36" Text="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=ModuleContext.Module.Name}"> - </TextBlock> + <Image Source="/Images/machine-trans.png" RenderOptions.BitmapScalingMode="Fant"></Image> + <TextBlock Text="Machine Studio" VerticalAlignment="Center" Margin="20 0 0 0" FontSize="36"/> </StackPanel> </Grid> </DockPanel> diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Windows/ModuleWindow.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Windows/ModuleWindow.xaml.cs index cfea78964..7ca062645 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Windows/ModuleWindow.xaml.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Windows/ModuleWindow.xaml.cs @@ -12,8 +12,6 @@ using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; -using Tango.Core.DI; -using Tango.MachineStudio.Common.StudioApplication; using Tango.MachineStudio.UI.ViewModels; namespace Tango.MachineStudio.UI.Windows @@ -34,13 +32,6 @@ namespace Tango.MachineStudio.UI.Windows public ModuleWindow() { InitializeComponent(); - - ContentRendered += ModuleWindow_ContentRendered; - } - - private void ModuleWindow_ContentRendered(object sender, EventArgs e) - { - Title = "MACHINE STUDIO " + TangoIOC.Default.GetInstance<IStudioApplicationManager>().Version.ToString(3); } public ModuleWindow(MainViewVM mainViewVM, ModuleWindowVM moduleVM, FrameworkElement view) : this() diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/machine_new_small.ico b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/machine_new_small.ico Binary files differdeleted file mode 100644 index dd159c221..000000000 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/machine_new_small.ico +++ /dev/null |
