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,124 @@
<base:BaseView x:Class="HardwareList.HardwareListOverdueView"
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:controls="clr-namespace:DTS.Common.Controls;assembly=DTS.Common"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:strings="clr-namespace:HardwareList"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:converters2="clr-namespace:HardwareList.Converters"
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.MergedDictionaries>
<Style TargetType="ListView">
<Setter Property="ItemContainerStyle" Value="{StaticResource TTS_ListViewItemStyleNoSelection}"/>
</Style>
<Style TargetType="TextBox" BasedOn="{StaticResource TTS_TextBoxStyle}"/>
<Style TargetType="TextBlock" BasedOn="{StaticResource TTS_TextBlockStyle}"/>
<Style TargetType="CheckBox" BasedOn="{StaticResource PageContentCheckBoxStyle}" />
<Style TargetType="ComboBox" BasedOn="{StaticResource TTS_ComboBoxStyle}"/>
<Style TargetType="Button" BasedOn="{StaticResource TTS_ButtonStyle}"/>
<Style TargetType="GridViewColumnHeader" BasedOn="{StaticResource Gray_GridViewColumnHeaderStyle}"/>
<BooleanToVisibilityConverter x:Key="BoolToVisibility" />
<converters2:FirstUseDateConverter x:Key="FirstUseConverter" />
</ResourceDictionary>
</base:BaseView.Resources>
<Grid Background="{DynamicResource Brush_ApplicationContentBackground}">
<ListView ItemsSource="{Binding OverdueHardware, UpdateSourceTrigger=PropertyChanged}" AutomationProperties.AutomationId="HardwareListView" SelectedIndex="{Binding SelectedOverdueIndex, Mode=TwoWay}">
<ListView.View>
<controls:AutoSizedGridView AutomationProperties.AutomationId="HardwareListGridView">
<GridViewColumn AutomationProperties.AutomationId="SerialNumber">
<GridViewColumn.Header>
<GridViewColumnHeader Tag="SerialNumber" Content="{strings:TranslateExtension SerialNumber}" Click="ListViewHeader_Click" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding SerialNumber,FallbackValue='SerialNumber'}" AutomationProperties.AutomationId="dueSerialNumLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="HardwareType">
<GridViewColumn.Header>
<GridViewColumnHeader Tag="HardwareType" Content="{strings:TranslateExtension HardwareType}" Click="ListViewHeader_Click" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding HardwareType,FallbackValue='HardwareType'}" AutomationProperties.AutomationId="dueTypeLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="ChannelCount">
<GridViewColumn.Header>
<GridViewColumnHeader Tag="ChannelCount" Content="{strings:TranslateExtension ChannelCount}" Click="ListViewHeader_Click" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding ChannelCount,FallbackValue='ChannelCount'}" AutomationProperties.AutomationId="dueChanCountLbl" />
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="Firmware">
<GridViewColumn.Header>
<GridViewColumnHeader Tag="Firmware" Content="{strings:TranslateExtension Firmware}" Click="ListViewHeader_Click" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding Firmware,FallbackValue='Firmware'}" AutomationProperties.AutomationId="dueFirmwareLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="MaxSampleRate">
<GridViewColumn.Header>
<GridViewColumnHeader Tag="MaxSampleRate" Content="{strings:TranslateExtension MaxSampleRate}" Click="ListViewHeader_Click" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding MaxSampleRate,FallbackValue='MaxSampleRate',StringFormat='N0', TargetNullValue='---'}" AutomationProperties.AutomationId="dueMaxSampleRateLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="CalDate">
<GridViewColumn.Header>
<GridViewColumnHeader Tag="CalDate" Content="{strings:TranslateExtension CalDate}" Click="ListViewHeader_Click" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding CalDate,FallbackValue='CalDate', StringFormat='d'}" AutomationProperties.AutomationId="dueCalDateLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="FirstUseDate">
<GridViewColumn.Header>
<GridViewColumnHeader Tag="FirstUseDate" Content="{strings:TranslateExtension FirstUseDate}" Click="ListViewHeader_Click" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding Path=DataContext,RelativeSource={RelativeSource Self}, StringFormat='d',Converter={StaticResource FirstUseConverter}}"
AutomationProperties.AutomationId="FirstUseDateLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="CalDueDate">
<GridViewColumn.Header>
<GridViewColumnHeader Tag="CalDueDate" Content="{strings:TranslateExtension CalDueDate}" Click="ListViewHeader_Click" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding CalDueDate,FallbackValue='CalDueDate', StringFormat='d'}" AutomationProperties.AutomationId="dueCalDueDateLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</controls:AutoSizedGridView>
</ListView.View>
</ListView>
</Grid>
</base:BaseView>

View File

@@ -0,0 +1,26 @@
using System.Windows.Controls;
using System.Windows.Data;
using DTS.Common.Interface.DASFactory.Diagnostics.HardwareList;
// ReSharper disable CheckNamespace
namespace HardwareList
{
/// <inheritdoc cref="IHardwareListOverdueView" />
/// <summary>
/// Interaction logic for HardwareListView.xaml
/// </summary>
public partial class HardwareListOverdueView : IHardwareListOverdueView
{
public HardwareListOverdueView()
{
InitializeComponent();
}
private void ListViewHeader_Click(object sender, System.Windows.RoutedEventArgs e)
{
var colHeader = (GridViewColumnHeader)e.OriginalSource;
var viewModel = (IHardwareListViewModel)colHeader.DataContext;
viewModel.SortOverdue(colHeader.Tag, true);
}
}
}

