This commit is contained in:
2026-04-17 14:55:32 -04:00
commit bc3ac1d4c9
18017 changed files with 4371742 additions and 0 deletions

View File

@@ -0,0 +1 @@
12

View File

@@ -0,0 +1 @@
12

View File

@@ -0,0 +1,282 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ConstantCurrentBreakPoint" xml:space="preserve">
<value>Constant current breakpoint (ADC)</value>
</data>
<data name="Current" xml:space="preserve">
<value>Current (A)</value>
</data>
<data name="Delay" xml:space="preserve">
<value>Delay (ms)</value>
</data>
<data name="DigitalInputSettings" xml:space="preserve">
<value>Digital input defaults</value>
</data>
<data name="DigitalOutDefaults" xml:space="preserve">
<value>Digital output defaults</value>
</data>
<data name="DigitalOutputDelayMS" xml:space="preserve">
<value>Delay (ms)</value>
</data>
<data name="DigitalOutputDuration" xml:space="preserve">
<value>Duration (ms)</value>
</data>
<data name="DigitalOutputLimitDuration" xml:space="preserve">
<value>Limit duration</value>
</data>
<data name="DigitalOutputMode" xml:space="preserve">
<value>Output mode</value>
</data>
<data name="DisplaySPDADC" xml:space="preserve">
<value>Display SPD analog data</value>
</data>
<data name="DisableAutoSense" xml:space="preserve">
<value>Disable auto-sense</value>
</data>
<data name="Duration" xml:space="preserve">
<value>Duration (ms)</value>
</data>
<data name="FiringMode" xml:space="preserve">
<value>Firing mode</value>
</data>
<data name="HighTolerance" xml:space="preserve">
<value>High tolerance (Ω)</value>
</data>
<data name="IEPEDefaults" xml:space="preserve">
<value>IEPE defaults</value>
</data>
<data name="IEPERangeHighLimit" xml:space="preserve">
<value>Actual range high limit (x full scale)</value>
</data>
<data name="IEPERangeLowLimit" xml:space="preserve">
<value>Actual range low limit (x full scale)</value>
</data>
<data name="LimitDuration" xml:space="preserve">
<value>Limit duration</value>
</data>
<data name="LowTolerance" xml:space="preserve">
<value>Low tolerance (Ω)</value>
</data>
<data name="OutputMode" xml:space="preserve">
<value>Output mode</value>
</data>
<data name="Policy" xml:space="preserve">
<value>Policy</value>
</data>
<data name="SensorCalibrationPolicies" xml:space="preserve">
<value>Sensor calibration policies</value>
</data>
<data name="AnalogSettings" xml:space="preserve">
<value>Analog defaults</value>
</data>
<data name="DefineDefaultFilter" xml:space="preserve">
<value>Define Default Filter</value>
</data>
<data name="UseMeasuredExcitation" xml:space="preserve">
<value>Use Measured Excitation to scale EU data</value>
</data>
<data name="SquibDefaults" xml:space="preserve">
<value>Squib defaults</value>
</data>
<data name="VoltageInputBreakpoint" xml:space="preserve">
<value>Voltage input breakpoint (ADC)</value>
</data>
<data name="WarningPeriod" xml:space="preserve">
<value>Warning period (days)</value>
</data>
<data name="_24VPowerHigh" xml:space="preserve">
<value>24V Power high (V)</value>
</data>
<data name="_24VPowerLow" xml:space="preserve">
<value>24V Power low (V)</value>
</data>
<data name="UseSensorFirstUseDate" xml:space="preserve">
<value>Calibration interval starts after sensor's first use</value>
</data>
<data name="BaudRate" xml:space="preserve">
<value>Baud rate</value>
</data>
<data name="DataBits" xml:space="preserve">
<value>Data bits</value>
</data>
<data name="DataFormat" xml:space="preserve">
<value>Data format</value>
</data>
<data name="FlowControl" xml:space="preserve">
<value>Flow control</value>
</data>
<data name="Parity" xml:space="preserve">
<value>Parity</value>
</data>
<data name="StopBits" xml:space="preserve">
<value>Stop bits</value>
</data>
<data name="UartSettings" xml:space="preserve">
<value>UART defaults</value>
</data>
<data name="DataChannelId" xml:space="preserve">
<value>Data channel id</value>
</data>
<data name="IRIGTimeDataPacketIntervalMs" xml:space="preserve">
<value>Time packet interval (ms)</value>
</data>
<data name="StreamOutputSettings" xml:space="preserve">
<value>Stream output defaults</value>
</data>
<data name="TimeChannelId" xml:space="preserve">
<value>Time channel id</value>
</data>
<data name="TmNSConfig" xml:space="preserve">
<value>TmNS config</value>
</data>
<data name="UDPAddress" xml:space="preserve">
<value>UDP Address</value>
</data>
<data name="UDPProfile" xml:space="preserve">
<value>Stream Profile</value>
</data>
<data name="StreamInputSettings" xml:space="preserve">
<value>Stream input defaults</value>
</data>
<data name="UseAdvancedUDPStreamProfiles" xml:space="preserve">
<value>Use advanced streaming profiles</value>
</data>
<data name="TrackDiagnostics" xml:space="preserve">
<value>Track diagnostics</value>
</data>
<data name="SensorSettings_AllowInspectBeforeUse" xml:space="preserve">
<value>Inspect before use</value>
</data>
<data name="SensorSettings_DefaultMaxUsageAllowed" xml:space="preserve">
<value>Default maximum uses allowed</value>
</data>
<data name="SensorSettings_DontAllowDataCollectionIfOverused" xml:space="preserve">
<value>Do not allow data collection if sensor is overused</value>
</data>
<data name="SensorSettings_UsageRemainingForWarning" xml:space="preserve">
<value>Warn when number of uses remaining</value>
</data>
<data name="ArbBaseBitrate" xml:space="preserve">
<value>Arb/Base Bitrate</value>
</data>
<data name="CanSettings" xml:space="preserve">
<value>CAN defaults</value>
</data>
</root>

View File

@@ -0,0 +1,276 @@
<?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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<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" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ConstantCurrentBreakPoint" xml:space="preserve">
<value>Constant current breakpoint (ADC)</value>
</data>
<data name="Current" xml:space="preserve">
<value>Current (A)</value>
</data>
<data name="Delay" xml:space="preserve">
<value>Delay (ms)</value>
</data>
<data name="DigitalInputSettings" xml:space="preserve">
<value>Digital input defaults</value>
</data>
<data name="DigitalOutDefaults" xml:space="preserve">
<value>Digital output defaults</value>
</data>
<data name="DigitalOutputDelayMS" xml:space="preserve">
<value>Delay (ms)</value>
</data>
<data name="DigitalOutputDuration" xml:space="preserve">
<value>Duration (ms)</value>
</data>
<data name="DigitalOutputLimitDuration" xml:space="preserve">
<value>Limit duration</value>
</data>
<data name="DigitalOutputMode" xml:space="preserve">
<value>Output mode</value>
</data>
<data name="DisplaySPDADC" xml:space="preserve">
<value>Display SPD analog data</value>
</data>
<data name="DisableAutoSense" xml:space="preserve">
<value>Disable auto-sense</value>
</data>
<data name="Duration" xml:space="preserve">
<value>Duration (ms)</value>
</data>
<data name="FiringMode" xml:space="preserve">
<value>Firing mode</value>
</data>
<data name="HighTolerance" xml:space="preserve">
<value>High tolerance (Ω)</value>
</data>
<data name="IEPEDefaults" xml:space="preserve">
<value>IEPE defaults</value>
</data>
<data name="IEPERangeHighLimit" xml:space="preserve">
<value>Actual range high limit (x full scale)</value>
</data>
<data name="IEPERangeLowLimit" xml:space="preserve">
<value>Actual range low limit (x full scale)</value>
</data>
<data name="LimitDuration" xml:space="preserve">
<value>Limit duration</value>
</data>
<data name="LowTolerance" xml:space="preserve">
<value>Low tolerance (Ω)</value>
</data>
<data name="OutputMode" xml:space="preserve">
<value>Output mode</value>
</data>
<data name="Policy" xml:space="preserve">
<value>Policy</value>
</data>
<data name="SensorCalibrationPolicies" xml:space="preserve">
<value>Sensor calibration policies</value>
</data>
<data name="AnalogSettings" xml:space="preserve">
<value>Analog defaults</value>
</data>
<data name="DefineDefaultFilter" xml:space="preserve">
<value>Define Default Filter</value>
</data>
<data name="UseMeasuredExcitation" xml:space="preserve">
<value>Use Measured Excitation to scale EU data</value>
</data>
<data name="SquibDefaults" xml:space="preserve">
<value>Squib defaults</value>
</data>
<data name="VoltageInputBreakpoint" xml:space="preserve">
<value>Voltage input breakpoint (ADC)</value>
</data>
<data name="WarningPeriod" xml:space="preserve">
<value>Warning period (days)</value>
</data>
<data name="_24VPowerHigh" xml:space="preserve">
<value>24V Power high (V)</value>
</data>
<data name="_24VPowerLow" xml:space="preserve">
<value>24V Power low (V)</value>
</data>
<data name="UseSensorFirstUseDate" xml:space="preserve">
<value>Calibration interval starts after sensor's first use</value>
</data>
<data name="BaudRate" xml:space="preserve">
<value>Baud rate</value>
</data>
<data name="DataBits" xml:space="preserve">
<value>Data bits</value>
</data>
<data name="DataFormat" xml:space="preserve">
<value>Data format</value>
</data>
<data name="FlowControl" xml:space="preserve">
<value>Flow control</value>
</data>
<data name="Parity" xml:space="preserve">
<value>Parity</value>
</data>
<data name="StopBits" xml:space="preserve">
<value>Stop bits</value>
</data>
<data name="UartSettings" xml:space="preserve">
<value>UART defaults</value>
</data>
<data name="DataChannelId" xml:space="preserve">
<value>Data channel id</value>
</data>
<data name="IRIGTimeDataPacketIntervalMs" xml:space="preserve">
<value>Time packet interval (ms)</value>
</data>
<data name="StreamOutputSettings" xml:space="preserve">
<value>Stream output defaults</value>
</data>
<data name="TimeChannelId" xml:space="preserve">
<value>Time channel id</value>
</data>
<data name="TmNSConfig" xml:space="preserve">
<value>TmNS config</value>
</data>
<data name="UDPAddress" xml:space="preserve">
<value>UDP Address</value>
</data>
<data name="UDPProfile" xml:space="preserve">
<value>Stream Profile</value>
</data>
<data name="StreamInputSettings" xml:space="preserve">
<value>Stream input defaults</value>
</data>
<data name="UseAdvancedUDPStreamProfiles" xml:space="preserve">
<value>Use advanced streaming profiles</value>
</data>
<data name="TrackDiagnostics" xml:space="preserve">
<value>Track diagnostics</value>
</data>
<data name="SensorSettings_AllowInspectBeforeUse" xml:space="preserve">
<value>Inspect before use</value>
</data>
<data name="SensorSettings_DefaultMaxUsageAllowed" xml:space="preserve">
<value>Default maximum uses allowed</value>
</data>
<data name="SensorSettings_DontAllowDataCollectionIfOverused" xml:space="preserve">
<value>Do not allow data collection if sensor is overused</value>
</data>
<data name="SensorSettings_UsageRemainingForWarning" xml:space="preserve">
<value>Warn when number of uses remaining</value>
</data>
</root>

View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <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 SensorSettingsModule.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.10.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;
}
}
}
}

View File

