Selaa lähdekoodia

Made EmbeddedImage control able to be viewed when not enabled

Kenric Nugteren 1 vuosi sitten
vanhempi
commit
df933a2567

+ 30 - 4
inabox.wpf/DigitalForms/Designer/Controls/Fields/DFEmbeddedImageControl.cs

@@ -121,8 +121,34 @@ namespace InABox.DynamicGrid
         private Image _image = null!; // Late-initialised
         private bool _isEmpty = true;
 
+        private Button viewButton = null!;
+        private Button pasteButton = null!;
+        private Button clearButton = null!;
+        private Button selectButton = null!;
+
         private DFLayoutEmbeddedMediaValue _value = null!;
 
+        static DFEmbeddedImageControl()
+        {
+            IsEnabledProperty.OverrideMetadata(
+                typeof(DFEmbeddedImageControl),
+                new UIPropertyMetadata(
+                    true,
+                    ControlIsEnabledChanged));
+        }
+
+        private static void ControlIsEnabledChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
+        {
+            var control = (DFEmbeddedImageControl)obj;
+            control.IsEnabled = true;
+
+            var enabled = (bool)e.NewValue;
+
+            control.pasteButton.Visibility = enabled ? Visibility.Visible : Visibility.Collapsed;
+            control.clearButton.Visibility = enabled ? Visibility.Visible : Visibility.Collapsed;
+            control.selectButton.Visibility = enabled ? Visibility.Visible : Visibility.Collapsed;
+        }
+
         protected override FrameworkElement Create()
         {
             _value = new DFLayoutEmbeddedMediaValue();
@@ -156,7 +182,7 @@ namespace InABox.DynamicGrid
             };
             _border.Child = _image;
             
-            var viewButton = new Button
+            viewButton = new Button
             {
                 Content = Content = new Image { Source = Wpf.Resources.zoomin.AsBitmapImage(24, 24), Margin = new Thickness(2) },
                 Margin = new Thickness(5, 0, 0, 0),
@@ -167,7 +193,7 @@ namespace InABox.DynamicGrid
             viewButton.SetGridPosition(0,1);
             _grid.Children.Add(viewButton);
             
-            var pasteButton = new Button
+            pasteButton = new Button
             {
                 Content = Content = new Image { Source = Wpf.Resources.paste.AsBitmapImage(24, 24) },
                 Margin = new Thickness(5, 5, 0, 0),
@@ -178,7 +204,7 @@ namespace InABox.DynamicGrid
             pasteButton.SetGridPosition(2, 1);
             _grid.Children.Add(pasteButton);
 
-            var clearButton = new Button
+            clearButton = new Button
             {
                 Content = Content = new Image { Source = Wpf.Resources.delete.AsBitmapImage(24, 24) },
                 Margin = new Thickness(5, 5, 0, 0),
@@ -189,7 +215,7 @@ namespace InABox.DynamicGrid
             clearButton.SetGridPosition(3,1);
             _grid.Children.Add(clearButton);
             
-            var selectButton = new Button
+            selectButton = new Button
             {
                 Content = Content = new Image { Source = Wpf.Resources.load.AsBitmapImage(24, 24) },
                 Margin = new Thickness(5, 5, 0, 0),

+ 20 - 3
inabox.wpf/DigitalForms/Designer/Controls/Fields/DFMultiImageControl.cs

@@ -1,5 +1,6 @@
 using InABox.Core;
 using InABox.WPF;
+using NPOI.HPSF;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
@@ -120,7 +121,7 @@ namespace InABox.DynamicGrid
                 image.Source = source;
 
                 var menu = new ContextMenu();
-                menu.AddItem("View Image", null, image, MultiImageView_Click);
+                menu.AddItem("View Image", null, value, MultiImageView_Click);
                 if (Enabled)
                 {
                     menu.AddItem("Remove Image", null, ((FrameworkElement)border, value), MultiImageRemove_Click);
@@ -142,10 +143,10 @@ namespace InABox.DynamicGrid
             }
         }
 
-        private void MultiImageView_Click(Image element)
+        private void ShowImage(byte[] data)
         {
             var filename = Path.ChangeExtension(Path.GetTempFileName(), ".jpg");
-            File.WriteAllBytes(filename, EmbeddedImageUtilities.SaveImageToBytes(element, false, new JpegBitmapEncoder()) ?? Array.Empty<byte>());
+            File.WriteAllBytes(filename, data);
 
             var gsProcessInfo = new ProcessStartInfo();
             gsProcessInfo.Verb = "open";
@@ -154,6 +155,22 @@ namespace InABox.DynamicGrid
             gsProcessInfo.UseShellExecute = true;
             Process.Start(gsProcessInfo);
         }
+
+        private void MultiImageView_Click(DFLayoutEmbeddedMediaValue element)
+        {
+            if (element.Data?.Any() == true)
+            {
+                ShowImage(element.Data);
+            }
+            else
+            {
+                DigitalFormDocumentFactory.LoadDocument(element.ID, (data) =>
+                {
+                    element.Data = data;
+                    Dispatcher.BeginInvoke(() => ShowImage(data));
+                });
+            }
+        }
         private void MultiImageRemove_Click((FrameworkElement, DFLayoutEmbeddedMediaValue) element)
         {
             _value.Remove(element.Item2);