Browse Source

【综合】整理代码

tangchao 6 months ago
parent
commit
3eb48178dd

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

@@ -1002,9 +1002,9 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
         if (indexs.count <= 0) {
             return
         }
-        
+
         self.listViewCurrentPageUpdateForDrag(indexs: indexs, toIndex: toIndex)
-        
+
         // 插入位置偏移量
         var toIndexOffset: Int = 0
         // 需要移动的页面index数组
@@ -1026,81 +1026,99 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
                 currentPage = newPage
             }
         }
+        
         if (indexs.last! < toIndex && dp == .on) { // 往后拖拽
             toIndexOffset -= 1
         }
+
         let insertIndex = max(0, toIndex-toIndexOffset)
         var selectIndexs: IndexSet = []
         for (index, page) in newPages.enumerated() {
             self.pdfDocument?.insertPageObject(page, at: UInt(insertIndex+index))
             selectIndexs.insert(insertIndex+index)
             if (currentPage?.pageIndex() == page.pageIndex()) {
-                //                self._listViewCurrentIndex = insertIndex+index
+//                self._listViewCurrentIndex = insertIndex+index
             }
         }
+        
+        // 新增 undo
+        self.kmUndoManager?.registerUndo(withTarget: self) { target in
+            target.clearSelectPages()
+            target.dragPages_reversed(indexs, toIndex, newPages, dp: dp)
+        }
+        
+        KMThumbnailCache.shared.clearCache()
+        // 刷新UI
+        self.refreshUI()
+        
+        if (reversed == false) {
+            self.selectPages(indexs: selectIndexs)
+        }
     }
     
-//    @objc private func dragPages(_ indexs: IndexSet, _ toIndex: Int, dp: NSCollectionView.DropOperation, reversed: Bool = false) {
-//        if (indexs.count <= 0) {
-//            return
-//        }
-//
-//        self.listViewCurrentPageUpdateForDrag(indexs: indexs, toIndex: toIndex)
-//
-//        // 插入位置偏移量
-//        var toIndexOffset: Int = 0
-//        // 需要移动的页面index数组
-//        var newPages: [CPDFPage] = []
-//        var currentPage: CPDFPage?
-//        var originalIndex = self.listViewCurrentIndex
-//        // 从后面往前删除
-//        for index in indexs.reversed() {
-//            let newPage = (self.pdfDocument?.page(at: UInt(index)))?.copy() as? CPDFPage
-//            if (newPage == nil) {
-//                continue
-//            }
-//            newPages.insert(newPage!, at: 0)
-////            self.pdfDocument?.removePage(at: UInt(index))
-//            if (index < toIndex) { /// 删除了插入位置前面的页面,需要改变 toIndex
-//                toIndexOffset += 1
-//            }
-//            if (currentPage == nil) && (originalIndex == index)  {
-//                currentPage = newPage
-//            }
-//        }
-//        var after = false
-//        if (indexs.last! < toIndex && dp == .on) { // 往后拖拽
-//            toIndexOffset -= 1
-//            after = true
-//        }
-//
-//        let insertIndex = max(0, toIndex-toIndexOffset)
-//        var selectIndexs: IndexSet = []
-//        for (index, page) in newPages.enumerated() {
-////            self.pdfDocument?.insertPageObject(page, at: UInt(insertIndex+index))
-//            selectIndexs.insert(insertIndex+index)
-//            if (currentPage?.pageIndex() == page.pageIndex()) {
-////                self._listViewCurrentIndex = insertIndex+index
-//            }
-////            self.pdfDocument?.movePage(at: UInt(index), withPageAt: UInt(insertIndex+index))
-//        }
-//
-//        if after {
-//            var offset = 0
-//            for index in indexs {
-//                self.pdfDocument?.movePage(at: UInt(index-offset), withPageAt: UInt(toIndex))
-//                offset += 1
-//            }
-//        } else {
-//            for index in indexs.reversed() {
-//                self.pdfDocument?.movePage(at: UInt(index), withPageAt: UInt(toIndex))
-//            }
-//        }
+    @objc private func new_dragPages(_ indexs: IndexSet, _ toIndex: Int, dp: NSCollectionView.DropOperation, reversed: Bool = false) {
+        if (indexs.count <= 0) {
+            return
+        }
+
+        self.listViewCurrentPageUpdateForDrag(indexs: indexs, toIndex: toIndex)
+
+        // 插入位置偏移量
+        var toIndexOffset: Int = 0
+        // 需要移动的页面index数组
+        var newPages: [CPDFPage] = []
+        var currentPage: CPDFPage?
+        var originalIndex = self.listViewCurrentIndex
+        // 从后面往前删除
+        for index in indexs.reversed() {
+            let newPage = (self.pdfDocument?.page(at: UInt(index)))?.copy() as? CPDFPage
+            if (newPage == nil) {
+                continue
+            }
+            newPages.insert(newPage!, at: 0)
+//            self.pdfDocument?.removePage(at: UInt(index))
+            if (index < toIndex) { /// 删除了插入位置前面的页面,需要改变 toIndex
+                toIndexOffset += 1
+            }
+            if (currentPage == nil) && (originalIndex == index)  {
+                currentPage = newPage
+            }
+        }
+        var after = false
+        if (indexs.last! < toIndex && dp == .on) { // 往后拖拽
+            toIndexOffset -= 1
+            after = true
+        }
+
+        let insertIndex = max(0, toIndex-toIndexOffset)
+        var selectIndexs: IndexSet = []
+        for (index, page) in newPages.enumerated() {
+//            self.pdfDocument?.insertPageObject(page, at: UInt(insertIndex+index))
+            selectIndexs.insert(insertIndex+index)
+            if (currentPage?.pageIndex() == page.pageIndex()) {
+//                self._listViewCurrentIndex = insertIndex+index
+            }
+//            self.pdfDocument?.movePage(at: UInt(index), withPageAt: UInt(insertIndex+index))
+        }
+
+        if after {
+            var offset = 0
+            for index in indexs {
+                self.pdfDocument?.movePage(at: UInt(index-offset), withPageAt: UInt(toIndex))
+                offset += 1
+            }
+        } else {
+            var offset = 0
+            for index in indexs.reversed() {
+                self.pdfDocument?.movePage(at: UInt(index+offset), withPageAt: UInt(toIndex))
+                offset += 1
+            }
+        }
         
         // 新增 undo
         self.kmUndoManager?.registerUndo(withTarget: self) { target in
             target.clearSelectPages()
-            target.dragPages_reversed(indexs, toIndex, newPages, dp: dp)
+            target.new_dragPages_reversed(indexs, toIndex, newPages, dp: dp)
         }
         
         KMThumbnailCache.shared.clearCache()
@@ -1157,6 +1175,67 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
         self.refreshUI()
     }
     
