Browse Source

综合-注释-链接bug修复、手绘

OYXH\oyxh 2 years ago
parent
commit
fef47bc582

+ 18 - 0
PDF Office/EventAggregators/LinkAnnotTipCloseEvent.cs

@@ -0,0 +1,18 @@
+using Prism.Events;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PDF_Master.EventAggregators
+{
+    internal class LinkAnnotTipCloseEvent : PubSubEvent<LinkAnnotTipCloseArgs>
+    {
+    }
+
+    internal class LinkAnnotTipCloseArgs
+    {
+        public string UniCode { get; set; }
+    }
+}

+ 1 - 0
PDF Office/PDF Master.csproj

@@ -362,6 +362,7 @@
     <Compile Include="EventAggregators\CleanSelectAllEvent.cs" />
     <Compile Include="EventAggregators\EditToolsEvent.cs" />
     <Compile Include="EventAggregators\FillAndSignEvent.cs" />
+    <Compile Include="EventAggregators\LinkAnnotTipCloseEvent.cs" />
     <Compile Include="EventAggregators\PageEditNotifyEvent.cs" />
     <Compile Include="EventAggregators\PageEditRefreshEvent.cs" />
     <Compile Include="EventAggregators\RedactionCommandEvent.cs" />

+ 14 - 21
PDF Office/ViewModels/PropertyPanel/AnnotPanel/FreehandAnnotPropertyViewModel.cs

@@ -46,20 +46,21 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
     {
         #region 文案
 
-
         private void InitString()
         {
-
         }
 
-        #endregion
+        #endregion 文案
 
         #region 属性
+
         //手绘画笔橡皮擦的大小列表
         public List<ComboDataItem> PenSizeItems { get; protected set; }
+
         public List<ComboDataItem> EraserSizeItems { get; protected set; }
 
         private AnnotCommon _basicVm = new AnnotCommon();
+
         public AnnotCommon BasicVm
         {
             get { return _basicVm; }
@@ -67,6 +68,7 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
         }
 
         private bool _isPen = true;
+
         public bool IsPen
         {
             get { return _isPen; }
@@ -74,6 +76,7 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
         }
 
         private double _erasethicknessLine = 10;
+
         public double EraseThicknessLine
         {
             get { return _erasethicknessLine; }
@@ -81,6 +84,7 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
         }
 
         private DoubleCollection _strokeDashArray = new DoubleCollection();
+
         public DoubleCollection StrokeDashArray
         {
             get { return _strokeDashArray; }
@@ -152,7 +156,6 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
             EraserSizeItems.Add(item);
             item = new ComboDataItem(20, "pt");
             EraserSizeItems.Add(item);
-
         }
 
         private void InitColorItems()
@@ -173,11 +176,10 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
 
                     PropertyPanel.UpdateAnnotAAttrib(AnnotAttrib.Color, colorValue);
 
-                    if (BasicVm.IsMultiSelected == false)
-                    {
-                        PropertyPanel.InvokeToMyTools(AnnotArgsType.AnnotFreehand, colorValue);
-                    }
-
+                    //if (BasicVm.IsMultiSelected == false)
+                    //{
+                    //    PropertyPanel.InvokeToMyTools(AnnotArgsType.AnnotFreehand, colorValue);
+                    //}
                 }
             }
         }
@@ -234,9 +236,7 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
                     case "Solid":
                         PropertyPanel.UpdateAnnotAAttrib(AnnotAttrib.LineStyle, DashStyles.Solid);
                         break;
-
                 }
-
             }
         }
 
@@ -267,6 +267,7 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
         }
 
         private FreehandAnnotArgs CurrenFreeHandAnnot;//用来切换橡皮擦时,保存当前的手绘;
+
         //选择画笔
         private void Pen_Command(object obj)
         {
@@ -286,7 +287,6 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
             }
         }
 
-
         public bool IsNavigationTarget(NavigationContext navigationContext)
         {
             return true;
@@ -297,8 +297,6 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
             BasicVm.IsMultiSelected = false;
         }
 
-
-
         public void OnNavigatedTo(NavigationContext navigationContext)
         {
             navigationContext.Parameters.TryGetValue<AnnotTransfer>(ParameterNames.PropertyPanelContentViewModel, out PropertyPanel);
@@ -325,7 +323,6 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
                 {
                     GetAnnotProperty();
                 }
-
             }
         }
 