View File

@@ -0,0 +1,88 @@
<base:BaseView x:Class="HardwareList.HardwareListReplaceView"
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:behaviors="clr-namespace:DTS.Common.Behaviors;assembly=DTS.Common"
xmlns:controls="clr-namespace:DTS.Common.Controls;assembly=DTS.Common"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:strings="clr-namespace:HardwareList"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:converters="clr-namespace:DTS.Common.Converters;assembly=DTS.Common"
xmlns:converters2="clr-namespace:HardwareList.Converters"
mc:Ignorable="d"
d:DesignHeight="768" d:DesignWidth="1366"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns:controls2="clr-namespace:DTS.Common.Controls;assembly=DTS.Common">
<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.MergedDictionaries>
<Style TargetType="ListView">
<Setter Property="ItemContainerStyle" Value="{StaticResource TTS_ListViewItemStyle}"/>
</Style>
<Style TargetType="TextBox" BasedOn="{StaticResource TTS_TextBoxStyle}"/>
<Style TargetType="TextBlock" BasedOn="{StaticResource TTS_TextBlockStyle}"/>
<Style TargetType="CheckBox" BasedOn="{StaticResource PageContentCheckBoxStyle}" />
<Style TargetType="ComboBox" BasedOn="{StaticResource TTS_ComboBoxStyle}"/>
<Style TargetType="Button" BasedOn="{StaticResource TTS_ButtonStyle}"/>
<Style TargetType="GridViewColumnHeader" BasedOn="{StaticResource Gray_GridViewColumnHeaderStyle}"/>
<converters:BooleanToVisibilityConverter x:Key="BoolToVis" />
<converters2:FirstUseDateConverter x:Key="FirstUseConverter" />
</ResourceDictionary>
</base:BaseView.Resources>
<Grid Background="{DynamicResource Brush_ApplicationContentBackground}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Grid.Column="0" Grid.Row="0" Margin="5">
<TextBlock Text="{strings:TranslateExtension HardwareToReplace}" Margin="5,0,5,0" />
<ComboBox MinWidth="200" ItemsSource="{Binding HardwareInTest}" SelectedItem="{Binding HardwareToReplace}" />
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Grid.Column="1" Grid.Row="0" Margin="5">
<TextBlock Text="{strings:TranslateExtension HardwareToReplaceWith}" Margin="5,0,5,0"/>
<ComboBox MinWidth="200" ItemsSource="{Binding AvailableHardware}" SelectedItem="{Binding ReplacementHardware}"/>
<Button Content="{strings:TranslateExtension Replace}" Click="Replace_Click" MinHeight="25"/>
</StackPanel>
<ListView ItemsSource="{Binding AssignedChannels}" Grid.Row="2">
<ListView.View>
<controls:AutoSizedGridView>
<GridViewColumn>
<GridViewColumnHeader Content="{strings:TranslateExtension ChannelNumber}" />
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding ChannelNumber}" />
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn>
<GridViewColumnHeader Content="{strings:TranslateExtension Sensor}" />
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding Sensor}" />
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn>
<GridViewColumnHeader Content="{strings:TranslateExtension Name}" />
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding Name}" />
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</controls:AutoSizedGridView>
</ListView.View>
</ListView>
</Grid>
</base:BaseView>

View File

@@ -0,0 +1,30 @@
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using DTS.Common.Controls;
using DTS.Common.Interface.DASFactory.Diagnostics.HardwareList;
using DTS.Common.Utils;
// ReSharper disable CheckNamespace
namespace HardwareList
{
/// <inheritdoc cref="IHardwareListReplaceView" />
/// <summary>
/// Interaction logic for HardwareListReplaceView.xaml
/// </summary>
public partial class HardwareListReplaceView : IHardwareListReplaceView
{
public HardwareListReplaceView()
{
InitializeComponent();
}
private void Replace_Click(object sender, RoutedEventArgs e)
{
if (!(sender is Control control)) { return; }
if (!(control.DataContext is IHardwareListViewModel vm)) { return; }
vm.Replace();
}
}
}

View File

