102 lines
3.8 KiB
C#
102 lines
3.8 KiB
C#
|
|
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;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|