Browse Source

【综合】【页面编辑】架上版支持,键盘上下左右移动选中页面(已修复)

tangchao 10 months ago
parent
commit
e289263cf7

+ 6 - 0
PDF Office/PDF Master/Class/Common/Control/KMThumbnailView.swift

@@ -179,9 +179,15 @@ private let _KMThumbnailView_collectionViewDrop_lineViewClassName = "NSCollectio
                 if (indexpath.section >= self.collectionView.numberOfSections) {
                     continue
                 }
+                if indexpath.section < 0 {
+                    continue
+                }
                 if (indexpath.item >= self.collectionView.numberOfItems(inSection: indexpath.section)) {
                     continue
                 }
+                if indexpath.item < 0 {
+                    continue
+                }
                 
                 indexpaths.insert(indexpath)
             }

+ 116 - 3
PDF Office/PDF Master/Class/PDFTools/PageEdit/Controller/KMPDFEditViewController.swift

@@ -289,10 +289,123 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
 //        super.keyDown(with: event)
         let cmd = event.modifierFlags.contains(.command)
         let shift = event.modifierFlags.contains(.shift)
+        
         let code = event.keyCode
-        if cmd && code == 0 { // cmd + a
-            self.km_comboBoxSelectionDidChange(.all)
-            return
+        let isLeft = code == 123
+        let isUp = code == 126
+        let isRight = code == 124
+        let isDown = code == 125
+        if cmd {
+            if code == 0 { // cmd + a
+                self.km_comboBoxSelectionDidChange(.all)
+                return
+            }
+            
+//            let ips = self.thumbnailView.selectionIndexPaths
+//            let indexs = self.indexpathsToIndexs(indexpaths: ips)
+////            let idx = indexs.last ?? 0
+//            var selectedIndexs = indexs
+//            let numberItems = self.thumbnailView.collectionView.numberOfItems(inSection: 0)
+//            let firstIdx = 0
+//            let lastIdx = max(numberItems-1, 0)
+//            if isLeft { // +
+//                if self.isEmptySelection() {
+//                    selectedIndexs.insert(lastIdx)
+//                } else {
+//                    if let idx = selectedIndexs.first, idx > 0 {
+//                        selectedIndexs.insert(idx-1)
+//                    }
+//                }
+//            } else if isRight { // -
+//                if self.isEmptySelection() {
+//                    selectedIndexs.insert(firstIdx)
+//                } else {
+//                    if let idx = selectedIndexs.last, idx < lastIdx {
+//                        selectedIndexs.insert(idx+1)
+//                    }
+//                }
+//            } else {
+//                var numberPerLine = 0
+//                let itemW = self.thumbnailView.itemSize.width
+//                if itemW > 0 {
+//                    numberPerLine = Int(NSWidth(self.thumbnailView.collectionView.frame) / itemW)
+//                }
+//                if isUp {
+//                    if self.isEmptySelection() {
+//                        selectedIndexs.insert(lastIdx)
+//                    } else {
+//                        if let idx = selectedIndexs.first, idx > 0 {
+//                            selectedIndexs.insert(max(idx-numberPerLine, 0))
+//                        }
+//                    }
+//                } else if isDown {
+//                    if self.isEmptySelection() {
+//                        selectedIndexs.insert(firstIdx)
+//                    } else {
+//                        if let idx = selectedIndexs.last, idx < lastIdx {
+//                            selectedIndexs.insert(min(idx+numberPerLine, lastIdx))
+//                        }
+//                    }
+//                }
+//            }
+//
+//            if selectedIndexs.isEmpty == false {
+//                let ips = self.indexsToIndexpaths(indexs: selectedIndexs)
+//                self.thumbnailView.selectionIndexPaths = ips
+//                self.thumbnailView.collectionView.scrollToItems(at: ips, scrollPosition: .centeredVertically)
+//            }
+        } else if shift {
+            
+        } else {
+            let ips = self.thumbnailView.selectionIndexPaths
+            let indexs = self.indexpathsToIndexs(indexpaths: ips)
+            let idx = indexs.last ?? 0
+            var selectedIndexs = IndexSet()
+            let numberItems = self.thumbnailView.collectionView.numberOfItems(inSection: 0)
+            let firstIdx = 0
+            let lastIdx = max(numberItems-1, 0)
+            if isLeft {
+                if self.isEmptySelection() {
+                    selectedIndexs.insert(lastIdx)
+                } else {
+                    if idx > 0 {
+                        selectedIndexs.insert(idx-1)
+                    }
+                }
+            } else if isRight {
+                if self.isEmptySelection() {
+                    selectedIndexs.insert(firstIdx)
+                } else {
+                    if idx < lastIdx {
+                        selectedIndexs.insert(idx+1)
+                    }
+                }
+            } else {
+                var numberPerLine = 0
+                let itemW = self.thumbnailView.itemSize.width
+                if itemW > 0 {
+                    numberPerLine = Int(NSWidth(self.thumbnailView.collectionView.frame) / itemW)
+                }
+                if isUp {
+                    if self.isEmptySelection() {
+                        selectedIndexs.insert(lastIdx)
+                    } else {
+                        selectedIndexs.insert(max(idx-numberPerLine, 0))
+                    }
+                } else if isDown {
+                    if self.isEmptySelection() {
+                        selectedIndexs.insert(firstIdx)
+                    } else {
+                        selectedIndexs.insert(min(idx+numberPerLine, lastIdx))
+                    }
+                }
+            }
+            
+            if selectedIndexs.isEmpty == false {
+                let ips = self.indexsToIndexpaths(indexs: selectedIndexs)
+                self.thumbnailView.selectionIndexPaths = ips
+                self.thumbnailView.collectionView.scrollToItems(at: ips, scrollPosition: .centeredVertically)
+            }
         }
     }
     

+ 3 - 1
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+MenuAction.swift

@@ -1407,7 +1407,9 @@ extension KMMainViewController: NSMenuItemValidation, NSMenuDelegate {
             menuItem.action == #selector(menuItemAction_lastPage) ||
             menuItem.action == #selector(menuItemAction_forward) ||
             menuItem.action == #selector(menuItemAction_goback)) {
-
+            if self.hasEnterPageEdit() {
+                return false
+            }
             if (menuItem.action == #selector(menuItemAction_nextPage)) {
                 if self.listView.isEditing() && self.listView.isEditable() {
                     return false