@@ -0,0 +1,255 @@
<base:BaseView x:Class="HardwareList.HardwareListSelectView"
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:converters2="clr-namespace:HardwareList.Converters"
xmlns:controls="clr-namespace:DTS.Common.Controls;assembly=DTS.Common"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:strings="clr-namespace:HardwareList"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:common="clr-namespace:DTS.Common.Behaviors;assembly=DTS.Common"
mc:Ignorable="d"
d:DesignHeight="768" d:DesignWidth="1366"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml"
xmlns:controls2="clr-namespace:DTS.Common.Controls;assembly=DTS.Common">
<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.MergedDictionaries>
<Style TargetType="ListView">
<Setter Property="ItemContainerStyle" Value="{StaticResource TTS_ListViewItemStyle}"/>
</Style>
<Style TargetType="TextBox" BasedOn="{StaticResource TTS_TextBoxStyle}"/>
<Style TargetType="TextBlock" BasedOn="{StaticResource TTS_TextBlockStyle}"/>
<Style TargetType="CheckBox" BasedOn="{StaticResource PageContentCheckBoxStyle}" />
<Style TargetType="ComboBox" BasedOn="{StaticResource TTS_ComboBoxStyle}"/>
<Style TargetType="Button" BasedOn="{StaticResource TTS_ButtonStyle}"/>
<Style TargetType="GridViewColumnHeader" BasedOn="{StaticResource Gray_GridViewColumnHeaderStyle}"/>
<Style TargetType="RadioButton" BasedOn="{StaticResource FlatRadioButtonStyle}" >
<Setter Property="Height" Value="24" />
<Setter Property="Margin" Value="5" />
</Style>
<Style TargetType="{x:Type c1:C1NumericBox}"> <!-- Based on DataPRO CommonStyles -->
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Background" Value="{StaticResource Brush_FlatControlWindowBackground}" />
<Setter Property="CornerRadius" Value="0"/>
<Setter Property="MinWidth" Value="50"/>
<Setter Property="Height" Value="24" />
<Setter Property="ButtonBackground" Value="Transparent"/>
<Setter Property="Value" Value="{Binding Value, FallbackValue=1234}"/>
<Setter Property="TextAlignment" Value="Left"/>
<Setter Property="Margin" Value="5"/>
<!--<Setter Property="MouseOverBrush" Value="{StaticResource Brush_FlatControlMouseOverBackground}"/>-->
<Setter Property="ToolTipService.ToolTip" Value="" />
<Setter Property="ToolTipService.ShowOnDisabled" Value="True" />
<!--<EventSetter Event="ToolTipOpening" Handler="ToolTipEventHandler" />-->
<!--<Setter Property="Width" Value="30"/>-->
<Setter Property="HorizontalAlignment" Value="Left"/>
<!--<Setter Property="Margin" Value="5,2,5,2"/>-->
</Style>
<converters:BooleanToVisibilityConverter x:Key="BoolToVisibility" />
<converters:BooleanAndToVisibilityMultiConverter x:Key="BoolAndToVisibilityMulti" />
<converters:IsLessThanConverter x:Key="IsLessThanConverter" />
<converters:InverseBooleanConverter x:Key="BoolToInverse" />
<converters2:FirstUseDateConverter x:Key="FirstUseConverter" />
<converters2:StandInFieldConverter x:Key="StandInConverter" />
<converters:DSPStreamingFilterFrequencyConverter x:Key="dspConverter" />
</ResourceDictionary>
</base:BaseView.Resources>
<Grid Background="{DynamicResource Brush_ApplicationContentBackground}" x:Name="maingrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Grid.Row="0">
<RadioButton Content="{strings:TranslateExtension Compact}" GroupName="Buttons" IsChecked="{Binding ShowCompact}" AutomationProperties.AutomationId="HardwareListCompactRadioButton"/>
<RadioButton Content="{strings:TranslateExtension ShowModules}" GroupName="Buttons" IsChecked="{Binding ShowCompact, Converter={StaticResource BoolToInverse}}" AutomationProperties.AutomationId="HardwareListExpandedRadioButton"/>
</StackPanel>
<ListView Grid.Row="1" ItemsSource="{Binding Hardware, UpdateSourceTrigger=PropertyChanged}" AutomationProperties.AutomationId="HardwareListView" SelectedIndex="{Binding SelectedHardwareIndex, Mode=TwoWay}" GridViewColumnHeader.Click="GridViewColumnHeader_OnClick"
x:Name="LvHardware">
<i:Interaction.Behaviors>
<common:MultiSelectionBehavior SelectedItems="{Binding SelectedHardwareItems}" />
</i:Interaction.Behaviors>
<ListView.View>
<controls:AutoSizedGridView AutomationProperties.AutomationId="HardwareListGridView">
<!-- column 0 -->
<GridViewColumn AutomationProperties.AutomationId="Included">
<GridViewColumn.Header>
<GridViewColumnHeader Tag="Included" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<CheckBox IsChecked="{Binding Included}" AutomationProperties.AutomationId="IncludeChkBx" Click="Included_Click"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<!-- column 1-->
<GridViewColumn AutomationProperties.AutomationId="SerialNumber">
<controls2:GridViewColumnHeaderSearchable Tag="SerialNumber" HeaderTitle="{strings:TranslateExtension SerialNumber}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding SerialNumberDisplay,FallbackValue='SerialNumber'}" AutomationProperties.AutomationId="SerailNumLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="IPAddress">
<controls2:GridViewColumnHeaderSearchable Tag="IPAddress" HeaderTitle="{strings:TranslateExtension IPAddress}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding IPAddress,FallbackValue='IPAddress'}" AutomationProperties.AutomationId="IPAddressLbl">
</TextBlock>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="HardwareType">
<controls2:GridViewColumnHeaderSearchable Tag="HardwareType" HeaderTitle="{strings:TranslateExtension HardwareType}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding HardwareType,FallbackValue='HardwareType'}" AutomationProperties.AutomationId="HardwareTypeLbl">
</TextBlock>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="ChannelCount">
<controls2:GridViewColumnHeaderSearchable Tag="ChannelCount" HeaderTitle="{strings:TranslateExtension ChannelCount}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding ChannelCount,FallbackValue='ChannelCount'}" AutomationProperties.AutomationId="ChannelCountLbl">
</TextBlock>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="Firmware">
<controls2:GridViewColumnHeaderSearchable Tag="Firmware" HeaderTitle="{strings:TranslateExtension Firmware}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding Path=DataContext,RelativeSource={RelativeSource Self}, StringFormat='d',Converter={StaticResource StandInConverter}, ConverterParameter='Firmware'}"
AutomationProperties.AutomationId="FirmwareLbl"/>
<!--<TextBlock Text="{Binding Firmware,FallbackValue='Firmware'}" AutomationProperties.AutomationId="FirmwareLbl">
</TextBlock>-->
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="MaxSampleRate">
<controls2:GridViewColumnHeaderSearchable Tag="MaxSampleRate" HeaderTitle="{strings:TranslateExtension MaxSampleRate}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding MaxSampleRate,FallbackValue='MaxSampleRate',StringFormat='N0', TargetNullValue='---'}" AutomationProperties.AutomationId="SampleRateLbl">
</TextBlock>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="TestSampleRate" Width="{Binding TestSampleRateColumnWidth}">
<controls2:GridViewColumnHeaderSearchable Tag="TestSampleRate" HeaderTitle="{strings:TranslateExtension TestSampleRate}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<StackPanel>
<StackPanel.Visibility>
<MultiBinding Converter="{StaticResource BoolAndToVisibilityMulti}" ConverterParameter="HIDE">
<Binding Path="Included" />
<Binding Path="StreamInChannels" Converter="{StaticResource IsLessThanConverter}" ConverterParameter="1" />
</MultiBinding>
</StackPanel.Visibility>
<ComboBox ItemsSource="{Binding AvailableSampleRates}" SelectedIndex="{Binding SelectedSampleRateIndex}" SelectedItem ="{Binding SelectedSampleRateItem}" AutomationProperties.AutomationId="TestSampleRateLbl"
Visibility="{Binding IncludedAndNotMixedRatesAndCompactOrNotDistributor, Converter={StaticResource BoolToVisibility}}"/>
<Button Content="{strings:TranslateExtension ChainMultipleTestSampleRates}" AutomationProperties.AutomationId="ChainSampleRateMixedButton" Click="ChainSampleRateMixed_Clicked"
Visibility="{Binding IncludedAndMixedRatesAndCompact, Converter={StaticResource BoolToVisibility}}"/>
</StackPanel>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="TestAAFRateHz" Width="{Binding TestAAFRateHzColumnWidth}">
<controls2:GridViewColumnHeaderSearchable Tag="TestAAFRateHz" HeaderTitle="{strings:TranslateExtension TestAAFRateHz}" ClickHandler="GridViewColumnHeaderSearchable_OnSearch" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBox Text="{Binding TestAAFilterRateHz, FallbackValue='AAFilterRateHz',StringFormat='N0'}" MinWidth="100"
Visibility="{Binding Included, Converter={StaticResource BoolToVisibility}}"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="TestClockMaster" Width="{Binding TestClockMasterColumnWidth}">
<controls2:GridViewColumnHeaderSelectable Tag="TestClockMaster" HeaderTitle="{strings:TranslateExtension IsHWClockMaster}" ClickHandler="GridViewColumnHeaderCheckBox_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<CheckBox IsChecked="{Binding IsClockMaster}">
<CheckBox.Visibility>
<MultiBinding Converter="{StaticResource BoolAndToVisibilityMulti}" ConverterParameter="HIDE">
<Binding Path="Included" />
<Binding Path="IsClockedDAS" />
</MultiBinding>
</CheckBox.Visibility>
</CheckBox>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="PTPDomain" Width="{Binding PTPDomainColumnWidth}">
<controls2:GridViewColumnHeaderSelectable Tag="PTPDomain" HeaderTitle="{strings:TranslateExtension PTPDomain}" ListviewId="{Binding ListViewId}" />
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<c1:C1NumericBox Value="{Binding PTPDomainID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="nbPTPDomainID" Increment="1" Minimum="0" Maximum="255" >
<c1:C1NumericBox.Visibility>
<MultiBinding Converter="{StaticResource BoolAndToVisibilityMulti}" ConverterParameter="HIDE">
<Binding Path="Included" />
<Binding Path="IsClockedDAS" />
<Binding Path="IsPTPSync" />
</MultiBinding>
</c1:C1NumericBox.Visibility>
</c1:C1NumericBox>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<!-- DSP streaming filter -->
<GridViewColumn AutomationProperties.AutomationId="DSPStreamingFilterColumn" x:Name="DSPStreamingColumn">
<controls2:GridViewColumnHeaderSearchable Tag="DSPStreamingFilter" HeaderTitle="{strings:TranslateExtension DSPStreamingFilterColumnHeader}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding DSPStreamingFilter,Converter={StaticResource dspConverter}}" />
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="CalDate" x:Name="CalDateColumn">
<controls2:GridViewColumnHeaderSearchable Tag="CalDate" HeaderTitle="{strings:TranslateExtension CalDate}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding Path=DataContext,RelativeSource={RelativeSource Self}, StringFormat='d',Converter={StaticResource StandInConverter}, ConverterParameter='CalDate'}"
AutomationProperties.AutomationId="CalDateLbl"/>
<!--<TextBlock Text="{Binding CalDate,FallbackValue='CalDate', StringFormat='d'}" AutomationProperties.AutomationId="CalDateLbl">
</TextBlock>-->
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="FirstUseDate">
<GridViewColumn.Header>
<GridViewColumnHeader Tag="FirstUseDate" Content="{strings:TranslateExtension FirstUseDate}" Click="ListViewHeader_Click" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding Path=DataContext,RelativeSource={RelativeSource Self}, StringFormat='d',Converter={StaticResource FirstUseConverter}}"
AutomationProperties.AutomationId="FirstUseDateLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="CalDueDate">
<controls2:GridViewColumnHeaderSearchable Tag="CalDueDate" HeaderTitle="{strings:TranslateExtension CalDueDate}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding Path=DataContext,RelativeSource={RelativeSource Self}, StringFormat='d',Converter={StaticResource StandInConverter}, ConverterParameter='CalDueDate'}"
AutomationProperties.AutomationId="CalDueDateLbl">
<!--<TextBlock Text="{Binding CalDueDate,FallbackValue='CalDueDate',StringFormat='d'}" AutomationProperties.AutomationId="CalDueDateLbl">-->
</TextBlock>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</controls:AutoSizedGridView>
</ListView.View>
</ListView>
</Grid>
</base:BaseView>

