Browse Source

【页面编辑】调整插入页面的位置

tangchao 1 year ago
parent
commit
4a7d619e5c

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

@@ -219,11 +219,11 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
     // MARK: Private Methods
     // MARK: Private Methods
     
     
     private func getSelecteIndex() -> Int {
     private func getSelecteIndex() -> Int {
-        var index: Int = 0
-        for indexpath in self.thumbnailView.selectionIndexPaths {
-            index = indexpath.item
+        let index = self.getPasteIndex()
+        if (index != NSNotFound) {
+            return index
         }
         }
-        return index
+        return 0
     }
     }
     
     
     private func getSelectedPage() -> CPDFPage {
     private func getSelectedPage() -> CPDFPage {
@@ -312,6 +312,12 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
         self.dealPdfDocumentDidEditCallback()
         self.dealPdfDocumentDidEditCallback()
     }
     }
     
     
+    override func insertPages(pages: Array<CPDFPage>, at indexs: IndexSet) {
+        super.insertPages(pages: pages, at: indexs)
+        
+        self.selectPages(indexs: indexs)
+    }
+    
     override func pasteAction() {
     override func pasteAction() {
         if (self.canPaste()) {
         if (self.canPaste()) {
             super.pasteAction()
             super.pasteAction()
@@ -320,6 +326,27 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
         }
         }
     }
     }
     
     
+    override func insertBlankPage(size: NSSize, at index: Int) {
+        super.insertBlankPage(size: size, at: index)
+        
+        self.selectPages(indexs: IndexSet(integer: index))
+    }
+    
+    override func getInsertIndex() -> Int {
+        var index = 0
+        if let pageCount = self.thumbnailView.document?.pageCount, pageCount > 0 {
+            // 默认为最后一页
+            index = Int(pageCount-1)
+        }
+        
+        // 在当前选中item之后插入
+        // 多选时,则取最后一页
+        for indexpath in self.thumbnailView.selectionIndexPaths {
+            index = indexpath.item
+        }
+        return index
+    }
+    
     // MARK: Undo / Redo
     // MARK: Undo / Redo
     
     
     @objc private func reversePages(indexs: IndexSet) {
     @objc private func reversePages(indexs: IndexSet) {
@@ -464,38 +491,11 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
     // MARK: menu 菜单事件
     // MARK: menu 菜单事件
     
     
     @objc func item_insertFile(sender: NSMenuItem?) {
     @objc func item_insertFile(sender: NSMenuItem?) {
-        self.km_open_pdf_multi { index, params in
-            KMPrint("")
-        } completionBlock: { [unowned self] documents in
-            /// 处理page
-            var insertIndex: Int = self.getSelecteIndex()
-            var pages: Array<CPDFPage> = []
-            self.documentCaches.removeAll()
-            var indexs = IndexSet()
-            for document in documents {
-                self.documentCaches.append(document)
-                for i in 0 ..< document.pageCount {
-                    let page = document.page(at: i)
-                    pages.append(page!)
-                    insertIndex += 1
-                    indexs.insert(insertIndex)
-                }
-            }
-
-            self.insertPagesForDescSort(pages: pages, indexs: indexs)
-        }
+        self.insertFileAction()
     }
     }
     
     
     @objc func item_insertBlankPage(sender: NSMenuItem?) {
     @objc func item_insertBlankPage(sender: NSMenuItem?) {
-        let index = self.getSelecteIndex()
-        let page = self.listView?.document.page(at: UInt(index))
-        
-        self.documentCaches.removeAll()
-        let document = CPDFDocument()
-        document?.insertPage((page?.bounds.size)!, at: 0)
-        self.documentCaches.append(document!)
-        let newPage: CPDFPage = (document?.page(at: 0))!
-        self.insertPagesForDescSort(pages: [newPage], indexs: IndexSet(integer: index+1))
+        self.insertBlankPageAction()
     }
     }
     
     
     @objc func item_insertCustomPage(sender: NSMenuItem?) {
     @objc func item_insertCustomPage(sender: NSMenuItem?) {

+ 54 - 3
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Thumbnail/Base/KMPDFThumbViewBaseController.swift

@@ -148,6 +148,46 @@ class KMPDFThumbViewBaseController: KMBaseViewController {
         }
         }
     }
     }
     
     
+    // 插入文件事件
+    public func insertFileAction() {
+        self.km_open_pdf_multi { index, params in
+            KMPrint("")
+        } completionBlock: { [unowned self] documents in
+            var insertIndex = self.getInsertIndex()
+            var pages: Array<CPDFPage> = []
+            var indexs = IndexSet()
+            for document in documents {
+                for i in 0 ..< document.pageCount {
+                    guard let page = document.page(at: i) else {
+                        continue
+                    }
+                    
+                    pages.append(page)
+                    insertIndex += 1
+                    indexs.insert(insertIndex)
+                }
+            }
+
+            self.insertPages(pages: pages, at: indexs)
+        }
+    }
+    
+    // 插入空白页面事件
+    public func insertBlankPageAction() {
+        let index = self.getInsertIndex()
+        guard let page = self.thumbnailView.document?.page(at: UInt(index)) else {
+            KMPrint("insert blank page failure.")
+            return
+        }
+        
+        self.insertBlankPage(size: page.bounds.size, at: index+1)
+    }
+    
+    // 插入空白页面 指定页面大小和位置
+    public func insertBlankPage(size: NSSize, at index: Int) {
+        self._undo_insertBlankPage(size: size, at: index)
+    }
+    
     public func insertPages(pages: Array<CPDFPage>, at indexs: IndexSet) {
     public func insertPages(pages: Array<CPDFPage>, at indexs: IndexSet) {
         self._undo_insertPages(pages: pages, indexs: indexs)
         self._undo_insertPages(pages: pages, indexs: indexs)
     }
     }
@@ -288,11 +328,15 @@ class KMPDFThumbViewBaseController: KMBaseViewController {
     }
     }
     
     
     func getPasteIndex() -> Int {
     func getPasteIndex() -> Int {
-        var index = NSNotFound
-        if let pageCount = self.thumbnailView.document?.pageCount, pageCount > 0 {
-            index = Int(pageCount-1)
+        return self.getInsertIndex()
+    }
+    
+    func getInsertIndex() -> Int {
+        guard let _ = self.thumbnailView.document?.pageCount else {
+            return NSNotFound
         }
         }
         
         
+        var index: Int = 0
         for indexpath in self.thumbnailView.selectionIndexPaths {
         for indexpath in self.thumbnailView.selectionIndexPaths {
             index = indexpath.item
             index = indexpath.item
         }
         }
@@ -450,6 +494,13 @@ class KMPDFThumbViewBaseController: KMBaseViewController {
         self.refreshUI()
         self.refreshUI()
     }
     }
     
     
+    @objc private func _undo_insertBlankPage(size: NSSize, at index: Int) {
+        self.thumbnailView.document?.insertPage(size, at: UInt(index))
+        self.kmUndoManager?.registerUndo(withTarget: self, selector: #selector(_undo_deletePages), object: IndexSet(integer: index))
+        
+        self.refreshUI()
+    }
+    
     @objc private func _undo_deletePages(indexs: IndexSet) {
     @objc private func _undo_deletePages(indexs: IndexSet) {
         if (!self.indexsIsValid(indexs: indexs)) {
         if (!self.indexsIsValid(indexs: indexs)) {
             KMPrint("indexs invalid. indexs: \(indexs)")
             KMPrint("indexs invalid. indexs: \(indexs)")