// --------------------------------------------------------------------------------------------------------------------
//
// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
//
//
// Interaction logic for MetaDataView.xaml
//
// --------------------------------------------------------------------------------------------------------------------
namespace HandBrakeWPF.Views
{
using HandBrakeWPF.Helpers;
using HandBrakeWPF.Services.Encode.Model.Models;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
///
/// Interaction logic for MetaDataView.xaml
///
public partial class MetaDataView : UserControl
{
///
/// Initializes a new instance of the class.
///
public MetaDataView()
{
this.InitializeComponent();
}
private void MetadataValue_OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
{
TextBox tb = sender as TextBox;
if (tb != null)
{
MetaDataValue c = tb.DataContext as MetaDataValue;
ListView lv = VisualTreeUtils.FindAncestor(tb);
if (lv != null && c != null)
{
lv.SelectedItem = c;
}
}
}
private void MetadataList_OnKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
this.metadataList.Focus();
this.metadataList.SelectedIndex += 1; // increase
this.metadataList.ScrollIntoView(this.metadataList.SelectedItem);
// Attempt to focus and select the text box text.
ItemContainerGenerator generator = this.metadataList.ItemContainerGenerator;
ListViewItem selectedItem = generator.ContainerFromIndex(this.metadataList.SelectedIndex) as ListViewItem;
if (selectedItem != null)
{
IInputElement firstFocusable = FindFirstFocusableElement(selectedItem);
if (firstFocusable != null)
{
firstFocusable.Focus();
TextBox textbox = firstFocusable as TextBox;
if (textbox != null)
{
textbox.SelectAll();
}
}
}
}
}
private IInputElement FindFirstFocusableElement(DependencyObject obj)
{
IInputElement firstFocusable = null;
int count = VisualTreeHelper.GetChildrenCount(obj);
for (int i = 0; i < count && null == firstFocusable; i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
firstFocusable = child is IInputElement inputElement && inputElement.Focusable
? inputElement
: this.FindFirstFocusableElement(child);
}
return firstFocusable;
}
}
}