@@ -346,6 +343,7 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
             else
                 return Lists;
         }
+
         private void IsAttributeEquals()
         {
             var list = ConvertLists();
@@ -372,7 +370,6 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
                         }
                     }
 
-
                     if (isNoEqualsDir["Thickness"] == false)
                     {
                         isNoEqualsDir["Thickness"] = true;
@@ -386,7 +383,6 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
                         }
                     }
 
-
                     if (isNoEqualsDir["ThickSolidDashStyle"] == false)
                     {
                         if (AnnotTransfer.IsSolidStyle(temp.LineDash) != AnnotTransfer.IsSolidStyle(item.LineDash))
@@ -394,7 +390,6 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
                             isNoEqualsDir["ThickSolidDashStyle"] = true;
                         }
                     }
-
                 }
 
                 if (isNoEqualsDir["Color"] == false)
@@ -410,7 +405,6 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
                 if (isNoEqualsDir["ThickSolidDashStyle"] == true)
                 {
                     BasicVm.IsSolidLine = BasicVm.IsDashLine = false;
-
                 }
                 else
                 {
@@ -456,6 +450,5 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
                 }
             }
         }
-
     }
-}
+}

+ 32 - 8
PDF Office/ViewModels/PropertyPanel/AnnotPanel/LinkAnnotPropertyViewModel.cs

@@ -35,6 +35,7 @@ using Prism.Services.Dialogs;
 using PDF_Master.Views.BOTA;
 using ImTools;
 using PDF_Master.ViewModels.Tools.AnnotManager;
+using PDF_Master.EventAggregators;
 
 namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
 {
@@ -738,12 +739,12 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
                 pdfViewer.SetToolParam(LinkAnnotArgs);
             }
 
-            pdfViewer.EnableDrawSelectArea(true);
             historyPageIndex = pdfViewer.CurrentIndex;
-            PageNumTextIsEnabled = false;
+
             isSelected = false;
+
             BtnLocationIsChecked = true;
-            bool isExist = false;
+
             if (region.Regions.ContainsRegionWithName(viewContentViewModel.TipContentRegionName))
             {
                 var views = region.Regions[viewContentViewModel.TipContentRegionName].Views;
@@ -751,15 +752,29 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
                 var isHas = views.FindFirst(q => q is Views.TipContent.LinkAnnotTip);
                 if (isHas != null)
                 {
-                    isExist = true;
+                    region.Regions[viewContentViewModel.TipContentRegionName].Activate(isHas);
+                }
+                else
+                {
+                    region.RequestNavigate(viewContentViewModel.TipContentRegionName, "LinkAnnotTip");
                 }
             }
-            if (isExist == false)
+
+            if (BtnLocationIsChecked && viewContentViewModel.TipVisible == Visibility.Visible)
             {
-                region.RequestNavigate(viewContentViewModel.TipContentRegionName, "LinkAnnotTip");
+                pdfViewer.EnableDrawSelectArea(false);
+                viewContentViewModel.ShowTip(false);
+                BtnLocationIsChecked = false;
+                PageNumTextIsEnabled = true;
+            }
+            else
+            {
+                pdfViewer.EnableDrawSelectArea(true);
+                viewContentViewModel.ShowTip(true);
+                PageNumTextIsEnabled = false;
+                //BtnLocationIsChecked = true;
             }
 
-            viewContentViewModel.ShowTip(true);
             //AnnotAttribEvent.IsAnnotCreateReset = true;
         }
 
@@ -768,7 +783,7 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
-        private  void PDFViewer_CustomNotifyHandler(object sender, CustomNotityData e)
+        private void PDFViewer_CustomNotifyHandler(object sender, CustomNotityData e)
         {
             if (e.NotifyType == CustomNotifyType.LinkAreaLocate)
             {
@@ -1156,6 +1171,7 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
             navigationContext.Parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out pdfViewer);
             navigationContext.Parameters.TryGetValue<ViewContentViewModel>(ParameterNames.ViewContentViewModel, out viewContentViewModel);
 
+            events.GetEvent<LinkAnnotTipCloseEvent>().Subscribe(LinkAnnotTipClose, e => e.UniCode == App.mainWindowViewModel.SelectedItem.Unicode);
             if (propertyPanel != null && pdfViewer != null)
             {
                 pdfViewer.CustomNotifyHandler -= PDFViewer_CustomNotifyHandler;
@@ -1218,6 +1234,14 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
             }
         }
 