+    @objc private func new_dragPages_reversed(_ indexs: IndexSet, _ toIndex: Int, _ pages: [CPDFPage], dp: NSCollectionView.DropOperation) {
+        if (indexs.count <= 0) {
+            return
+        }
+        
+        // 插入位置偏移量
+        var toIndexOffset: Int = 0
+        for index in indexs {
+            if (index < toIndex) { /// 删除了插入位置前面的页面,需要改变 toIndex
+                toIndexOffset += 1
+            }
+        }
+        var after = false
+        if (indexs.last! < toIndex && dp == .on) { // 往后拖拽
+            toIndexOffset -= 1
+            after = true
+        }
+        let insertIndex = max(0, toIndex-toIndexOffset)
+        // 需要移动的页面index数组
+        var datas: [Int] = []
+        for index in insertIndex ..< (insertIndex + indexs.count) {
+            datas.append(index)
+        }
+        
+        // 从后面开始删除
+        for index in datas.reversed() {
+//            self.pdfDocument?.removePage(at: UInt(index))
+        }
+        // 再插入到对应的位置
+        for (index,value) in indexs.enumerated() {
+            var page: CPDFPage?
+            if (index < pages.count) {
+                page = pages[index]
+            }
+            if (page != nil) {
+//                self.pdfDocument?.insertPageObject(page!, at: UInt(value))
+            }
+        }
+        
+        if after {
+            var offset = 0
+            for index in indexs {
+                self.pdfDocument?.movePage(at: UInt(index-offset), withPageAt: UInt(toIndex))
+                offset += 1
+            }
+        } else {
+            var offset = 0
+            for index in indexs.reversed() {
+                self.pdfDocument?.movePage(at: UInt(index+offset), withPageAt: UInt(toIndex))
+                offset += 1
+            }
+        }
+        
+        // 新增 undo
+        self.kmUndoManager?.registerUndo(withTarget: self) { target in
+            target.new_dragPages(indexs, toIndex, dp: dp, reversed: true)
+        }
+        // 刷新UI
+        self.refreshUI()
+    }
+    
     // MARK: topBar 事件
     
     @objc func zoomOutButtonAction(sender: NSButton?) {
@@ -1753,7 +1832,7 @@ extension KMPDFEditViewController: KMThumbnailViewDelegate {
             dp = _dp
         }
         
-        self.dragPages(indexs, toIndex, dp: dp)
+        self.new_dragPages(indexs, toIndex, dp: dp)
         
         if (dragedIndexPaths.count > 0) {
             self.dealPdfDocumentDidEditCallback()