Browse Source

Removed DocumentApprovalControl; fixed the fact that cut, copy and paste were visible in non-editable situations for sequenceable grids.

Kenric Nugteren 1 year ago
parent
commit
0d0a10d0da

+ 4 - 4
inabox.wpf/DynamicGrid/DynamicGrid.cs

@@ -769,10 +769,10 @@ namespace InABox.DynamicGrid
             Print.Visibility = HasOption(DynamicGridOption.Print) ? Visibility.Visible : Visibility.Collapsed;
             PrintSpacer.Visibility = HasOption(DynamicGridOption.Print) ? Visibility.Visible : Visibility.Collapsed;
 
-            Cut.Visibility = IsSequenced ? Visibility.Visible : Visibility.Collapsed;
-            Copy.Visibility = IsSequenced ? Visibility.Visible : Visibility.Collapsed;
-            Paste.Visibility = IsSequenced ? Visibility.Visible : Visibility.Collapsed;
-            ClipboardSpacer.Visibility = IsSequenced ? Visibility.Visible : Visibility.Collapsed;
+            Cut.Visibility = IsSequenced && HasOption(DynamicGridOption.EditRows) ? Visibility.Visible : Visibility.Collapsed;
+            Copy.Visibility = IsSequenced && HasOption(DynamicGridOption.EditRows) ? Visibility.Visible : Visibility.Collapsed;
+            Paste.Visibility = IsSequenced && HasOption(DynamicGridOption.EditRows) ? Visibility.Visible : Visibility.Collapsed;
+            ClipboardSpacer.Visibility = IsSequenced && HasOption(DynamicGridOption.EditRows) ? Visibility.Visible : Visibility.Collapsed;
 
             Export.Visibility = HasOption(DynamicGridOption.ExportData) ? Visibility.Visible : Visibility.Collapsed;
             Import.Visibility = HasOption(DynamicGridOption.ImportData) ? Visibility.Visible : Visibility.Collapsed;

+ 0 - 31
inabox.wpf/DynamicGrid/PDF/DocumentApprovalControl.xaml

@@ -1,31 +0,0 @@
-<UserControl x:Class="InABox.Wpf.DocumentApprovalControl"
-             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
-             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
-             mc:Ignorable="d" 
-             d:DesignHeight="450" d:DesignWidth="800">
-    <Grid>
-        <Grid.RowDefinitions>
-            <RowDefinition Height="*"/>
-            <RowDefinition Height="auto"/>
-        </Grid.RowDefinitions>
-        <ScrollViewer VerticalScrollBarVisibility="Auto" Grid.Row="0">
-            <StackPanel x:Name="viewer" Orientation="Vertical" Margin="10"/>
-        </ScrollViewer>
-
-        <Border Grid.Row="1" BorderBrush="Gray" BorderThickness="0.5">
-            <Grid>
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="auto"/>
-                    <ColumnDefinition Width="*"/>
-                </Grid.ColumnDefinitions>
-                <Button Grid.Column="0" Content="Mark Up" HorizontalAlignment="Left" Height="35" Padding="20, 5, 20, 5" Margin="5" x:Name="markUpButton" Click="MarkUpButton_Click" IsEnabled="False"/>
-                <StackPanel Grid.Column="1" Orientation="Horizontal"  HorizontalAlignment="Right">
-                    <Button Grid.Column="1" Content="Approve" HorizontalAlignment="Right" Height="35" Padding="20, 5, 20, 5" Margin="5" x:Name="approveButton" Click="ApproveButton_Click"/>
-                    <Button Grid.Column="2" Content="Reject" HorizontalAlignment="Right" Height="35" Padding="20, 5, 20, 5" Margin="5, 5, 15, 5" x:Name="rejectButton" Click="RejectButton_Click" IsEnabled="False"/>
-                </StackPanel>
-            </Grid>
-        </Border>
-    </Grid>
-</UserControl>

+ 0 - 155
inabox.wpf/DynamicGrid/PDF/DocumentApprovalControl.xaml.cs