View File

@@ -0,0 +1,92 @@
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;
using DTS.Common.Controls;
using DTS.Common.Interface.DASFactory.Diagnostics.HardwareList;
using DTS.Common.Utils;
// ReSharper disable CheckNamespace
namespace HardwareList
{
/// <inheritdoc cref="IHardwareListSelectView" />
/// <summary>
/// Interaction logic for HardwareListSelectView.xaml
/// </summary>
public partial class HardwareListSelectView : IHardwareListSelectView
{
public HardwareListSelectView()
{
InitializeComponent();
}
public void InitializeColumns(bool bSteamingTest)
{
var view = (GridView)LvHardware.View;
var calDateIndex = view.Columns.IndexOf(CalDateColumn);
if (calDateIndex < 0) { calDateIndex = 0; }
if (bSteamingTest)
{
AddColumn(view, DSPStreamingColumn, calDateIndex - 1);
}
else
{
RemoveColumn(view, DSPStreamingColumn);
}
}
private void AddColumn(GridView view, GridViewColumn column, int index)
{
if (!view.Columns.Contains(column)) { view.Columns.Insert(index, column); }
}
private void RemoveColumn(GridView view, GridViewColumn column)
{
if (view.Columns.Contains(column)) { view.Columns.Remove(column); }
}
private void ListViewHeader_Click(object sender, System.Windows.RoutedEventArgs e)
{
var colHeader = (GridViewColumnHeader)e.OriginalSource;
var viewModel = (IHardwareListViewModel)colHeader.DataContext;
viewModel.Sort(colHeader.Tag, true);
}
private void GridViewColumnHeaderSearchable_OnSearch(object sender, RoutedEventArgs e)
{
var searchTerm = (string)e.OriginalSource;
var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag;
var viewModel = (IHardwareListViewModel)DataContext;
viewModel.Filter(columnTag, searchTerm);
}
private void GridViewColumnHeader_OnClick(object sender, RoutedEventArgs e)
{
var vm = (IHardwareListViewModel)DataContext;
var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag ??
Utils.FindChild<GridViewColumnHeaderSearchable>((DependencyObject)e.OriginalSource, null)?.Tag ??
(e.OriginalSource as GridViewColumnHeader)?.Tag;
vm?.Sort(columnTag, true);
}
private void GridViewColumnHeaderCheckBox_OnClick(object sender, RoutedEventArgs e)
{
var viewModel = (IHardwareListViewModel)DataContext;
var columnTag = (sender as GridViewColumnHeaderSelectable)?.Tag ?? Utils.FindChild<GridViewColumnHeaderSelectable>((DependencyObject)e.OriginalSource, null)?.Tag;
viewModel?.Sort(columnTag, true);
}
private void Included_Click(object sender, RoutedEventArgs e)
{
if (!(DataContext is HardwareListViewModel vm)) { return; }
if (!(sender is Control control)) { return; }
if (!(control.DataContext is IHardware hardware)) { return; }
if (vm.ShowCompact)
{
vm.IncludeChildren(hardware);
}
}
private void ChainSampleRateMixed_Clicked(object sender, RoutedEventArgs e)
{
if (!(DataContext is HardwareListViewModel vm)) { return; }
if (!(sender is Control control)) { return; }
if (!(control.DataContext is IHardware hardware)) { return; }
vm.RemoveMultipleButton(hardware);
}
}
}

