Przeglądaj źródła

Started on DFLayoutVideo Field

Kenric Nugteren 2 lat temu
rodzic
commit
226edf140e

+ 11 - 0
InABox.Core/DigitalForms/Layouts/Fields/DFLayoutVideoField/DFLayoutVideoField.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace InABox.Core
+{
+    [Caption("Video")]
+    public class DFLayoutVideoField : DFLayoutField<DFLayoutVideoFieldProperties>, IDFLayoutFormField, IDFBlobField
+    {
+    }
+}

+ 40 - 0
InABox.Core/DigitalForms/Layouts/Fields/DFLayoutVideoField/DFLayoutVideoFieldProperties.cs

@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace InABox.Core
+{
+    public class DFLayoutVideoFieldProperties : DFLayoutFieldProperties<byte[]>
+    {
+        public override string FormatValue(object? value)
+        {
+            return value != null ? "Yes" : "";
+        }
+
+        public override object? ParseValue(object? value)
+        {
+            if (value is byte[])
+                return value;
+
+            if (value is string str)
+            {
+                if (Guid.TryParse(str, out var id))
+                {
+                    return Array.Empty<byte>();
+                }
+
+                try
+                {
+                    return Convert.FromBase64String(str);
+                }
+                catch (Exception e)
+                {
+                    Logger.Send(LogType.Error, "", $"Error in video data; invalid Base-64: {e.Message}");
+                    return null;
+                }
+            }
+
+            return null;
+        }
+    }
+}

+ 90 - 0
inabox.wpf/DigitalForms/Designer/Controls/Fields/DFVideoControl.cs

@@ -0,0 +1,90 @@
+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<DFLayoutVideoField, DFLayoutVideoFieldProperties, byte[]>
+    {
+        Button PlayButton;
+        Button PauseButton;
+
+        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 = new GridLength(1, GridUnitType.Star) });
+            grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
+
+            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(1, 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(1, 0);
+
+            grid.Children.Add(PlayButton);
+            grid.Children.Add(PauseButton);
+
+            return grid;
+        }
+
+        private void PlayButton_Click(object sender, RoutedEventArgs e)
+        {
+            //MediaElement.Play();
+            PlayButton.Visibility = Visibility.Hidden;
+            PauseButton.Visibility = Visibility.Visible;
+        }
+
+        private void PauseButton_Click(object sender, RoutedEventArgs e)
+        {
+            //MediaElement.Pause();
+            PauseButton.Visibility = Visibility.Hidden;
+            PlayButton.Visibility = Visibility.Visible;
+        }
+
+        public override byte[] GetValue()
+        {
+            return Data ?? Array.Empty<byte>();
+        }
+
+        public override void SetValue(byte[]? value)
+        {
+            Data = value;
+        }
+
+        protected override bool IsEmpty() => Data is null || Data.Length == 0;
+    }
+}

+ 20 - 0
inabox.wpf/Resources.Designer.cs

@@ -760,6 +760,16 @@ namespace InABox.Wpf {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        public static System.Drawing.Bitmap pause_button {
+            get {
+                object obj = ResourceManager.GetObject("pause_button", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized resource of type System.Drawing.Bitmap.
         /// </summary>
@@ -780,6 +790,16 @@ namespace InABox.Wpf {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        public static System.Drawing.Bitmap play_button {
+            get {
+                object obj = ResourceManager.GetObject("play_button", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized resource of type System.Drawing.Bitmap.
         /// </summary>

+ 6 - 0
inabox.wpf/Resources.resx

@@ -328,12 +328,18 @@
   <data name="paste" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>Resources\paste.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="pause_button" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\pause-button.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
   <data name="pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>Resources\pencil.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
   <data name="Picture16" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>Resources\Picture16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="play_button" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\play-button.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
   <data name="print" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>Resources\print.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>

BIN
inabox.wpf/Resources/pause-button.png


BIN
inabox.wpf/Resources/play-button.png


+ 1 - 1
inabox.wpf/WPFUtils.cs

@@ -73,7 +73,7 @@ namespace InABox.WPF
             }
         }
        
-        public static void SetGridPosition(this FrameworkElement element, int row, int column, int rowspan, int colspan)
+        public static void SetGridPosition(this FrameworkElement element, int row, int column, int rowspan = 1, int colspan = 1)
         {
             element.SetValue(Grid.ColumnProperty, column);
             element.SetValue(Grid.ColumnSpanProperty, Math.Max(1, colspan));