Parcourir la source

裁剪-Undo Redo,填写前面BUG

liyijie il y a 2 ans
Parent
commit
9c4c3661a7

+ 68 - 9
PDF Office/Helper/CropPageUndoManager.cs

@@ -1,4 +1,6 @@
-using ComPDFKitViewer;
+using ComPDFKit.Import;
+using ComPDFKit.PDFPage;
+using ComPDFKitViewer;
 using ComPDFKitViewer.PdfViewer;
 using Microsoft.Office.Core;
 using System;
@@ -6,6 +8,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using System.Windows;
 
 namespace PDF_Master.Helper
 {
@@ -15,6 +18,60 @@ namespace PDF_Master.Helper
         CropAllPagesWM
     }
 
+    public class AreaCropPageUndoManager : IHistory
+    {
+        private CPDFViewer pdfviewer = null;
+
+        private List<Tuple<List<int>, Rect,Size>> history = new List<Tuple<List<int>, Rect, Size>>();
+
+        private int historyIndex = -1;
+
+        public AreaCropPageUndoManager(CPDFViewer pDFViewer) {
+            pdfviewer = pDFViewer;
+        }
+
+       
+
+        public void ADDAreaCropPage(List<int> pageindex, Rect rect,Size pagesize)
+        {
+            historyIndex++;
+            history.Add(new Tuple<List<int>, Rect, Size>(pageindex, rect, pagesize));
+        }
+
+        public bool Redo()
+        {
+            historyIndex++;
+            if (historyIndex < history.Count)
+            {
+                pdfviewer?.CropPage(CPDFDisplayBox.CropBox, history[historyIndex].Item2, history[historyIndex].Item1);
+                pdfviewer.UndoManager.CanSave = true;
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+
+        }
+
+        public bool Undo()
+        {
+            if (historyIndex > -1)
+            {
+                Rect newRect =new Rect( -history[historyIndex].Item2.Left, -history[historyIndex].Item2.Top, history[historyIndex].Item3.Width+ history[historyIndex].Item2.Left, history[historyIndex].Item3.Height + history[historyIndex].Item2.Top);
+                pdfviewer?.CropPage(CPDFDisplayBox.CropBox, newRect, history[historyIndex].Item1);
+                historyIndex--;
+                pdfviewer.UndoManager.CanSave = true;
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+
+        }
+    }
+
     public class CropPageUndoManager : IHistory
     {
         public List<int> cropPageList = new List<int>();
@@ -43,8 +100,8 @@ namespace PDF_Master.Helper
             cropPageEnumList.Insert(cropPageEnumIndex, CropPageEnum.CropCurrentPageWM);
             if (cropPageEnumIndex != cropPageEnumList.Count - 1)
             {
-                cropPageEnumList.RemoveRange(cropPageEnumIndex + 1, cropPageEnumList.Count - cropPageEnumIndex-1);
-                cropPageList.RemoveRange(cropPageList.Count - cropPageListInterval-1, cropPageListInterval);
+                cropPageEnumList.RemoveRange(cropPageEnumIndex + 1, cropPageEnumList.Count - cropPageEnumIndex - 1);
+                cropPageList.RemoveRange(cropPageList.Count - cropPageListInterval - 1, cropPageListInterval);
                 cropPageListInterval = 0;
             }
 
@@ -57,11 +114,11 @@ namespace PDF_Master.Helper
             cropPageEnumList.Insert(cropPageEnumIndex, CropPageEnum.CropAllPagesWM);
             if (cropPageEnumIndex != cropPageEnumList.Count - 1)
             {
-                cropPageEnumList.RemoveRange(cropPageEnumIndex+1, cropPageEnumList.Count - cropPageEnumIndex-1);
-                cropPageList.RemoveRange(cropPageList.Count - cropPageListInterval- pdfviewer.Document.PageCount, cropPageListInterval);
+                cropPageEnumList.RemoveRange(cropPageEnumIndex + 1, cropPageEnumList.Count - cropPageEnumIndex - 1);
+                cropPageList.RemoveRange(cropPageList.Count - cropPageListInterval - pdfviewer.Document.PageCount, cropPageListInterval);
                 cropPageListInterval = 0;
             }
-            
+
         }
 
         public void setPageList(List<int> CropPageList)
@@ -72,12 +129,13 @@ namespace PDF_Master.Helper
         public bool Redo()
         {
             cropPageEnumIndex++;
-            if (cropPageEnumIndex < cropPageEnumList.Count )
+            if (cropPageEnumIndex < cropPageEnumList.Count)
             {
-                
+
                 if (cropPageEnumList[cropPageEnumIndex] == CropPageEnum.CropAllPagesWM) { cropPageListInterval -= pdfviewer.Document.PageCount; } else { cropPageListInterval--; }
-                
+
                 if (cropPageList.Count - cropPageListInterval == 0) { pdfviewer.SetCropMode(false); } else { pdfviewer.SetCropMode(true, cropPageList.GetRange(0, cropPageList.Count - cropPageListInterval)); }
+                pdfviewer.UndoManager.CanSave = true;
                 return true;
             }
             else
@@ -101,6 +159,7 @@ namespace PDF_Master.Helper
                 if (cropPageList.Count - cropPageListInterval == 0) { pdfviewer.SetCropMode(false); } else { pdfviewer.SetCropMode(true, cropPageList.GetRange(0, cropPageList.Count - cropPageListInterval)); }
 
                 cropPageEnumIndex--;
+                pdfviewer.UndoManager.CanSave = true;
                 return true;
             }
             else

+ 1 - 0
PDF Office/ViewModels/FillAndSign/FillAndSignContentViewModel.cs

@@ -1674,6 +1674,7 @@ namespace PDF_Master.ViewModels.FillAndSign
             }
             else
             {
+                if(PDFViewer.MouseMode != MouseModes.AnnotCreate)
                 viewContentViewModel.SelectedPrpoertyPanel("PropertyPanelContent", null);
             }
         }