View File

@@ -0,0 +1,135 @@
<base:BaseView x:Class="HardwareList.HardwareListView"
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:behaviors="clr-namespace:DTS.Common.Behaviors;assembly=DTS.Common"
xmlns:controls="clr-namespace:DTS.Common.Controls;assembly=DTS.Common"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:strings="clr-namespace:HardwareList"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:converters="clr-namespace:DTS.Common.Converters;assembly=DTS.Common"
xmlns:converters2="clr-namespace:HardwareList.Converters"
mc:Ignorable="d"
d:DesignHeight="768" d:DesignWidth="1366"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns:controls2="clr-namespace:DTS.Common.Controls;assembly=DTS.Common">
<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.MergedDictionaries>
<Style TargetType="ListView">
<Setter Property="ItemContainerStyle" Value="{StaticResource TTS_ListViewItemStyle}"/>
</Style>
<Style TargetType="TextBox" BasedOn="{StaticResource TTS_TextBoxStyle}"/>
<Style TargetType="TextBlock" BasedOn="{StaticResource TTS_TextBlockStyle}"/>
<Style TargetType="CheckBox" BasedOn="{StaticResource PageContentCheckBoxStyle}" />
<Style TargetType="ComboBox" BasedOn="{StaticResource TTS_ComboBoxStyle}"/>
<Style TargetType="Button" BasedOn="{StaticResource TTS_ButtonStyle}"/>
<Style TargetType="GridViewColumnHeader" BasedOn="{StaticResource Gray_GridViewColumnHeaderStyle}"/>
<converters:BooleanToVisibilityConverter x:Key="BoolToVis" />
<converters2:FirstUseDateConverter x:Key="FirstUseConverter" />
</ResourceDictionary>
</base:BaseView.Resources>
<Grid Background="{DynamicResource Brush_ApplicationContentBackground}">
<ListView ItemsSource="{Binding Hardware, UpdateSourceTrigger=PropertyChanged}" AutomationProperties.AutomationId="HardwareListView" SelectedIndex="{Binding SelectedHardwareIndex, Mode=TwoWay}" MouseDoubleClick="MouseDoubleClick" GridViewColumnHeader.Click="GridViewColumnHeader_OnClick">
<i:Interaction.Behaviors>
<behaviors:MultiSelectionBehavior SelectedItems="{Binding SelectedHardwareItems}" />
</i:Interaction.Behaviors>
<ListView.View>
<controls:AutoSizedGridView AutomationProperties.AutomationId="HardwareListGridView">
<GridViewColumn AutomationProperties.AutomationId="SerialNumber">
<controls2:GridViewColumnHeaderSearchable Tag="SerialNumber" HeaderTitle="{strings:TranslateExtension SerialNumber}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding SerialNumber,FallbackValue='SerialNumber'}" AutomationProperties.AutomationId="SerialNumLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="HardwareType">
<controls2:GridViewColumnHeaderSearchable Tag="HardwareType" HeaderTitle="{strings:TranslateExtension HardwareType}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding HardwareType,FallbackValue='HardwareType'}" AutomationProperties.AutomationId="TypeLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="IPAddress">
<controls2:GridViewColumnHeaderSearchable Tag="IPAddress" HeaderTitle="{strings:TranslateExtension Connection}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding IPAddress,FallbackValue='IPAddress'}" AutomationProperties.AutomationId="IPAddressLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="ChannelCount">
<controls2:GridViewColumnHeaderSearchable Tag="ChannelCount" HeaderTitle="{strings:TranslateExtension ChannelCount}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding ChannelCount,FallbackValue='ChannelCount'}" AutomationProperties.AutomationId="ChanCountLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="Firmware">
<controls2:GridViewColumnHeaderSearchable Tag="Firmware" HeaderTitle="{strings:TranslateExtension Firmware}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding Firmware,FallbackValue='Firmware'}" AutomationProperties.AutomationId="FirmwareLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="MaxSampleRate">
<controls2:GridViewColumnHeaderSearchable Tag="MaxSampleRate" HeaderTitle="{strings:TranslateExtension MaxSampleRate}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding MaxSampleRate,FallbackValue='MaxSampleRate',StringFormat='N0', TargetNullValue='---'}" AutomationProperties.AutomationId="MaxSampleRateLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="CalDate">
<controls2:GridViewColumnHeaderSearchable Tag="CalDate" HeaderTitle="{strings:TranslateExtension CalDate}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding CalDate,FallbackValue='CalDate', StringFormat='d', TargetNullValue='N/A'}" AutomationProperties.AutomationId="CalDateLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="FirstUseDate">
<controls2:GridViewColumnHeaderSearchable Tag="FirstUseDate" HeaderTitle="{strings:TranslateExtension FirstUseDate}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding Path=DataContext,RelativeSource={RelativeSource Self}, StringFormat='d',Converter={StaticResource FirstUseConverter}}"
AutomationProperties.AutomationId="FirstUseDateLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="CalDueDate">
<controls2:GridViewColumnHeaderSearchable Tag="CalDueDate" HeaderTitle="{strings:TranslateExtension CalDueDate}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding CalDueDate,FallbackValue='CalDueDate',StringFormat='d', TargetNullValue='N/A'}" AutomationProperties.AutomationId="CalDueDateLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="TreeViewButton">
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<Button Visibility="{Binding HasTreeView, Converter={StaticResource BoolToVis}}"
Content="{strings:TranslateExtension TreeView}"
Click="TreeviewButton_Click" AutomationProperties.AutomationId="btnTreeViewDataRecordersS6DB"
/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</controls:AutoSizedGridView>
</ListView.View>
</ListView>
<Popup x:Name="SLICE6TreeViewPopup" Visibility="Collapsed" StaysOpen="False"/>
</Grid>
</base:BaseView>

