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,118 @@
<base:BaseView x:Class="TestSetupsList.TestSetupsListView"
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:TestSetupsList"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
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" xmlns:converters="clr-namespace:DTS.Common.Converters;assembly=DTS.Common" xmlns:system="clr-namespace:System;assembly=mscorlib">
<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_ListViewItemStyleWithToolTip}"/>
</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" />
<converters:RecordingModePreTriggerVisibilityConverter x:Key="RecordingModePreTriggerVisConverter" />
</ResourceDictionary>
</base:BaseView.Resources>
<Grid Background="{DynamicResource Brush_ApplicationContentBackground}">
<ListView ItemsSource="{Binding TestSetups, UpdateSourceTrigger=PropertyChanged}" AutomationProperties.AutomationId="SensorsListView" SelectedIndex="{Binding SelectedTestSetupIndex, Mode=TwoWay}" MouseDoubleClick="MouseDoubleClick" GridViewColumnHeader.Click="GridViewColumnHeader_OnClick"
VirtualizingPanel.IsVirtualizing="True">
<i:Interaction.Behaviors>
<behaviors:MultiSelectionBehavior SelectedItems="{Binding SelectedTestSetupItems}" />
</i:Interaction.Behaviors>
<ListView.View>
<controls:AutoSizedGridView AutomationProperties.AutomationId="TestSetupsListGridView" VirtualizingPanel.IsVirtualizing="True">
<GridViewColumn AutomationProperties.AutomationId="Name">
<controls2:GridViewColumnHeaderSearchable Tag="Name" HeaderTitle="{strings:TranslateExtension Name}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding Name,FallbackValue='Name'}" AutomationProperties.AutomationId="NameLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="Description">
<controls2:GridViewColumnHeaderSearchable Tag="Description" HeaderTitle="{strings:TranslateExtension Description}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding Description,FallbackValue='Description'}" AutomationProperties.AutomationId="DescriptionLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="RecordingMode">
<controls2:GridViewColumnHeaderSearchable Tag="RecordingMode" HeaderTitle="{strings:TranslateExtension RecordingMode}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding RecordingMode,FallbackValue='RecordingMode'}" AutomationProperties.AutomationId="RecordingModeLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="PreTriggerSeconds">
<controls2:GridViewColumnHeaderSearchable Tag="PreTriggerSeconds" HeaderTitle="{strings:TranslateExtension PreTriggerSeconds}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<Grid>
<TextBlock Text="{Binding PreTriggerSeconds,FallbackValue='PreTriggerSeconds', StringFormat='N2'}" AutomationProperties.AutomationId="PreTriggerSecondsLbl"
Visibility="{Binding RecordingMode, Converter={StaticResource RecordingModePreTriggerVisConverter}, ConverterParameter={x:Static system:Boolean.FalseString}}"/>
<TextBlock Text="---" Visibility="{Binding RecordingMode, Converter={StaticResource RecordingModePreTriggerVisConverter}, ConverterParameter={x:Static system:Boolean.TrueString}}"/>
</Grid>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="PostTriggerSeconds">
<controls2:GridViewColumnHeaderSearchable Tag="PostTriggerSeconds" HeaderTitle="{strings:TranslateExtension PostTriggerSeconds}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding PostTriggerSeconds,FallbackValue='PostTriggerSeconds', StringFormat='N2'}" AutomationProperties.AutomationId="PostTriggerSecondsLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="LastModified">
<controls2:GridViewColumnHeaderSearchable Tag="LastModified" HeaderTitle="{strings:TranslateExtension LastModified}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding LastModified,FallbackValue='LastModified'}" AutomationProperties.AutomationId="LastModifiedLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn AutomationProperties.AutomationId="LastModifiedBy">
<controls2:GridViewColumnHeaderSearchable Tag="LastModifiedBy" HeaderTitle="{strings:TranslateExtension LastModifiedBy}" Search="GridViewColumnHeaderSearchable_OnSearch" ClickHandler="GridViewColumnHeader_OnClick" ListviewId="{Binding ListViewId}"/>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<TextBlock Text="{Binding LastModifiedBy,FallbackValue='LastModifiedBy'}" AutomationProperties.AutomationId="LastModifiedByLbl"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<!-- calculating iscomplete is expensive on a large test setup list, for now just disable
<GridViewColumn AutomationProperties.AutomationId="IsComplete">
<GridViewColumn.Header>
<GridViewColumnHeader Tag="IsComplete" Content="{strings:TranslateExtension IsComplete}" Click="ListViewHeader_Click" />
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<ItemContainerTemplate>
<CheckBox IsChecked="{Binding IsComplete}" AutomationProperties.AutomationId="IsCompleteCb" IsEnabled="false"/>
</ItemContainerTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>-->
</controls:AutoSizedGridView>
</ListView.View>
</ListView>
</Grid>
</base:BaseView>

View File

@@ -0,0 +1,85 @@
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;
using DTS.Common.Controls;
using DTS.Common.Interface.TestSetups.TestSetupsList;
using DTS.Common.Utils;
// ReSharper disable CheckNamespace
namespace TestSetupsList
{
/// <inheritdoc cref="ITestSetupsListView" />
/// <summary>
/// Interaction logic for TestSetupsListView.xaml
/// </summary>
public partial class TestSetupsListView : ITestSetupsListView
{
public TestSetupsListView()
{
InitializeComponent();
}
private void ListViewHeader_Click(object sender, System.Windows.RoutedEventArgs e)
{
var colHeader = (GridViewColumnHeader)e.OriginalSource;
var viewModel = (ITestSetupsListViewModel)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 = (ITestSetupsListViewModel)DataContext;
viewModel.Filter(columnTag, searchTerm);
}
private void GridViewColumnHeader_OnClick(object sender, RoutedEventArgs e)
{
var vm = (ITestSetupsListViewModel)DataContext;
var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag ?? Utils.FindChild<GridViewColumnHeaderSearchable>((DependencyObject)e.OriginalSource, null)?.Tag;
vm?.Sort(columnTag, true);
}
private void MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
var lv = sender as ListView;
if (null == lv)
{
return;
}
var index = GetCurrentIndex(e.GetPosition, lv);
if (index >= 0 && index < lv.Items.Count)
{
var vm = (ITestSetupsListViewModel)lv.DataContext;
vm.MouseDoubleClick(index);
}
}
delegate Point GetPositionDelegate(IInputElement element);
private int GetCurrentIndex(GetPositionDelegate getPosition, ListView lv)
{
int index = -1;
for (int i = 0; i < lv.Items.Count; i++)
{
ListViewItem item = GetListViewItem(i, lv);
if (item == null)
continue;
if (IsMouseOverTarget(item, getPosition))
{
index = i;
break;
}
}
return index;
}
private ListViewItem GetListViewItem(int index, ListView lv)
{
return lv.ItemContainerGenerator.ContainerFromIndex(index) as ListViewItem;
}
private bool IsMouseOverTarget(Visual target, GetPositionDelegate getPosition)
{
Rect bounds = VisualTreeHelper.GetDescendantBounds(target);
Point mousePos = getPosition((IInputElement)target);
return bounds.Contains(mousePos);
}
}
}