Quellcode durchsuchen

页面编辑 右键不会选中页面, 不要跳转,复制粘贴后选中页面

OYXH\oyxh vor 1 Jahr
Ursprung
Commit
c8f58d7acc

+ 199 - 30
PDF Office/ViewModels/PageEdit/PageEditContentViewModel.cs

@@ -282,7 +282,7 @@ namespace PDF_Master.ViewModels.PageEdit
         /// <summary>
         /// 记录多选项中最后一项的索引
         /// </summary>
-        private int maxSelectedIndex = -1;
+        public int maxSelectedIndex = -1;
 
         private Visibility showTip = Visibility.Collapsed;
 
@@ -331,7 +331,22 @@ namespace PDF_Master.ViewModels.PageEdit
                 }
             }
         }
-
+        /// <summary>
+        ///右键不会选中页面, 不要跳转
+        /// </summary>
+        /// 判断是否是右键选择
+        public bool IsMouseRightButtonDown = false;
+        /// <summary>
+        /// 右键选择索引
+        /// </summary>
+        public int RightSelectedIndex = 0;
+        /// <summary>
+        /// 右键选择 集合
+        /// </summary>
+        public List<int> RightSelectedIndexs = new List<int>();
+        /// <summary>
+        /// 多选
+        /// </summary>
         private bool isMultiSelected;
 
         /// <summary>
@@ -734,13 +749,13 @@ namespace PDF_Master.ViewModels.PageEdit
                 }
             }
             indexList.Sort();