View File

@@ -0,0 +1,101 @@
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using DTS.Common.Controls;
using DTS.Common.Interface.DASFactory.Diagnostics.HardwareList;
using DTS.Common.Utils;
// ReSharper disable CheckNamespace
namespace HardwareList
{
/// <inheritdoc cref="IHardwareListView" />
/// <summary>
/// Interaction logic for HardwareListView.xaml
/// </summary>
public partial class HardwareListView : IHardwareListView
{
public HardwareListView()
{
InitializeComponent();
}
private void GridViewColumnHeaderSearchable_OnSearch(object sender, RoutedEventArgs e)
{
var searchTerm = (string)e.OriginalSource;
var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag;
var viewModel = (IHardwareListViewModel)DataContext;
viewModel.Filter(columnTag, searchTerm);
}
private void GridViewColumnHeader_OnClick(object sender, RoutedEventArgs e)
{
var vm = (IHardwareListViewModel)DataContext;
var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag ??
Utils.FindChild<GridViewColumnHeaderSearchable>((DependencyObject)e.OriginalSource, null)?.Tag ??
(e.OriginalSource as GridViewColumnHeader)?.Tag;
vm?.Sort(columnTag, true);
}
private void MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (!(sender is ListView lv))
{
return;
}
var index = GetCurrentIndex(e.GetPosition, lv);
if (index >= 0 && index < lv.Items.Count)
{
var vm = (IHardwareListViewModel)lv.DataContext;
vm.MouseDoubleClick(index);
}
}
private delegate Point GetPositionDelegate(IInputElement element);
private int GetCurrentIndex(GetPositionDelegate getPosition, ListView lv)
{
var index = -1;
for (var i = 0; i < lv.Items.Count; i++)
{
var item = GetListViewItem(i, lv);
if (item == null)
continue;
if (IsMouseOverTarget(item, getPosition))
{
index = i;
break;
}
}
return index;
}
private static ListViewItem GetListViewItem(int index, ListView lv)
{
return lv.ItemContainerGenerator.ContainerFromIndex(index) as ListViewItem;
}
private static bool IsMouseOverTarget(Visual target, GetPositionDelegate getPosition)
{
var bounds = VisualTreeHelper.GetDescendantBounds(target);
var mousePos = getPosition((IInputElement)target);
return bounds.Contains(mousePos);
}
private void TreeviewButton_Click(object sender, RoutedEventArgs e)
{
if (!(sender is Control control)) { return; }
if (!(control.DataContext is IHardware hardware)) { return; }
if (!(DataContext is IHardwareListViewModel hardwareListViewModel)) { return; }
SLICE6TreeViewPopup.IsOpen = false;
hardwareListViewModel.SLICE6TreeView.DataContext = hardwareListViewModel;
SLICE6TreeViewPopup.PlacementTarget = control;
SLICE6TreeViewPopup.Child = null;
hardwareListViewModel.LoadTreeView(hardware.SerialNumber);
SLICE6TreeViewPopup.Child = (UIElement)hardwareListViewModel.SLICE6TreeView;
SLICE6TreeViewPopup.IsOpen = true;
SLICE6TreeViewPopup.PlacementTarget = control;
}
}
}

