Преглед изворни кода

avalonia: Multi-image fields are now editable

Kenric Nugteren пре 1 месец
родитељ
комит
f4ee93e2e2

+ 3 - 3
PRS.Avalonia/PRS.Avalonia/Components/FormsEditor/Fields/DFEmbeddedImageFieldControl.cs

@@ -57,9 +57,9 @@ class DFEmbeddedImageFieldControl : DFEmbeddedMediaFieldControl<DFLayoutEmbedded
     private void CustomiseViewerModel(ImageViewerViewModel model)
     {
         model.Data = _value.Data!;
-        model.DeleteCommand = DeleteCommand;
-        model.CanEdit = Field.Properties.Editable;
-        model.SaveCommand = SaveCommand;
+        model.DeleteCommand = _isEnabled ? DeleteCommand : null;
+        model.CanEdit = _isEnabled && Field.Properties.Editable;
+        model.SaveCommand = _isEnabled ? SaveCommand : null;
         model.CustomiseEditor = editor =>
         {
             editor.PrimaryBrush = new SolidColorBrush(Colors.Red);

+ 3 - 2
PRS.Avalonia/PRS.Avalonia/Components/FormsEditor/Fields/DFEmbeddedMediaFieldControl.cs

@@ -25,6 +25,7 @@ abstract partial class DFEmbeddedMediaFieldControl<TField, TProperties, TValue>
     private ColumnDefinition ButtonColumn = null!;
 
     private bool _isEmpty = true;
+    protected bool _isEnabled = true;
 
     protected DFLayoutEmbeddedMediaValue _value = new();
     protected abstract bool DisableLibrary { get; }
@@ -196,8 +197,8 @@ abstract partial class DFEmbeddedMediaFieldControl<TField, TProperties, TValue>
     public override void SetEnabled(bool enabled)
     {
         ButtonColumn.Width = enabled ? GridLength.Auto : new(0);
-        Button.IsEnabled = enabled;
+        _isEnabled = enabled;
     }
 
-    public override bool GetEnabled() => Button.IsEnabled;
+    public override bool GetEnabled() => _isEnabled;
 }

+ 20 - 10
PRS.Avalonia/PRS.Avalonia/Components/FormsEditor/Fields/DFMultiImageFieldControl.cs

@@ -154,14 +154,28 @@ internal partial class DFMultiImageFieldControl : DigitalFormFieldControl<DFLayo
             _value.Remove(value);
             ChangeField();
         }) : null;
+        var saveCommand = _isEnabled ? new RelayCommand<byte[]>(data =>
+        {
+            value.Data = data;
+            value.ID = Guid.Empty;
+            value.Thumbnail = data is not null && data.Length > 0 ? PlatformTools.ImageTools.CreateThumbnail(data, 256, 256) : null;
+            ChangeField();
+        }) : null;
+        void CustomiseViewerModel(ImageViewerViewModel model)
+        {
+            model.Data = value.Data!;
+            model.DeleteCommand = deleteCommand;
+            model.CanEdit = Field.Properties.Editable && _isEnabled;
+            model.SaveCommand = saveCommand;
+            model.CustomiseEditor = editor =>
+            {
+                editor.PrimaryBrush = new SolidColorBrush(Colors.Red);
+            };
+        }
 
         if(value.Data is not null && value.Data.Length > 0)
         {
-            Navigation.Navigate<ImageViewerViewModel>(model =>
-            {
-                model.Data = value.Data;
-                model.DeleteCommand = deleteCommand;
-            });
+            Navigation.Navigate<ImageViewerViewModel>(CustomiseViewerModel);
         }
         else if(value.ID != Guid.Empty)
         {
@@ -170,11 +184,7 @@ internal partial class DFMultiImageFieldControl : DigitalFormFieldControl<DFLayo
                 data =>
                 {
                     value.Data = data;
-                    Navigation.Navigate<ImageViewerViewModel>(model =>
-                    {
-                        model.Data = value.Data;
-                        model.DeleteCommand = deleteCommand;
-                    });
+                    Navigation.Navigate<ImageViewerViewModel>(CustomiseViewerModel);
                 });
         }
     }