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,340 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Composition;
using System.Linq;
using System.Threading.Tasks;
using DTS.Common.Events;
using DTS.Common.Interface;
using Microsoft.Practices.Prism.Events;
using Microsoft.Practices.Prism.Interactivity.InteractionRequest;
using Microsoft.Practices.Prism.Regions;
using Microsoft.Practices.Unity;
using PedestrianAndHeadReports.Classes;
using System.Collections.Generic;
using DTS.Slice.Control;
// ReSharper disable CheckNamespace
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable InconsistentNaming
namespace PedestrianAndHeadReports
{
/// <summary>
/// this class handles DB import/export functionality
/// (note that since a lot of of DataPRO objects still live in the datapro project it's functionality is limited to the xml string going back and forth right now)
/// </summary>
[Export(typeof(ITRLReportInputView))]
[Export(typeof(ITRLReportOutputView))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class TRLReportViewModel : ITRLReportViewModel
{
public ITRLReportInputView InputView { get; set; }
public ITRLReportOutputView OutputView { get; set; }
private IEventAggregator _eventAggregator { get; set; }
private IRegionManager _regionManager;
private IUnityContainer UnityContainer { get; set; }
public InteractionRequest<Notification> NotificationRequest { get; private set; }
public InteractionRequest<Confirmation> ConfirmationRequest { get; private set; }
/// <summary>
/// Creates a new instance of the TechnologyDomainEditViewModel.
/// </summary>
/// <param name="inputView"></param>
/// <param name="outputView"></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 TRLReportViewModel(ITRLReportInputView inputView, ITRLReportOutputView outputView,
IRegionManager regionManager, IEventAggregator eventAggregator, IUnityContainer unityContainer, DTS.Serialization.Test test)
{
Test = test;
AvailableTimeUnits = new[] {ConstantsAndEnums.TimeUnits.Seconds, ConstantsAndEnums.TimeUnits.MilliSeconds};
SelectedTimeUnits = ConstantsAndEnums.TimeUnits.Seconds;
AvailableAccelerationUnits = new[]
{
DTS.SensorDB.MeasurementUnitList.GetMeasurementUnit("m/sec^2"),
DTS.SensorDB.MeasurementUnitList.GetMeasurementUnit("g")
};
SelectedAccelerationUnit = AvailableAccelerationUnits[0];
PopulateChannels();
InputView = inputView;
OutputView = outputView;
inputView.DataContext = this;
outputView.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);
}
#region Methods
private void PopulateChannels()
{
var accelerationChannels = new List<Event.Module.AnalogInputChannel>();
var bendChannels = new List<Event.Module.AnalogInputChannel>();
var sheerChannels = new List<Event.Module.AnalogInputChannel>();
var unitBending = DTS.SensorDB.MeasurementUnitList.GetMeasurementUnit("deg");
var unitSheering = DTS.SensorDB.MeasurementUnitList.GetMeasurementUnit("deg");
foreach (var ch in Test.Channels)
{
if (!(ch.emc is Event.Module.AnalogInputChannel emc)) { continue; }
accelerationChannels.AddRange(from unit in AvailableAccelerationUnits
where unit.UnitMatches(emc.EngineeringUnits) select emc);
if (unitBending.UnitMatches(emc.EngineeringUnits))
{
bendChannels.Add(emc);
}
if (unitSheering.UnitMatches(emc.EngineeringUnits))
{
sheerChannels.Add(emc);
}
}
AccelerationChannels = accelerationChannels.ToArray();
AvailableBendingChannels = bendChannels.ToArray();
AvailableShearChannels = sheerChannels.ToArray();
}
public void Cleanup()
{
}
public Task CleanupAsync()
{
return null;
}
public void Initialize()
{
}
public void Initialize(object parameter)
{
}
public void Initialize(object parameter, object model)
{
}
public Task InitializeAsync()
{
return null;
}
public Task InitializeAsync(object parameter)
{
return null;
}
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
});
}
#endregion
#region Properties
public bool IsDirty { get; private set; }
private bool _isBusy = false;
public bool IsBusy
{
get => _isBusy;
set
{
_isBusy = value;
OnPropertyChanged("IsBusy");
}
}
private bool _isMenuIncluded = false;
public bool IsMenuIncluded
{
get => _isMenuIncluded;
set
{
_isMenuIncluded = value;
OnPropertyChanged("IsMenuIncluded");
}
}
private bool _isNavigationIncluded = false;
public bool IsNavigationIncluded
{
get => _isNavigationIncluded;
set
{
_isNavigationIncluded = value;
OnPropertyChanged("IsNavigationIncluded");
}
}
/// <summary>
/// Gets the HeaderInfo.
/// </summary>
public string HeaderInfo => "MainRegion";
#endregion Properties
#region Commands
/*/// <summary>
/// browse to a file to import, should be xml, maybe needs a few other criteria
/// </summary>
private DelegateCommand _importBrowseCommand;
public DelegateCommand ImportBrowseCommand { get { return _importBrowseCommand ?? ( _importBrowseCommand = new DelegateCommand(ImportBrowseMethod)); } }
private void ImportBrowseMethod()
{
using (var dlg = new System.Windows.Forms.OpenFileDialog())
{
dlg.CheckFileExists = true;
dlg.CheckPathExists = true;
dlg.Filter = Resources.StringResources.ImportFileBrowse_Filter;
dlg.FilterIndex = 0;
if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
ImportFileName = dlg.FileName;
}
}
}*/
#endregion
#region properties
public DTS.Serialization.Test Test { get; set; }
public enum Tags
{
TestNumber,
DateTimeText,
CarName,
Model,
TestTemperature,
MeasurementPoint,
CrashVelocity,
ImpactorID,
AvailableImpactorTypes,
SelectedImpactor,
ImpactorWeight,
Examiner,
Reserved1,
Reserved2,
AvailableCFCs,
SelectedCFC,
AvailableAccelerationUnits,
SelectedAccelerationUnit,
AvailableBendingAngleUnits,
SelectedBendingAngleUnit,
AvailableShearAngleUnits,
SelectedShearAngleUnit,
AvailableTimeUnits,
SelectedTimeUnits,
AccelerationChannels,
SelectedAccelerationChannel,
AvailableBendingChannels,
SelectedBendingChannel,
AvailableShearChannels,
SelectedShearChannel
}
public string TestNumber { get; set; }
private DateTime _dateTime = DateTime.Now;
public string DateTimeText
{
get => _dateTime.ToString(System.Globalization.CultureInfo.CurrentCulture);
set => _dateTime = DateTime.Parse(value);
}
public string CarName { get; set; }
public string Model { get; set; }
public string TestTemperature { get; set; }
public string MeasurementPoint { get; set; }
public string CrashVelocity { get; set; }
public string ImpactorID { get; set; }
public string[] AvailableImpactorTypes => throw new NotImplementedException();
public string SelectedImpactor{get;set;}
public string ImpactorWeight{get;set;}
public string Examiner{get;set;}
public string Reserved1{get;set;}
public string Reserved2{get;set;}
public DTS.SensorDB.FilterClass[] AvailableCFCs => throw new NotImplementedException();
public DTS.SensorDB.FilterClass SelectedCFC{get;set;}
public DTS.SensorDB.MeasurementUnit[] AvailableAccelerationUnits { get; set; }
public DTS.SensorDB.MeasurementUnit SelectedAccelerationUnit { get; set; }
public ConstantsAndEnums.TimeUnits[] AvailableTimeUnits { get; set; }
public ConstantsAndEnums.TimeUnits SelectedTimeUnits{get;set;}
public Event.Module.AnalogInputChannel[] AccelerationChannels { get; set; }
public Event.Module.Channel SelectedAccelerationChannel{get;set;}
public Event.Module.AnalogInputChannel[] AvailableBendingChannels { get; set; }
public Event.Module.Channel SelectedBendingChannel { get; set; }
public Event.Module.AnalogInputChannel[] AvailableShearChannels { get; set; }
public Event.Module.Channel SelectedShearChannel { get; set; }
#endregion
///<summary>
///Occurs when a property value changes.
///</summary>
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}

View File

@@ -0,0 +1,20 @@
using System;
using System.Windows.Markup;
namespace PedestrianAndHeadReports.Resources
{
[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;
}
}
}