@@ -0,0 +1,341 @@
<base:BaseView x:Class="SensorSettingsModule.SensorSettingsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:base="clr-namespace:DTS.Common.Base;assembly=DTS.Common"
xmlns:converters="clr-namespace:DTS.Common.Converters;assembly=DTS.Common"
xmlns:strings="clr-namespace:SensorSettingsModule"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
d:DesignHeight="768" d:DesignWidth="1366"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit">
<base:BaseView.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/DTS.Common;component/Themes/CommonStyles.xaml"/>
<ResourceDictionary Source="pack://application:,,,/DTS.Common;component/Controls/combobox.xaml"/>
<ResourceDictionary Source="pack://application:,,,/DTS.Common;component/Constant/XamlConstants.xaml"/>
</ResourceDictionary.MergedDictionaries>
<sys:Double x:Key="_24VPOWER_LOW_MAX">24</sys:Double>
<sys:Double x:Key="_24VPOWER_LOW_MIN">0</sys:Double>
<sys:Double x:Key="_24VPOWER_HIGH_MAX">30</sys:Double>
<sys:Double x:Key="_24VPOWER_HIGH_MIN">0</sys:Double>
<sys:Double x:Key="IEPE_RANGE_LOW_MIN">.1</sys:Double>
<sys:Double x:Key="IEPE_RANGE_LOW_MAX">10</sys:Double>
<sys:Double x:Key="IEPE_RANGE_HIGH_MIN">1</sys:Double>
<sys:Double x:Key="IEPE_RANGE_HIGH_MAX">1000</sys:Double>
<!-- most of the styles down to the converter were either already here or copied in when I was trying to fix a few style issues
none of them are native to here so it's probably ok to wipe out down to the converters if the DTS.Common commonstyles has the
right styles present
-->
<Style TargetType="xctk:DoubleUpDown" BasedOn="{StaticResource PageContentXCDoubleUpDown}">
<Setter Property="Width" Value="150"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="FormatString" Value="N2"/>
<Setter Property="Increment" Value="0.1"/>
</Style>
<Style TargetType="ListView">
<Setter Property="ItemContainerStyle" Value="{StaticResource TTS_ListViewItemStyle}"/>
</Style>
<Style TargetType="CheckBox" BasedOn="{StaticResource PageContentCheckBoxStyle}" />
<Style TargetType="ComboBox" BasedOn="{StaticResource FlatComboBoxStyle}">
<Setter Property="Width" Value="450"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
</Style>
<Style TargetType="Button" BasedOn="{StaticResource TTS_ButtonStyle}"/>
<Style TargetType="GridViewColumnHeader" BasedOn="{StaticResource Gray_GridViewColumnHeaderStyle}"/>
<Style TargetType="Expander" BasedOn="{StaticResource SimpleExpanderTemp}">
<Setter Property="Width" Value="Auto"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="VerticalAlignment" Value="Top"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
</Style>
<!-- these are used for error decoration of Squib high/low tolerances -->
<converters:BooleanToBorderThicknessConverter x:Key="BooleanToBorderThickness" />
<converters:BooleanToColorConverter x:Key="BooleanToColor" />
<!--<converters:BooleanToColorConverter x:Key="BooleanToWarningColor" WarningBrush="True" />-->
<converters:BooleanToVisibilityConverter x:Key="BoolToVisConverter" /> <!-- used for Current Visability depending on squib fire mode-->
</ResourceDictionary>
</base:BaseView.Resources>
<!-- I originally tried DynamicGrid here, but it had weird column sizing, I believe it was missing some stuff from CommonStyles -->
<StackPanel Background="{DynamicResource Brush_ApplicationContentBackground}" Orientation="Vertical">
<Expander Header="{strings:TranslateExtension SquibDefaults}" DataContext="{Binding SquibSettings}" AutomationProperties.AutomationId="SQUIBDefaultsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension Delay}" Grid.Row="0" AutomationProperties.AutomationId="SQUIBDelayLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="0" Minimum="{StaticResource SQUIB_DELAY_MIN}"
Maximum="{StaticResource SQUIB_DELAY_MAX}" ClipValueToMinMax="True" Value="{Binding FireDelayMS}"
AutomationProperties.AutomationId="SQUIBDelay"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension LimitDuration}" Grid.Row="1" AutomationProperties.AutomationId="SQUIBLimitDurationLabel"/>
<CheckBox Grid.Column="1" Grid.Row="1" Margin="0" IsChecked="{Binding LimitDurationDefault}" AutomationProperties.AutomationId="SQUIBLimitDuration" HorizontalAlignment="Left"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension Duration}" Grid.Row="2"
Visibility="{Binding LimitDurationDefault, Converter={StaticResource BoolToVisConverter}}" AutomationProperties.AutomationId="SQUIBDurationLabel" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="2" FormatString="N1" Minimum="{StaticResource SQUIB_DURATION_MIN}" Maximum="{StaticResource SQUIB_DURATION_MAX}"
ClipValueToMinMax="True" Value="{Binding FireDurationMS}"
Visibility="{Binding LimitDurationDefault, Converter={StaticResource BoolToVisConverter}}"
AutomationProperties.AutomationId="SQUIBDuration"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension LowTolerance}" Grid.Row="3" AutomationProperties.AutomationId="SQUIBLowToleranceLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="3" FormatString="N1" Minimum="{StaticResource SQUIB_TOLERANCE_LOW}"
Maximum="{StaticResource SQUIB_TOLERANCE_HIGH}" Value="{Binding ToleranceLowDefault}"
BorderBrush="{Binding ToleranceValid, Converter={StaticResource BooleanToColor}}"
BorderThickness="{Binding ToleranceValid, Converter={StaticResource BooleanToBorderThickness}}" AutomationProperties.AutomationId="SQUIBLowTolerance"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension HighTolerance}" Grid.Row="4" AutomationProperties.AutomationId="SQUIBHighToleranceLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="4" FormatString="N1" Minimum="{StaticResource SQUIB_TOLERANCE_LOW}"
Maximum="{StaticResource SQUIB_TOLERANCE_HIGH}" Value="{Binding ToleranceHighDefault}"
BorderBrush="{Binding ToleranceValid, Converter={StaticResource BooleanToColor}}"
BorderThickness="{Binding ToleranceValid, Converter={StaticResource BooleanToBorderThickness}}" AutomationProperties.AutomationId="SQUIBHighTolerance"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension FiringMode}" Grid.Row="5" AutomationProperties.AutomationId="SQUIBFiringModeLabel"/>
<ComboBox Grid.Column="1" Grid.Row="5" SelectedItem="{Binding FireModeDefault}" ItemsSource="{Binding AvailableModes}" AutomationProperties.AutomationId="SQUIBFiringMode" HorizontalAlignment="Left"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension Current}" Grid.Row="6" Visibility="{Binding IsConstantCurrent, Converter={StaticResource BoolToVisConverter}}" AutomationProperties.AutomationId="SQUIBConstantCurrentabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="6" Minimum="{StaticResource SQUIB_CURRENT_LOW}" Maximum="{StaticResource SQUIB_CURRENT_HIGH}"
Value="{Binding OutputCurrentDefault}" Visibility="{Binding IsConstantCurrent, Converter={StaticResource BoolToVisConverter}}"
AutomationProperties.AutomationId="SQUIBConstantCurrent" />
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension DigitalOutDefaults}" DataContext="{Binding DigitalOutSettings}" AutomationProperties.AutomationId="DigitalOutExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0" Text="{strings:TranslateExtension DigitalOutputMode}" AutomationProperties.AutomationId="DOUTModeLabel"/>
<ComboBox Grid.Column="1" Grid.Row="0" SelectedItem="{Binding OutputMode}" ItemsSource="{Binding AvailableModes}" AutomationProperties.AutomationId="DOUTMode" HorizontalAlignment="Left" />
<TextBlock Grid.Column="0" Grid.Row="1" Text="{strings:TranslateExtension DigitalOutputDelayMS}" AutomationProperties.AutomationId="DOUTDelayLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="1" Minimum="0" ClipValueToMinMax="True"
Increment=".1" Value="{Binding DelayMS}" AutomationProperties.AutomationId="DOUTDelay"/>
<TextBlock Grid.Column="0" Grid.Row="2" Text="{strings:TranslateExtension DigitalOutputLimitDuration}" AutomationProperties.AutomationId="DOUTLimitDurationLabel"/>
<CheckBox Grid.Column="1" Grid.Row="2" IsChecked="{Binding LimitDuration}" AutomationProperties.AutomationId="DOUTLimitDuration" HorizontalAlignment="Left"/>
<TextBlock Grid.Column="0" Grid.Row="3" Text="{strings:TranslateExtension DigitalOutputDuration}"
Visibility="{Binding LimitDuration, Converter={StaticResource BoolToVisConverter}}" AutomationProperties.AutomationId="DOUTDurationLabel" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="3" Minimum="0" ClipValueToMinMax="True"
Increment=".1" Value="{Binding DurationMS}" Visibility="{Binding LimitDuration, Converter={StaticResource BoolToVisConverter}}"
AutomationProperties.AutomationId="DOUTDuration"/>
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension DigitalInputSettings}" DataContext="{Binding DigitalInputDefaults}" AutomationProperties.AutomationId="DigitalInputsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0" Text="{strings:TranslateExtension ConstantCurrentBreakPoint}" />
<!-- 16 bit signed -->
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="0" Minimum="-32768" Maximum="32767" ClipValueToMinMax="True"
Increment="1" Value="{Binding ConstantCurrentBreakpointADC}" AutomationProperties.AutomationId="DIConstantCurrentBreakpoint"/>
<TextBlock Grid.Column="0" Grid.Row="1" Text="{strings:TranslateExtension VoltageInputBreakpoint}" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="1" Minimum="-32768" Maximum="32767" ClipValueToMinMax="True"
Increment="1" Value="{Binding VoltageBreakpointADC}" AutomationProperties.AutomationId="DIVoltageBreakpoint"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension DisplaySPDADC}" Grid.Row="2" />
<CheckBox Grid.Column="1" Grid.Row="2" IsChecked="{Binding DisplaySPDADC}" />
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension IEPEDefaults}" DataContext="{Binding IEPESensorDefaults}" AutomationProperties.AutomationId="IEPEDefaultsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <!-- Disable AutoSense -->
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension _24VPowerLow}" Grid.Row="0" AutomationProperties.AutomationId="_24VPowerLowLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="0" Minimum="{StaticResource _24VPOWER_LOW_MIN}" FormatString="N1"
Maximum="{StaticResource _24VPOWER_LOW_MAX}" ClipValueToMinMax="True" Value="{Binding _24VPowerLow}"
AutomationProperties.AutomationId="_24VPowerLowDoubleUpDown"
BorderBrush="{Binding ToleranceValid, Converter={StaticResource BooleanToColor}}"
BorderThickness="{Binding ToleranceValid, Converter={StaticResource BooleanToBorderThickness}}" />
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension _24VPowerHigh}" Grid.Row="1"
AutomationProperties.AutomationId="_24VPowerHighLabel" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="1" FormatString="N1" Minimum="{StaticResource _24VPOWER_HIGH_MIN}" Maximum="{StaticResource _24VPOWER_HIGH_MAX}"
ClipValueToMinMax="True" Value="{Binding _24VPowerHigh}"
AutomationProperties.AutomationId="_24VPowerHighDoubleUpDown"
BorderBrush="{Binding ToleranceValid, Converter={StaticResource BooleanToColor}}"
BorderThickness="{Binding ToleranceValid, Converter={StaticResource BooleanToBorderThickness}}"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension IEPERangeLowLimit}" Grid.Row="2" AutomationProperties.AutomationId="RangeLowLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="2" Minimum="{StaticResource IEPE_RANGE_LOW_MIN}" FormatString="N1"
Maximum="{StaticResource IEPE_RANGE_LOW_MAX}" ClipValueToMinMax="True" Value="{Binding RangeLowLimitScalar}"
AutomationProperties.AutomationId="IEPELowDoubleUpDown"
BorderBrush="{Binding RangeToleranceValid, Converter={StaticResource BooleanToColor}}"
BorderThickness="{Binding RangeToleranceValid, Converter={StaticResource BooleanToBorderThickness}}" />
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension IEPERangeHighLimit}" Grid.Row="3"
AutomationProperties.AutomationId="RangeHighLabel" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="3" FormatString="N1" Minimum="{StaticResource IEPE_RANGE_HIGH_MIN}" Maximum="{StaticResource IEPE_RANGE_HIGH_MAX}"
ClipValueToMinMax="True" Value="{Binding RangeHighLimitScalar}"
AutomationProperties.AutomationId="IEPEHighDoubleUpDown"
BorderBrush="{Binding RangeToleranceValid, Converter={StaticResource BooleanToColor}}"
BorderThickness="{Binding RangeToleranceValid, Converter={StaticResource BooleanToBorderThickness}}"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension DisableAutoSense}" Grid.Row="4" AutomationProperties.AutomationId="AutoSenseLabel" />
<CheckBox Grid.Column="1" IsChecked="{Binding DisableAutoSense}" Grid.Row="4" AutomationProperties.AutomationId="DisableAutoSenseCheckBox" />
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension SensorCalibrationPolicies}" DataContext="{Binding SensorCalibrationDefaults}" AutomationProperties.AutomationId="SensorCalibrationsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension UseSensorFirstUseDate}" AutomationProperties.AutomationId="SensorFirstUseLabel" />
<CheckBox Grid.Column="1" IsChecked="{Binding UseSensorFirstUseDate}" AutomationProperties.AutomationId="SensorFirstUseCheckBox" />
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension Policy}" Grid.Row="1 "/>
<ComboBox Grid.Column="1" ItemsSource="{Binding AvailableSensorCalPolicies, Mode=OneWay}" SelectedItem="{Binding SelectedCalPolicy}"
AutomationProperties.AutomationId="SensorCalPolicyComboBox" Grid.Row="1"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension WarningPeriod}" Grid.Row="2" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="2" FormatString="N0" Minimum="1" Maximum="36500" ClipValueToMinMax="True" Value="{Binding WarningPeriod}"
AutomationProperties.AutomationId="WarningPeriodDoubleUpDown" Increment="1"/>
<TextBlock Grid.Column="0" Grid.Row="3" Text="{strings:TranslateExtension SensorSettings_DontAllowDataCollectionIfOverused}" AutomationProperties.AutomationId="SensorOveruseLabel" />
<CheckBox Grid.Column="1" Grid.Row="3" IsChecked="{Binding DontAllowDataCollectionIfOverused}" IsEnabled="{Binding SensorAssemblyEnabled}" AutomationProperties.AutomationId="SensorOveruseCheckBox" />
<TextBlock Grid.Column="0" Grid.Row="4" Visibility ="{Binding DontAllowDataCollectionIfOverused, Converter={StaticResource BoolToVisConverter}}" Text="{strings:TranslateExtension SensorSettings_UsageRemainingForWarning}" AutomationProperties.AutomationId="UsageRemainingTxtBlock"/>
<TextBox Grid.Column="1" Grid.Row="4" Visibility ="{Binding DontAllowDataCollectionIfOverused, Converter={StaticResource BoolToVisConverter}}" Text="{Binding UsageRemainingForWarning}" MinWidth="50" MaxWidth="50" HorizontalAlignment="Left" AutomationProperties.AutomationId="UsageRemainingTxtBx"/>
<TextBlock Grid.Column="0" Grid.Row="5" Visibility ="{Binding DontAllowDataCollectionIfOverused, Converter={StaticResource BoolToVisConverter}}" Text="{strings:TranslateExtension SensorSettings_DefaultMaxUsageAllowed}" AutomationProperties.AutomationId="MaxUsageAllowedTxtBlock"/>
<TextBox Grid.Column="1" Grid.Row="5" Visibility ="{Binding DontAllowDataCollectionIfOverused, Converter={StaticResource BoolToVisConverter}}" Text="{Binding DefaultMaxUsageAllowed}" MinWidth="50" MaxWidth="50" HorizontalAlignment="Left" AutomationProperties.AutomationId="MaxUsageAllowedTxtBx"/>
<TextBlock Grid.Column="0" Grid.Row="6" Text="{strings:TranslateExtension SensorSettings_AllowInspectBeforeUse}" />
<CheckBox Grid.Column="1" Grid.Row="6" IsChecked="{Binding AllowInspectBeforeUse}" IsEnabled="{Binding AllowInspectBeforeUseEnabled}" AutomationProperties.AutomationId="chk_AllowInspectBeforeUse" />
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension AnalogSettings}" DataContext="{Binding AnalogDefaults}" AutomationProperties.AutomationId="AnalogSettingsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension DefineDefaultFilter}" />
<ComboBox Grid.Column="1" DisplayMemberPath="FilterName" LostFocus="CbFilterOption_LostFocus" x:Name="cbFilterOption" ItemsSource="{Binding FilterOptions}" SelectedItem="{Binding SelectedFilterOption, Mode=TwoWay}"
AutomationProperties.AutomationId="SensorCalPolicyComboBox" IsEditable="True" IsReadOnly="False" />
<TextBlock Grid.Column="0" Grid.Row="1" Text="{strings:TranslateExtension UseMeasuredExcitation}" />
<CheckBox Grid.Column="1" Grid.Row="1" IsChecked="{Binding UseMeasuredExcitation}" AutomationProperties.AutomationId="chk_UseMeasuredExcitationFlag"/>
<TextBlock Grid.Column="0" Grid.Row="2" Text="{strings:TranslateExtension TrackDiagnostics}" />
<CheckBox Grid.Column="1" Grid.Row="2" IsChecked="{Binding TrackAnalogDiagnostics}" AutomationProperties.AutomationId="chk_TrackAnalogDiagnostics"
IsEnabled="{Binding TrackAnalogDiagnosticsEnabled}"/>
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension UartSettings}" DataContext="{Binding UartIODefaults}" AutomationProperties.AutomationId="UartSettingsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0" Text="{strings:TranslateExtension BaudRate}" AutomationProperties.AutomationId="UARTBaudRateLabel" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="0" FormatString="N0" Increment="1" Minimum="110" Maximum="3000000"
ClipValueToMinMax="True" Value="{Binding BaudRate}"
AutomationProperties.AutomationId="UARTDataBits"/>
<TextBlock Grid.Column="0" Grid.Row="1" Text="{strings:TranslateExtension DataBits}" AutomationProperties.AutomationId="UARTDataBitsLabel" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="1" FormatString="N0" Increment="1" Minimum="{StaticResource UART_DATA_BITS_MIN}" Maximum="{StaticResource UART_DATA_BITS_MAX}"
ClipValueToMinMax="True" Value="{Binding DataBits}"
AutomationProperties.AutomationId="UARTDataBits"/>
<TextBlock Grid.Column="0" Grid.Row="2" Text="{strings:TranslateExtension StopBits}" AutomationProperties.AutomationId="UARTStopBitsLabel"/>
<ComboBox Grid.Column="1" Grid.Row="2" SelectedItem="{Binding StopBits}" ItemsSource="{Binding AvailableStopBits}" AutomationProperties.AutomationId="UARTStopBits" HorizontalAlignment="Left" />
<TextBlock Grid.Column="0" Grid.Row="3" Text="{strings:TranslateExtension Parity}" AutomationProperties.AutomationId="UARTParityLabel"/>
<ComboBox Grid.Column="1" Grid.Row="3" SelectedItem="{Binding Parity}" ItemsSource="{Binding AvailableParities}" AutomationProperties.AutomationId="UARTParity" HorizontalAlignment="Left" />
<TextBlock Grid.Column="0" Grid.Row="4" Text="{strings:TranslateExtension DataFormat}" AutomationProperties.AutomationId="UARTDataFormatLabel"/>
<ComboBox Grid.Column="1" Grid.Row="4" SelectedItem="{Binding DataFormat}" ItemsSource="{Binding AvailableDataFormats}" AutomationProperties.AutomationId="UARTDataFormat" HorizontalAlignment="Left" />
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension StreamOutputSettings}" DataContext="{Binding StreamOutputSettings}" AutomationProperties.AutomationId="StreamOutputSettingsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="1" Text="{strings:TranslateExtension UDPProfile}" AutomationProperties.AutomationId="UDPProfileLabel" />
<ComboBox Grid.Column="1" Grid.Row="1" SelectedItem="{Binding Profile}" ItemsSource="{Binding AvailableStreamOutUDPProfiles}" AutomationProperties.AutomationId="StreamOutProfile" HorizontalAlignment="Left" />
<TextBlock Grid.Column="0" Grid.Row="2" Text="{strings:TranslateExtension UDPAddress}" AutomationProperties.AutomationId="UDPAddressLabel" />
<TextBox Grid.Column="1" Grid.Row="2" Text="{Binding UDPAddress}" AutomationProperties.AutomationId="StreamOutUDPAddress"/>
<TextBlock Grid.Column="0" Grid.Row="3" Text="{strings:TranslateExtension TimeChannelId}" AutomationProperties.AutomationId="TimeChannelIdLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="3" FormatString="N0" Increment="1" Minimum="0" Maximum="100"
ClipValueToMinMax="True" Value="{Binding TimeChannelId}"
AutomationProperties.AutomationId="StreamOutTimeChannelId"/>
<TextBlock Grid.Column="0" Grid.Row="4" Text="{strings:TranslateExtension DataChannelId}" AutomationProperties.AutomationId="DataChannelIdLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="4" FormatString="N0" Increment="1" Minimum="0" Maximum="100"
ClipValueToMinMax="True" Value="{Binding DataChannelId}"
AutomationProperties.AutomationId="StreamOutDataChannelId"/>
<TextBlock Grid.Column="0" Grid.Row="5" Text="{strings:TranslateExtension TmNSConfig}" AutomationProperties.AutomationId="TmNSConfigLabel" />
<TextBox Grid.Column="1" Grid.Row="5" Text="{Binding TmNSConfig}" AutomationProperties.AutomationId="StreamOutTmNSConfig"/>
<TextBlock Grid.Column="0" Grid.Row="6" Text="{strings:TranslateExtension IRIGTimeDataPacketIntervalMs}" AutomationProperties.AutomationId="IRIGTimeDataPacketIntervalMsLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="6" FormatString="N0" Increment="1" Minimum="0" Maximum="100"
ClipValueToMinMax="True" Value="{Binding IRIGTimeDataPacketIntervalMs}"
AutomationProperties.AutomationId="StreamOutIRIGTimeDataPacketIntervalMs"/>
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension CanSettings}" DataContext="{Binding CanIODefaults}" AutomationProperties.AutomationId="CanSettingsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0" Text="{strings:TranslateExtension ArbBaseBitrate}" AutomationProperties.AutomationId="CANArbBaseBitrateLabel" />
<ComboBox Grid.Column="1" Grid.Row="0" SelectedItem="{Binding ArbBaseBitrate}" ItemsSource="{Binding AvailableArbBaseBitrates}" AutomationProperties.AutomationId="CANArbBaseBitrateItems" HorizontalAlignment="Left" />
</Grid>
</Expander>
</StackPanel>
</base:BaseView>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="SensorSettingsModule.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
</configSections>
<userSettings>
<SensorSettingsModule.Properties.Settings>
</SensorSettingsModule.Properties.Settings>
</userSettings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>