+        private void LinkAnnotTipClose(LinkAnnotTipCloseArgs obj)
+        {
+            pdfViewer.EnableDrawSelectArea(false);
+            viewContentViewModel.ShowTip(false);
+            BtnLocationIsChecked = false;
+            //PageNumTextIsEnabled = true;
+        }
+
         /// <summary>
         /// 选择链接后,显示参数
         /// </summary>

+ 46 - 8
PDF Office/ViewModels/Tools/AnnotToolContentViewModel.Command.cs

@@ -28,6 +28,7 @@ using System.Windows.Input;
 using PDF_Master.ViewModels.Tools.AnnotManager;
 using ComPDFKit.Import;
 using System.Windows.Markup;
+using ImTools;
 
 namespace PDF_Master.ViewModels.Tools
 {
@@ -265,7 +266,7 @@ namespace PDF_Master.ViewModels.Tools
                     //viewContentViewModel.IsCreateLink = false;
                     //e.IsAnnotCreateReset= true;
 
-                    if (BtnLinkIsChecked == false)
+                    if (StrAnnotToolChecked == "Link")
                     {
                         propertyPanel.IsAddLink = false;
                     }
@@ -380,6 +381,11 @@ namespace PDF_Master.ViewModels.Tools
                                 case AnnotArgsType.AnnotSticky:
                                     customStickyPopup.GetCurrentAnnot = e.AnnotItemsList[0] as StickyAnnotArgs;
                                     customStickyPopup.GetPDFViewer = PDFViewer;
+                                    propertyPanel.annot = e.AnnotItemsList[0];
+                                    var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib());
+                                    propertyPanel.AnnotEvents = null;
+                                    propertyPanel.AnnotEvent = AnnotEvent;
+                                    propertyPanel.annotlists = e.AnnotItemsList;
                                     break;
 
                                 case AnnotArgsType.AnnotLink:
@@ -388,6 +394,8 @@ namespace PDF_Master.ViewModels.Tools
                                     PDFViewer.SetToolParam(annot);
                                     break;
                             }
+                            //GetSelectedAnnots(e);
+                            //PDFViewer.SetToolParam(annot);
 
                             #region //TODO: 修改注释后,会作用到之后添加的注释中。因此先把此逻辑“创建注释后,会自动回到默认值”注释掉
 
