Przeglądaj źródła

页面编辑-补充阅读页跟页面编辑联动bug

ZhouJieSheng 1 rok temu
rodzic
commit
cfc3fcf9a4

+ 5 - 1
PDF Office/EventAggregators/PageEditNotifyEvent.cs

@@ -58,6 +58,10 @@ namespace PDF_Master.EventAggregators
         /// 选中项
         /// 通过绑定Selected属性来设置选中项有更新不准确的问题
         /// </summary>
-        SelectItems
+        SelectItems,
+        /// <summary>
+        /// 页面总数改变
+        /// </summary>
+        PageCountChanged
     }
 }

+ 1 - 0
PDF Office/PDF Master.csproj

@@ -375,6 +375,7 @@
     <Compile Include="EventAggregators\SendPrintInfoEvent.cs" />
     <Compile Include="EventAggregators\ShowTipEvent.cs" />
     <Compile Include="EventAggregators\SplitEvent.cs" />
+    <Compile Include="EventAggregators\ViewContentEvent.cs" />
     <Compile Include="Helper\CacheFilePath.cs" />
     <Compile Include="Helper\ConverterHelper.cs" />
     <Compile Include="Helper\CropPageUndoManager.cs" />

+ 44 - 16
PDF Office/ViewModels/PageEdit/PageEditContentViewModel.cs

@@ -86,6 +86,11 @@ namespace PDF_Master.ViewModels.PageEdit
         /// </summary>
         private bool isFirstLoad = true;
 
+        /// <summary>
+        /// 是否正在拖拽排序中
+        /// </summary>
+        private bool DragSorting = false;
+
         /// <summary>
         /// 记录多选项中最后一项的索引
         /// </summary>
@@ -391,10 +396,6 @@ namespace PDF_Master.ViewModels.PageEdit
         /// </summary>
         public DelegateCommand ReverseCommand { get; set; }
 
-        /// <summary>
-        /// 打印
-        /// </summary>
-        public DelegateCommand PrintCommand { get; set; }
 
         /// <summary>
         /// 放大
@@ -447,12 +448,12 @@ namespace PDF_Master.ViewModels.PageEdit
             CopyCommand = new DelegateCommand(copy);
             PasteCommand = new DelegateCommand(()=> { paste(); }, CanPasteExcute).ObservesProperty(() => CanPaste);
             CutCommand = new DelegateCommand(cut);
-            PrintCommand = new DelegateCommand(print);
             ClearSelectedCommand = new DelegateCommand(clearSelected);
             EnterPageEditCommand = new DelegateCommand(enterpageeditr);
 
             //订阅页面刷新事件
             eventAggregator.GetEvent<PageEditRefreshEvent>().Subscribe(OnPageEditRefreshEvent, e => e.Unicode == unicode);
+            eventAggregator.GetEvent<ViewContentEvent>().Subscribe(ViewContentChangedEvent, e => e.Unicode == unicode);
 
             CacheFilePath.Instance.PropertyChanged += Instance_PropertyChanged;
 
@@ -462,7 +463,20 @@ namespace PDF_Master.ViewModels.PageEdit
 
 
 
+
         #region 事件
+        private void ViewContentChangedEvent(ViewContentEventArgs obj)
+        {
+            //只有在缩略图模式下响应刷新,进入页面编辑时 会刷新可见范围内图片,不需要响应这个事件
+            if(IsBOTAThumb== Visibility.Visible)
+            {
+                PageEditItems[PDFViewer.CurrentIndex].IsGetImage = false;
+                PageEditItems[PDFViewer.CurrentIndex].Size = PDFViewer.Document.GetPageSize(PDFViewer.CurrentIndex);
+                RefreshItemImage(PDFViewer.CurrentIndex, PDFViewer.CurrentIndex);
+            }
+        }
+
+
         /// <summary>
         /// 进入页面编辑
         /// </summary>
@@ -1059,14 +1073,14 @@ namespace PDF_Master.ViewModels.PageEdit
         /// <summary>
         /// 调用打印机
         /// </summary>
