using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using DTS.Common.Controls;
using DTS.Common.Interface.ISO.ExtraProperties;
using DTS.Common.Utils;
namespace ExtraProperties
{
///
/// Interaction logic for ExtraPropertiesListView.xaml
///
public partial class ExtraPropertiesListView : IExtraPropertiesListView
{
public ExtraPropertiesListView()
{
InitializeComponent();
}
private void GridViewColumnHeaderSearchable_OnSearch(object sender, RoutedEventArgs e)
{
var searchTerm = (string)e.OriginalSource;
var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag;
var viewModel = (IExtraPropertiesListViewModel)DataContext;
viewModel.Filter(columnTag, searchTerm);
}
private void GridViewColumnHeader_OnClick(object sender, RoutedEventArgs e)
{
var vm = (IExtraPropertiesListViewModel)DataContext;
var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag ?? Utils.FindChild((DependencyObject)e.OriginalSource, null)?.Tag;
vm?.Sort(columnTag, true);
}
private void ExtraPropertyKeyTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (!(DataContext is ExtraPropertiesListViewModel vm)) { return; }
if (!(((System.Windows.Controls.Control)e.Source).DataContext is IExtraProperty iep)) { return; }
vm.MarkModified(iep);
}
private void ExtraPropertyKeyTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (!(DataContext is ExtraPropertiesListViewModel vm)) { return; }
if (!(e.Source is TextBox textBox)) { return; }
if (!(textBox.DataContext is IExtraProperty iep)) { return; }
vm.MarkModified(iep);
var notUsed1 = new List();
var notUsed2 = new List();
vm.Validate(ref notUsed1, ref notUsed2);
}
private void ExtraProperties_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!(DataContext is ExtraPropertiesListViewModel vm)) { return; }
if (!(sender is ListView lv)) { return; }
var list = new List();
foreach (var item in lv.SelectedItems)
{
if (!(item is IExtraProperty exp))
{
continue;
}
list.Add(exp);
}
vm.SetSelection(list.ToArray());
}
private void ExtraPropertiesListView_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
var point = e.GetPosition(ExtraPropertiesListViewLV);
//we have to do multiple hittests unfortunately, because borders and rectangles...
var result = VisualTreeHelper.HitTest((UIElement)sender, point);
if (null == result) { return; }
if (!(result.VisualHit is UIElement element)) { return; }
var result2 = ExtraPropertiesListViewLV.InputHitTest(point);
if (!(result2 is UIElement element2)) { return; }
//clicking on the bottom of the listview produces a scrollviewer, if we get that we can return
if (element is ScrollViewer)
{
return;
}
var vm = (IExtraPropertiesListViewModel)DataContext;
if (element is TextBlock tb)
{
if (tb.Text == ExtraProperties.Resources.StringResources.Key) { vm?.Sort(KeyColumnHeader.Tag, true); }
if (tb.Text == ExtraProperties.Resources.StringResources.Value) { vm?.Sort(ValueColumnHeader.Tag, true); }
return;
}
if (KeyColumnHeader.IsDescendantOf(element) || KeyColumnHeader.IsDescendantOf(element2))
{
vm?.Sort(KeyColumnHeader.Tag, true);
return;
}
if (ValueColumnHeader.IsDescendantOf(element) || ValueColumnHeader.IsDescendantOf(element2))
{
vm?.Sort(ValueColumnHeader.Tag, true);
}
}
private void ExtraPropertyValueTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (!(DataContext is ExtraPropertiesListViewModel vm)) { return; }
if (!(((System.Windows.Controls.Control)e.Source).DataContext is IExtraProperty iep)) { return; }
vm.MarkModified(iep);
}
private void ExtraPropertyValueTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (!(DataContext is ExtraPropertiesListViewModel vm)) { return; }
if (!(e.Source is TextBox textBox)) { return; }
if (!(textBox.DataContext is IExtraProperty iep)) { return; }
vm.MarkModified(iep);
var notUsed1 = new List();
var notUsed2 = new List();
vm.Validate(ref notUsed1, ref notUsed2);
}
}
}