using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using DTS.Common.Controls; using DTS.Common.Enums.Channels; using DTS.Common.Interface.Channels.ChannelCodes; using DTS.Common.Utils; // ReSharper disable CheckNamespace namespace ChannelCodes { /// /// /// Interaction logic for ChannelCodesListView.xaml /// public partial class ChannelCodesListView : IChannelCodesListView { public ChannelCodesListView() { InitializeComponent(); } private void GridViewColumnHeaderSearchable_OnSearch(object sender, RoutedEventArgs e) { var searchTerm = (string)e.OriginalSource; var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag; var viewModel = (IChannelCodesListViewModel)DataContext; viewModel.Filter(columnTag, searchTerm); } //private void ChannelType_SelectionChanged(object sender, SelectionChangedEventArgs e) //{ // if( e.RemovedItems.Count == 0) { return; } // if( !(DataContext is ChannelCodesListViewModel vm)) { return; } // if( !(((System.Windows.Controls.Control) e.Source).DataContext is IChannelCode channelCode)) { return; } // vm.MarkModified(channelCode); //} private void GridViewColumnHeader_OnClick(object sender, RoutedEventArgs e) { var vm = (IChannelCodesListViewModel)DataContext; var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag ?? Utils.FindChild((DependencyObject)e.OriginalSource, null)?.Tag; vm?.Sort(columnTag, true); } private void ChannelCodeTextBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) { if (!(DataContext is ChannelCodesListViewModel vm)) { return; } if (!(((System.Windows.Controls.Control)e.Source).DataContext is IChannelCode channelCode)) { return; } vm.MarkModified(channelCode); } private void ChannelCodeTextBoxUser_TextChanged(object sender, TextChangedEventArgs e) { if (!(DataContext is ChannelCodesListViewModel vm)) { return; } if (!(sender is Control control)) { return; } if (!(control.DataContext is IChannelCode channelCode)) { return; } var notUsed1 = new List(); var notUsed2 = new List(); vm.MarkModified(channelCode); vm.ValidateUser(ref notUsed1, ref notUsed2); } private void ChannelCodeTextBoxIso_TextChanged(object sender, TextChangedEventArgs e) { if (!(DataContext is ChannelCodesListViewModel vm)) { return; } if (!(sender is Control control)) { return; } if (!(control.DataContext is IChannelCode channelCode)) { return; } vm.MarkModified(channelCode); var notUsed1 = new List(); var notUsed2 = new List(); vm.ValidateISO(ref notUsed1, ref notUsed2); } private void DisplayNameTextBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) { if (!(DataContext is ChannelCodesListViewModel vm)) { return; } if (!(((System.Windows.Controls.Control)e.Source).DataContext is IChannelCode channelCode)) { return; } vm.MarkModified(channelCode); } private void DisplayNameTextBoxUser_TextChanged(object sender, TextChangedEventArgs e) { if (!(DataContext is ChannelCodesListViewModel vm)) { return; } if (!(e.Source is TextBox textBox)) { return; } if (!(textBox.DataContext is IChannelCode channelCode)) { return; } vm.MarkModified(channelCode); var notUsed1 = new List(); var notUsed2 = new List(); vm.ValidateUser(ref notUsed1, ref notUsed2); } private void DisplayNameTextBoxIso_TextChanged(object sender, TextChangedEventArgs e) { if (!(DataContext is ChannelCodesListViewModel vm)) { return; } if (!(e.Source is TextBox textBox)) { return; } if (!(textBox.DataContext is IChannelCode channelCode)) { return; } vm.MarkModified(channelCode); var notUsed1 = new List(); var notUsed2 = new List(); vm.ValidateISO(ref notUsed1, ref notUsed2); } private void ISO_Checked(object sender, RoutedEventArgs e) { if (!(DataContext is ChannelCodesListViewModel vm)) { return; } vm.ViewMode = ChannelCodesListViewModel.ViewModes.ISO; } private void User_Checked(object sender, RoutedEventArgs e) { if (!(DataContext is ChannelCodesListViewModel vm)) { return; } vm.ViewMode = ChannelCodesListViewModel.ViewModes.User; } private void ISOCodes_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!(DataContext is ChannelCodesListViewModel vm)) { return; } if (!(sender is ListView lv)) { return; } var list = new List(); foreach (var item in lv.SelectedItems) { if (!(item is IChannelCode code)) { continue; } list.Add(code); } vm.SetISOSelection(list.ToArray()); } private void UserCodes_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!(DataContext is ChannelCodesListViewModel vm)) { return; } if (!(sender is ListView lv)) { return; } var list = new List(); foreach (var item in lv.SelectedItems) { if (!(item is IChannelCode code)) { continue; } list.Add(code); } vm.SetUserSelection(list.ToArray()); } private void ChannelCodeBuilder_OnChannelCodeSelected(object sender, string code, string name, ChannelEnumsAndConstants.ChannelCodeType codetype) { if (!(DataContext is ChannelCodesListViewModel viewModel)) { return; } if (!(sender is Control control)) { return; } if (!(control.DataContext is IChannelCode channelCode)) { return; } channelCode.Code = code; if (string.IsNullOrWhiteSpace(channelCode.Name)) { channelCode.Name = name; } viewModel.MarkModified(channelCode); } private void ISOChannelCodesListView_PreviewMouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e) { var point = e.GetPosition(ISOChannelCodesListView); //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 = ISOChannelCodesListView.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 = (IChannelCodesListViewModel)DataContext; if (element is TextBlock tb) { if (tb.Text == ChannelCodes.Resources.StringResources.ISOCode) { vm?.Sort(ISOCodeColumnHeader.Tag, true); } if (tb.Text == ChannelCodes.Resources.StringResources.ISOChannelName) { vm?.Sort(ISOChannelNameColumnHeader.Tag, true); } return; } if (ISOCodeColumnHeader.IsDescendantOf(element) || ISOCodeColumnHeader.IsDescendantOf(element2)) { vm?.Sort(ISOCodeColumnHeader.Tag, true); return; } if (ISOChannelNameColumnHeader.IsDescendantOf(element) || ISOChannelNameColumnHeader.IsDescendantOf(element2)) { vm?.Sort(ISOChannelNameColumnHeader.Tag, true); } } private void UserChannelCodesListView_PreviewMouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e) { var point = e.GetPosition(UserChannelCodesListView); //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 = UserChannelCodesListView.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 = (IChannelCodesListViewModel)DataContext; if (element is TextBlock tb) { if (tb.Text == ChannelCodes.Resources.StringResources.UserCode) { vm?.Sort(UserCodeColumnHeader.Tag, true); } if (tb.Text == ChannelCodes.Resources.StringResources.UserChannelName) { vm?.Sort(UserChannelNameColumnHeader.Tag, true); } return; } if (UserCodeColumnHeader.IsDescendantOf(element) || UserCodeColumnHeader.IsDescendantOf(element2)) { vm?.Sort(UserCodeColumnHeader.Tag, true); return; } if (UserChannelNameColumnHeader.IsDescendantOf(element) || UserChannelNameColumnHeader.IsDescendantOf(element2)) { vm?.Sort(UserChannelNameColumnHeader.Tag, true); } } //FB 25725 ISO selection has been changed, update the iso selection private void DisplayNameTextBoxIso_SelectionChanged(object sender, RoutedEventArgs e) { if (!(DataContext is ChannelCodesListViewModel vm)) { return; } if (!(((Control)e.Source).DataContext is IChannelCode channelCode)) { return; } vm.SetISOSelection(new List { channelCode }.ToArray()); } //FB 25725 ISO selection has been changed, update the iso selection private void ChannelCodeBuilder_SelectionChanged(object sender, RoutedEventArgs e) { if (!(DataContext is ChannelCodesListViewModel vm)) { return; } if (!(sender is Control control)) { return; } if (!(control.DataContext is IChannelCode channelCode)) { return; } vm.SetISOSelection(new List { channelCode }.ToArray()); } //FB 25725 User code selection has been changed, update the user code selection private void DisplayNameTextBoxUser_SelectionChanged(object sender, RoutedEventArgs e) { if (!(DataContext is ChannelCodesListViewModel vm)) { return; } if (!(((Control)e.Source).DataContext is IChannelCode channelCode)) { return; } vm.SetUserSelection(new List { channelCode }.ToArray()); } //FB 25725 User code selection has been changed, update the user code selection private void ChannelCodeTextBoxUser_SelectionChanged(object sender, RoutedEventArgs e) { if (!(DataContext is ChannelCodesListViewModel vm)) { return; } if (!(sender is Control control)) { return; } if (!(control.DataContext is IChannelCode channelCode)) { return; } vm.SetUserSelection(new List { channelCode }.ToArray()); } } }