+ 16 - 16
PDF Office/ViewModels/FillAndSign/PropertyPanel/ShapFillPropertyViewModel.cs

@@ -56,21 +56,7 @@ namespace PDF_Master.ViewModels.FillAndSign.PropertyPanel
             set
             {
                 SetProperty(ref selectColor, value);
-                if (!fillAndSignContentViewModel.isFirst)
-                {
-                    fillAndSignContentViewModel.SelectColor = value;
-                    //if (FillAndSignContentViewModel.IsEdit)
-                    {
-                        PropertyPanel.UpdateAnnotAAttrib(AnnotAttrib.Thickness, LineWidth * lineWidthMultiple);
-                        PropertyPanel.UpdateAnnotAAttrib(AnnotAttrib.Color, (selectColor as SolidColorBrush).Color);
-                    }
-                    //else
-                    {
-                        if(IsFillAndSign) { fillAndSignContentViewModel.SetStamp(); }
-                        
-                    }
-
-                }
+                
 
             }
         }
@@ -463,7 +449,21 @@ namespace PDF_Master.ViewModels.FillAndSign.PropertyPanel
 
                     SelectColor = new SolidColorBrush(colorValue);
                     SelectColor.Opacity = FillOpacity;
-
+                    if (!fillAndSignContentViewModel.isFirst)
+                    {
+                        fillAndSignContentViewModel.SelectColor = SelectColor;
+                        //if (FillAndSignContentViewModel.IsEdit)
+                        {
+                            PropertyPanel.UpdateAnnotAAttrib(AnnotAttrib.Thickness, LineWidth * lineWidthMultiple);
+                            PropertyPanel.UpdateAnnotAAttrib(AnnotAttrib.Color, (SelectColor as SolidColorBrush).Color);
+                        }
+                        //else
+                        {
+                            if (IsFillAndSign) { fillAndSignContentViewModel.SetStamp(); }
+
+                        }
+
+                    }
                     Dictionary<AnnotArgsType, object> changeData = new Dictionary<AnnotArgsType, object>();
                     changeData[AnnotArgsType.AnnotFreehand] = obj;
                     //PropertyPanel.DataChangedInvoke(this, changeData);

+ 7 - 2
PDF Office/ViewModels/PropertyPanel/AnnotPanel/SnapshotEditMenuViewModel.cs

@@ -42,6 +42,8 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
         public SnapshotEditToolArgs SnapToolArgs { get; set; }
         public CPDFViewer PDFViewer { get; set; }
 
+        public AreaCropPageUndoManager areaCropPageUndoManager;
+
         private CPDFViewer saveToPDFViewer = new CPDFViewer();
 
         public event EventHandler<KeyValuePair<string, object>> SnapToolEvent;
@@ -107,9 +109,12 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
                 Rect rect = SnapToolArgs.GetSnapshotPDFRect(out int CurrentIndex);
                 List<int> cropPageList = new List<int>();
                 cropPageList.Add(CurrentIndex);
-                PDFViewer?.CropPage(0, rect, cropPageList);
+                areaCropPageUndoManager.ADDAreaCropPage(cropPageList, rect, PDFViewer.Document.GetPageSize(cropPageList[0]));
+                PDFViewer?.CropPage(CPDFDisplayBox.CropBox, rect, cropPageList);
                 PDFViewer.GoToPage(CurrentIndex);
-
+                //Rect rect1 = new Rect(-rect.Left, -rect.Top, PDFViewer.Document.GetPageSize(7).Width + rect.Left, PDFViewer.Document.GetPageSize(7).Height + rect.Top);
+                //PDFViewer?.CropPage(CPDFDisplayBox.CropBox, rect1, cropPageList);
+                PDFViewer.UndoManager.AddHistory(areaCropPageUndoManager);
                 PDFViewer.UndoManager.CanSave = true;
                 PDFViewer.SetMouseMode(MouseModes.PanTool);
                 if (SnapToolEvent != null)

+ 2 - 0
PDF Office/ViewModels/Tools/AnnotToolContentViewModel.Command.cs

@@ -11,6 +11,7 @@ using PDF_Master.Helper;
 using PDF_Master.Model.AnnotPanel;
 using PDF_Master.Properties;
 using PDF_Master.ViewModels.BOTA;
+using PDF_Master.ViewModels.PropertyPanel.AnnotPanel;
 using PDF_Master.ViewModels.Tools.AnnotManager;
 using PDF_Master.Views.BOTA;
 using PDFSettings;
@@ -753,6 +754,7 @@ namespace PDF_Master.ViewModels.Tools
 
             SnapshotEditMenuViewModel.SnapToolArgs = snapToolArgs;
             SnapshotEditMenuViewModel.PDFViewer = PDFViewer;
+            SnapshotEditMenuViewModel.areaCropPageUndoManager = new AreaCropPageUndoManager(PDFViewer);
             SnapshotEditMenuViewModel.SnapToolEvent -= SnapshotEditMenuViewModel_SnapToolEvent; ;
             SnapshotEditMenuViewModel.SnapToolEvent += SnapshotEditMenuViewModel_SnapToolEvent;
             var popMenu = App.Current.FindResource("SnapshotContextMenu") as ContextMenu;