1169 lines
50 KiB
C#
1169 lines
50 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Collections.Specialized;
|
|||
|
|
using System.ComponentModel;
|
|||
|
|
using System.IO.Ports;
|
|||
|
|
using System.Windows;
|
|||
|
|
using System.Windows.Controls;
|
|||
|
|
using System.Windows.Controls.Primitives;
|
|||
|
|
using System.Windows.Documents;
|
|||
|
|
using DTS.Common.Controls;
|
|||
|
|
using DTS.Common.Enums;
|
|||
|
|
using DTS.Common.Enums.Sensors;
|
|||
|
|
using DTS.Common.Enums.Sensors.SensorsList;
|
|||
|
|
using DTS.Common.Events;
|
|||
|
|
using DTS.Common.Interface.Groups.GroupChannelList;
|
|||
|
|
using DTS.Common.Interface.Sensors.SoftwareFilters;
|
|||
|
|
using DTS.Common.Settings;
|
|||
|
|
using DTS.Common.Utils;
|
|||
|
|
using DTS.SensorDB;
|
|||
|
|
using Prism.Ioc;
|
|||
|
|
using DTS.Common.Classes.Sensors;
|
|||
|
|
using Prism.Events;
|
|||
|
|
|
|||
|
|
// ReSharper disable CheckNamespace
|
|||
|
|
|
|||
|
|
namespace GroupChannelList
|
|||
|
|
{
|
|||
|
|
/// <inheritdoc cref="IGroupChannelSettingsListView" />
|
|||
|
|
/// <summary>
|
|||
|
|
/// Interaction logic for GroupChannelListView.xaml
|
|||
|
|
/// </summary>
|
|||
|
|
public partial class GroupChannelSettingsListView : IGroupChannelSettingsListView, INotifyPropertyChanged
|
|||
|
|
{
|
|||
|
|
private int _DbVersion = DTS.Common.Storage.DbOperations.MINIMUM_LTS_DB_VERSION;
|
|||
|
|
public int ViewDbVersion
|
|||
|
|
{
|
|||
|
|
get => _DbVersion;
|
|||
|
|
set => SetProperty(ref _DbVersion, value, "ViewDbVersion");
|
|||
|
|
}
|
|||
|
|
public GroupChannelSettingsListView()
|
|||
|
|
{
|
|||
|
|
InitializeComponent();
|
|||
|
|
ChannelSettingsListListView.ItemContainerGenerator.ItemsChanged +=
|
|||
|
|
ChannelSettingsListListView_OnItemsChanged;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// sets whether to use test setup or group order column
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="bUseTestSetupOrder"></param>
|
|||
|
|
public void SetOrderMode(bool bUseTestSetupOrder)
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (bUseTestSetupOrder)
|
|||
|
|
{
|
|||
|
|
if (view.Columns.Contains(GroupOrderColumn)) { view.Columns.Remove(GroupOrderColumn); }
|
|||
|
|
if (!view.Columns.Contains(TestSetupOrderColumn)) { view.Columns.Insert(0, TestSetupOrderColumn); }
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (view.Columns.Contains(TestSetupOrderColumn)) { view.Columns.Remove(TestSetupOrderColumn); }
|
|||
|
|
if (!view.Columns.Contains(GroupOrderColumn)) { view.Columns.Insert(0, GroupOrderColumn); }
|
|||
|
|
}
|
|||
|
|
var showGroups = SettingsDB.GetGlobalValueBool("ShowGroups", true);
|
|||
|
|
if (showGroups)
|
|||
|
|
{
|
|||
|
|
AddGroupColumn();
|
|||
|
|
}
|
|||
|
|
else { RemoveGroupColumn(); }
|
|||
|
|
}
|
|||
|
|
private void RemoveGroupColumn()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (view.Columns.Contains(GroupColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(GroupColumn);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
private void AddGroupColumn()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(GroupColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Insert(1, GroupColumn);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// sets whether to show User Value X columns
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="bUseTestSetupOrder"></param>
|
|||
|
|
public void SetDisplayOptions(bool bShowSensorChannelUserValues)
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
ShowSensorChannelUserValues = bShowSensorChannelUserValues;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private bool _GCAC_Visibility = true;
|
|||
|
|
/// <summary>
|
|||
|
|
/// controls the visibility of GCAC controls
|
|||
|
|
/// is only really relevant to this view
|
|||
|
|
/// </summary>
|
|||
|
|
public bool GCAC_Visibility
|
|||
|
|
{
|
|||
|
|
get => _GCAC_Visibility;
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
_GCAC_Visibility = value;
|
|||
|
|
OnPropertyChanged("GCAC_Visibility");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
private bool _showSensorChannelUserValues = false;
|
|||
|
|
/// <summary>
|
|||
|
|
/// controls the visibility of the UserValue1, UserValue2, and UserValue3 columns
|
|||
|
|
/// </summary>
|
|||
|
|
public bool ShowSensorChannelUserValues
|
|||
|
|
{
|
|||
|
|
get => _showSensorChannelUserValues;
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
_showSensorChannelUserValues = value;
|
|||
|
|
OnPropertyChanged("ShowSensorChannelUserValues");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// adds columns relevant to an analog sensor type (range/capacity/polarity/CFC/Sensitivity/Units)
|
|||
|
|
/// </summary>
|
|||
|
|
private void AddAnalogColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(AnalogRangeColumn)) { view.Columns.Add(AnalogRangeColumn); }
|
|||
|
|
if (!view.Columns.Contains(AnalogCapacityColumn)) { view.Columns.Add(AnalogCapacityColumn); }
|
|||
|
|
if (!view.Columns.Contains(AnalogSensitivityColumn)) { view.Columns.Add(AnalogSensitivityColumn); }
|
|||
|
|
if (!view.Columns.Contains(AnalogUnitsColumn)) { view.Columns.Add(AnalogUnitsColumn); }
|
|||
|
|
if (!view.Columns.Contains(AnalogCFCColumn)) { view.Columns.Add(AnalogCFCColumn); }
|
|||
|
|
if (!view.Columns.Contains(AnalogPolarityColumn)) { view.Columns.Add(AnalogPolarityColumn); }
|
|||
|
|
//FB14606: Test Setup Specific-ize ZeroMethod parameters
|
|||
|
|
if (!view.Columns.Contains(AnalogZeroMethodColumn)) { view.Columns.Add(AnalogZeroMethodColumn); }
|
|||
|
|
if (!view.Columns.Contains(AnalogZeroMethodStartColumn)) { view.Columns.Add(AnalogZeroMethodStartColumn); }
|
|||
|
|
if (!view.Columns.Contains(AnalogZeroMethodEndColumn)) { view.Columns.Add(AnalogZeroMethodEndColumn); }
|
|||
|
|
if (!view.Columns.Contains(AnalogInitialOffsetColumn)) { view.Columns.Add(AnalogInitialOffsetColumn); }
|
|||
|
|
|
|||
|
|
if (ShowSensorChannelUserValues)
|
|||
|
|
{
|
|||
|
|
if (!view.Columns.Contains(AnalogUserValue1Column)) { view.Columns.Add(AnalogUserValue1Column); }
|
|||
|
|
if (!view.Columns.Contains(AnalogUserValue2Column)) { view.Columns.Add(AnalogUserValue2Column); }
|
|||
|
|
if (!view.Columns.Contains(AnalogUserValue3Column)) { view.Columns.Add(AnalogUserValue3Column); }
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// removes any analog channels from the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void RemoveAnalogColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (view.Columns.Contains(AnalogCapacityColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogCapacityColumn);
|
|||
|
|
}
|
|||
|
|
if (view.Columns.Contains(AnalogCFCColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogCFCColumn);
|
|||
|
|
}
|
|||
|
|
if (view.Columns.Contains(AnalogPolarityColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogPolarityColumn);
|
|||
|
|
}
|
|||
|
|
if (view.Columns.Contains(AnalogRangeColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogRangeColumn);
|
|||
|
|
}
|
|||
|
|
if (view.Columns.Contains(AnalogSensitivityColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogSensitivityColumn);
|
|||
|
|
}
|
|||
|
|
if (view.Columns.Contains(AnalogUnitsColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogUnitsColumn);
|
|||
|
|
}
|
|||
|
|
if (view.Columns.Contains(AnalogUserValue1Column))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogUserValue1Column);
|
|||
|
|
}
|
|||
|
|
if (view.Columns.Contains(AnalogUserValue2Column))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogUserValue2Column);
|
|||
|
|
}
|
|||
|
|
if (view.Columns.Contains(AnalogUserValue3Column))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogUserValue3Column);
|
|||
|
|
}
|
|||
|
|
//FB14606: Test Setup Specific-ize ZeroMethod parameters
|
|||
|
|
if (view.Columns.Contains(AnalogZeroMethodColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogZeroMethodColumn);
|
|||
|
|
}
|
|||
|
|
if (view.Columns.Contains(AnalogZeroMethodStartColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogZeroMethodStartColumn);
|
|||
|
|
}
|
|||
|
|
if (view.Columns.Contains(AnalogZeroMethodEndColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogZeroMethodEndColumn);
|
|||
|
|
}
|
|||
|
|
if (view.Columns.Contains(AnalogInitialOffsetColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogInitialOffsetColumn);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// adds squib columns to the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void AddSquibColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(SquibFireModeColumn)) { view.Columns.Add(SquibFireModeColumn); }
|
|||
|
|
if (!view.Columns.Contains(SquibDelayColumn)) { view.Columns.Add(SquibDelayColumn); }
|
|||
|
|
if (!view.Columns.Contains(SquibLimitDurationColumn)) { view.Columns.Add(SquibLimitDurationColumn); }
|
|||
|
|
if (!view.Columns.Contains(SquibDurationColumn)) { view.Columns.Add(SquibDurationColumn); }
|
|||
|
|
if (!view.Columns.Contains(SquibCurrentColumn)) { view.Columns.Add(SquibCurrentColumn); }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// removes squib columns from the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void RemoveSquibColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (view.Columns.Contains(SquibDelayColumn)) { view.Columns.Remove(SquibDelayColumn); }
|
|||
|
|
if (view.Columns.Contains(SquibDurationColumn)) { view.Columns.Remove(SquibDurationColumn); }
|
|||
|
|
if (view.Columns.Contains(SquibFireModeColumn)) { view.Columns.Remove(SquibFireModeColumn); }
|
|||
|
|
if (view.Columns.Contains(SquibLimitDurationColumn)) { view.Columns.Remove(SquibLimitDurationColumn); }
|
|||
|
|
if (view.Columns.Contains(SquibCurrentColumn)) { view.Columns.Remove(SquibCurrentColumn); }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// adds digital output columns to the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void AddDigitalOutColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
if (!view.Columns.Contains(DigitalOutOutputModeColumn)) { view.Columns.Add(DigitalOutOutputModeColumn); }
|
|||
|
|
if (!view.Columns.Contains(DigitalOutDelayColumn)) { view.Columns.Add(DigitalOutDelayColumn); }
|
|||
|
|
if (!view.Columns.Contains(DigitalOutLimitDurationColumn)) { view.Columns.Add(DigitalOutLimitDurationColumn); }
|
|||
|
|
if (!view.Columns.Contains(DigitalOutDurationColumn)) { view.Columns.Add(DigitalOutDurationColumn); }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// removes digital output columns from the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void RemoveDigitalOutColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (view.Columns.Contains(DigitalOutDelayColumn)) { view.Columns.Remove(DigitalOutDelayColumn); }
|
|||
|
|
if (view.Columns.Contains(DigitalOutDurationColumn)) { view.Columns.Remove(DigitalOutDurationColumn); }
|
|||
|
|
if (view.Columns.Contains(DigitalOutLimitDurationColumn)) { view.Columns.Remove(DigitalOutLimitDurationColumn); }
|
|||
|
|
if (view.Columns.Contains(DigitalOutOutputModeColumn)) { view.Columns.Remove(DigitalOutOutputModeColumn); }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// adds digital input columns to the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void AddDigitalInColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(DigitalInInputModeColumn)) { view.Columns.Add(DigitalInInputModeColumn); }
|
|||
|
|
if (!view.Columns.Contains(DigitalInDefaultValueColumn)) { view.Columns.Add(DigitalInDefaultValueColumn); }
|
|||
|
|
if (!view.Columns.Contains(DigitalInActiveValueColumn)) { view.Columns.Add(DigitalInActiveValueColumn); }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// removes digital columns from the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void RemoveDigitalInColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (view.Columns.Contains(DigitalInActiveValueColumn)) { view.Columns.Remove(DigitalInActiveValueColumn); }
|
|||
|
|
if (view.Columns.Contains(DigitalInDefaultValueColumn)) { view.Columns.Remove(DigitalInDefaultValueColumn); }
|
|||
|
|
if (view.Columns.Contains(DigitalInInputModeColumn)) { view.Columns.Remove(DigitalInInputModeColumn); }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// adds uart columns to the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void AddUartColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(UartBaudRateColumn)) { view.Columns.Add(UartBaudRateColumn); }
|
|||
|
|
if (!view.Columns.Contains(UartDataBitsColumn)) { view.Columns.Add(UartDataBitsColumn); }
|
|||
|
|
if (!view.Columns.Contains(UartStopBitsColumn)) { view.Columns.Add(UartStopBitsColumn); }
|
|||
|
|
if (!view.Columns.Contains(UartParityColumn)) { view.Columns.Add(UartParityColumn); }
|
|||
|
|
if (!view.Columns.Contains(UartDataFormatColumn)) { view.Columns.Add(UartDataFormatColumn); }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// removes uart columns from the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void RemoveUartColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (view.Columns.Contains(UartBaudRateColumn)) { view.Columns.Remove(UartBaudRateColumn); }
|
|||
|
|
if (view.Columns.Contains(UartDataBitsColumn)) { view.Columns.Remove(UartDataBitsColumn); }
|
|||
|
|
if (view.Columns.Contains(UartStopBitsColumn)) { view.Columns.Remove(UartStopBitsColumn); }
|
|||
|
|
if (view.Columns.Contains(UartParityColumn)) { view.Columns.Remove(UartParityColumn); }
|
|||
|
|
if (view.Columns.Contains(UartDataFormatColumn)) { view.Columns.Remove(UartDataFormatColumn); }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// adds stream out columns to the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void AddStreamOutColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(StreamOutUDPProfileColumn)) { view.Columns.Add(StreamOutUDPProfileColumn); }
|
|||
|
|
if (!view.Columns.Contains(StreamOutUDPAddressColumn)) { view.Columns.Add(StreamOutUDPAddressColumn); }
|
|||
|
|
if (!view.Columns.Contains(StreamOutUDPTimeChannelIdColumn)) { view.Columns.Add(StreamOutUDPTimeChannelIdColumn); }
|
|||
|
|
if (!view.Columns.Contains(StreamOutUDPDataChannelIdColumn)) { view.Columns.Add(StreamOutUDPDataChannelIdColumn); }
|
|||
|
|
if (!view.Columns.Contains(StreamOutIRIGTimeDataPacketIntervalMsColumn)) { view.Columns.Add(StreamOutIRIGTimeDataPacketIntervalMsColumn); }
|
|||
|
|
if (!view.Columns.Contains(StreamOutSubFrameIDColumn)) { view.Columns.Add(StreamOutSubFrameIDColumn); }
|
|||
|
|
if (!view.Columns.Contains(StreamOutMessageIDColumn)) { view.Columns.Add(StreamOutMessageIDColumn); }
|
|||
|
|
if (!view.Columns.Contains(StreamOutMinorPerMajorColumn)) { view.Columns.Add(StreamOutMinorPerMajorColumn); }
|
|||
|
|
if (!view.Columns.Contains(StreamOutTMATSPortColumn)) { view.Columns.Add(StreamOutTMATSPortColumn); }
|
|||
|
|
if (!view.Columns.Contains(StreamOutIENAKeyColumn)) { view.Columns.Add(StreamOutIENAKeyColumn); }
|
|||
|
|
if (!view.Columns.Contains(StreamOutIENASourcePortColumn)) { view.Columns.Add(StreamOutIENASourcePortColumn); }
|
|||
|
|
if (!view.Columns.Contains(StreamOutTMATSIntervalMsColumn)) { view.Columns.Add(StreamOutTMATSIntervalMsColumn); }
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// removes stream out columns from the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void RemoveStreamOutColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (view.Columns.Contains(StreamOutUDPProfileColumn)) { view.Columns.Remove(StreamOutUDPProfileColumn); }
|
|||
|
|
if (view.Columns.Contains(StreamOutUDPAddressColumn)) { view.Columns.Remove(StreamOutUDPAddressColumn); }
|
|||
|
|
if (view.Columns.Contains(StreamOutUDPTimeChannelIdColumn)) { view.Columns.Remove(StreamOutUDPTimeChannelIdColumn); }
|
|||
|
|
if (view.Columns.Contains(StreamOutUDPDataChannelIdColumn)) { view.Columns.Remove(StreamOutUDPDataChannelIdColumn); }
|
|||
|
|
if (view.Columns.Contains(StreamOutIRIGTimeDataPacketIntervalMsColumn)) { view.Columns.Remove(StreamOutIRIGTimeDataPacketIntervalMsColumn); }
|
|||
|
|
if (view.Columns.Contains(StreamOutSubFrameIDColumn)) { view.Columns.Remove(StreamOutSubFrameIDColumn); }
|
|||
|
|
if (view.Columns.Contains(StreamOutMessageIDColumn)) { view.Columns.Remove(StreamOutMessageIDColumn); }
|
|||
|
|
if (view.Columns.Contains(StreamOutMinorPerMajorColumn)) { view.Columns.Remove(StreamOutMinorPerMajorColumn); }
|
|||
|
|
if (view.Columns.Contains(StreamOutTMATSPortColumn)) { view.Columns.Remove(StreamOutTMATSPortColumn); }
|
|||
|
|
if (view.Columns.Contains(StreamOutIENAKeyColumn)) { view.Columns.Remove(StreamOutIENAKeyColumn); }
|
|||
|
|
if (view.Columns.Contains(StreamOutIENASourcePortColumn)) { view.Columns.Remove(StreamOutIENASourcePortColumn); }
|
|||
|
|
if (view.Columns.Contains(StreamOutTMATSIntervalMsColumn)) { view.Columns.Remove(StreamOutTMATSIntervalMsColumn); }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// adds stream out columns to the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void AddStreamInColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(StreamInUDPAddressColumn)) { view.Columns.Add(StreamInUDPAddressColumn); }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// removes stream out columns from the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void RemoveStreamInColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (view.Columns.Contains(StreamInUDPAddressColumn)) { view.Columns.Remove(StreamInUDPAddressColumn); }
|
|||
|
|
}
|
|||
|
|
private void AddCanColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(CanIsFDColumn)) { view.Columns.Add(CanIsFDColumn); }
|
|||
|
|
if (!view.Columns.Contains(CanArbBaseBitrateColumn)) { view.Columns.Add(CanArbBaseBitrateColumn); }
|
|||
|
|
if (!view.Columns.Contains(CanArbBaseSJWColumn)) { view.Columns.Add(CanArbBaseSJWColumn); }
|
|||
|
|
if (!view.Columns.Contains(CanDataBitrateColumn)) { view.Columns.Add(CanDataBitrateColumn); }
|
|||
|
|
if (!view.Columns.Contains(CanDataSJWColumn)) { view.Columns.Add(CanDataSJWColumn); }
|
|||
|
|
if (!view.Columns.Contains(CanFileTypeColumn)) { view.Columns.Add(CanFileTypeColumn); }
|
|||
|
|
}
|
|||
|
|
private void RemoveCanColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (view.Columns.Contains(CanIsFDColumn)) { view.Columns.Remove(CanIsFDColumn); }
|
|||
|
|
if (view.Columns.Contains(CanArbBaseBitrateColumn)) { view.Columns.Remove(CanArbBaseBitrateColumn); }
|
|||
|
|
if (view.Columns.Contains(CanArbBaseSJWColumn)) { view.Columns.Remove(CanArbBaseSJWColumn); }
|
|||
|
|
if (view.Columns.Contains(CanDataBitrateColumn)) { view.Columns.Remove(CanDataBitrateColumn); }
|
|||
|
|
if (view.Columns.Contains(CanDataSJWColumn)) { view.Columns.Remove(CanDataSJWColumn); }
|
|||
|
|
if (view.Columns.Contains(CanFileTypeColumn)) { view.Columns.Remove(CanFileTypeColumn); }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// returns the version of the currently connected database
|
|||
|
|
/// </summary>
|
|||
|
|
public int DbVersion
|
|||
|
|
{
|
|||
|
|
get => DTS.Common.Storage.DbOperations.GetConnectionDbVersion();
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// sets the view to only display channels of a certain sensor type
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="mode"></param>
|
|||
|
|
public void SetFilterMode(PossibleFilters mode)
|
|||
|
|
{
|
|||
|
|
HandleColumns(_viewMode);
|
|||
|
|
switch (mode)
|
|||
|
|
{
|
|||
|
|
case PossibleFilters.Analog:
|
|||
|
|
case PossibleFilters.All:
|
|||
|
|
GCAC_Visibility = true;
|
|||
|
|
RemoveSquibColumns();
|
|||
|
|
RemoveDigitalInColumns();
|
|||
|
|
RemoveDigitalOutColumns();
|
|||
|
|
RemoveUartColumns();
|
|||
|
|
RemoveStreamOutColumns();
|
|||
|
|
RemoveStreamInColumns();
|
|||
|
|
RemoveCanColumns();
|
|||
|
|
AddAnalogColumns();
|
|||
|
|
rbParametersAnalog.IsChecked = true;
|
|||
|
|
break;
|
|||
|
|
case PossibleFilters.Squib:
|
|||
|
|
GCAC_Visibility = false;
|
|||
|
|
RemoveAnalogColumns();
|
|||
|
|
RemoveDigitalInColumns();
|
|||
|
|
RemoveDigitalOutColumns();
|
|||
|
|
RemoveUartColumns();
|
|||
|
|
RemoveStreamOutColumns();
|
|||
|
|
RemoveStreamInColumns();
|
|||
|
|
RemoveCanColumns();
|
|||
|
|
AddSquibColumns();
|
|||
|
|
rbParametersSquib.IsChecked = true;
|
|||
|
|
break;
|
|||
|
|
case PossibleFilters.DigitalIn:
|
|||
|
|
GCAC_Visibility = false;
|
|||
|
|
RemoveSquibColumns();
|
|||
|
|
RemoveAnalogColumns();
|
|||
|
|
RemoveDigitalOutColumns();
|
|||
|
|
RemoveUartColumns();
|
|||
|
|
RemoveStreamOutColumns();
|
|||
|
|
RemoveStreamInColumns();
|
|||
|
|
RemoveCanColumns();
|
|||
|
|
AddDigitalInColumns();
|
|||
|
|
rbParametersDigitalIn.IsChecked = true;
|
|||
|
|
break;
|
|||
|
|
case PossibleFilters.DigitalOut:
|
|||
|
|
GCAC_Visibility = false;
|
|||
|
|
RemoveSquibColumns();
|
|||
|
|
RemoveDigitalInColumns();
|
|||
|
|
RemoveAnalogColumns();
|
|||
|
|
RemoveUartColumns();
|
|||
|
|
RemoveStreamOutColumns();
|
|||
|
|
RemoveStreamInColumns();
|
|||
|
|
RemoveCanColumns();
|
|||
|
|
AddDigitalOutColumns();
|
|||
|
|
rbParametersDigitalOut.IsChecked = true;
|
|||
|
|
break;
|
|||
|
|
case PossibleFilters.UART:
|
|||
|
|
GCAC_Visibility = false;
|
|||
|
|
RemoveAnalogColumns();
|
|||
|
|
RemoveDigitalInColumns();
|
|||
|
|
RemoveDigitalOutColumns();
|
|||
|
|
RemoveSquibColumns();
|
|||
|
|
RemoveStreamOutColumns();
|
|||
|
|
RemoveStreamInColumns();
|
|||
|
|
RemoveIsoCodeColumns();
|
|||
|
|
RemoveUserCodeColumns();
|
|||
|
|
RemoveCanColumns();
|
|||
|
|
AddUartColumns();
|
|||
|
|
rbParametersUart.IsChecked = true;
|
|||
|
|
break;
|
|||
|
|
case PossibleFilters.StreamOut:
|
|||
|
|
GCAC_Visibility = false;
|
|||
|
|
RemoveSquibColumns();
|
|||
|
|
RemoveDigitalInColumns();
|
|||
|
|
RemoveDigitalOutColumns();
|
|||
|
|
RemoveAnalogColumns();
|
|||
|
|
RemoveUartColumns();
|
|||
|
|
RemoveStreamInColumns();
|
|||
|
|
RemoveIsoCodeColumns();
|
|||
|
|
RemoveUserCodeColumns();
|
|||
|
|
RemoveCanColumns();
|
|||
|
|
AddStreamOutColumns();
|
|||
|
|
rbParametersStreamOut.IsChecked = true;
|
|||
|
|
break;
|
|||
|
|
case PossibleFilters.StreamIn:
|
|||
|
|
GCAC_Visibility = false;
|
|||
|
|
RemoveSquibColumns();
|
|||
|
|
RemoveDigitalInColumns();
|
|||
|
|
RemoveDigitalOutColumns();
|
|||
|
|
RemoveAnalogColumns();
|
|||
|
|
RemoveUartColumns();
|
|||
|
|
RemoveStreamOutColumns();
|
|||
|
|
RemoveIsoCodeColumns();
|
|||
|
|
RemoveUserCodeColumns();
|
|||
|
|
RemoveCanColumns();
|
|||
|
|
AddStreamInColumns();
|
|||
|
|
rbParametersStreamIn.IsChecked = true;
|
|||
|
|
break;
|
|||
|
|
case PossibleFilters.CAN:
|
|||
|
|
GCAC_Visibility = false;
|
|||
|
|
RemoveSquibColumns();
|
|||
|
|
RemoveDigitalInColumns();
|
|||
|
|
RemoveDigitalOutColumns();
|
|||
|
|
RemoveAnalogColumns();
|
|||
|
|
RemoveUartColumns();
|
|||
|
|
RemoveStreamOutColumns();
|
|||
|
|
RemoveIsoCodeColumns();
|
|||
|
|
RemoveUserCodeColumns();
|
|||
|
|
AddCanColumns();
|
|||
|
|
rbParametersCAN.IsChecked = true;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#region IPropertyNotified
|
|||
|
|
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 #PropertyNotified
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// handles when a user clicks on the search portion of the grid view column header
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sender"></param>
|
|||
|
|
/// <param name="e"></param>
|
|||
|
|
private void GridViewColumnHeaderSearchable_OnSearch(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
var searchTerm = (string)e.OriginalSource;
|
|||
|
|
var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag;
|
|||
|
|
var viewModel = (IGroupChannelListViewModel)DataContext;
|
|||
|
|
viewModel.Filter(columnTag, searchTerm);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private IsoViewMode _viewMode = IsoViewMode.ISOAndUserCode;
|
|||
|
|
/// <summary>
|
|||
|
|
/// sets the view to only display columns relevant to the isoviewmode provided
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="viewMode"></param>
|
|||
|
|
public void HandleColumns(IsoViewMode viewMode)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
switch (viewMode)
|
|||
|
|
{
|
|||
|
|
case IsoViewMode.ISOOnly:
|
|||
|
|
RemoveUserCodeColumns();
|
|||
|
|
AddIsoCodeColumns();
|
|||
|
|
break;
|
|||
|
|
case IsoViewMode.ISOAndUserCode:
|
|||
|
|
AddUserAndIsoCodeColumns();
|
|||
|
|
break;
|
|||
|
|
case IsoViewMode.UserCodeOnly:
|
|||
|
|
RemoveIsoCodeColumns();
|
|||
|
|
AddUserCodeColumns();
|
|||
|
|
break;
|
|||
|
|
case IsoViewMode.ChannelNameOnly:
|
|||
|
|
ChannelNameOnlyColumns();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if (ShowSensorChannelUserValues)
|
|||
|
|
{
|
|||
|
|
AddUserValueColumns();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
RemoveUserValueColumns();
|
|||
|
|
}
|
|||
|
|
_viewMode = viewMode;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// adds user and isocode columns to the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void AddUserAndIsoCodeColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(UserCodeColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Insert(2, UserCodeColumn);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(UserChannelNameColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Insert(3, UserChannelNameColumn);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(ISOCodeColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Insert(4, ISOCodeColumn);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(ISOChannelNameColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Insert(5, ISOChannelNameColumn);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// adds iso columns to the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void AddIsoCodeColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(ISOCodeColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Insert(2, ISOCodeColumn);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(ISOChannelNameColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Insert(3, ISOChannelNameColumn);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// removes isocode columns from the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void RemoveIsoCodeColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (view.Columns.Contains(ISOCodeColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(ISOCodeColumn);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (view.Columns.Contains(ISOChannelNameColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(ISOChannelNameColumn);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void ChannelNameOnlyColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
RemoveIsoCodeColumns();
|
|||
|
|
AddUserCodeColumns();
|
|||
|
|
view.Columns.Remove(UserCodeColumn);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// removes usercode columns from the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void RemoveUserCodeColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (view.Columns.Contains(UserCodeColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(UserCodeColumn);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (view.Columns.Contains(UserChannelNameColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(UserChannelNameColumn);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// adds usercode columns to the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void AddUserCodeColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(UserCodeColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Insert(2, UserCodeColumn);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!view.Columns.Contains(UserChannelNameColumn))
|
|||
|
|
{
|
|||
|
|
view.Columns.Insert(3, UserChannelNameColumn);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// Removes UserValueX columns from the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void RemoveUserValueColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
if (view.Columns.Contains(AnalogUserValue1Column))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogUserValue1Column);
|
|||
|
|
}
|
|||
|
|
if (view.Columns.Contains(AnalogUserValue2Column))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogUserValue2Column);
|
|||
|
|
}
|
|||
|
|
if (view.Columns.Contains(AnalogUserValue3Column))
|
|||
|
|
{
|
|||
|
|
view.Columns.Remove(AnalogUserValue3Column);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// Adds UserValueX columns to the view
|
|||
|
|
/// </summary>
|
|||
|
|
private void AddUserValueColumns()
|
|||
|
|
{
|
|||
|
|
if (!(ChannelSettingsListListView.View is AutoSizedGridView view))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
if (!view.Columns.Contains(AnalogUserValue1Column))
|
|||
|
|
{
|
|||
|
|
view.Columns.Insert(view.Columns.Count, AnalogUserValue1Column);
|
|||
|
|
}
|
|||
|
|
if (!view.Columns.Contains(AnalogUserValue2Column))
|
|||
|
|
{
|
|||
|
|
view.Columns.Insert(view.Columns.Count, AnalogUserValue2Column);
|
|||
|
|
}
|
|||
|
|
if (!view.Columns.Contains(AnalogUserValue3Column))
|
|||
|
|
{
|
|||
|
|
view.Columns.Insert(view.Columns.Count, AnalogUserValue3Column);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// The list of valid range values for TSR AIR LowG channels
|
|||
|
|
/// </summary>
|
|||
|
|
public SensorConstants.AvailableRangesLowG[] AvailableRangesLowG { get; } = new[] { SensorConstants.AvailableRangesLowG.LowG64D};
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// The list of valid range values for TSR AIR ARS channels
|
|||
|
|
/// </summary>
|
|||
|
|
public double[] AvailableRangesARS { get; } = new[] { Convert.ToDouble(SensorConstants.AvailableRangesARS.ARS2000D)};
|
|||
|
|
/// <summary>
|
|||
|
|
/// FB 13120 available Filter Classes for Filter dropdowns
|
|||
|
|
/// </summary>
|
|||
|
|
public List<IFilterClass> AvailableCFC
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
return new AnalogSettingDefaults().FilterOptions;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// available polarity for polarity dropdowns
|
|||
|
|
/// </summary>
|
|||
|
|
public string[] AvailablePolarity { get; } = new[] { "+", "-" };
|
|||
|
|
/// <summary>
|
|||
|
|
/// available zero method types for zeromethod dropdowns
|
|||
|
|
/// </summary>
|
|||
|
|
public ZeroMethodType[] AvailableZeroMethod { get; } = new[]
|
|||
|
|
{
|
|||
|
|
ZeroMethodType.AverageOverTime,
|
|||
|
|
ZeroMethodType.UsePreEventDiagnosticsZero,
|
|||
|
|
ZeroMethodType.None
|
|||
|
|
};
|
|||
|
|
/// <summary>
|
|||
|
|
/// ZeroMethodType.None (Absolute zero) is not available with embedded sensors (TSR AIR, DIR, DKR)
|
|||
|
|
/// UPDATE - I think this is a MISTAKE, I'm adding it back in ...
|
|||
|
|
/// all the TSR AIR channels should use none
|
|||
|
|
/// MS30446 and MS31788
|
|||
|
|
/// </summary>
|
|||
|
|
public ZeroMethodType[] AvailableZeroMethodEmbeddedSensor { get; } = new[]
|
|||
|
|
{
|
|||
|
|
ZeroMethodType.None,
|
|||
|
|
ZeroMethodType.AverageOverTime,
|
|||
|
|
ZeroMethodType.UsePreEventDiagnosticsZero,
|
|||
|
|
};
|
|||
|
|
/// <summary>
|
|||
|
|
/// available digital input modes for digital input mode dropdowns
|
|||
|
|
/// </summary>
|
|||
|
|
public DigitalInputModes[] AvailableDigitalInputModes { get; } = new[]
|
|||
|
|
{
|
|||
|
|
DigitalInputModes.CCNC, DigitalInputModes.CCNO, DigitalInputModes.THL, DigitalInputModes.TLH
|
|||
|
|
};
|
|||
|
|
/// <summary>
|
|||
|
|
/// available squib fire modes for squib fire mode dropdowns
|
|||
|
|
/// </summary>
|
|||
|
|
public SquibFireMode[] AvailableSquibFireModes { get; } = new[]
|
|||
|
|
{
|
|||
|
|
SquibFireMode.CAP, SquibFireMode.CONSTANT
|
|||
|
|
};
|
|||
|
|
/// <summary>
|
|||
|
|
/// available digital output modes for digital output mode dropdowns
|
|||
|
|
/// </summary>
|
|||
|
|
public DigitalOutputModes[] AvailableDigitalOutputModes { get; } = new[]
|
|||
|
|
{
|
|||
|
|
DigitalOutputModes.CCNC, DigitalOutputModes.CCNO, DigitalOutputModes.FVHL, DigitalOutputModes.FVLH
|
|||
|
|
};
|
|||
|
|
/// <summary>
|
|||
|
|
/// available uart stop bits for uart stop bits dropdowns
|
|||
|
|
/// </summary>
|
|||
|
|
public StopBits[] AvailableUartStopBits { get; } = new[]
|
|||
|
|
{
|
|||
|
|
StopBits.None, StopBits.One, StopBits.OnePointFive, StopBits.Two
|
|||
|
|
};
|
|||
|
|
/// <summary>
|
|||
|
|
/// available uart parities for uart parities dropdowns
|
|||
|
|
/// </summary>
|
|||
|
|
public Parity[] AvailableUartParities { get; } = new[]
|
|||
|
|
{
|
|||
|
|
Parity.None, Parity.Odd, Parity.Even, Parity.Mark, Parity.Space
|
|||
|
|
};
|
|||
|
|
/// <summary>
|
|||
|
|
/// available uart flow controls for uart flow controls dropdowns
|
|||
|
|
/// </summary>
|
|||
|
|
public Handshake[] AvailableUartFlowControls { get; } = new[]
|
|||
|
|
{
|
|||
|
|
Handshake.None, Handshake.XOnXOff, Handshake.RequestToSend, Handshake.RequestToSendXOnXOff
|
|||
|
|
};
|
|||
|
|
/// <summary>
|
|||
|
|
/// available uart data formats for uart data formats dropdowns
|
|||
|
|
/// </summary>
|
|||
|
|
public UartDataFormat[] AvailableUartDataFormats { get; } = new[]
|
|||
|
|
{
|
|||
|
|
UartDataFormat.Binary, UartDataFormat.PlainText, UartDataFormat.NMEA
|
|||
|
|
};
|
|||
|
|
/// <summary>
|
|||
|
|
/// available udp stream profiles for stream profiles dropdowns
|
|||
|
|
/// </summary>
|
|||
|
|
public UDPStreamProfile[] AvailableStreamOutUDPProfiles
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is IGroupChannelListViewModel vm)) { return new UDPStreamProfile[] { }; }
|
|||
|
|
return StreamOutputRecord.AvailableUDPStreamProfiles(ViewDbVersion, StreamOutputSettingDefaults.GetStreamOutputSettingsDefault(vm.UserID).UseAdvancedUDPStreamProfiles);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// available global channel amplitude class options for GCAC dropdowns
|
|||
|
|
/// </summary>
|
|||
|
|
public CACOption[] GlobalCACOptions { get; } = new[]
|
|||
|
|
{
|
|||
|
|
CACOption.Manual, CACOption.Capacity, CACOption.RangeHigh, CACOption.RangeMedium, CACOption.RangeLow
|
|||
|
|
};
|
|||
|
|
private CACOption _selectedGlobalRangeCACOption = CACOption.Manual;
|
|||
|
|
/// <summary>
|
|||
|
|
/// the selected GCAC mode
|
|||
|
|
/// this is used by the apply button to make adjustments to the range for analog channels
|
|||
|
|
/// </summary>
|
|||
|
|
public CACOption SelectedGlobalRangeCACOption
|
|||
|
|
{
|
|||
|
|
get => _selectedGlobalRangeCACOption;
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
_selectedGlobalRangeCACOption = value;
|
|||
|
|
OnPropertyChanged("SelectedGlobalRangeCACOption");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// handler for analog radio button click
|
|||
|
|
/// informs the viewmodel to filter
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sender"></param>
|
|||
|
|
/// <param name="e"></param>
|
|||
|
|
private void Analog_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is IGroupChannelListViewModel vm)) { return; }
|
|||
|
|
vm.Filter(PossibleFilters.Analog);
|
|||
|
|
SetFilterMode(PossibleFilters.Analog);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// sets the vm to display squibs
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sender"></param>
|
|||
|
|
/// <param name="e"></param>
|
|||
|
|
private void Squib_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is IGroupChannelListViewModel vm)) { return; }
|
|||
|
|
vm.Filter(PossibleFilters.Squib);
|
|||
|
|
SetFilterMode(PossibleFilters.Squib);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// sets the vm to display digital outputs
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sender"></param>
|
|||
|
|
/// <param name="e"></param>
|
|||
|
|
private void DigitalOut_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is IGroupChannelListViewModel vm)) { return; }
|
|||
|
|
vm.Filter(PossibleFilters.DigitalOut);
|
|||
|
|
SetFilterMode(PossibleFilters.DigitalOut);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// sets the vm to display digital inputs
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sender"></param>
|
|||
|
|
/// <param name="e"></param>
|
|||
|
|
private void DigitalIn_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is IGroupChannelListViewModel vm)) { return; }
|
|||
|
|
vm.Filter(PossibleFilters.DigitalIn);
|
|||
|
|
SetFilterMode(PossibleFilters.DigitalIn);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// sets the vm to display uarts
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sender"></param>
|
|||
|
|
/// <param name="e"></param>
|
|||
|
|
private void Uart_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is IGroupChannelListViewModel vm)) { return; }
|
|||
|
|
vm.Filter(PossibleFilters.UART);
|
|||
|
|
SetFilterMode(PossibleFilters.UART);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// sets the vm to display stream outputs
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sender"></param>
|
|||
|
|
/// <param name="e"></param>
|
|||
|
|
private void StreamOut_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is IGroupChannelListViewModel vm)) { return; }
|
|||
|
|
vm.Filter(PossibleFilters.StreamOut);
|
|||
|
|
SetFilterMode(PossibleFilters.StreamOut);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// sets the vm to display stream inputs
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sender"></param>
|
|||
|
|
/// <param name="e"></param>
|
|||
|
|
private void StreamIn_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is IGroupChannelListViewModel vm)) { return; }
|
|||
|
|
vm.Filter(PossibleFilters.StreamIn);
|
|||
|
|
SetFilterMode(PossibleFilters.StreamIn);
|
|||
|
|
}
|
|||
|
|
private void CAN_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is IGroupChannelListViewModel vm)) { return; }
|
|||
|
|
vm.Filter(PossibleFilters.CAN);
|
|||
|
|
SetFilterMode(PossibleFilters.CAN);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// sets the range for all analog channels to relevant range to the GCAC
|
|||
|
|
/// (global channel amplitude class)
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sender"></param>
|
|||
|
|
/// <param name="e"></param>
|
|||
|
|
private void btnGlobalRangeApply_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is IGroupChannelListViewModel vm)) { return; }
|
|||
|
|
vm.SetRange(SelectedGlobalRangeCACOption);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// sorts the columns on click of a column
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sender"></param>
|
|||
|
|
/// <param name="e"></param>
|
|||
|
|
private void GridViewColumnHeader_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is IGroupChannelListViewModel vm)) { return; }
|
|||
|
|
//I'm not sure why clicking on a hyperlink would cause the column header click to fire, but
|
|||
|
|
//but I saw it, don't do the grid column header click if it was sent by a hyperlink ...
|
|||
|
|
if (e.OriginalSource is Hyperlink) { return; }
|
|||
|
|
var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag ?? Utils.FindChild<GridViewColumnHeaderSearchable>((DependencyObject)e.OriginalSource, null)?.Tag;
|
|||
|
|
vm.Sort(columnTag, true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void ChannelSettingsListListView_OnLoaded(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is IGroupChannelListViewModel vm)) { return; }
|
|||
|
|
vm.SettingsViewLoaded = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//FB14148: handle the ListView's ItemGenerator's container generation cycle (only need one round)
|
|||
|
|
//and update the app to busy/available based on container generation status. remove handler once cycle over.
|
|||
|
|
private void ChannelSettingsListListView_OnStatusChanged(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (((ItemContainerGenerator)sender).Status == GeneratorStatus.GeneratingContainers)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is IGroupChannelListViewModel vm)) { return; }
|
|||
|
|
vm.SettingChannelsLoaded = false;
|
|||
|
|
}
|
|||
|
|
if (((ItemContainerGenerator)sender).Status == GeneratorStatus.ContainersGenerated ||
|
|||
|
|
((ItemContainerGenerator)sender).Status == GeneratorStatus.Error)
|
|||
|
|
{
|
|||
|
|
_statusHandled = false;
|
|||
|
|
ChannelSettingsListListView.ItemContainerGenerator.StatusChanged -=
|
|||
|
|
ChannelSettingsListListView_OnStatusChanged;
|
|||
|
|
if (!(DataContext is IGroupChannelListViewModel vm)) { return; }
|
|||
|
|
vm.SettingChannelsLoaded = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
private bool _statusHandled; //signify that we're already handling the ItemGenerator.StatusChanged event. Reset is called multiple times
|
|||
|
|
private void ChannelSettingsListListView_OnItemsChanged(object sender, ItemsChangedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (e.Action == NotifyCollectionChangedAction.Reset && !_statusHandled)
|
|||
|
|
{
|
|||
|
|
_statusHandled = true;
|
|||
|
|
ChannelSettingsListListView.ItemContainerGenerator.StatusChanged +=
|
|||
|
|
ChannelSettingsListListView_OnStatusChanged;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// handles hyper link clicks, specifically for a sensor ...
|
|||
|
|
/// 15125 Navigate to selected sensor from run test diagnostics
|
|||
|
|
/// </summary>
|
|||
|
|
private void Hyperlink_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is GroupChannelListViewModel vm)) { return; }
|
|||
|
|
if (!(sender is Hyperlink hl)) { return; }
|
|||
|
|
if (!(hl.DataContext is DTS.Common.Classes.Groups.GroupChannel groupChannel)) { return; }
|
|||
|
|
var eventAggregator = ContainerLocator.Container.Resolve<IEventAggregator>();
|
|||
|
|
eventAggregator.GetEvent<PageNavigationRequestEvent>().Publish(new PageNavigationRequest(
|
|||
|
|
PageNavigationRequest.Destinations.Sensor,
|
|||
|
|
groupChannel,
|
|||
|
|
vm));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// called when the range low g combobox loses focus, this is used to indicate
|
|||
|
|
/// that all low g channels should switch to the new range (on the same das)
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sender"></param>
|
|||
|
|
/// <param name="e"></param>
|
|||
|
|
private void RangeLowG_LostFocus(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is GroupChannelListViewModel vm)) { return; }
|
|||
|
|
if (!(sender is Control control)) { return; }
|
|||
|
|
if (!(control.DataContext is DTS.Common.Classes.Groups.GroupChannel groupChannel)) { return; }
|
|||
|
|
|
|||
|
|
vm.UpdateRangeLowG(groupChannel);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// called when range ars combobox loses focus, this is used to indicate
|
|||
|
|
/// that all ars channels should switch to the new range (on the same das)
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sender"></param>
|
|||
|
|
/// <param name="e"></param>
|
|||
|
|
private void RangeARS_LostFocus(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is GroupChannelListViewModel vm)) { return; }
|
|||
|
|
if (!(sender is Control control)) { return; }
|
|||
|
|
if (!(control.DataContext is DTS.Common.Classes.Groups.GroupChannel groupChannel)) { return; }
|
|||
|
|
|
|||
|
|
vm.UpdateRangeARS(groupChannel);
|
|||
|
|
}
|
|||
|
|
//http://manuscript.dts.local/f/cases/29760/Implement-ACCoupleEnable-for-TSR-AIR
|
|||
|
|
//user clicked on ac coupling enabled checkbox, update all the rest of the low g checkboxes with the
|
|||
|
|
//checkbox state
|
|||
|
|
private void ACCouplingEnable_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is GroupChannelListViewModel vm)) { return; }
|
|||
|
|
if (!(sender is Control control)) { return; }
|
|||
|
|
if (!(control.DataContext is DTS.Common.Classes.Groups.GroupChannel groupChannel)) { return; }
|
|||
|
|
vm.UpdateACCouplingEnabled(groupChannel);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
private void TMATSIntervalON_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is GroupChannelListViewModel vm)) { return; }
|
|||
|
|
if (!(sender is CheckBox cb)) { return; }
|
|||
|
|
if (!(cb.DataContext is DTS.Common.Classes.Groups.GroupChannel groupChannel)) { return; }
|
|||
|
|
if ((bool)cb.IsChecked && groupChannel.StreamOutTMATSIntervalMs < 1)
|
|||
|
|
{
|
|||
|
|
groupChannel.StreamOutTMATSIntervalMs = StreamOutputRecord.DEFAULT_IRIG_TIME_DATA_PACKET_INTERVAL_MS;
|
|||
|
|
}
|
|||
|
|
else if (!(bool)cb.IsChecked && groupChannel.StreamOutTMATSIntervalMs >= 1)
|
|||
|
|
{
|
|||
|
|
groupChannel.StreamOutTMATSIntervalMs = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
private void TimePacketIntervalOn_Click(object sender, RoutedEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!(DataContext is GroupChannelListViewModel vm)) { return; }
|
|||
|
|
if (!(sender is CheckBox cb)) { return; }
|
|||
|
|
if (!(cb.DataContext is DTS.Common.Classes.Groups.GroupChannel groupChannel)) { return; }
|
|||
|
|
if ((bool)cb.IsChecked && groupChannel.StreamOutIRIGTimeDataPacketIntervalMs < 1)
|
|||
|
|
{
|
|||
|
|
groupChannel.StreamOutIRIGTimeDataPacketIntervalMs = StreamOutputRecord.DEFAULT_TMATS_INTERVAL_MS;
|
|||
|
|
}
|
|||
|
|
else if (!(bool)cb.IsChecked && groupChannel.StreamOutIRIGTimeDataPacketIntervalMs >= 1)
|
|||
|
|
{
|
|||
|
|
groupChannel.StreamOutIRIGTimeDataPacketIntervalMs = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|