View File

@@ -0,0 +1,31 @@
using DTS.Common.Events.Sensors.SensorsList;
using DTS.Common.Interface.Sensors.SensorSettingsModule;
using Prism.Ioc;
using Prism.Events;
using System.Windows;
// ReSharper disable CheckNamespace
namespace SensorSettingsModule
{
public partial class SensorSettingsView : ISensorSettingsView
{
private IEventAggregator _eventAggregator;
public SensorSettingsView()
{
InitializeComponent();
_eventAggregator = ContainerLocator.Container.Resolve<IEventAggregator>();
}
//FB 13120 Identify the AdHoc filter to get saved later on if it's not already saved to db
private double freq;
private void CbFilterOption_LostFocus(object sender, RoutedEventArgs e)
{
var filter = cbFilterOption.Text;
if (double.TryParse(filter, out freq))
{
_eventAggregator.GetEvent<SensorSavedEvent>().Publish(freq);
}
}
}
}

View File

@@ -0,0 +1,140 @@
using System;
using System.ComponentModel.Composition;
using System.Windows.Media.Imaging;
using DTS.Common;
using DTS.Common.Interface;
using DTS.Common.Interface.Sensors.SensorSettingsModule;
using Prism.Modularity;
using Unity;
using SensorSettingsModule;
using Prism.Ioc;
// ReSharper disable CheckNamespace
// ReSharper disable RedundantAttributeUsageProperty
// ReSharper disable UnusedParameter.Local
[assembly: SensorSettingsModuleModuleName]
[assembly: SensorSettingsModuleModuleImageAttribute]
namespace SensorSettingsModule
{
[Export(typeof(IModule))]
[Module(ModuleName = "SensorSettingsModule")]
public class SensorSettingsModuleModule : IModule
{
/// <summary>
/// Injected unity container
/// </summary>
private readonly IUnityContainer _unityContainer;
/// <summary>
/// Initializes a new instance of the <see cref="SensorSettingsModuleModule"/> class.
/// </summary>
/// <param name="unityContainer">Obtained reference of the unity container by using dependency injection.</param>
public SensorSettingsModuleModule(IUnityContainer unityContainer)
{
_unityContainer = unityContainer;
}
public void Initialize()
{
// Register View & View-Model with Unity dependency injection container as a singleton.
_unityContainer.RegisterType<ISensorSettingsView, SensorSettingsView>();
_unityContainer.RegisterType<ISensorSettingsViewModel, SensorSettingsViewModel>();
}
public void OnInitialized(IContainerProvider containerProvider)
{
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
Initialize();
}
}
/// <summary>
/// Attribute class contains assembly name
/// </summary>
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
public class SensorSettingsModuleModuleNameAttribute : TextAttribute
{
public SensorSettingsModuleModuleNameAttribute() : this(null) { }
public SensorSettingsModuleModuleNameAttribute(string s)
{
AssemblyName = AssemblyNames.SensorSettingsModule.ToString();
}
public override string AssemblyName { get; }
public override Type GetAttributeType()
{
return typeof(TextAttribute);
}
public override string GetAssemblyName()
{
return AssemblyName;
}
}
/// <summary>
/// Attribute class contains assembly image and name - used on the Main screen to SummaryModule available components
/// </summary>
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
public class SensorSettingsModuleModuleImageAttribute : ImageAttribute
{
private BitmapImage _img;
public SensorSettingsModuleModuleImageAttribute() : this(null) { }
public override BitmapImage AssemblyImage
{
get { _img = AssemblyInfo.GetImage(AssemblyNames.SensorSettingsModule.ToString()); return _img; }
}
public SensorSettingsModuleModuleImageAttribute(string s)
{
_img = AssemblyInfo.GetImage(AssemblyNames.SensorSettingsModule.ToString());
}
public override Type GetAttributeType()
{
return typeof(ImageAttribute);
}
public override BitmapImage GetAssemblyImage()
{
return AssemblyImage;
}
private string _name;
public override string AssemblyName
{
get { _name = AssemblyNames.SensorSettingsModule.ToString(); return _name; }
}
public override string GetAssemblyName()
{
return AssemblyName;
}
private string _group;
public override string AssemblyGroup
{
get { _group = eAssemblyGroups.Administrative.ToString(); return _group; }
}
public override string GetAssemblyGroup()
{
return AssemblyGroup;
}
private eAssemblyRegion _region;
public override eAssemblyRegion AssemblyRegion
{
get { _region = eAssemblyRegion.SensorSettingsModuleRegion; return _region; }
}
public override eAssemblyRegion GetAssemblyRegion()
{
return AssemblyRegion;
}
}
}

View File