-        private void print()
+        public void print(List<int> SelectedPages)
         {
             PDFViewer.GoToPage(listSelecedIndex);
             DialogParameters printValue = new DialogParameters();
             printValue.Add(ParameterNames.PDFViewer, PDFViewer);
             printValue.Add(ParameterNames.FilePath, PDFViewer.Document.FileName);
             printValue.Add(ParameterNames.PrintCurrentPage, PDFViewer.CurrentIndex);
-            printValue.Add(ParameterNames.PageList, selectedPageList);
+            printValue.Add(ParameterNames.PageList, SelectedPages);
             dialogs.ShowDialog(DialogNames.HomePagePrinterDialog, printValue, e => { });
         }
 
@@ -1411,9 +1425,17 @@ namespace PDF_Master.ViewModels.PageEdit
                 {
                     if (PageEditItems[i].Selected)
                     {
-
                         indexList.Add(i);
-
+                    }
+                }
+                
+                //因为虚拟化 可能获取不到所有选中项的页码 需要结合选中项的集合判断一下
+                if(selectedPageList.Count>0&&selectedPageList.Count> indexList.Count)
+                {
+                    indexList = new List<int>();
+                    for(int j=0;j<selectedPageList.Count;j++)
+                    {
+                        indexList.Add(selectedPageList[j]-1);
                     }
                 }
             }
@@ -1932,8 +1954,6 @@ namespace PDF_Master.ViewModels.PageEdit
                         PDFViewer.Document.RotatePage(i, rightRotate ? 1 : -1);
                         PDFViewer.Document.ReleasePages(i);
                         items.Add(i, i);
-
-                        PageEditItems[i].Size = PDFViewer.Document.GetPageSize(i);
                         //重新拿图
                         PageEditItems[i].IsGetImage = false;
                     }
@@ -1944,13 +1964,12 @@ namespace PDF_Master.ViewModels.PageEdit
                 //旋转对应Items集合
                 for (int i = 0; i < pageitems.Count; i++)
                 {
-                    PDFViewer.Document.RotatePage(pageitems[i], rightRotate ? 1 : -1);
+                    var r = PDFViewer.Document.RotatePage(pageitems[i], rightRotate ? 1 : -1);
                     PDFViewer.Document.ReleasePages(pageitems[i]);
                     items.Add(pageitems[i], pageitems[i]);
 
                     //重新拿图
                     PageEditItems[pageitems[i]].IsGetImage = false;
-                    PageEditItems[i].Size = PDFViewer.Document.GetPageSize(i);
                 }
             }
 
@@ -1968,7 +1987,7 @@ namespace PDF_Master.ViewModels.PageEdit
                 PDFViewer.UndoManager.AddHistory(history);
             }
 
-            ReloadAfterOption(false, false, Tuple.Create(0, PageEditItems.Count));
+            ReloadAfterOption(false, false, Tuple.Create(items.Keys.First(),items.Keys.Last()));
             IsLoading = Visibility.Collapsed;
         }
 
