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,102 @@
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
namespace DTS.Common.Controls
{
public class DynamicGrid : Grid, INotifyPropertyChanged
{
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected bool SetProperty<T>(ref T storage, T value, string propertyName = null)
{
if (Equals(storage, value)) return false;
storage = value;
OnPropertyChanged(propertyName);
return true;
}
protected void OnPropertyChanged(string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
public DynamicGrid()
: base()
{
Refresh();
}
protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved)
{
base.OnVisualChildrenChanged(visualAdded, visualRemoved);
Refresh();
}
public void Refresh()
{
ColumnDefinitions.Clear();
for (byte i = 0; i < GridColumns; i++)
{
ColumnDefinitions.Add(new ColumnDefinition());
if (i + 1 != GridColumns)
{
ColumnDefinitions[i].Width = new GridLength(1, GridUnitType.Auto);
}
else
{
ColumnDefinitions[i].Width = new GridLength(1, GridUnitType.Star);
}
}
var curRow = 0;
var curCol = 0;
RowDefinitions.Clear();
if (Children != null)
{
foreach (UIElement curChild in Children)
{
if (0 == curCol)
{
// We're on the first column, we need a new row for the child
RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Auto) });
}
// Set the child to its row and column
SetRow(curChild, curRow);
SetColumn(curChild, curCol);
// Iderate
if (curCol < GridColumns - 1)
{
// We're moving to the next column
curCol++;
}
else
{
// We're at the end, go back to clumn 0
curCol = 0;
curRow++;
}
}
}
RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Star) });
}
private byte _columns = 2;
public byte GridColumns
{
get => _columns;
set { _columns = value; Refresh(); }
}
}
}

View File

