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 { /// /// /// Interaction logic for HardwareListView.xaml /// 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((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; } } }