@@ -2167,6 +2186,8 @@ namespace PDF_Master.ViewModels.PageEdit
             {
                 if (i <= PageEditItems.Count - 1 && i >= 0 && PageEditItems.Count > 0)
                 {
+                    //先更新一次每个页面的尺寸 确保图的方向正确
+                    PageEditItems[i].Size = PDFViewer.Document.GetPageSize(i);
                     //宽高为样式中图片控件宽高
                     if (PageEditItems[i].isVertical)
                     {
@@ -2203,6 +2224,7 @@ namespace PDF_Master.ViewModels.PageEdit
         /// <param name="pageIndexs"></param>
         public void DragToSort(int targetIndex, List<int> pageIndexs, bool IsFromUndoRedo = false)
         {
+            DragSorting = true;
             //拖拽排序后需要重新选中项的集合
             List<int> selectedPages = new List<int>();
 
@@ -2224,6 +2246,7 @@ namespace PDF_Master.ViewModels.PageEdit
                     result = MoveItemToIndex(pageIndexs[i], targetIndex + i);
                     if (!result)
                     {
+                        DragSorting = false;
                         return;
                     }
                     SourceTargetValue.Add(pageIndexs[i], targetIndex + i);
@@ -2238,6 +2261,7 @@ namespace PDF_Master.ViewModels.PageEdit
                     result = MoveItemToIndex(pageIndexs[pageIndexs.Count - 1 - i], targetIndex - 1 - i);
                     if (!result)
                     {
+                        DragSorting = false;
                         return;
                     }
                     SourceTargetValue.Add(pageIndexs[pageIndexs.Count - 1 - i], targetIndex - 1 - i);
@@ -2263,6 +2287,7 @@ namespace PDF_Master.ViewModels.PageEdit
                     result = MoveItemToIndex(pageIndexs[k - i], targetIndex - 1 - i);
                     if (!result)
                     {
+                        DragSorting = false;
                         return;
                     }
                     SourceTargetValue.Add(pageIndexs[k - i], targetIndex - 1 - i);
@@ -2275,6 +2300,7 @@ namespace PDF_Master.ViewModels.PageEdit
                     result = MoveItemToIndex(pageIndexs[j], newIndex);
                     if (!result)
                     {
+                        DragSorting = false;
                         return;
                     }
                     SourceTargetValue.Add(pageIndexs[j], newIndex);
@@ -2282,6 +2308,7 @@ namespace PDF_Master.ViewModels.PageEdit
                     newIndex++;
                 }
             }
+            DragSorting = false;
             //通知UI选中Items
             NotifyUIToRefresh(selectedPages);
             //刷新页码和图片
@@ -2419,8 +2446,9 @@ namespace PDF_Master.ViewModels.PageEdit
 
         private void PDFViewer_AnnotEditHandler(object sender, List<ComPDFKitViewer.AnnotEvent.AnnotEditEvent> e)
         {
-            if (e != null && e.Count > 0)
+            if (e != null && e.Count > 0&&IsBOTAThumb == Visibility.Visible)
             {
+                //缩略图模式下 刷新页面
                 int pageIndex = e[0].PageIndex;
                 RefreshItemImage(pageIndex, pageIndex);
             }
@@ -2428,7 +2456,7 @@ namespace PDF_Master.ViewModels.PageEdit
 
         private void PDFViewer_InfoChanged(object sender, KeyValuePair<string, object> e)
         {
-            if (e.Key == "PageNum")
+            if (e.Key == "PageNum"&&!viewContentViewModel.isInPageEdit)
             {
                 NotifyUIToRefresh(new List<int> { (e.Value as ComPDFKitViewer.RenderData).PageIndex });
             }

+ 16 - 2
PDF Office/ViewModels/PropertyPanel/ViewModular/ViewModularContentViewModel.cs

@@ -3,6 +3,7 @@ using ComPDFKitViewer.AnnotEvent;
 using ComPDFKitViewer.PdfViewer;
 using Microsoft.Office.Interop.Word;
 using PDF_Master.CustomControl;
+using PDF_Master.EventAggregators;
 using PDF_Master.Helper;
 using PDF_Master.Model;
 using PDF_Master.Model.BOTA;
@@ -11,6 +12,7 @@ using PDF_Master.Views;
 using PDF_Master.Views.BOTA;
 using PDFSettings.Settings;
 using Prism.Commands;
+using Prism.Events;
 using Prism.Mvvm;
 using Prism.Regions;
 using Prism.Services.Dialogs;
@@ -171,6 +173,13 @@ namespace PDF_Master.ViewModels.PropertyPanel.ViewModular
         private Visibility splitScreenViewVisible = Visibility.Collapsed;
         public OpenFileInfo OpenFileInfo = null;
 
+        private IEventAggregator events;
+
+        /// <summary>
+        /// 用于区分事件的唯一码
+        /// </summary>
+        private string unicode;
+
         /// <summary>
         /// 控制Content的显示 用于显示分屏的模块
         /// </summary>
@@ -276,11 +285,13 @@ namespace PDF_Master.ViewModels.PropertyPanel.ViewModular
 
         public DelegateCommand OpenFullCommand { get; set; }
 
-        public ViewModularContentViewModel(IRegionManager regionManager, IDialogService dialogService)
+        public ViewModularContentViewModel(IRegionManager regionManager, IDialogService dialogService, IEventAggregator eventAggregator)
         {
             InitString();
             region = regionManager;
             dialogs = dialogService;
+            events = eventAggregator;
+            unicode = App.mainWindowViewModel.SelectedItem.Unicode;
             //未显示时无法注册上Region名称,所以需要短暂显示
             //SplitScreenViewVisible = Visibility.Visible;
             //SplitScreenViewRegionName = RegionNames.SplitScreenViewRegionName;
@@ -346,6 +357,9 @@ namespace PDF_Master.ViewModels.PropertyPanel.ViewModular
                 SplitScreenPDFViewer.RotatePage(PageRotate.Rotate90, right, SplitScreenPDFViewer.CurrentIndex);
             }
             PDFViewer.UndoManager.CanSave = true;
+
+            events.GetEvent<ViewContentEvent>().Publish(new ViewContentEventArgs() { type = right ? EventType.RightRotate : EventType.LeftRotate, Unicode = unicode });
+
             //后续需要添加,缩略图旋转改变
 
             if (ViewContentViewModel.OpenBOTA == true)
@@ -519,7 +533,7 @@ namespace PDF_Master.ViewModels.PropertyPanel.ViewModular
             OpenFileInfo fileInfo = SettingHelper.GetFileInfo(PDFViewer.Document.FilePath);
             if (fileInfo != null)
             {
-                if (modeView is SplitMode)
+                if (modeView is ComPDFKitViewer.SplitMode)
                 {
                     fileInfo.LastSplitMode = PDFViewer.Mode;
                 }

+ 6 - 5
PDF Office/Views/MainWindow.xaml.cs

@@ -248,11 +248,12 @@ namespace PDF_Master.Views
             if (uiElement != null)
             {
                 var textBox = uiElement as TextBox;
-                if (textBox != null)
-                {
-                    GridRoot.Focusable = true;
-                    GridRoot.Focus();
-                }
+                //会影响页面编辑的下拉框选择  暂时注释
+                //if (textBox != null)
+                //{
+                //    GridRoot.Focusable = true;
+                //    GridRoot.Focus();
+                //}
             }
         }
     }

+ 2 - 2
PDF Office/Views/PageEdit/PageEditContent.xaml

@@ -136,7 +136,7 @@
                     Header="Hide PageSize"
                     Visibility="{Binding ShowedPageSize}" />
                 <Separator Style="{StaticResource HorizontalSeparatorStyle}" Visibility="{Binding IsBOTAThumb, Converter={StaticResource UnVisibleConvert}}" />
-                <MenuItem Command="{Binding PrintCommand}" Header="{x:Static mainpage:MainPage.PageEdit_MenuPrint}" />
+                <MenuItem Click="MenuItem_Click" Header="{x:Static mainpage:MainPage.PageEdit_MenuPrint}" />
             </ContextMenu>
 
             <Style BasedOn="{StaticResource subToolBar}" TargetType="{x:Type Button}">
@@ -155,7 +155,7 @@
         <KeyBinding Command="{Binding CutCommand}" Gesture="Ctrl+X" />
         <KeyBinding Command="{Binding RightRotateCommand}" Gesture="Ctrl+R" />
         <KeyBinding Command="{Binding LeftRotateCommand}" Gesture="Ctrl+L" />
-        <KeyBinding Command="{Binding DeleteCommand}" Gesture="Delete" />
+        <KeyBinding Command="{Binding DeleteCommand}" Gesture="Delete"/>
         <KeyBinding Key="Esc" Command="{Binding ClearSelectedCommand}" />
         <KeyBinding
             Key="Add"

+ 11 - 0
PDF Office/Views/PageEdit/PageEditContent.xaml.cs

@@ -1001,5 +1001,16 @@ namespace PDF_Master.Views.PageEdit
                 ListPageEdit.Focus();
             }
         }
+
+        private void MenuItem_Click(object sender, RoutedEventArgs e)
+        {
+            //因为需要获取准确的选中页面,因此把入口放在.cs代码里
+            List<int> lists = new List<int>();
+            foreach(PageEditItem item in ListPageEdit.SelectedItems)
+            {
+                lists.Add(item.PageNumber);
+            }
+            viewModel.print(lists);
+        }
     }
 }