@@ -0,0 +1,205 @@
using System;
using System.ComponentModel;
using System.Windows.Media;
using DTS.Common.Base;
// ReSharper disable CheckNamespace
namespace DTS.Common.Interface
{
public interface ITestChannel : INotifyPropertyChanged
{
string Group { get; set; }
string SubGroup { get; set; }
bool IsGraphChannel { get; set; }
string GraphName { get; set; }
string TestId { get; set; }
string TestSetupName { get; set; }
string ModuleSerialNumber { get; set; }
string SerialNumber { get; set; }
string ChannelId { get; set; }
string ChannelDisplayName { get; set; }
string Description { get; set; }
string IsoCode { get; set; }
string IsoChannelName { get; set; }
string UserCode { get; set; }
string UserChannelName { get; set; }
string ChannelGroupName { get; set; }
string ChannelType { get; set; }
bool IsCalculatedChannel { get; set; }
int Number { get; set; }
string DigitalMultiplier { get; set; }
string DigitalMode { get; set; }
DateTime Start { get; set; }
string Bridge { get; set; }
double BridgeResistanceOhms { get; set; }
double ZeroPoint { get; set; }
string ChannelDescriptionString { get; set; }
void SetChannelDescriptionAndDisplayName(string channelDescriptionString);
string ChannelName2 { get; set; }
string HardwareChannelName { get; set; }
double DesiredRange { get; set; }
double ActualMaxRangeEu { get; set; }
double ActualMinRangeEu { get; set; }
double ActualMaxRangeAdc { get; }
double ActualMinRangeAdc { get; }
double ActualMaxRangeMv { get; set; }
double ActualMinRangeMv { get; set; }
double Sensitivity { get; set; }
string SoftwareFilter { get; set; }
bool ProportionalToExcitation { get; set; }
bool IsInverted { get; set; }
string LinearizationFormula { get; set; }
bool IsSubsampled { get; set; }
int AbsoluteDisplayOrder { get; set; }
DateTime LastCalibrationDate { get; set; }
string SensorId { get; set; }
int OffsetToleranceLowMv { get; set; }
int OffsetToleranceHighMv { get; set; }
int DataFlag { get; set; }
string ExcitationVoltage { get; set; }
string Eu { get; set; }
bool CalSignalEnabled { get; set; }
bool ShuntEnabled { get; set; }
bool VoltageInsertionCheckEnabled { get; set; }
bool RemoveOffset { get; set; }
string ZeroMethod { get; set; }
double ZeroAverageWindowBegin { get; set; }
double ZeroAverageWindowEnd { get; set; }
int InitialEu { get; set; }
string InitialOffset { get; set; }
int UnsubsampledSampleRateHz { get; set; }
double MeasuredShuntDeflectionMv { get; set; }
double TargetShuntDeflectionMv { get; set; }
double MeasuredExcitationVoltage { get; set; }
double FactoryExcitationVoltage { get; set; }
double TimeOfFirstSample { get; set; }
double Multiplier { get; set; }
double UserOffsetEu { get; set; }
int UnitConversion { get; set; }
bool AtCapacity { get; set; }
int CapacityOutputIsBasedOn { get; set; }
string SourceChannelNumber { get; set; }
string SourceModuleNumber { get; set; }
string SourceModuleSerialNumber { get; set; }
string Calculation { get; set; }
int SampleRateHz { get; set; }
string SensitivityUnits { get; set; }
int SensorCapacity { get; set; }
string SensorPolarity { get; set; }
int ChannelNumber { get; set; }
string BinaryFileName { get; set; }
string BinaryFilePath { get; set; }
double Xmax { get; set; }
double Xmin { get; set; }
int SequentialNumbers { get; set; }
ITestSetupMetadata ParentTestSetup { get; set; }
ITestModule ParentModule { get; set; }
IBaseViewModel Parent { get; set; }
Color ChannelColor { get; set; }
string ErrorMessage { get; set; }
bool IsError { get; set; }
Color? ErrorColor { get; set; }
bool IsSelected { get; set; }
bool CanSelectChannel { get; set; }
bool IsLocked { get; set; }
bool CanLock { get; set; }
ITestChannel Copy();
ulong T1Sample { get; set; }
ulong T2Sample { get; set; }
double HIC { get; set; }
bool UseEUScaler { get; set; }
double ScaleFactorEU { get; set; }
/// <summary>
/// Min value of ADC for entire dataset
/// </summary>
double MinADC { get; set; }
/// <summary>
/// Max value in ADC for entire dataset
/// </summary>
double MaxADC { get; set; }
/// <summary>
/// Average value in ADC for entire dataset
/// </summary>
double AveADC { get; set; }
/// <summary>
/// STD DEV in ADC for entire dataset
/// </summary>
double StdDevADC { get; set; }
/// <summary>
/// Value @ T0 in ADC
/// </summary>
double T0ADC { get; set; }
/// <summary>
/// Minimum value in mV for entire dataset
/// </summary>
double MinMV { get; set; }
/// <summary>
/// Maximum value in mV for entire dataset
/// </summary>
double MaxMV { get; set; }
/// <summary>
/// average value in mV for entire dataset
/// </summary>
double AveMV { get; set; }
/// <summary>
/// std dev in mV for entire dataset
/// </summary>
double StdDevMV { get; set; }
/// <summary>
/// value in mV at T0
/// </summary>
double T0MV { get; set; }
/// <summary>
/// minimum value in EU for entire dataset
/// </summary>
double MinEU { get; set; }
/// <summary>
/// maximum value in EU for entire dataset
/// </summary>
double MaxEU { get; set; }
/// <summary>
/// average value in EU for entire dataset
/// </summary>
double AveEU { get; set; }
/// <summary>
/// std dev in EU
/// </summary>
double StdDevEU { get; set; }
/// <summary>
/// value at T0 in EU
/// </summary>
double T0EU { get; set; }
/// <summary>
/// minimum value for whatever current units are for entire dataset
/// </summary>
double MinY { get; set; }
/// <summary>
/// maximum value for whatever current units are for entire dataset
/// </summary>
double MaxY { get; set; }
/// <summary>
/// average value for whatever current units are for entire dataset
/// </summary>
double AveY { get; set; }
/// <summary>
/// std deviation for whatever current units are
/// </summary>
double StdDevY { get; set; }
/// <summary>
/// Value at T0 in whatever current units are
/// </summary>
double T0Value { get; set; }
/// <summary>
/// EID channel was originally set up with
/// </summary>
string SetupEID { get; set; }
/// <summary>
/// EID present on channel when data was collected
/// </summary>
string DataCollectionEID { get; set; }
}
}

View File