-            //全选页面 提示不能全选
-            if (indexList.Count > 0 && indexList.Count == PDFViewer.Document.PageCount)
-            {
-                AlertsMessage alertsMessage = new AlertsMessage();
-                alertsMessage.ShowDialog("", App.MainPageLoader.GetString("PageEdit_DeleteAllPage"), App.ServiceLoader.GetString("Text_ok"));
-                return;
-            }
+            //全选页面 提示不能全选,230711不要提示
+            //if (indexList.Count > 0 && indexList.Count == PDFViewer.Document.PageCount)
+            //{
+            //    AlertsMessage alertsMessage = new AlertsMessage();
+            //    alertsMessage.ShowDialog("", App.MainPageLoader.GetString("PageEdit_DeleteAllPage"), App.ServiceLoader.GetString("Text_ok"));
+            //    return;
+            //}
             if ((bool)dialog.ShowDialog())
             {
                 //付费锁
@@ -773,7 +788,18 @@ namespace PDF_Master.ViewModels.PageEdit
 
                 //先记录索引(第一个选定页面)
                 int index = ListSelectedIndex;
-
+                if (IsMouseRightButtonDown)
+                {
+                    index = RightSelectedIndex;
+                    if (IsMultiSelected)
+                    {
+                        indexList = RightSelectedIndexs;
+                    }
+                    else
+                    {
+                        indexList = new List<int> { index };
+                    }
+                }
                 //替换页面 先看文件是否加密,如果加密,先解密后,再替换
                 bool isDiscryptied = GetDocumentIsDiscryptied(fileName, null, out CPDFDocument doc, out string password);
 
@@ -856,15 +882,24 @@ namespace PDF_Master.ViewModels.PageEdit
             {
                 return;
             }
+            int pageIndex = 0;
+            if (IsMouseRightButtonDown)
+            {
+                pageIndex = RightSelectedIndex;
+            }
+            else
+            {
+                pageIndex = ListSelectedIndex;
+            }
             //获取插入位置
             int insertIndex = 0;
-            if (listSelecedIndex < 0)
+            if (pageIndex < 0)
             {
                 insertIndex = PageEditItems.Count;
             }
             else
             {
-                insertIndex = listSelecedIndex + 1;
+                insertIndex = pageIndex + 1;
                 if (isMultiSelected)
                 {
                     insertIndex = maxSelectedIndex + 1;
@@ -964,7 +999,7 @@ namespace PDF_Master.ViewModels.PageEdit
                 size.Width = CommonHelper.GetUnitsFromPageSize(PDFViewer.Document.GetPageSize(listSelecedIndex).Width);
                 size.Height = CommonHelper.GetUnitsFromPageSize(PDFViewer.Document.GetPageSize(listSelecedIndex).Height);
                 keyValuePairs.Add(ParameterNames.CurrentPageSize, size);
-                keyValuePairs.Add(ParameterNames.PageEditSelectedIndex, ListSelectedIndex);
+                keyValuePairs.Add(ParameterNames.PageEditSelectedIndex, pageIndex);
                 //int o = ListSelectedIndex;
                 //插入自定义页面
                 dialogs.ShowDialog(DialogNames.InsertDialog, keyValuePairs, e =>
@@ -1161,10 +1196,28 @@ namespace PDF_Master.ViewModels.PageEdit
             {
                 IsLoading = Visibility.Visible;
                 await Task.Delay(3);
-                int index = DoRemoveSelectedPages();
+                int pageIndex = 0;
+                int index = 0;
+                if (IsMouseRightButtonDown)
+                {
+                    if (IsMultiSelected)
+                    {
+                        DoRemoveSelectedPages(RightSelectedIndexs);
+                    }
+                    else
+                    {
+                        DoRemoveSelectedPages(new List<int> { pageIndex });
+                    }
+                    pageIndex = RightSelectedIndex;
+                }
+                else
+                {
+                    index = DoRemoveSelectedPages();
+                }
+
                 ReloadAfterOption(true, true, Tuple.Create(0, PDFViewer.Document.PageCount));
                 //删除后 选中项
-                if (index != -1)
+                if (index != -1 && IsMouseRightButtonDown == false)
                 {
                     if (index == PDFViewer.Document.PageCount)
                     {
@@ -1188,7 +1241,23 @@ namespace PDF_Master.ViewModels.PageEdit
         /// </summary>
         private void LeftRotateCommandEvent()
         {
-            RotateSelectedPages(false);
+            List<int> pageitems = new List<int>();
+            if (IsMouseRightButtonDown)
+            {
+                if (IsMultiSelected)
+                {
+                    pageitems.AddRange(RightSelectedIndexs);
+                }
+                else
+                {
+                    pageitems.Add(RightSelectedIndex);
+                }
+                RotateSelectedPages(false, pageitems);
+            }
+            else
+            {
+                RotateSelectedPages(false);
+            }
         }
 
         /// <summary>
@@ -1196,7 +1265,23 @@ namespace PDF_Master.ViewModels.PageEdit
         /// </summary>
         private void RightRotateCommandEvent()
         {
-            RotateSelectedPages();
+            List<int> pageitems = new List<int>();
+            if (IsMouseRightButtonDown)
+            {
+                if (IsMultiSelected)
+                {
+                    pageitems.AddRange(RightSelectedIndexs);
+                }
+                else
+                {
+                    pageitems.Add(RightSelectedIndex);
+                }
+                RotateSelectedPages(true, pageitems);
+            }
+            else
+            {
+                RotateSelectedPages();
+            }
         }
 
         /// <summary>
@@ -1319,25 +1404,54 @@ namespace PDF_Master.ViewModels.PageEdit
         {
             //增加是否有选中多页的判断
             //修复问题:全选页面后,ctrl取消第一页的选中时,其余操作会因为ListSelectedIndex为-1被禁用的问题
-            if (ListSelectedIndex < 0 && !IsMultiSelected)
+
+            if (IsMouseRightButtonDown)
             {
-                return false;
+                if (RightSelectedIndex < 0 && !IsMultiSelected)
+                {
+                    return false;
+                }
+                else
+                {
+                    return true;
+                }
             }
             else
             {
-                return true;
+                if (ListSelectedIndex < 0 && !IsMultiSelected)
+                {
+                    return false;
+                }
+                else
+                {
+                    return true;
+                }
             }
         }
 
         private bool CanReverseFileCommandExcute()
         {
-            if (ListSelectedIndex >= 0 && IsMultiSelected)
+            if (IsMouseRightButtonDown)
             {
-                return true;
+                if (RightSelectedIndex >= 0 && IsMultiSelected)
+                {
+                    return true;
+                }
+                else
+                {
+                    return false;
+                }
             }
             else
             {
-                return false;
+                if (ListSelectedIndex >= 0 && IsMultiSelected)
+                {
+                    return true;
+                }
+                else
+                {
+                    return false;
+                }
             }
         }
 
@@ -1383,6 +1497,15 @@ namespace PDF_Master.ViewModels.PageEdit
             {
                 PageEditItems[i].ItemSize = newsize;
             }
+
+            RefreshPageNum();
+            List<int> indexList = GetSelectedItemPageNumbers();
+            if (indexList.Count > 0)
+            {
+                //选中项集合 也需要 同步更新
+                selectedPageList.Clear();
+                selectedPageList.AddRange(indexList);
+            }
             if (selectedPageList.Count > 0)
             {
                 //缩略图模式 调整item大小的时候,更新选中项
@@ -1696,8 +1819,23 @@ namespace PDF_Master.ViewModels.PageEdit
                 ShowToast();
                 return;
             }
-
-            DoRemoveSelectedPages();
+            List<int> pageitems = new List<int>();
+            if (IsMouseRightButtonDown)
+            {
+                if (IsMultiSelected)
+                {
+                    pageitems.AddRange(RightSelectedIndexs);
+                }
+                else
+                {
+                    pageitems.Add(RightSelectedIndex);
+                }
+                DoRemoveSelectedPages(pageitems);
+            }
+            else
+            {
+                DoRemoveSelectedPages();
+            }
             ReloadAfterOption(true, true, Tuple.Create(0, PDFViewer.Document.PageCount));
         }
 
@@ -1713,6 +1851,15 @@ namespace PDF_Master.ViewModels.PageEdit
 
             if (viewContentViewModel.CheckPermissionBeforeOption())
             {
+                int pageIndex = 0;
+                if (IsMouseRightButtonDown)
+                {
+                    pageIndex = RightSelectedIndex;
+                }
+                else
+                {
+                    pageIndex = ListSelectedIndex;
+                }
                 CacheFilePath.Instance.CopyDoc?.Release();
                 CacheFilePath.Instance.CopyDoc = CPDFDocument.CreateDocument();
                 List<int> pages = new List<int>();
@@ -1730,7 +1877,7 @@ namespace PDF_Master.ViewModels.PageEdit
                 else
                 {
                     //没有多选时,根据listbox的选中索引获取选中页面
-                    pages.Add(ListSelectedIndex + 1);
+                    pages.Add(pageIndex + 1);
                 }
 
                 bool result = CacheFilePath.Instance.CopyDoc.ImportPages(PDFViewer.Document, String.Join(",", pages));
@@ -1760,16 +1907,24 @@ namespace PDF_Master.ViewModels.PageEdit
             {
                 return;
             }
-
+            int pageIndex = 0;
+            if (IsMouseRightButtonDown)
+            {
+                pageIndex = RightSelectedIndex;
+            }
+            else
+            {
+                pageIndex = ListSelectedIndex;
+            }
             IsLoading = Visibility.Visible;
-            int insertindex = maxSelectedIndex > listSelecedIndex ? maxSelectedIndex : listSelecedIndex;
+            int insertindex = maxSelectedIndex > pageIndex ? maxSelectedIndex : pageIndex;
             insertindex++;
 
             if (Index >= 0)
             {
                 insertindex = Index;
             }
-            else if (listSelecedIndex == -1)
+            else if (pageIndex == -1)
             {
                 insertindex = PageEditItems.Count;
             }
@@ -2116,7 +2271,21 @@ namespace PDF_Master.ViewModels.PageEdit
                     pagenums.Add(PageEditItems[i].PageNumber);
                 }
             }
-
+            if (IsMouseRightButtonDown)
+            {
+                if (IsMultiSelected)
+                {
+                    for (int i = 0; i < RightSelectedIndexs.Count; i++)
+                    {
+                        RightSelectedIndexs[i] = RightSelectedIndexs[i] + 1;
+                    }
+                    pagenums = RightSelectedIndexs;
+                }
+                else
+                {
+                    pagenums = new List<int>() { RightSelectedIndex + 1 };
+                }
+            }
             if (isEveryPageToFile)
             {
                 //每页生成的单独的文件

+ 1 - 0
PDF Office/Views/PageEdit/PageEditContent.xaml

@@ -499,6 +499,7 @@
                         <Setter Property="VerticalContentAlignment" Value="Center" />
                         <Setter Property="ContextMenu" Value="{StaticResource ListBoxItemMenu}" />
                         <EventSetter Event="DragLeave" Handler="ListBoxItem_DragLeave" />
+                        <EventSetter Event="PreviewMouseRightButtonDown" Handler="ListBoxItem_PreviewMouseRightButtonDown" />
                         <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListBoxItem_PreviewMouseLeftButtonDown" />
                         <EventSetter Event="PreviewMouseDoubleClick" Handler="ListBoxItem_PreviewMouseDoubleClick" />
                         <Style.Triggers>

+ 60 - 15
PDF Office/Views/PageEdit/PageEditContent.xaml.cs

@@ -1,4 +1,5 @@
 using ComPDFKit.PDFDocument;
+using ComPDFKitViewer;
 using ComPDFKitViewer.PdfViewer;
 using ImTools;
 using PDF_Master.EventAggregators;
@@ -187,22 +188,21 @@ namespace PDF_Master.Views.PageEdit
                     //根据Vm的参数选中部分页面
                     if (e.PageRange.Count == 1)
                     {
-                        int index = e.PageRange[0];
-
+                        ListPageEdit.SelectedIndex = e.PageRange[0] - 1;
+                        ListPageEdit.ScrollIntoView(ListPageEdit.SelectedItem);
                         //缩略图 复制粘贴后,选中页面,要与阅读视图 对应
                         if (viewModel.viewContentViewModel.isInPageEdit == false && GridBOTAHeader.Visibility == Visibility.Visible)
                         {
-                            if (index == ListPageEdit.Items.Count)
-                            {
-                                viewModel.PDFViewer.GoToPage(index);
-                            }
-                            else
-                            {
-                                viewModel.PDFViewer.GoToPage(ListPageEdit.SelectedIndex);
-                            }
+                            int index = ((PageEditItem)ListPageEdit.SelectedItem).PageNumber - 1;
+                            viewModel.PDFViewer.GoToPage(index);
+                            //if (index == ListPageEdit.Items.Count)
+                            //{
+                            //    viewModel.PDFViewer.GoToPage(index);
+                            //}
+                            //else
+                            //{
+                            //}
                         }
-                        ListPageEdit.SelectedIndex = e.PageRange[0] - 1;
-                        ListPageEdit.ScrollIntoView(ListPageEdit.SelectedItem);
                     }
                     else
                     {
@@ -773,8 +773,11 @@ namespace PDF_Master.Views.PageEdit
                         if (info.Length > 0 && File.Exists(fileName))
                         {
                             int index = InsertIndex == -1 ? 0 : InsertIndex;
-                            await viewModel.InsertFromFile(index, fileName);
-                            viewModel.ReloadAfterOption(true, true, new Tuple<int, int>(0, ListPageEdit.Items.Count));
+                            bool flag = await viewModel.InsertFromFile(index, fileName);
+                            if (flag)
+                            {
+                                viewModel.ReloadAfterOption(true, true, new Tuple<int, int>(0, ListPageEdit.Items.Count));
+                            }
                         }
                     }
                     //其他文件  则新增一个页签打开
@@ -852,7 +855,7 @@ namespace PDF_Master.Views.PageEdit
             viewModel.DragToSort(targetindex, pages);
             ExitDraging();
             isDraging = false;
-            
+
             CleanDropMoveFiles();
         }
 
@@ -1054,8 +1057,50 @@ namespace PDF_Master.Views.PageEdit
             }
         }
 
+        /// <summary>
+        /// 右键不会选中页面,不要跳转
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void ListBoxItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
+        {
+            viewModel.IsMouseRightButtonDown = true;
+            viewModel.RightSelectedIndex = -1;
+            viewModel.RightSelectedIndexs.Clear();
+            var item = (sender as ListBoxItem).DataContext as PageEditItem;
+            if (item != null)
+            {
+                viewModel.RightSelectedIndex = item.PageNumber - 1;
+                if (ListPageEdit.SelectedItems.Count > 1)
+                {
+                    viewModel.IsMultiSelected = true;
+                    viewModel.maxSelectedIndex = ListPageEdit.Items.IndexOf(ListPageEdit.SelectedItems[ListPageEdit.SelectedItems.Count - 1]);
+                    foreach (var page in ListPageEdit.SelectedItems)
+                    {
+                        if (page is PageEditItem pageEdit)
+                        {
+                            viewModel.RightSelectedIndexs.Add(pageEdit.PageNumber - 1);
+                        }
+                    }
+                }
+                else
+                {
+                    viewModel.ListSelectedIndex = -1;
+                    viewModel.IsMultiSelected = false;
+                    viewModel.maxSelectedIndex = -1;
+                    
+                }
+            }
+
+            //拦截响应选中事件
+            e.Handled = true;
+        }
+
         private void ListBoxItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
         {
+            viewModel.IsMouseRightButtonDown = false;
+            viewModel.RightSelectedIndex = -1;
+            viewModel.RightSelectedIndexs.Clear();
             //增加辅助判断,防止误触发 拖动排序
             //为了排除 页面 拖出App后,点击选择页面,造成拖动
             isDraging = false;