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