@@ -0,0 +1,157 @@
using System;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
namespace DTS.Common.Enums
{
public static class HeaderLineExtension
{
public static string GetDescription(this Enum genericEnum)
{
Type genericEnumType = genericEnum.GetType();
MemberInfo[] memberInfo = genericEnumType.GetMember(genericEnum.ToString());
if ((memberInfo != null && memberInfo.Length > 0))
{
var attribs = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attribs != null && attribs.Any())
{
return ((DescriptionAttribute)attribs.ElementAt(0)).Description;
}
}
return genericEnum.ToString();
}
}
/// <summary>
/// The various header lines (and associated text) that appear in CSV file format.
/// </summary>
public enum FtssHeaderLine
{
[Description("Headers")] Headers = 0,
[Description("Test Date")] TestDate,
[Description("Test Time")] TestTime,
[Description("Test ID")] TestId,
[Description("Test Description")] TestDescription,
[Description("Sample Rate (Hz)")] SampleRate,
[Description("Hardware AA Filter (-3dB)")]
HardwareAntiAliasFilter,
[Description("Data Channel Number")] DataChannelNumber,
[Description("ISO Channel Code")] IsoCode,
[Description("User Channel Code")] UserCode,
[Description("Channel Description")] ChannelDescription,
[Description("Channel Location")] ChannelLocation,
[Description("Sensor S/N")] SensorSerialNumber,
[Description("Sensor Calibration Date")] SensorCalDate, //17651: include sensor cal date in CSV exports
[Description("Software Filter (SAE Class)")]
SoftwareFilter,
[Description("Software Filter (-3dB)")]
SoftwareFilterDb,
[Description("Engineering Unit")] EngineeringUnits,
[Description("User Comment")] UserComment,
[Description("Number of Pre-Zero Data Pts")]
PreZero,
[Description("Number of Post-Zero Data Pts")]
PostZero,
[Description("Data Zero (CNTS)")] DataZero,
[Description("Scale Factor (EU/CNT)")] ScaleEu,
[Description("Scale Factor (mV/CNT)")] ScaleMv,
[Description("Channel Name")] ChannelName,
[Description("Display Name")] DisplayName,
[Description("DAS Serial Number")]
HardwareLine,
[Description("Zero Method")] ZeroMethod,
[Description("Remove Offset")] RemoveOffset,
[Description("Group Name")] GroupName,
[Description("Time of T0 (UTC)")] Timestamp, // FB15333: Add PTP/RTC timestamp column for CSV exports
[Description("Data Starts Here")] DataStart,
[Description("Time")] Labels,
}
/// <summary>
/// The various header lines (and associated text) that appear in XLSX file format.
/// </summary>
public enum XLSXExportHeaderLine
{
[Description("Headers")] Headers = 0,
[Description("Test Date")] TestDate,
[Description("Test Time")] TestTime,
[Description("Test ID")] TestId,
[Description("Test Description")] TestDescription,
[Description("Sample Rate (Hz)")] SampleRate,
[Description("Hardware AA Filter (-3dB)")]
HardwareAntiAliasFilter,
[Description("Data Channel Number")] DataChannelNumber,
[Description("ISO Channel Code")] IsoCode,
[Description("Channel Description")] ChannelDescription,
[Description("Channel Location")] ChannelLocation,
[Description("Sensor S/N")] SensorSerialNumber,
[Description("Software Filter (SAE Class)")]
SoftwareFilter,
[Description("Software Filter (-3dB)")]
SoftwareFilterDb,
[Description("Engineering Unit")] EngineeringUnits,
[Description("User Comment")] UserComment,
[Description("Number of Pre-Zero Data Pts")]
PreZero,
[Description("Number of Post-Zero Data Pts")]
PostZero,
[Description("Data Zero (CNTS)")] DataZero,
[Description("Scale Factor (EU/CNT)")] ScaleEu,
[Description("Scale Factor (mV/CNT)")] ScaleMv,
[Description("Data Starts Here")] DataStart,
[Description("Time")] Labels,
}
}

View File

@@ -0,0 +1,14 @@
using Prism.Events;
namespace DTS.Common.Events
{
public class TextPastedEvent : PubSubEvent<ITextPastedEventArgs> { }
public interface ITextPastedEventArgs
{
string Text { get; }
object Sender { get; }
string Id { get; }
object Tag { get; }
}
}

View File

@@ -0,0 +1,14 @@
using DTS.Common.Interface.TestSetups.Imports.TTS.ReadFile;
using Prism.Events;
namespace DTS.Common.Events
{
/// <summary>
/// The TTSImportArmedRunTestEvent event.
/// </summary>
///
/// <remarks>This event is used by the Hardware Scan step to tell the page to jump to the Arm step in Run Test.</remarks>
///
public class TTSImportArmedRunTestEvent : PubSubEvent<ITTSSetup> { }
}