@@ -490,7 +498,7 @@ namespace PDF_Master.ViewModels.Tools
             }
             else
             {
-                if (BtnLinkIsChecked == false)
+                if (StrAnnotToolChecked == "Link")
                 {
                     if (PDFViewer.MouseMode != MouseModes.AnnotCreate)
                     {
@@ -865,6 +873,14 @@ namespace PDF_Master.ViewModels.Tools
                     {
                         case ActionType.Add:
 
+                            if (editEvent.EditAnnotArgs is StickyAnnotArgs stickyAnnotArgs)
+                            {
+                                PDFViewer.SelectAnnotation(stickyAnnotArgs.PageIndex, stickyAnnotArgs.AnnotIndex);
+                            }
+                            if (editEvent.EditAnnotArgs is FreeTextAnnotArgs freeTextAnnotArgs)
+                            {
+                                PDFViewer.SelectAnnotation(freeTextAnnotArgs.PageIndex, freeTextAnnotArgs.AnnotIndex);
+                            }
                             //BOTA
                             bool isTabItemAnnotation = IsBOTATabItemShow(out BOTAContentViewModel bOTAContentViewModel, out BOTAContent bOTAContent, "TabItemAnnotation");
 
@@ -1115,6 +1131,7 @@ namespace PDF_Master.ViewModels.Tools
             {
                 foreach (AnnotArgsType argsType in e.Keys)
                 {
+                    var key = ToolExpandDict.FirstOrDefault(q => q.Value == argsType);
                     switch (argsType)
                     {
                         case AnnotArgsType.AnnotHighlight:
@@ -1129,7 +1146,10 @@ namespace PDF_Master.ViewModels.Tools
                             //创建注释后,修改注释属性,可用于下次创建的注释
                             if (propertyPanel != null && propertyPanel.annot != null && PDFViewer.MouseMode == MouseModes.AnnotCreate)
                             {
-                                PDFViewer.SetToolParam(propertyPanel.annot);
+                                if (StrAnnotToolChecked == key.Key)
+                                {
+                                    PDFViewer.SetToolParam(propertyPanel.annot);
+                                }
                             }
                             break;
 
@@ -1145,7 +1165,10 @@ namespace PDF_Master.ViewModels.Tools
                             //创建注释后,修改注释属性,可用于下次创建的注释
                             if (propertyPanel != null && propertyPanel.annot != null && PDFViewer.MouseMode == MouseModes.AnnotCreate)
                             {
-                                PDFViewer.SetToolParam(propertyPanel.annot);
+                                if (StrAnnotToolChecked == key.Key)
+                                {
+                                    PDFViewer.SetToolParam(propertyPanel.annot);
+                                }
                             }
                             break;
 
@@ -1161,7 +1184,10 @@ namespace PDF_Master.ViewModels.Tools
                             //创建注释后,修改注释属性,可用于下次创建的注释
                             if (propertyPanel != null && propertyPanel.annot != null && PDFViewer.MouseMode == MouseModes.AnnotCreate)
                             {
-                                PDFViewer.SetToolParam(propertyPanel.annot);
+                                if (StrAnnotToolChecked == key.Key)
+                                {
+                                    PDFViewer.SetToolParam(propertyPanel.annot);
+                                }
                             }
                             break;
 
@@ -1177,7 +1203,10 @@ namespace PDF_Master.ViewModels.Tools
                             //创建注释后,修改注释属性,可用于下次创建的注释
                             if (propertyPanel != null && propertyPanel.annot != null && PDFViewer.MouseMode == MouseModes.AnnotCreate)
                             {
-                                PDFViewer.SetToolParam(propertyPanel.annot);
+                                if (StrAnnotToolChecked == key.Key)
+                                {
+                                    PDFViewer.SetToolParam(propertyPanel.annot);
+                                }
                             }
                             break;
 
@@ -1201,7 +1230,13 @@ namespace PDF_Master.ViewModels.Tools
                                         // FreehandPath.Opacity = annot.Transparency;
                                         // FreehandPath.Fill = new SolidColorBrush(annot.InkColor);
                                     }
-                                    PDFViewer.SetToolParam(annot);
+                                    if (propertyPanel != null && propertyPanel.annot != null && PDFViewer.MouseMode == MouseModes.AnnotCreate)
+                                    {
+                                        if (StrAnnotToolChecked == key.Key)
+                                        {
+                                            PDFViewer.SetToolParam(propertyPanel.annot);
+                                        }
+                                    }
                                 }
                             }
 
@@ -1233,7 +1268,10 @@ namespace PDF_Master.ViewModels.Tools
                             //创建注释后,修改注释属性,可用于下次创建的注释
                             if (propertyPanel != null && propertyPanel.annot != null && PDFViewer.MouseMode == MouseModes.AnnotCreate)
                             {
-                                PDFViewer.SetToolParam(propertyPanel.annot);
+                                if (StrAnnotToolChecked == key.Key)
+                                {
+                                    PDFViewer.SetToolParam(propertyPanel.annot);
+                                }
                             }
 
                             break;

+ 29 - 14
PDF Office/ViewModels/Tools/AnnotToolContentViewModel.cs

@@ -3,6 +3,7 @@ using ComPDFKit.PDFDocument;
 using ComPDFKitViewer;
 using ComPDFKitViewer.AnnotEvent;
 using ComPDFKitViewer.PdfViewer;
+using ImTools;
 using Microsoft.Win32;
 using PDF_Master.CustomControl;
 using PDF_Master.EventAggregators;
@@ -197,8 +198,6 @@ namespace PDF_Master.ViewModels.Tools
                     annotArgs.Author = Settings.Default.AppProperties.Description.Author;
                     PDFViewer.SetMouseMode(MouseModes.AnnotCreate);
                     PDFViewer.SetToolParam(annotArgs);
-
-                    
                 }
             }
             else
@@ -249,11 +248,26 @@ namespace PDF_Master.ViewModels.Tools
             }
 
             //超链接工具
+            //if (tag != "Link")
+            //    BtnLinkIsChecked = false;
+            //else
+            //    StrAnnotToolChecked = "Link";
             if (tag != "Link")
-                BtnLinkIsChecked = false;
-            else
-                StrAnnotToolChecked = "Link";
-
+            {
+                events.GetEvent<LinkAnnotTipCloseEvent>().Publish(new LinkAnnotTipCloseArgs() { UniCode = App.mainWindowViewModel.SelectedItem.Unicode });
+
+                //if (region.Regions.ContainsRegionWithName(viewContentViewModel.TipContentRegionName))
+                //{
+                //    var views = region.Regions[viewContentViewModel.TipContentRegionName].Views;
+
+                //    Views.TipContent.LinkAnnotTip isHas = (Views.TipContent.LinkAnnotTip)views.FindFirst(q => q is Views.TipContent.LinkAnnotTip);
+                //    if (isHas != null)
+                //    {
+                //        viewContentViewModel.TipVisible = System.Windows.Visibility.Collapsed;
+                //        (isHas.DataContext as LinkAnnotPropertyViewModel).BtnLocationIsChecked = false;
+                //    }
+                //}
+            }
             if (tag == "Rect" || tag == "Circle" || tag == "Arrow" || tag == "Line")
             {
                 //新建形状注释,设置默认大小
@@ -554,7 +568,8 @@ namespace PDF_Master.ViewModels.Tools
                         linkArgs.LinkType = LINK_TYPE.GOTO;
                         linkArgs.DestIndex = annotCommand.PageIndex;
                         PDFViewer.CreatePageAnnot(annotCommand.PageIndex, linkArgs);
-                        BtnLinkIsChecked = true;
+                        //BtnLinkIsChecked = true;
+                        StrAnnotToolChecked = "Link";
                         List<AnnotHandlerEventArgs> lists = new List<AnnotHandlerEventArgs>();
                         lists.Add(linkArgs);
                         propertyPanel.IsAddLink = true;
@@ -907,11 +922,11 @@ namespace PDF_Master.ViewModels.Tools
             }
         }
 
