|
@@ -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()
|