@@ -1,155 +0,0 @@
-using InABox.Clients;
-using InABox.Core;
-using InABox.DynamicGrid;
-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;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
-
-namespace InABox.Wpf
-{
-    /// <summary>
-    /// Interaction logic for DocumentApprovalControl.xaml
-    /// </summary>
-    public partial class DocumentApprovalControl : UserControl, IDocumentEditor
-    {
-        public delegate void MarkupSelected(IEntityDocument? document);
-        public event MarkupSelected? OnMarkupSelected;
-
-        public delegate void MarkupComplete(IEntityDocument? document);
-        public event MarkupComplete? OnMarkupComplete;
-
-        public delegate void Approved(IEntityDocument? document);
-        public event Approved? OnApproved;
-
-        public delegate void Rejected(IEntityDocument? document);
-        public event Rejected? OnRejected;
-        public enum ControlMode
-        {
-            Markup,
-            Complete,
-            Locked
-        }
-
-        ControlMode _mode;
-
-        public ControlMode Mode
-        {
-            get => _mode;
-            set
-            {
-                _mode = value;
-                if (_mode == ControlMode.Markup)
-                {
-                    markUpButton.Content = "Mark Up";
-                    markUpButton.IsEnabled = Document != null;
-                    approveButton.IsEnabled = Document != null;
-                    rejectButton.IsEnabled = Document != null;
-                }
-                else if (_mode == ControlMode.Complete)
-                {
-                    markUpButton.Content = "Complete";
-                    markUpButton.IsEnabled = Document != null;
-                    approveButton.IsEnabled = false;
-                    rejectButton.IsEnabled = false;
-                }
-                else if (_mode == ControlMode.Locked)
-                {
-                    markUpButton.Content = "Locked";
-                    markUpButton.IsEnabled = false;
-                    approveButton.IsEnabled = false;
-                    rejectButton.IsEnabled = false;
-                }
-            }
-        }
-
-        public void SetupButtons(bool markupVisible = true, bool approveVisible = true, bool rejectVisible = true)
-        { 
-            markUpButton.Visibility = markupVisible? Visibility.Visible : Visibility.Collapsed;
-            approveButton.Visibility = approveVisible? Visibility.Visible : Visibility.Collapsed;
-            rejectButton.Visibility = rejectVisible? Visibility.Visible : Visibility.Collapsed;
-        }
-
-        private IEntityDocument? _document;
-        public IEntityDocument? Document
-        {
-            get => _document;
-            set
-            {
-                _document = value;
-                Render();
-            }
-        }
-        public DocumentApprovalControl()
-        {
-            InitializeComponent();
-            Mode = ControlMode.Markup;
-        }
-
-
-       /// <summary>
-       /// This currently only caters to PDFs - add to this if needed to account for other document types
-       /// </summary>
-        private void Render()
-        {
-            viewer.Children.Clear();
-            if(Document is null)
-            {
-                return;
-            }
-
-            var table = new Client<Document>().Query(
-                new Filter<Document>(x => x.ID).IsEqualTo(Document.DocumentLink.ID),
-                new Columns<Document>(x => x.Data));
-            var first = table.Rows.FirstOrDefault();
-            if (first is null)
-                return;
-            var data = first.Get<Document, byte[]>(x => x.Data);
-            var images = ImageUtils.RenderPDFToImages(data);
-            foreach (var image in images)
-            {
-                viewer.Children.Add(new Image
-                {
-                    Source = ImageUtils.LoadImage(image),
-                    Margin = new Thickness(0, 0, 0, 20)
-                });
-            }
-        }
-
-        private void MarkUpButton_Click(object sender, RoutedEventArgs e)
-        {
-            if (Mode == ControlMode.Markup)
-            {
-                Mode = ControlMode.Complete;
-                MessageBox.Show("IMPORTANT - press save in your document editor, then press the Complete Button in PRS");
-                OnMarkupSelected?.Invoke(Document);
-            }
-            else
-            {
-                OnMarkupComplete?.Invoke(Document);
-                Mode = ControlMode.Markup;
-            }
-        }
-
-        private void ApproveButton_Click(object sender, RoutedEventArgs e)
-        {
-            OnApproved?.Invoke(Document);
-        }
-
-        private void RejectButton_Click(object sender, RoutedEventArgs e)
-        {
-            OnRejected?.Invoke(Document);
-        }
-    }
-}

+ 39 - 0
inabox.wpf/ImageUtils.cs

@@ -21,6 +21,8 @@ using System.Drawing;
 using System.Collections.Generic;
 using System;
 using System.Linq;
+using Syncfusion.Pdf.Graphics;
+using Syncfusion.Pdf;
 
 namespace InABox.WPF
 {
@@ -837,6 +839,43 @@ namespace InABox.WPF
             return rendered;
         }
 
+        public static List<byte[]> RenderTextFileToImages(string textData)
+        {
+            var pdfDocument = new PdfDocument();
+            var page = pdfDocument.Pages.Add();
+
+            var font = new PdfStandardFont(PdfFontFamily.Courier, 14);
+            var textElement = new PdfTextElement(textData, font);
+            var layoutFormat = new PdfLayoutFormat
+            {
+                Layout = PdfLayoutType.Paginate,
+                Break = PdfLayoutBreakType.FitPage
+            };
+
+            textElement.Draw(page, new RectangleF(0, 0, page.GetClientSize().Width, page.GetClientSize().Height), layoutFormat);
+
+            using var docStream = new MemoryStream();
+            pdfDocument.Save(docStream);
+
+            var loadeddoc = new PdfLoadedDocument(docStream.ToArray());
+            Bitmap[] bmpImages = loadeddoc.ExportAsImage(0, loadeddoc.Pages.Count - 1);
+
+            var jpgEncoder = GetEncoder(ImageFormat.Jpeg)!;
+            var quality = Encoder.Quality;
+            var encodeParams = new EncoderParameters(1);
+            encodeParams.Param[0] = new EncoderParameter(quality, 100L);
+
+            var images = new List<byte[]>();
+            if (bmpImages != null)
+                foreach (var image in bmpImages)
+                {
+                    using var data = new MemoryStream();
+                    image.Save(data, jpgEncoder, encodeParams);
+                    images.Add(data.ToArray());
+                }
+            return images;
+        }
+
         public static ContentControl CreatePreviewWindowButtonContent(string caption, Bitmap bitmap)
         {
             Frame frame = new Frame();