-        private void AddLink_Click(object sender, RoutedEventArgs e)
-        {
-            var args = PDFViewer.ToolManager.CurrentAnnotArgs;
-            BtnLinkIsChecked = true;
-        }
+        //private void AddLink_Click(object sender, RoutedEventArgs e)
+        //{
+        //    var args = PDFViewer.ToolManager.CurrentAnnotArgs;
+        //    BtnLinkIsChecked = true;
+        //}
 
         #endregion 阅读页右键菜单
 
@@ -1557,7 +1572,7 @@ namespace PDF_Master.ViewModels.Tools
                 if (tuple.Item1 == Key.L)
                     BtnLinkIsChecked = false;
 
-                if(tuple.Item2 == "Eraser")
+                if (tuple.Item2 == "Eraser")
                 {
                     CreateEraseArgs();
                     StrAnnotToolChecked = "Freehand";
@@ -1639,7 +1654,7 @@ namespace PDF_Master.ViewModels.Tools
                     tag = "Arrow";
                 else if (AnnotToolDir[Key.L])
                     tag = "Line";
-                else if(AnnotToolDir[Key.E])
+                else if (AnnotToolDir[Key.E])
                     tag = "Eraser";
             }
 

+ 1 - 1
PDF Office/Views/Tools/AnnotToolContent.xaml

@@ -332,7 +332,7 @@
                     Click="BtnTool_Click"
                     Command="{Binding MyToolsCommand}"
                     CommandParameter="{Binding ElementName=BtnLink}"
-                    IsChecked="{Binding BtnLinkIsChecked}"
+                    IsChecked="{Binding StrAnnotToolChecked, Converter={StaticResource AnnotToolIsCheckedConvert}, ConverterParameter=Link}"
                     Style="{StaticResource ToggleBtnViewModeStyle}"
                     Tag="Link">
                     <Grid>