View File

@@ -0,0 +1,104 @@
<base:BaseView x:Class="HardwareList.SLICE6TreeView"
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:behaviors="clr-namespace:DTS.Common.Behaviors;assembly=DTS.Common"
xmlns:controls="clr-namespace:DTS.Common.Controls;assembly=DTS.Common"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:strings="clr-namespace:HardwareList"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:converters="clr-namespace:DTS.Common.Converters;assembly=DTS.Common"
mc:Ignorable="d"
d:DesignHeight="768" d:DesignWidth="1366"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns:controls2="clr-namespace:DTS.Common.Controls;assembly=DTS.Common"
x:Name="treeView">
<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.MergedDictionaries>
<Style TargetType="ListView">
<Setter Property="ItemContainerStyle" Value="{StaticResource TTS_ListViewItemStyle}"/>
</Style>
<Style TargetType="TextBox" BasedOn="{StaticResource TTS_TextBoxStyle}"/>
<Style TargetType="TextBlock" BasedOn="{StaticResource TTS_TextBlockStyle}"/>
<Style TargetType="CheckBox" BasedOn="{StaticResource PageContentCheckBoxStyle}" />
<Style TargetType="ComboBox" BasedOn="{StaticResource TTS_ComboBoxStyle}"/>
<Style TargetType="Button" BasedOn="{StaticResource TTS_ButtonStyle}"/>
<Style TargetType="GridViewColumnHeader" BasedOn="{StaticResource Gray_GridViewColumnHeaderStyle}"/>
<converters:BooleanToVisibilityConverter x:Key="BoolToVis" />
</ResourceDictionary>
</base:BaseView.Resources>
<Grid Background="{DynamicResource Brush_ApplicationContentBackground}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ListView ItemsSource="{Binding SLICE6TreeNodes, UpdateSourceTrigger=PropertyChanged}"
AutomationProperties.AutomationId="SLICE6TreeView" Grid.Row="0">
<ListView.View>
<controls:AutoSizedGridView AutomationProperties.AutomationId="SLICE6TreeViewGridView">
<GridViewColumn AutomationProperties.AutomationId="Number">
<!--<controls2:GridViewColumnHeaderSearchable HeaderTitle="{strings:TranslateExtension Number}" ListviewId="{Binding ListViewId}"/>-->
<GridViewColumnHeader Content="{strings:TranslateExtension Number}" />
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding Number,FallbackValue='001', StringFormat='{}{0:000}'}" AutomationProperties.AutomationId="NumberTextBlock"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="SerialNumber">
<!--<controls2:GridViewColumnHeaderSearchable HeaderTitle="{strings:TranslateExtension SerialNumber}" ListviewId="{Binding ListViewId}"/>-->
<GridViewColumnHeader Content="{strings:TranslateExtension SerialNumber}" />
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding SerialNumber,FallbackValue='S600NA'}" AutomationProperties.AutomationId="SerialNumberTextBlock"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="Port">
<!--<controls2:GridViewColumnHeaderSearchable HeaderTitle="{strings:TranslateExtension Port}" ListviewId="{Binding ListViewId}"/>-->
<GridViewColumnHeader Content="{strings:TranslateExtension Port}" />
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding PortString}" AutomationProperties.AutomationId="PortTextBlock"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="PositionOnChain">
<!--<controls2:GridViewColumnHeaderSearchable HeaderTitle="{strings:TranslateExtension PositionOnChain}" ListviewId="{Binding ListViewId}"/>-->
<GridViewColumnHeader Content="{strings:TranslateExtension PositionOnChain}" />
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding PositionOnChainString}" AutomationProperties.AutomationId="PositionOnChainTextBlock"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="RemoveColumn">
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<Button Content="{strings:TranslateExtension Remove}" Visibility="{Binding Path=DataContext.IsEdit, ElementName=treeView, Converter={StaticResource BoolToVis}}"
Click="Remove_Click" AutomationProperties.AutomationId="btnRemove"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</controls:AutoSizedGridView>
</ListView.View>
</ListView>
<StackPanel Grid.Row="1" Orientation="Horizontal" Visibility="{Binding IsEdit, Converter={StaticResource BoolToVis}}">
<ComboBox ItemsSource="{Binding AvailableSLICE6}" SelectedItem="{Binding SelectedSLICE6}"
DisplayMemberPath="SerialNumber" AutomationProperties.AutomationId="comboBoxAdd"/>
<Button Content="{strings:TranslateExtension Add}" Click="Add_Click" AutomationProperties.AutomationId="btnAdd"/>
</StackPanel>
<StackPanel Grid.Row="2" Orientation="Horizontal" Visibility="{Binding IsEdit, Converter={StaticResource BoolToVis}}">
<ComboBox ItemsSource="{Binding AvailableSLICE6DB}" SelectedItem="{Binding SelectedSLICE6DB}"
DisplayMemberPath="SerialNumber" AutomationProperties.AutomationId="comboBoxSwap"/>
<Button Content="{strings:TranslateExtension Swap}" Click="Swap_Click" AutomationProperties.AutomationId="btnSwap"/>
</StackPanel>
</Grid>
</base:BaseView>

