using InABox.Core; using InABox.WPF; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; namespace InABox.DynamicGrid { public class DFVideoControl : DynamicFormFieldControl { Button PlayButton; Button PauseButton; MediaElement Player; bool firstPlay = true; byte[]? Data; protected override FrameworkElement Create() { var grid = new Grid(); grid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto }); grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); PlayButton = new Button { Width = 25, Height = 25, Margin = new Thickness(5) }; PlayButton.Content = new Image { Source = Wpf.Resources.play_button.AsBitmapImage(), }; PlayButton.Click += PlayButton_Click; PlayButton.SetGridPosition(0, 0); PauseButton = new Button { Width = 25, Height = 25, Margin = new Thickness(5), Visibility = Visibility.Hidden }; PauseButton.Content = new Image { Source = Wpf.Resources.pause_button.AsBitmapImage() }; PauseButton.Click += PauseButton_Click; PauseButton.SetGridPosition(0, 0); Player = new MediaElement(); Player.Stretch = System.Windows.Media.Stretch.Fill; Player.Visibility = Visibility.Visible; Player.SetGridPosition(1, 0, 1, 2); grid.Children.Add(PlayButton); grid.Children.Add(PauseButton); grid.Children.Add(Player); return grid; } private void PlayButton_Click(object sender, RoutedEventArgs e) { var path = System.IO.Path.GetTempFileName(); path = path.Substring(0, path.Length - 4) + ".mp4"; System.IO.File.WriteAllBytes(path, GetValue()); Player.Source = new Uri(path); firstPlay = false; } private void PauseButton_Click(object sender, RoutedEventArgs e) { Player.Pause(); PauseButton.Visibility = Visibility.Hidden; PlayButton.Visibility = Visibility.Visible; } public override byte[] GetValue() { return Data ?? Array.Empty(); } public override void SetValue(byte[]? value) { Data = value; } protected override bool IsEmpty() => Data is null || Data.Length == 0; } }