@@ -0,0 +1,531 @@
//------------------------------------------------------------------------------
// <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 SensorSettingsModule.Resources {
using System;
/// <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", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class StringResources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal StringResources() {
}
/// <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 (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SensorSettingsModule.Resources.StringResources", typeof(StringResources).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;
}
}
/// <summary>
/// Looks up a localized string similar to 24V Power high (V).
/// </summary>
internal static string _24VPowerHigh {
get {
return ResourceManager.GetString("_24VPowerHigh", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 24V Power low (V).
/// </summary>
internal static string _24VPowerLow {
get {
return ResourceManager.GetString("_24VPowerLow", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Analog defaults.
/// </summary>
internal static string AnalogSettings {
get {
return ResourceManager.GetString("AnalogSettings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Baud rate.
/// </summary>
internal static string BaudRate {
get {
return ResourceManager.GetString("BaudRate", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Constant current breakpoint (ADC).
/// </summary>
internal static string ConstantCurrentBreakPoint {
get {
return ResourceManager.GetString("ConstantCurrentBreakPoint", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Current (A).
/// </summary>
internal static string Current {
get {
return ResourceManager.GetString("Current", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Data bits.
/// </summary>
internal static string DataBits {
get {
return ResourceManager.GetString("DataBits", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Data channel id.
/// </summary>
internal static string DataChannelId {
get {
return ResourceManager.GetString("DataChannelId", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Data format.
/// </summary>
internal static string DataFormat {
get {
return ResourceManager.GetString("DataFormat", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Define Default Filter.
/// </summary>
internal static string DefineDefaultFilter {
get {
return ResourceManager.GetString("DefineDefaultFilter", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Delay (ms).
/// </summary>
internal static string Delay {
get {
return ResourceManager.GetString("Delay", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Digital input defaults.
/// </summary>
internal static string DigitalInputSettings {
get {
return ResourceManager.GetString("DigitalInputSettings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Digital output defaults.
/// </summary>
internal static string DigitalOutDefaults {
get {
return ResourceManager.GetString("DigitalOutDefaults", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Delay (ms).
/// </summary>
internal static string DigitalOutputDelayMS {
get {
return ResourceManager.GetString("DigitalOutputDelayMS", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Duration (ms).
/// </summary>
internal static string DigitalOutputDuration {
get {
return ResourceManager.GetString("DigitalOutputDuration", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Limit duration.
/// </summary>
internal static string DigitalOutputLimitDuration {
get {
return ResourceManager.GetString("DigitalOutputLimitDuration", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Output mode.
/// </summary>
internal static string DigitalOutputMode {
get {
return ResourceManager.GetString("DigitalOutputMode", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Disable auto-sense.
/// </summary>
internal static string DisableAutoSense {
get {
return ResourceManager.GetString("DisableAutoSense", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Display SPD analog data.
/// </summary>
internal static string DisplaySPDADC {
get {
return ResourceManager.GetString("DisplaySPDADC", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Duration (ms).
/// </summary>
internal static string Duration {
get {
return ResourceManager.GetString("Duration", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Firing mode.
/// </summary>
internal static string FiringMode {
get {
return ResourceManager.GetString("FiringMode", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Flow control.
/// </summary>
internal static string FlowControl {
get {
return ResourceManager.GetString("FlowControl", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to High tolerance (Ω).
/// </summary>
internal static string HighTolerance {
get {
return ResourceManager.GetString("HighTolerance", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to IEPE defaults.
/// </summary>
internal static string IEPEDefaults {
get {
return ResourceManager.GetString("IEPEDefaults", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Actual range high limit (x full scale).
/// </summary>
internal static string IEPERangeHighLimit {
get {
return ResourceManager.GetString("IEPERangeHighLimit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Actual range low limit (x full scale).
/// </summary>
internal static string IEPERangeLowLimit {
get {
return ResourceManager.GetString("IEPERangeLowLimit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Time packet interval (ms).
/// </summary>
internal static string IRIGTimeDataPacketIntervalMs {
get {
return ResourceManager.GetString("IRIGTimeDataPacketIntervalMs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Limit duration.
/// </summary>
internal static string LimitDuration {
get {
return ResourceManager.GetString("LimitDuration", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Low tolerance (Ω).
/// </summary>
internal static string LowTolerance {
get {
return ResourceManager.GetString("LowTolerance", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Output mode.
/// </summary>
internal static string OutputMode {
get {
return ResourceManager.GetString("OutputMode", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Parity.
/// </summary>
internal static string Parity {
get {
return ResourceManager.GetString("Parity", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Policy.
/// </summary>
internal static string Policy {
get {
return ResourceManager.GetString("Policy", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Sensor calibration policies.
/// </summary>
internal static string SensorCalibrationPolicies {
get {
return ResourceManager.GetString("SensorCalibrationPolicies", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Inspect before use.
/// </summary>
internal static string SensorSettings_AllowInspectBeforeUse {
get {
return ResourceManager.GetString("SensorSettings_AllowInspectBeforeUse", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Default maximum uses allowed.
/// </summary>
internal static string SensorSettings_DefaultMaxUsageAllowed {
get {
return ResourceManager.GetString("SensorSettings_DefaultMaxUsageAllowed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Do not allow data collection if sensor is overused.
/// </summary>
internal static string SensorSettings_DontAllowDataCollectionIfOverused {
get {
return ResourceManager.GetString("SensorSettings_DontAllowDataCollectionIfOverused", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Warn when number of uses remaining.
/// </summary>
internal static string SensorSettings_UsageRemainingForWarning {
get {
return ResourceManager.GetString("SensorSettings_UsageRemainingForWarning", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Squib defaults.
/// </summary>
internal static string SquibDefaults {
get {
return ResourceManager.GetString("SquibDefaults", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Stop bits.
/// </summary>
internal static string StopBits {
get {
return ResourceManager.GetString("StopBits", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Stream input defaults.
/// </summary>
internal static string StreamInputSettings {
get {
return ResourceManager.GetString("StreamInputSettings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Stream output defaults.
/// </summary>
internal static string StreamOutputSettings {
get {
return ResourceManager.GetString("StreamOutputSettings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Time channel id.
/// </summary>
internal static string TimeChannelId {
get {
return ResourceManager.GetString("TimeChannelId", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to TmNS config.
/// </summary>
internal static string TmNSConfig {
get {
return ResourceManager.GetString("TmNSConfig", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Track diagnostics.
/// </summary>
internal static string TrackDiagnostics {
get {
return ResourceManager.GetString("TrackDiagnostics", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to UART defaults.
/// </summary>
internal static string UartSettings {
get {
return ResourceManager.GetString("UartSettings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to UDP Address.
/// </summary>
internal static string UDPAddress {
get {
return ResourceManager.GetString("UDPAddress", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Stream Profile.
/// </summary>
internal static string UDPProfile {
get {
return ResourceManager.GetString("UDPProfile", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Use advanced streaming profiles.
/// </summary>
internal static string UseAdvancedUDPStreamProfiles {
get {
return ResourceManager.GetString("UseAdvancedUDPStreamProfiles", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Use Measured Excitation to scale EU data.
/// </summary>
internal static string UseMeasuredExcitation {
get {
return ResourceManager.GetString("UseMeasuredExcitation", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Calibration interval starts after sensor&apos;s first use.
/// </summary>
internal static string UseSensorFirstUseDate {
get {
return ResourceManager.GetString("UseSensorFirstUseDate", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Voltage input breakpoint (ADC).
/// </summary>
internal static string VoltageInputBreakpoint {
get {
return ResourceManager.GetString("VoltageInputBreakpoint", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Warning period (days).
/// </summary>
internal static string WarningPeriod {
get {
return ResourceManager.GetString("WarningPeriod", resourceCulture);
}
}
}
}

View File

@@ -0,0 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="SensorSettingsModule.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
</Settings>
</SettingsFile>

View File

@@ -0,0 +1,549 @@
//------------------------------------------------------------------------------
// <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 SensorSettingsModule.Resources {
using System;
/// <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", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class StringResources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal StringResources() {
}
/// <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 (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SensorSettingsModule.Resources.StringResources", typeof(StringResources).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;
}
}
/// <summary>
/// Looks up a localized string similar to 24V Power high (V).
/// </summary>
internal static string _24VPowerHigh {
get {
return ResourceManager.GetString("_24VPowerHigh", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 24V Power low (V).
/// </summary>
internal static string _24VPowerLow {
get {
return ResourceManager.GetString("_24VPowerLow", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Analog defaults.
/// </summary>
internal static string AnalogSettings {
get {
return ResourceManager.GetString("AnalogSettings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Arb/Base Bitrate.
/// </summary>
internal static string ArbBaseBitrate {
get {
return ResourceManager.GetString("ArbBaseBitrate", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Baud rate.
/// </summary>
internal static string BaudRate {
get {
return ResourceManager.GetString("BaudRate", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to CAN defaults.
/// </summary>
internal static string CanSettings {
get {
return ResourceManager.GetString("CanSettings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Constant current breakpoint (ADC).
/// </summary>
internal static string ConstantCurrentBreakPoint {
get {
return ResourceManager.GetString("ConstantCurrentBreakPoint", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Current (A).
/// </summary>
internal static string Current {
get {
return ResourceManager.GetString("Current", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Data bits.
/// </summary>
internal static string DataBits {
get {
return ResourceManager.GetString("DataBits", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Data channel id.
/// </summary>
internal static string DataChannelId {
get {
return ResourceManager.GetString("DataChannelId", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Data format.
/// </summary>
internal static string DataFormat {
get {
return ResourceManager.GetString("DataFormat", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Define Default Filter.
/// </summary>
internal static string DefineDefaultFilter {
get {
return ResourceManager.GetString("DefineDefaultFilter", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Delay (ms).
/// </summary>
internal static string Delay {
get {
return ResourceManager.GetString("Delay", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Digital input defaults.
/// </summary>
internal static string DigitalInputSettings {
get {
return ResourceManager.GetString("DigitalInputSettings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Digital output defaults.
/// </summary>
internal static string DigitalOutDefaults {
get {
return ResourceManager.GetString("DigitalOutDefaults", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Delay (ms).
/// </summary>
internal static string DigitalOutputDelayMS {
get {
return ResourceManager.GetString("DigitalOutputDelayMS", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Duration (ms).
/// </summary>
internal static string DigitalOutputDuration {
get {
return ResourceManager.GetString("DigitalOutputDuration", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Limit duration.
/// </summary>
internal static string DigitalOutputLimitDuration {
get {
return ResourceManager.GetString("DigitalOutputLimitDuration", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Output mode.
/// </summary>
internal static string DigitalOutputMode {
get {
return ResourceManager.GetString("DigitalOutputMode", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Disable auto-sense.
/// </summary>
internal static string DisableAutoSense {
get {
return ResourceManager.GetString("DisableAutoSense", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Display SPD analog data.
/// </summary>
internal static string DisplaySPDADC {
get {
return ResourceManager.GetString("DisplaySPDADC", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Duration (ms).
/// </summary>
internal static string Duration {
get {
return ResourceManager.GetString("Duration", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Firing mode.
/// </summary>
internal static string FiringMode {
get {
return ResourceManager.GetString("FiringMode", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Flow control.
/// </summary>
internal static string FlowControl {
get {
return ResourceManager.GetString("FlowControl", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to High tolerance (Ω).
/// </summary>
internal static string HighTolerance {
get {
return ResourceManager.GetString("HighTolerance", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to IEPE defaults.
/// </summary>
internal static string IEPEDefaults {
get {
return ResourceManager.GetString("IEPEDefaults", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Actual range high limit (x full scale).
/// </summary>
internal static string IEPERangeHighLimit {
get {
return ResourceManager.GetString("IEPERangeHighLimit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Actual range low limit (x full scale).
/// </summary>
internal static string IEPERangeLowLimit {
get {
return ResourceManager.GetString("IEPERangeLowLimit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Time packet interval (ms).
/// </summary>
internal static string IRIGTimeDataPacketIntervalMs {
get {
return ResourceManager.GetString("IRIGTimeDataPacketIntervalMs", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Limit duration.
/// </summary>
internal static string LimitDuration {
get {
return ResourceManager.GetString("LimitDuration", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Low tolerance (Ω).
/// </summary>
internal static string LowTolerance {
get {
return ResourceManager.GetString("LowTolerance", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Output mode.
/// </summary>
internal static string OutputMode {
get {
return ResourceManager.GetString("OutputMode", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Parity.
/// </summary>
internal static string Parity {
get {
return ResourceManager.GetString("Parity", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Policy.
/// </summary>
internal static string Policy {
get {
return ResourceManager.GetString("Policy", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Sensor calibration policies.
/// </summary>
internal static string SensorCalibrationPolicies {
get {
return ResourceManager.GetString("SensorCalibrationPolicies", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Inspect before use.
/// </summary>
internal static string SensorSettings_AllowInspectBeforeUse {
get {
return ResourceManager.GetString("SensorSettings_AllowInspectBeforeUse", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Default maximum uses allowed.
/// </summary>
internal static string SensorSettings_DefaultMaxUsageAllowed {
get {
return ResourceManager.GetString("SensorSettings_DefaultMaxUsageAllowed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Do not allow data collection if sensor is overused.
/// </summary>
internal static string SensorSettings_DontAllowDataCollectionIfOverused {
get {
return ResourceManager.GetString("SensorSettings_DontAllowDataCollectionIfOverused", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Warn when number of uses remaining.
/// </summary>
internal static string SensorSettings_UsageRemainingForWarning {
get {
return ResourceManager.GetString("SensorSettings_UsageRemainingForWarning", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Squib defaults.
/// </summary>
internal static string SquibDefaults {
get {
return ResourceManager.GetString("SquibDefaults", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Stop bits.
/// </summary>
internal static string StopBits {
get {
return ResourceManager.GetString("StopBits", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Stream input defaults.
/// </summary>
internal static string StreamInputSettings {
get {
return ResourceManager.GetString("StreamInputSettings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Stream output defaults.
/// </summary>
internal static string StreamOutputSettings {
get {
return ResourceManager.GetString("StreamOutputSettings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Time channel id.
/// </summary>
internal static string TimeChannelId {
get {
return ResourceManager.GetString("TimeChannelId", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to TmNS config.
/// </summary>
internal static string TmNSConfig {
get {
return ResourceManager.GetString("TmNSConfig", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Track diagnostics.
/// </summary>
internal static string TrackDiagnostics {
get {
return ResourceManager.GetString("TrackDiagnostics", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to UART defaults.
/// </summary>
internal static string UartSettings {
get {
return ResourceManager.GetString("UartSettings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to UDP Address.
/// </summary>
internal static string UDPAddress {
get {
return ResourceManager.GetString("UDPAddress", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Stream Profile.
/// </summary>
internal static string UDPProfile {
get {
return ResourceManager.GetString("UDPProfile", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Use advanced streaming profiles.
/// </summary>
internal static string UseAdvancedUDPStreamProfiles {
get {
return ResourceManager.GetString("UseAdvancedUDPStreamProfiles", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Use Measured Excitation to scale EU data.
/// </summary>
internal static string UseMeasuredExcitation {
get {
return ResourceManager.GetString("UseMeasuredExcitation", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Calibration interval starts after sensor&apos;s first use.
/// </summary>
internal static string UseSensorFirstUseDate {
get {
return ResourceManager.GetString("UseSensorFirstUseDate", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Voltage input breakpoint (ADC).
/// </summary>
internal static string VoltageInputBreakpoint {
get {
return ResourceManager.GetString("VoltageInputBreakpoint", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Warning period (days).
/// </summary>
internal static string WarningPeriod {
get {
return ResourceManager.GetString("WarningPeriod", resourceCulture);
}
}
}
}

View File

@@ -0,0 +1,352 @@
using System.ComponentModel;
using System.ComponentModel.Composition;
using System.Threading.Tasks;
using DTS.Common.Events;
using Prism.Events;
using Prism.Regions;
using Unity;
using DTS.Common.Interactivity;
using DTS.Common.Interface.Sensors.SensorSettingsModule;
using DTS.Common.Interface.Sensors;
using DTS.Common.Storage;
using System.Linq;
using DTS.Common.Classes.Groups.ChannelSettings;
using Prism.Ioc;
using DTS.SensorDB;
//using SensorSettingsModule.Model;
// ReSharper disable CheckNamespace
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable InconsistentNaming
namespace SensorSettingsModule
{
/// <summary>
/// this class handles SensorSettingsViewModel functionality
/// </summary>
[PartCreationPolicy(CreationPolicy.Shared)]
public class SensorSettingsViewModel : ISensorSettingsViewModel
{
/// <summary>
/// The SensorSettings view
/// </summary>
public ISensorSettingsView View { get; set; }
public IDigitalInputDefaults DigitalInputDefaults { get; set; }
public ISquibSettingDefaults SquibSettings { get; set; }
public IDigitalOutDefaults DigitalOutSettings { get; set; }
public IIEPESensorDefaults IEPESensorDefaults { get; set; }
public ICalibrationPolicy SensorCalibrationDefaults { get; set; }
public IAnalogDefaults AnalogDefaults { get; set; }
public IUartSettingDefaults UartIODefaults { get; set; }
public IStreamOutputSettingDefaults StreamOutputSettings { get; set; }
private IEventAggregator _eventAggregator { get; }
private IRegionManager _regionManager;
private IUnityContainer UnityContainer { get; }
public InteractionRequest<Notification> NotificationRequest { get; }
public InteractionRequest<Confirmation> ConfirmationRequest { get; }
/// <inheritdoc />
/// <summary>
/// Occurs when a property value changes.
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#region constructors and initializers
/// <summary>
/// Creates a new instance of the SensorSettingsViewModel
/// </summary>
/// <param name="view"></param>
/// <param name="regionManager">The logical placeholder defined within the application's UI (in the shell or within views) into which views are displayed.</param>
/// <param name="eventAggregator">The EventAggregator which allows different components to publish/subscribe to events without being coupled to each other.</param>
/// <param name="unityContainer">The unityContainer.</param>
public SensorSettingsViewModel(ISensorSettingsView view, IRegionManager regionManager,
IEventAggregator eventAggregator, IUnityContainer unityContainer)
{
View = view;
View.DataContext = this;
NotificationRequest = new InteractionRequest<Notification>();
ConfirmationRequest = new InteractionRequest<Confirmation>();
_eventAggregator = eventAggregator;
UnityContainer = unityContainer;
_regionManager = regionManager;
_eventAggregator.GetEvent<RaiseNotification>().Subscribe(OnRaiseNotification);
_eventAggregator.GetEvent<BusyIndicatorChangeNotification>()
.Subscribe(OnBusyIndicatorNotification, ThreadOption.PublisherThread, true);
}
#endregion
#region Methods
public void OnSetActive()
{
SquibSettings = SquibSettingDefaults.GetSquibSettingsDefault(User);
OnPropertyChanged("SquibSettings");
DigitalOutSettings = DigitalOutputDefaults.GetDigitalOutDefault(User);
OnPropertyChanged("DigitalOutSettings");
IEPESensorDefaults = IEPESensorDefault.GetIEPESensorDefaults(User);
OnPropertyChanged("IEPESensorDefaults");
SensorCalibrationDefaults = CalibrationPolicy.GetCalibrationPolicy();
OnPropertyChanged("SensorCalibrationDefaults");
DigitalInputDefaults = DigitalInputSensorDefault.GetDigitalInputDefaults(User);
OnPropertyChanged("DigitalInputDefaults");
AnalogDefaults = AnalogSettingDefaults.GetAnalogDefaults();
OnPropertyChanged("AnalogDefaults");
UartIODefaults = UartSettingDefaults.GetUartSettingsDefault(UserID);
OnPropertyChanged("UartIODefaults");
StreamOutputSettings = StreamOutputSettingDefaults.GetStreamOutputSettingsDefault(UserID);
OnPropertyChanged("StreamOutputSettings");
}
public void Unset()
{
//FB 13120 needs to validate and save settings when change the tab
ValidateAndSave();
}
public void Cleanup()
{
}
public Task CleanupAsync()
{
return Task.CompletedTask;
}
public void Initialize()
{
}
public void Initialize(object parameter)
{
}
public void Initialize(object parameter, object model)
{
}
public Task InitializeAsync()
{
return Task.CompletedTask;
}
public Task InitializeAsync(object parameter)
{
return Task.CompletedTask;
}
public void Activated()
{
}
/// <summary>
/// Private Event handler for RaiseNotification event.
/// </summary>
private void OnBusyIndicatorNotification(bool eventArg)
{
IsBusy = eventArg;
}
/// <summary>
/// Private Event handler for RaiseNotification event.
/// </summary>
private void OnRaiseNotification(NotificationContentEventArgs eventArgsWithTitle)
{
// The NotificationRequest.Raise triggers the Invoke() method of the PopupWindowAction object to show the NotificationWindow window
// Notification object expects a NotificationContentEventArgsWithoutTitle object and a Title string.
var eventArgsWithoutTitle = new NotificationContentEventArgs(eventArgsWithTitle.Message, "",
eventArgsWithTitle.Image, string.Empty);
NotificationRequest.Raise(new Notification
{
Content = eventArgsWithoutTitle,
Title = eventArgsWithTitle.Title
});
}
public void RestoreOriginalSettings()
{
AnalogSettingDefaults.RestoreDefaults(AnalogDefaults);
IEPESensorDefault.RestoreDefaults(IEPESensorDefaults);
IEPESensorDefault.Save(IEPESensorDefaults);
DigitalInputSensorDefault.RestoreDefaults(DigitalInputDefaults);
DigitalInputSensorDefault.Save(DigitalInputDefaults);
UartSettingDefaults.RestoreDefaults(UartIODefaults);
UartSettingDefaults.CommitChange((UartSettingDefaults)UartIODefaults, UserID);
OnPropertyChanged("UartIODefaults");
StreamOutputSettingDefaults.RestoreDefaults(StreamOutputSettings);
StreamOutputSettingDefaults.CommitChange((StreamOutputSettingDefaults)StreamOutputSettings, UserID);
OnPropertyChanged("StreamOutputSettings");
CalibrationPolicy.RestoreDefaults();
SensorCalibrationDefaults = CalibrationPolicy.GetCalibrationPolicy();
OnPropertyChanged("SensorCalibrationDefaults");
}
private void InvalidateAllTestSetups()
{
using (var sql = DbOperations.GetSQLCommand())
{
sql.CommandType = System.Data.CommandType.Text;
sql.CommandText = "UPDATE [TestSetups] SET [Dirty]=1, [Complete]=0";
sql.ExecuteNonQuery();
}
}
public bool ValidateAndSave()
{
try
{
if (!(SquibSettings is SquibSettingDefaults squib)) { return false; }
if (!(DigitalOutSettings is DigitalOutputDefaults dout)) { return false; }
if (!(AnalogDefaults is AnalogSettingDefaults ad)) { return false; }
if (!(UartIODefaults is UartSettingDefaults ud)) { return false; }
if (!(StreamOutputSettings is StreamOutputSettingDefaults sout)) { return false; }
bool bValid = true;
if (UartIODefaults.Validate())
{
DTS.SensorDB.UartSettingDefaults.CommitChange(ud, UserID);
}
else
{
bValid = false;
}
if (StreamOutputSettings.Validate())
{
DTS.SensorDB.StreamOutputSettingDefaults.CommitChange(sout, UserID);
}
else
{
bValid = false;
}
if (IEPESensorDefaults.Validate())
{
IEPESensorDefault.Save(IEPESensorDefaults);
}
else
{
bValid = false;
}
if (DigitalInputDefaults.Validate())
{
DigitalInputSensorDefault.Save(DigitalInputDefaults);
}
else
{
bValid = false;
}
// FB 13120 Validate and save the default filter class settings
if (AnalogDefaults.Validate())
{
AnalogDefaults.Save();
}
else
{
bValid = false;
}
var original = CalibrationPolicy.GetCalibrationPolicy();
if (original.SelectedCalPolicy != SensorCalibrationDefaults.SelectedCalPolicy
|| original.WarningPeriod != SensorCalibrationDefaults.WarningPeriod
|| original.UseSensorFirstUseDate != SensorCalibrationDefaults.UseSensorFirstUseDate
|| original.DontAllowDataCollectionIfOverused != SensorCalibrationDefaults.DontAllowDataCollectionIfOverused
|| original.UsageRemainingForWarning != SensorCalibrationDefaults.UsageRemainingForWarning
|| original.DefaultMaxUsageAllowed != SensorCalibrationDefaults.DefaultMaxUsageAllowed
|| original.AllowInspectBeforeUse != SensorCalibrationDefaults.AllowInspectBeforeUse)
{
CalibrationPolicy.WriteCalibrationPolicyToDb(SensorCalibrationDefaults);
InvalidateAllTestSetups();
}
if (SquibSettings.Validate())
{
var defaults = DbOperations.GetChannelSettingDefaults();
var lookup = defaults.ToDictionary(d => d.SettingName);
lookup[ChannelSettingBase.SQMODE].IntValue = (int)squib.FireModeDefault;
lookup[ChannelSettingBase.SQUIB_DELAY].DoubleValue = squib.FireDelayMS;
lookup[ChannelSettingBase.SQUIB_DURATION].DoubleValue = squib.FireDurationMS;
lookup[ChannelSettingBase.SQUIB_LIMIT_DURATION].BoolValue = squib.LimitDurationDefault;
lookup[ChannelSettingBase.SQUIB_CURRENT].DoubleValue = squib.OutputCurrentDefault;
SquibSettingDefaults.CommitChange(squib, User);
DbOperations.SaveChannelSettingDefaults(new[] {
lookup[ChannelSettingBase.SQMODE], lookup[ChannelSettingBase.SQUIB_DELAY],
lookup[ChannelSettingBase.SQUIB_DURATION], lookup[ChannelSettingBase.SQUIB_LIMIT_DURATION],
lookup[ChannelSettingBase.SQUIB_CURRENT]});
lookup[ChannelSettingBase.OUTPUT_MODE].IntValue = (int)dout.OutputMode;
lookup[ChannelSettingBase.DIGITALOUT_DELAY].DoubleValue = dout.DelayMS;
lookup[ChannelSettingBase.DIGITALOUT_DURATION].DoubleValue = dout.DurationMS;
lookup[ChannelSettingBase.DIGITALOUT_LIMIT_DURATION].BoolValue = dout.LimitDuration;
DbOperations.SaveChannelSettingDefaults(new[] {
lookup[ChannelSettingBase.OUTPUT_MODE], lookup[ChannelSettingBase.DIGITALOUT_LIMIT_DURATION],
lookup[ChannelSettingBase.DIGITALOUT_DURATION], lookup[ChannelSettingBase.DIGITALOUT_DELAY] });
DigitalOutputDefaults.CommitChange(dout, User);
return bValid;
}
}
catch (System.Exception ex)
{
var eventAggregator = ContainerLocator.Container.Resolve<IEventAggregator>();
eventAggregator.GetEvent<PageErrorEvent>().Publish(new PageErrorArg(new[] { ex.Message }, null));
}
return false;
}
#endregion
#region Properties
public string User { get; set; }
public int UserID { get; set; }
public bool IsDirty => false;
private bool _isBusy;
public bool IsBusy
{
get => _isBusy;
set
{
_isBusy = value;
OnPropertyChanged("IsBusy");
}
}
private bool _isMenuIncluded;
public bool IsMenuIncluded
{
get => _isMenuIncluded;
set
{
_isMenuIncluded = value;
OnPropertyChanged("IsMenuIncluded");
}
}
private bool _isNavigationIncluded;
public bool IsNavigationIncluded
{
get => _isNavigationIncluded;
set
{
_isNavigationIncluded = value;
OnPropertyChanged("IsNavigationIncluded");
}
}
#endregion Properties
#region Commands
#endregion
}
}

View File

@@ -0,0 +1,367 @@
using System.ComponentModel;
using System.ComponentModel.Composition;
using System.Threading.Tasks;
using DTS.Common.Events;
using Prism.Events;
using Prism.Regions;
using Unity;
using DTS.Common.Interactivity;
using DTS.Common.Interface.Sensors.SensorSettingsModule;
using DTS.Common.Interface.Sensors;
using DTS.Common.Storage;
using System.Linq;
using DTS.Common.Classes.Groups.ChannelSettings;
using Prism.Ioc;
using DTS.SensorDB;
//using SensorSettingsModule.Model;
// ReSharper disable CheckNamespace
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable InconsistentNaming
namespace SensorSettingsModule
{
/// <summary>
/// this class handles SensorSettingsViewModel functionality
/// </summary>
[PartCreationPolicy(CreationPolicy.Shared)]
public class SensorSettingsViewModel : ISensorSettingsViewModel
{
/// <summary>
/// The SensorSettings view
/// </summary>
public ISensorSettingsView View { get; set; }
public IDigitalInputDefaults DigitalInputDefaults { get; set; }
public ISquibSettingDefaults SquibSettings { get; set; }
public IDigitalOutDefaults DigitalOutSettings { get; set; }
public IIEPESensorDefaults IEPESensorDefaults { get; set; }
public ICalibrationPolicy SensorCalibrationDefaults { get; set; }
public IAnalogDefaults AnalogDefaults { get; set; }
public IUartSettingDefaults UartIODefaults { get; set; }
public ICanSettingDefaults CanIODefaults { get; set; }
public IStreamOutputSettingDefaults StreamOutputSettings { get; set; }
private IEventAggregator _eventAggregator { get; }
private IRegionManager _regionManager;
private IUnityContainer UnityContainer { get; }
public InteractionRequest<Notification> NotificationRequest { get; }
public InteractionRequest<Confirmation> ConfirmationRequest { get; }
/// <inheritdoc />
/// <summary>
/// Occurs when a property value changes.
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#region constructors and initializers
/// <summary>
/// Creates a new instance of the SensorSettingsViewModel
/// </summary>
/// <param name="view"></param>
/// <param name="regionManager">The logical placeholder defined within the application's UI (in the shell or within views) into which views are displayed.</param>
/// <param name="eventAggregator">The EventAggregator which allows different components to publish/subscribe to events without being coupled to each other.</param>
/// <param name="unityContainer">The unityContainer.</param>
public SensorSettingsViewModel(ISensorSettingsView view, IRegionManager regionManager,
IEventAggregator eventAggregator, IUnityContainer unityContainer)
{
View = view;
View.DataContext = this;
NotificationRequest = new InteractionRequest<Notification>();
ConfirmationRequest = new InteractionRequest<Confirmation>();
_eventAggregator = eventAggregator;
UnityContainer = unityContainer;
_regionManager = regionManager;
_eventAggregator.GetEvent<RaiseNotification>().Subscribe(OnRaiseNotification);
_eventAggregator.GetEvent<BusyIndicatorChangeNotification>()
.Subscribe(OnBusyIndicatorNotification, ThreadOption.PublisherThread, true);
}
#endregion
#region Methods
public void OnSetActive()
{
SquibSettings = SquibSettingDefaults.GetSquibSettingsDefault(User);
OnPropertyChanged("SquibSettings");
DigitalOutSettings = DigitalOutputDefaults.GetDigitalOutDefault(User);
OnPropertyChanged("DigitalOutSettings");
IEPESensorDefaults = IEPESensorDefault.GetIEPESensorDefaults(User);
OnPropertyChanged("IEPESensorDefaults");
SensorCalibrationDefaults = CalibrationPolicy.GetCalibrationPolicy();
OnPropertyChanged("SensorCalibrationDefaults");
DigitalInputDefaults = DigitalInputSensorDefault.GetDigitalInputDefaults(User);
OnPropertyChanged("DigitalInputDefaults");
AnalogDefaults = AnalogSettingDefaults.GetAnalogDefaults();
OnPropertyChanged("AnalogDefaults");
UartIODefaults = UartSettingDefaults.GetUartSettingsDefault(UserID);
OnPropertyChanged("UartIODefaults");
StreamOutputSettings = StreamOutputSettingDefaults.GetStreamOutputSettingsDefault(UserID);
OnPropertyChanged("StreamOutputSettings");
CanIODefaults = CanSettingDefaults.GetCanSettingsDefault(UserID);
OnPropertyChanged("CanIODefaults");
}
public void Unset()
{
//FB 13120 needs to validate and save settings when change the tab
ValidateAndSave();
}
public void Cleanup()
{
}
public Task CleanupAsync()
{
return Task.CompletedTask;
}
public void Initialize()
{
}
public void Initialize(object parameter)
{
}
public void Initialize(object parameter, object model)
{
}
public Task InitializeAsync()
{
return Task.CompletedTask;
}
public Task InitializeAsync(object parameter)
{
return Task.CompletedTask;
}
public void Activated()
{
}
/// <summary>
/// Private Event handler for RaiseNotification event.
/// </summary>
private void OnBusyIndicatorNotification(bool eventArg)
{
IsBusy = eventArg;
}
/// <summary>
/// Private Event handler for RaiseNotification event.
/// </summary>
private void OnRaiseNotification(NotificationContentEventArgs eventArgsWithTitle)
{
// The NotificationRequest.Raise triggers the Invoke() method of the PopupWindowAction object to show the NotificationWindow window
// Notification object expects a NotificationContentEventArgsWithoutTitle object and a Title string.
var eventArgsWithoutTitle = new NotificationContentEventArgs(eventArgsWithTitle.Message, "",
eventArgsWithTitle.Image, string.Empty);
NotificationRequest.Raise(new Notification
{
Content = eventArgsWithoutTitle,
Title = eventArgsWithTitle.Title
});
}
public void RestoreOriginalSettings()
{
AnalogSettingDefaults.RestoreDefaults(AnalogDefaults);
IEPESensorDefault.RestoreDefaults(IEPESensorDefaults);
IEPESensorDefault.Save(IEPESensorDefaults);
DigitalInputSensorDefault.RestoreDefaults(DigitalInputDefaults);
DigitalInputSensorDefault.Save(DigitalInputDefaults);
UartSettingDefaults.RestoreDefaults(UartIODefaults);
UartSettingDefaults.CommitChange((UartSettingDefaults)UartIODefaults, UserID);
OnPropertyChanged("UartIODefaults");
StreamOutputSettingDefaults.RestoreDefaults(StreamOutputSettings);
StreamOutputSettingDefaults.CommitChange((StreamOutputSettingDefaults)StreamOutputSettings, UserID);
OnPropertyChanged("StreamOutputSettings");
CanSettingDefaults.RestoreDefaults(CanIODefaults);
CanSettingDefaults.CommitChange((CanSettingDefaults)CanIODefaults, UserID);
OnPropertyChanged("CanIODefaults");
CalibrationPolicy.RestoreDefaults();
SensorCalibrationDefaults = CalibrationPolicy.GetCalibrationPolicy();
OnPropertyChanged("SensorCalibrationDefaults");
}
private void InvalidateAllTestSetups()
{
using (var sql = DbOperations.GetSQLCommand())
{
sql.CommandType = System.Data.CommandType.Text;
sql.CommandText = "UPDATE [TestSetups] SET [Dirty]=1, [Complete]=0";
sql.ExecuteNonQuery();
}
}
public bool ValidateAndSave()
{
try
{
if (!(SquibSettings is SquibSettingDefaults squib)) { return false; }
if (!(DigitalOutSettings is DigitalOutputDefaults dout)) { return false; }
if (!(AnalogDefaults is AnalogSettingDefaults ad)) { return false; }
if (!(UartIODefaults is UartSettingDefaults ud)) { return false; }
if (!(StreamOutputSettings is StreamOutputSettingDefaults sout)) { return false; }
if (!(CanIODefaults is CanSettingDefaults cd)) { return false; }
bool bValid = true;
if (UartIODefaults.Validate())
{
DTS.SensorDB.UartSettingDefaults.CommitChange(ud, UserID);
}
else
{
bValid = false;
}
if (StreamOutputSettings.Validate())
{
DTS.SensorDB.StreamOutputSettingDefaults.CommitChange(sout, UserID);
}
else
{
bValid = false;
}
if (CanIODefaults.Validate())
{
CanSettingDefaults.CommitChange(cd, UserID);
}
else
{
bValid = false;
}
if (IEPESensorDefaults.Validate())
{
IEPESensorDefault.Save(IEPESensorDefaults);
}
else
{
bValid = false;
}
if (DigitalInputDefaults.Validate())
{
DigitalInputSensorDefault.Save(DigitalInputDefaults);
}
else
{
bValid = false;
}
// FB 13120 Validate and save the default filter class settings
if (AnalogDefaults.Validate())
{
AnalogDefaults.Save();
}
else
{
bValid = false;
}
var original = CalibrationPolicy.GetCalibrationPolicy();
if (original.SelectedCalPolicy != SensorCalibrationDefaults.SelectedCalPolicy
|| original.WarningPeriod != SensorCalibrationDefaults.WarningPeriod
|| original.UseSensorFirstUseDate != SensorCalibrationDefaults.UseSensorFirstUseDate
|| original.DontAllowDataCollectionIfOverused != SensorCalibrationDefaults.DontAllowDataCollectionIfOverused
|| original.UsageRemainingForWarning != SensorCalibrationDefaults.UsageRemainingForWarning
|| original.DefaultMaxUsageAllowed != SensorCalibrationDefaults.DefaultMaxUsageAllowed
|| original.AllowInspectBeforeUse != SensorCalibrationDefaults.AllowInspectBeforeUse)
{
CalibrationPolicy.WriteCalibrationPolicyToDb(SensorCalibrationDefaults);
InvalidateAllTestSetups();
}
if (SquibSettings.Validate())
{
var defaults = DbOperations.GetChannelSettingDefaults();
var lookup = defaults.ToDictionary(d => d.SettingName);
lookup[ChannelSettingBase.SQMODE].IntValue = (int)squib.FireModeDefault;
lookup[ChannelSettingBase.SQUIB_DELAY].DoubleValue = squib.FireDelayMS;
lookup[ChannelSettingBase.SQUIB_DURATION].DoubleValue = squib.FireDurationMS;
lookup[ChannelSettingBase.SQUIB_LIMIT_DURATION].BoolValue = squib.LimitDurationDefault;
lookup[ChannelSettingBase.SQUIB_CURRENT].DoubleValue = squib.OutputCurrentDefault;
SquibSettingDefaults.CommitChange(squib, User);
DbOperations.SaveChannelSettingDefaults(new[] {
lookup[ChannelSettingBase.SQMODE], lookup[ChannelSettingBase.SQUIB_DELAY],
lookup[ChannelSettingBase.SQUIB_DURATION], lookup[ChannelSettingBase.SQUIB_LIMIT_DURATION],
lookup[ChannelSettingBase.SQUIB_CURRENT]});
lookup[ChannelSettingBase.OUTPUT_MODE].IntValue = (int)dout.OutputMode;
lookup[ChannelSettingBase.DIGITALOUT_DELAY].DoubleValue = dout.DelayMS;
lookup[ChannelSettingBase.DIGITALOUT_DURATION].DoubleValue = dout.DurationMS;
lookup[ChannelSettingBase.DIGITALOUT_LIMIT_DURATION].BoolValue = dout.LimitDuration;
DbOperations.SaveChannelSettingDefaults(new[] {
lookup[ChannelSettingBase.OUTPUT_MODE], lookup[ChannelSettingBase.DIGITALOUT_LIMIT_DURATION],
lookup[ChannelSettingBase.DIGITALOUT_DURATION], lookup[ChannelSettingBase.DIGITALOUT_DELAY] });
DigitalOutputDefaults.CommitChange(dout, User);
return bValid;
}
}
catch (System.Exception ex)
{
var eventAggregator = ContainerLocator.Container.Resolve<IEventAggregator>();
eventAggregator.GetEvent<PageErrorEvent>().Publish(new PageErrorArg(new[] { ex.Message }, null));
}
return false;
}
#endregion
#region Properties
public string User { get; set; }
public int UserID { get; set; }
public bool IsDirty => false;
private bool _isBusy;
public bool IsBusy
{
get => _isBusy;
set
{
_isBusy = value;
OnPropertyChanged("IsBusy");
}
}
private bool _isMenuIncluded;
public bool IsMenuIncluded
{
get => _isMenuIncluded;
set
{
_isMenuIncluded = value;
OnPropertyChanged("IsMenuIncluded");
}
}
private bool _isNavigationIncluded;
public bool IsNavigationIncluded
{
get => _isNavigationIncluded;
set
{
_isNavigationIncluded = value;
OnPropertyChanged("IsNavigationIncluded");
}
}
#endregion Properties
#region Commands
#endregion
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("SensorSettingsModule")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("DTS")]
[assembly: AssemblyProduct("SensorSettingsModule")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("32dfec83-bdc6-4d9c-be01-be5441e3d8e6")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,175 @@
<?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>{B6AD76AB-A081-4951-92E2-AD9A5215B245}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SensorSettingsModule</RootNamespace>
<AssemblyName>SensorSettingsModule</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>CODE_ANALYSIS;DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<RunCodeAnalysis>false</RunCodeAnalysis>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>CODE_ANALYSIS;DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<RunCodeAnalysis>true</RunCodeAnalysis>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.VisualBasic" />
<Reference Include="Microsoft.Xaml.Behaviors">
<HintPath>..\..\..\..\Common\DTS.Common\lib\PrismLibrary\Microsoft.Xaml.Behaviors.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="Prism">
<HintPath>..\..\..\..\Common\DTS.Common\lib\PrismLibrary\Prism.dll</HintPath>
</Reference>
<Reference Include="Prism.Unity.Wpf">
<HintPath>..\..\..\..\Common\DTS.Common\lib\PrismLibrary\Prism.Unity.Wpf.dll</HintPath>
</Reference>
<Reference Include="Prism.Wpf">
<HintPath>..\..\..\..\Common\DTS.Common\lib\PrismLibrary\Prism.Wpf.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
<Reference Include="System.Security" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="Unity.Abstractions">
<HintPath>..\..\..\..\Common\DTS.Common\lib\PrismLibrary\Unity.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Unity.Container">
<HintPath>..\..\..\..\Common\DTS.Common\lib\PrismLibrary\Unity.Container.dll</HintPath>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="Xceed.Wpf.Toolkit">
<HintPath>..\..\..\..\Common\DTS.Common\lib\Xceed.Wpf.Toolkit\Xceed.Wpf.Toolkit.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
<Compile Include="SensorSettingsModule.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Resources\StringResources.Designer.cs">
<DependentUpon>StringResources.resx</DependentUpon>
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
</Compile>
<Compile Include="Resources\TranslateExtension.cs" />
<Compile Include="ViewModel\SensorSettingsViewModel.cs" />
<Compile Include="View\SensorSettingsView.xaml.cs">
<DependentUpon>SensorSettingsView.xaml</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\StringResources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>StringResources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
<CustomToolNamespace>SensorSettingsModule.Resources</CustomToolNamespace>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Common\DTS.Common.Core\DTS.Common.Core.csproj">
<Project>{fab1f470-1574-4301-b56e-d3364aa93679}</Project>
<Name>DTS.Common.Core</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Common\DTS.Common.SettingsDB\DTS.Common.Settings.csproj">
<Project>{61017104-D8EE-41D1-B9CA-DAD863FF78B2}</Project>
<Name>DTS.Common.Settings</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Common\DTS.Common.Storage\DTS.Common.Storage.csproj">
<Project>{e0d1a7d0-dce8-403d-ba85-5a5d66ba1313}</Project>
<Name>DTS.Common.Storage</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Common\DTS.Common.Utilities\DTS.Common.Utilities.csproj">
<Project>{03eace47-ea59-44ac-b49d-956e4dc4d618}</Project>
<Name>DTS.Common.Utilities</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Common\DTS.Common\DTS.Common.csproj">
<Project>{114edc77-f3b5-4576-a91b-40818d503b55}</Project>
<Name>DTS.Common</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\IService\IService.csproj">
<Project>{c9c45b72-05a3-4962-bc13-a78b1f4b1925}</Project>
<Name>IService</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\SensorDB\SensorDB.csproj">
<Project>{444ef10c-046e-47ad-a9a5-17318d488723}</Project>
<Name>SensorDB</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\Users\Users.csproj">
<Project>{be8d217d-6da9-4bca-b62a-a82325b33979}</Project>
<Name>Users</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<Page Include="View\SensorSettingsView.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
</ItemGroup>
<ItemGroup>
<Folder Include="Model\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,21 @@
using System;
using System.Windows.Markup;
using SensorSettingsModule.Resources;
namespace SensorSettingsModule
{
[MarkupExtensionReturnType(typeof(string))]
public class TranslateExtension : MarkupExtension
{
private readonly string _key;
public TranslateExtension(string key) { _key = key; }
private const string NotFound = "#stringnotfound#";
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (string.IsNullOrEmpty(_key)) { return NotFound; }
return StringResources.ResourceManager.GetString(_key) ?? NotFound + " " + _key;
}
}
}

View File

@@ -0,0 +1,323 @@
<base:BaseView x:Class="SensorSettingsModule.SensorSettingsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:base="clr-namespace:DTS.Common.Base;assembly=DTS.Common"
xmlns:converters="clr-namespace:DTS.Common.Converters;assembly=DTS.Common"
xmlns:strings="clr-namespace:SensorSettingsModule"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
d:DesignHeight="768" d:DesignWidth="1366"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit">
<base:BaseView.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/DTS.Common;component/Themes/CommonStyles.xaml"/>
<ResourceDictionary Source="pack://application:,,,/DTS.Common;component/Controls/combobox.xaml"/>
<ResourceDictionary Source="pack://application:,,,/DTS.Common;component/Constant/XamlConstants.xaml"/>
</ResourceDictionary.MergedDictionaries>
<sys:Double x:Key="_24VPOWER_LOW_MAX">24</sys:Double>
<sys:Double x:Key="_24VPOWER_LOW_MIN">0</sys:Double>
<sys:Double x:Key="_24VPOWER_HIGH_MAX">30</sys:Double>
<sys:Double x:Key="_24VPOWER_HIGH_MIN">0</sys:Double>
<sys:Double x:Key="IEPE_RANGE_LOW_MIN">.1</sys:Double>
<sys:Double x:Key="IEPE_RANGE_LOW_MAX">10</sys:Double>
<sys:Double x:Key="IEPE_RANGE_HIGH_MIN">1</sys:Double>
<sys:Double x:Key="IEPE_RANGE_HIGH_MAX">1000</sys:Double>
<!-- most of the styles down to the converter were either already here or copied in when I was trying to fix a few style issues
none of them are native to here so it's probably ok to wipe out down to the converters if the DTS.Common commonstyles has the
right styles present
-->
<Style TargetType="xctk:DoubleUpDown" BasedOn="{StaticResource PageContentXCDoubleUpDown}">
<Setter Property="Width" Value="150"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="FormatString" Value="N2"/>
<Setter Property="Increment" Value="0.1"/>
</Style>
<Style TargetType="ListView">
<Setter Property="ItemContainerStyle" Value="{StaticResource TTS_ListViewItemStyle}"/>
</Style>
<Style TargetType="CheckBox" BasedOn="{StaticResource PageContentCheckBoxStyle}" />
<Style TargetType="ComboBox" BasedOn="{StaticResource FlatComboBoxStyle}">
<Setter Property="Width" Value="450"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
</Style>
<Style TargetType="Button" BasedOn="{StaticResource TTS_ButtonStyle}"/>
<Style TargetType="GridViewColumnHeader" BasedOn="{StaticResource Gray_GridViewColumnHeaderStyle}"/>
<Style TargetType="Expander" BasedOn="{StaticResource SimpleExpanderTemp}">
<Setter Property="Width" Value="Auto"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="VerticalAlignment" Value="Top"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
</Style>
<!-- these are used for error decoration of Squib high/low tolerances -->
<converters:BooleanToBorderThicknessConverter x:Key="BooleanToBorderThickness" />
<converters:BooleanToColorConverter x:Key="BooleanToColor" />
<!--<converters:BooleanToColorConverter x:Key="BooleanToWarningColor" WarningBrush="True" />-->
<converters:BooleanToVisibilityConverter x:Key="BoolToVisConverter" /> <!-- used for Current Visability depending on squib fire mode-->
</ResourceDictionary>
</base:BaseView.Resources>
<!-- I originally tried DynamicGrid here, but it had weird column sizing, I believe it was missing some stuff from CommonStyles -->
<StackPanel Background="{DynamicResource Brush_ApplicationContentBackground}" Orientation="Vertical">
<Expander Header="{strings:TranslateExtension SquibDefaults}" DataContext="{Binding SquibSettings}" AutomationProperties.AutomationId="SQUIBDefaultsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension Delay}" Grid.Row="0" AutomationProperties.AutomationId="SQUIBDelayLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="0" Minimum="{StaticResource SQUIB_DELAY_MIN}"
Maximum="{StaticResource SQUIB_DELAY_MAX}" ClipValueToMinMax="True" Value="{Binding FireDelayMS}"
AutomationProperties.AutomationId="SQUIBDelay"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension LimitDuration}" Grid.Row="1" AutomationProperties.AutomationId="SQUIBLimitDurationLabel"/>
<CheckBox Grid.Column="1" Grid.Row="1" Margin="0" IsChecked="{Binding LimitDurationDefault}" AutomationProperties.AutomationId="SQUIBLimitDuration" HorizontalAlignment="Left"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension Duration}" Grid.Row="2"
Visibility="{Binding LimitDurationDefault, Converter={StaticResource BoolToVisConverter}}" AutomationProperties.AutomationId="SQUIBDurationLabel" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="2" FormatString="N1" Minimum="{StaticResource SQUIB_DURATION_MIN}" Maximum="{StaticResource SQUIB_DURATION_MAX}"
ClipValueToMinMax="True" Value="{Binding FireDurationMS}"
Visibility="{Binding LimitDurationDefault, Converter={StaticResource BoolToVisConverter}}"
AutomationProperties.AutomationId="SQUIBDuration"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension LowTolerance}" Grid.Row="3" AutomationProperties.AutomationId="SQUIBLowToleranceLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="3" FormatString="N1" Minimum="{StaticResource SQUIB_TOLERANCE_LOW}"
Maximum="{StaticResource SQUIB_TOLERANCE_HIGH}" Value="{Binding ToleranceLowDefault}"
BorderBrush="{Binding ToleranceValid, Converter={StaticResource BooleanToColor}}"
BorderThickness="{Binding ToleranceValid, Converter={StaticResource BooleanToBorderThickness}}" AutomationProperties.AutomationId="SQUIBLowTolerance"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension HighTolerance}" Grid.Row="4" AutomationProperties.AutomationId="SQUIBHighToleranceLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="4" FormatString="N1" Minimum="{StaticResource SQUIB_TOLERANCE_LOW}"
Maximum="{StaticResource SQUIB_TOLERANCE_HIGH}" Value="{Binding ToleranceHighDefault}"
BorderBrush="{Binding ToleranceValid, Converter={StaticResource BooleanToColor}}"
BorderThickness="{Binding ToleranceValid, Converter={StaticResource BooleanToBorderThickness}}" AutomationProperties.AutomationId="SQUIBHighTolerance"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension FiringMode}" Grid.Row="5" AutomationProperties.AutomationId="SQUIBFiringModeLabel"/>
<ComboBox Grid.Column="1" Grid.Row="5" SelectedItem="{Binding FireModeDefault}" ItemsSource="{Binding AvailableModes}" AutomationProperties.AutomationId="SQUIBFiringMode" HorizontalAlignment="Left"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension Current}" Grid.Row="6" Visibility="{Binding IsConstantCurrent, Converter={StaticResource BoolToVisConverter}}" AutomationProperties.AutomationId="SQUIBConstantCurrentabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="6" Minimum="{StaticResource SQUIB_CURRENT_LOW}" Maximum="{StaticResource SQUIB_CURRENT_HIGH}"
Value="{Binding OutputCurrentDefault}" Visibility="{Binding IsConstantCurrent, Converter={StaticResource BoolToVisConverter}}"
AutomationProperties.AutomationId="SQUIBConstantCurrent" />
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension DigitalOutDefaults}" DataContext="{Binding DigitalOutSettings}" AutomationProperties.AutomationId="DigitalOutExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0" Text="{strings:TranslateExtension DigitalOutputMode}" AutomationProperties.AutomationId="DOUTModeLabel"/>
<ComboBox Grid.Column="1" Grid.Row="0" SelectedItem="{Binding OutputMode}" ItemsSource="{Binding AvailableModes}" AutomationProperties.AutomationId="DOUTMode" HorizontalAlignment="Left" />
<TextBlock Grid.Column="0" Grid.Row="1" Text="{strings:TranslateExtension DigitalOutputDelayMS}" AutomationProperties.AutomationId="DOUTDelayLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="1" Minimum="0" ClipValueToMinMax="True"
Increment=".1" Value="{Binding DelayMS}" AutomationProperties.AutomationId="DOUTDelay"/>
<TextBlock Grid.Column="0" Grid.Row="2" Text="{strings:TranslateExtension DigitalOutputLimitDuration}" AutomationProperties.AutomationId="DOUTLimitDurationLabel"/>
<CheckBox Grid.Column="1" Grid.Row="2" IsChecked="{Binding LimitDuration}" AutomationProperties.AutomationId="DOUTLimitDuration" HorizontalAlignment="Left"/>
<TextBlock Grid.Column="0" Grid.Row="3" Text="{strings:TranslateExtension DigitalOutputDuration}"
Visibility="{Binding LimitDuration, Converter={StaticResource BoolToVisConverter}}" AutomationProperties.AutomationId="DOUTDurationLabel" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="3" Minimum="0" ClipValueToMinMax="True"
Increment=".1" Value="{Binding DurationMS}" Visibility="{Binding LimitDuration, Converter={StaticResource BoolToVisConverter}}"
AutomationProperties.AutomationId="DOUTDuration"/>
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension DigitalInputSettings}" DataContext="{Binding DigitalInputDefaults}" AutomationProperties.AutomationId="DigitalInputsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0" Text="{strings:TranslateExtension ConstantCurrentBreakPoint}" />
<!-- 16 bit signed -->
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="0" Minimum="-32768" Maximum="32767" ClipValueToMinMax="True"
Increment="1" Value="{Binding ConstantCurrentBreakpointADC}" AutomationProperties.AutomationId="DIConstantCurrentBreakpoint"/>
<TextBlock Grid.Column="0" Grid.Row="1" Text="{strings:TranslateExtension VoltageInputBreakpoint}" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="1" Minimum="-32768" Maximum="32767" ClipValueToMinMax="True"
Increment="1" Value="{Binding VoltageBreakpointADC}" AutomationProperties.AutomationId="DIVoltageBreakpoint"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension DisplaySPDADC}" Grid.Row="2" />
<CheckBox Grid.Column="1" Grid.Row="2" IsChecked="{Binding DisplaySPDADC}" />
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension IEPEDefaults}" DataContext="{Binding IEPESensorDefaults}" AutomationProperties.AutomationId="IEPEDefaultsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <!-- Disable AutoSense -->
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension _24VPowerLow}" Grid.Row="0" AutomationProperties.AutomationId="_24VPowerLowLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="0" Minimum="{StaticResource _24VPOWER_LOW_MIN}" FormatString="N1"
Maximum="{StaticResource _24VPOWER_LOW_MAX}" ClipValueToMinMax="True" Value="{Binding _24VPowerLow}"
AutomationProperties.AutomationId="_24VPowerLowDoubleUpDown"
BorderBrush="{Binding ToleranceValid, Converter={StaticResource BooleanToColor}}"
BorderThickness="{Binding ToleranceValid, Converter={StaticResource BooleanToBorderThickness}}" />
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension _24VPowerHigh}" Grid.Row="1"
AutomationProperties.AutomationId="_24VPowerHighLabel" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="1" FormatString="N1" Minimum="{StaticResource _24VPOWER_HIGH_MIN}" Maximum="{StaticResource _24VPOWER_HIGH_MAX}"
ClipValueToMinMax="True" Value="{Binding _24VPowerHigh}"
AutomationProperties.AutomationId="_24VPowerHighDoubleUpDown"
BorderBrush="{Binding ToleranceValid, Converter={StaticResource BooleanToColor}}"
BorderThickness="{Binding ToleranceValid, Converter={StaticResource BooleanToBorderThickness}}"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension IEPERangeLowLimit}" Grid.Row="2" AutomationProperties.AutomationId="RangeLowLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="2" Minimum="{StaticResource IEPE_RANGE_LOW_MIN}" FormatString="N1"
Maximum="{StaticResource IEPE_RANGE_LOW_MAX}" ClipValueToMinMax="True" Value="{Binding RangeLowLimitScalar}"
AutomationProperties.AutomationId="IEPELowDoubleUpDown"
BorderBrush="{Binding RangeToleranceValid, Converter={StaticResource BooleanToColor}}"
BorderThickness="{Binding RangeToleranceValid, Converter={StaticResource BooleanToBorderThickness}}" />
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension IEPERangeHighLimit}" Grid.Row="3"
AutomationProperties.AutomationId="RangeHighLabel" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="3" FormatString="N1" Minimum="{StaticResource IEPE_RANGE_HIGH_MIN}" Maximum="{StaticResource IEPE_RANGE_HIGH_MAX}"
ClipValueToMinMax="True" Value="{Binding RangeHighLimitScalar}"
AutomationProperties.AutomationId="IEPEHighDoubleUpDown"
BorderBrush="{Binding RangeToleranceValid, Converter={StaticResource BooleanToColor}}"
BorderThickness="{Binding RangeToleranceValid, Converter={StaticResource BooleanToBorderThickness}}"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension DisableAutoSense}" Grid.Row="4" AutomationProperties.AutomationId="AutoSenseLabel" />
<CheckBox Grid.Column="1" IsChecked="{Binding DisableAutoSense}" Grid.Row="4" AutomationProperties.AutomationId="DisableAutoSenseCheckBox" />
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension SensorCalibrationPolicies}" DataContext="{Binding SensorCalibrationDefaults}" AutomationProperties.AutomationId="SensorCalibrationsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension UseSensorFirstUseDate}" AutomationProperties.AutomationId="SensorFirstUseLabel" />
<CheckBox Grid.Column="1" IsChecked="{Binding UseSensorFirstUseDate}" AutomationProperties.AutomationId="SensorFirstUseCheckBox" />
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension Policy}" Grid.Row="1 "/>
<ComboBox Grid.Column="1" ItemsSource="{Binding AvailableSensorCalPolicies, Mode=OneWay}" SelectedItem="{Binding SelectedCalPolicy}"
AutomationProperties.AutomationId="SensorCalPolicyComboBox" Grid.Row="1"/>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension WarningPeriod}" Grid.Row="2" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="2" FormatString="N0" Minimum="1" Maximum="36500" ClipValueToMinMax="True" Value="{Binding WarningPeriod}"
AutomationProperties.AutomationId="WarningPeriodDoubleUpDown" Increment="1"/>
<TextBlock Grid.Column="0" Grid.Row="3" Text="{strings:TranslateExtension SensorSettings_DontAllowDataCollectionIfOverused}" AutomationProperties.AutomationId="SensorOveruseLabel" />
<CheckBox Grid.Column="1" Grid.Row="3" IsChecked="{Binding DontAllowDataCollectionIfOverused}" IsEnabled="{Binding SensorAssemblyEnabled}" AutomationProperties.AutomationId="SensorOveruseCheckBox" />
<TextBlock Grid.Column="0" Grid.Row="4" Visibility ="{Binding DontAllowDataCollectionIfOverused, Converter={StaticResource BoolToVisConverter}}" Text="{strings:TranslateExtension SensorSettings_UsageRemainingForWarning}" AutomationProperties.AutomationId="UsageRemainingTxtBlock"/>
<TextBox Grid.Column="1" Grid.Row="4" Visibility ="{Binding DontAllowDataCollectionIfOverused, Converter={StaticResource BoolToVisConverter}}" Text="{Binding UsageRemainingForWarning}" MinWidth="50" MaxWidth="50" HorizontalAlignment="Left" AutomationProperties.AutomationId="UsageRemainingTxtBx"/>
<TextBlock Grid.Column="0" Grid.Row="5" Visibility ="{Binding DontAllowDataCollectionIfOverused, Converter={StaticResource BoolToVisConverter}}" Text="{strings:TranslateExtension SensorSettings_DefaultMaxUsageAllowed}" AutomationProperties.AutomationId="MaxUsageAllowedTxtBlock"/>
<TextBox Grid.Column="1" Grid.Row="5" Visibility ="{Binding DontAllowDataCollectionIfOverused, Converter={StaticResource BoolToVisConverter}}" Text="{Binding DefaultMaxUsageAllowed}" MinWidth="50" MaxWidth="50" HorizontalAlignment="Left" AutomationProperties.AutomationId="MaxUsageAllowedTxtBx"/>
<TextBlock Grid.Column="0" Grid.Row="6" Text="{strings:TranslateExtension SensorSettings_AllowInspectBeforeUse}" />
<CheckBox Grid.Column="1" Grid.Row="6" IsChecked="{Binding AllowInspectBeforeUse}" IsEnabled="{Binding AllowInspectBeforeUseEnabled}" AutomationProperties.AutomationId="chk_AllowInspectBeforeUse" />
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension AnalogSettings}" DataContext="{Binding AnalogDefaults}" AutomationProperties.AutomationId="AnalogSettingsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Text="{strings:TranslateExtension DefineDefaultFilter}" />
<ComboBox Grid.Column="1" DisplayMemberPath="FilterName" LostFocus="CbFilterOption_LostFocus" x:Name="cbFilterOption" ItemsSource="{Binding FilterOptions}" SelectedItem="{Binding SelectedFilterOption, Mode=TwoWay}"
AutomationProperties.AutomationId="SensorCalPolicyComboBox" IsEditable="True" IsReadOnly="False" />
<TextBlock Grid.Column="0" Grid.Row="1" Text="{strings:TranslateExtension UseMeasuredExcitation}" />
<CheckBox Grid.Column="1" Grid.Row="1" IsChecked="{Binding UseMeasuredExcitation}" AutomationProperties.AutomationId="chk_UseMeasuredExcitationFlag"/>
<TextBlock Grid.Column="0" Grid.Row="2" Text="{strings:TranslateExtension TrackDiagnostics}" />
<CheckBox Grid.Column="1" Grid.Row="2" IsChecked="{Binding TrackAnalogDiagnostics}" AutomationProperties.AutomationId="chk_TrackAnalogDiagnostics"
IsEnabled="{Binding TrackAnalogDiagnosticsEnabled}"/>
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension UartSettings}" DataContext="{Binding UartIODefaults}" AutomationProperties.AutomationId="UartSettingsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0" Text="{strings:TranslateExtension BaudRate}" AutomationProperties.AutomationId="UARTBaudRateLabel" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="0" FormatString="N0" Increment="1" Minimum="110" Maximum="3000000"
ClipValueToMinMax="True" Value="{Binding BaudRate}"
AutomationProperties.AutomationId="UARTDataBits"/>
<TextBlock Grid.Column="0" Grid.Row="1" Text="{strings:TranslateExtension DataBits}" AutomationProperties.AutomationId="UARTDataBitsLabel" />
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="1" FormatString="N0" Increment="1" Minimum="{StaticResource UART_DATA_BITS_MIN}" Maximum="{StaticResource UART_DATA_BITS_MAX}"
ClipValueToMinMax="True" Value="{Binding DataBits}"
AutomationProperties.AutomationId="UARTDataBits"/>
<TextBlock Grid.Column="0" Grid.Row="2" Text="{strings:TranslateExtension StopBits}" AutomationProperties.AutomationId="UARTStopBitsLabel"/>
<ComboBox Grid.Column="1" Grid.Row="2" SelectedItem="{Binding StopBits}" ItemsSource="{Binding AvailableStopBits}" AutomationProperties.AutomationId="UARTStopBits" HorizontalAlignment="Left" />
<TextBlock Grid.Column="0" Grid.Row="3" Text="{strings:TranslateExtension Parity}" AutomationProperties.AutomationId="UARTParityLabel"/>
<ComboBox Grid.Column="1" Grid.Row="3" SelectedItem="{Binding Parity}" ItemsSource="{Binding AvailableParities}" AutomationProperties.AutomationId="UARTParity" HorizontalAlignment="Left" />
<TextBlock Grid.Column="0" Grid.Row="4" Text="{strings:TranslateExtension DataFormat}" AutomationProperties.AutomationId="UARTDataFormatLabel"/>
<ComboBox Grid.Column="1" Grid.Row="4" SelectedItem="{Binding DataFormat}" ItemsSource="{Binding AvailableDataFormats}" AutomationProperties.AutomationId="UARTDataFormat" HorizontalAlignment="Left" />
</Grid>
</Expander>
<Expander Header="{strings:TranslateExtension StreamOutputSettings}" DataContext="{Binding StreamOutputSettings}" AutomationProperties.AutomationId="StreamOutputSettingsExpander">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="1" Text="{strings:TranslateExtension UDPProfile}" AutomationProperties.AutomationId="UDPProfileLabel" />
<ComboBox Grid.Column="1" Grid.Row="1" SelectedItem="{Binding Profile}" ItemsSource="{Binding AvailableStreamOutUDPProfiles}" AutomationProperties.AutomationId="StreamOutProfile" HorizontalAlignment="Left" />
<TextBlock Grid.Column="0" Grid.Row="2" Text="{strings:TranslateExtension UDPAddress}" AutomationProperties.AutomationId="UDPAddressLabel" />
<TextBox Grid.Column="1" Grid.Row="2" Text="{Binding UDPAddress}" AutomationProperties.AutomationId="StreamOutUDPAddress"/>
<TextBlock Grid.Column="0" Grid.Row="3" Text="{strings:TranslateExtension TimeChannelId}" AutomationProperties.AutomationId="TimeChannelIdLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="3" FormatString="N0" Increment="1" Minimum="0" Maximum="100"
ClipValueToMinMax="True" Value="{Binding TimeChannelId}"
AutomationProperties.AutomationId="StreamOutTimeChannelId"/>
<TextBlock Grid.Column="0" Grid.Row="4" Text="{strings:TranslateExtension DataChannelId}" AutomationProperties.AutomationId="DataChannelIdLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="4" FormatString="N0" Increment="1" Minimum="0" Maximum="100"
ClipValueToMinMax="True" Value="{Binding DataChannelId}"
AutomationProperties.AutomationId="StreamOutDataChannelId"/>
<TextBlock Grid.Column="0" Grid.Row="5" Text="{strings:TranslateExtension TmNSConfig}" AutomationProperties.AutomationId="TmNSConfigLabel" />
<TextBox Grid.Column="1" Grid.Row="5" Text="{Binding TmNSConfig}" AutomationProperties.AutomationId="StreamOutTmNSConfig"/>
<TextBlock Grid.Column="0" Grid.Row="6" Text="{strings:TranslateExtension IRIGTimeDataPacketIntervalMs}" AutomationProperties.AutomationId="IRIGTimeDataPacketIntervalMsLabel"/>
<xctk:DoubleUpDown Grid.Column="1" Grid.Row="6" FormatString="N0" Increment="1" Minimum="0" Maximum="100"
ClipValueToMinMax="True" Value="{Binding IRIGTimeDataPacketIntervalMs}"
AutomationProperties.AutomationId="StreamOutIRIGTimeDataPacketIntervalMs"/>
</Grid>
</Expander>
</StackPanel>
</base:BaseView>