View File

@@ -0,0 +1,59 @@
using System.Windows;
using System.Windows.Controls;
using DTS.Common.Interface.DASFactory.Diagnostics.HardwareList;
using Prism.Ioc;
using Prism.Events;
// ReSharper disable CheckNamespace
namespace HardwareList
{
/// <inheritdoc cref="ISLICE6TreeView" />
/// <summary>
/// Interaction logic for SLICE6TreeView.xaml
/// </summary>
public partial class SLICE6TreeView : ISLICE6TreeView
{
public SLICE6TreeView()
{
InitializeComponent();
}
private void Remove_Click(object sender, RoutedEventArgs e)
{
if (!(sender is Control control)) { return; }
if (!(control.DataContext is ISLICE6TreeNode treeNode)) { return; }
if (!(DataContext is IHardwareListViewModel vm)) { return; }
vm.UnAssociate(treeNode);
var eventAggregator = ContainerLocator.Container.Resolve<IEventAggregator>();
eventAggregator.GetEvent<DTS.Common.Events.PageModifiedEvent>().Publish(
new DTS.Common.Events.PageModifiedArg(DTS.Common.Events.PageModifiedArg.Status.Modified, null));
}
private void Add_Click(object sender, RoutedEventArgs e)
{
if (!(sender is Control control)) { return; }
if (!(DataContext is IHardwareListViewModel vm)) { return; }
if (null == vm.SelectedSLICE6) { return; }
var treeNode = vm.SelectedSLICE6;
vm.Associate(treeNode);
var eventAggregator = ContainerLocator.Container.Resolve<IEventAggregator>();
eventAggregator.GetEvent<DTS.Common.Events.PageModifiedEvent>().Publish(
new DTS.Common.Events.PageModifiedArg(DTS.Common.Events.PageModifiedArg.Status.Modified, null));
}
/// <summary>
/// handles the click of the swap button in the view
/// </summary>
private void Swap_Click(object sender, RoutedEventArgs e)
{
if (!(sender is Control control)) { return; }
if (!(DataContext is IHardwareListViewModel vm)) { return; }
if (null == vm.SelectedSLICE6DB) { return; }
vm.Associate(vm.SelectedSLICE6DB);
var eventAggregator = ContainerLocator.Container.Resolve<IEventAggregator>();
eventAggregator.GetEvent<DTS.Common.Events.PageModifiedEvent>().Publish(
new DTS.Common.Events.PageModifiedArg(DTS.Common.Events.PageModifiedArg.Status.Modified, null));
}
}
}