|
@@ -145,23 +145,23 @@ class KMThumbnailViewController: NSViewController {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- // 插入位置偏移量
|
|
|
- var toIndexOffset: Int = 0
|
|
|
- // 需要移动的页面index数组
|
|
|
- var newPages: [CPDFPage] = []
|
|
|
- for index in indexs {
|
|
|
- let newPage: CPDFPage = self.listView?.document.page(at: UInt(index)).copy() as! CPDFPage
|
|
|
- newPages.append(newPage)
|
|
|
- self.listView?.document.removePage(at: UInt(index))
|
|
|
- if (index < toIndex) { /// 删除了插入位置前面的页面,需要改变 toIndex
|
|
|
- toIndexOffset += 1
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- let insertIndex = max(0, toIndex-toIndexOffset)
|
|
|
- for (index, page) in newPages.enumerated() {
|
|
|
- self.listView?.document.insertPageObject(page, at: UInt(insertIndex+index))
|
|
|
- }
|
|
|
+// // 插入位置偏移量
|
|
|
+// var toIndexOffset: Int = 0
|
|
|
+// // 需要移动的页面index数组
|
|
|
+// var newPages: [CPDFPage] = []
|
|
|
+// for index in indexs {
|
|
|
+// let newPage: CPDFPage = self.listView?.document.page(at: UInt(index)).copy() as! CPDFPage
|
|
|
+// newPages.append(newPage)
|
|
|
+// self.listView?.document.removePage(at: UInt(index))
|
|
|
+// if (index < toIndex) { /// 删除了插入位置前面的页面,需要改变 toIndex
|
|
|
+// toIndexOffset += 1
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// let insertIndex = max(0, toIndex-toIndexOffset)
|
|
|
+// for (index, page) in newPages.enumerated() {
|
|
|
+// self.listView?.document.insertPageObject(page, at: UInt(insertIndex+index))
|
|
|
+// }
|
|
|
|
|
|
// 新增 undo
|
|
|
// self.undoRedoManager.registerUndo(withTarget: self) { target in
|
|
@@ -169,11 +169,33 @@ class KMThumbnailViewController: NSViewController {
|
|
|
// }
|
|
|
|
|
|
// 刷新UI
|
|
|
- self.listView?.layoutDocumentView()
|
|
|
+// self.listView?.layoutDocumentView()
|
|
|
// self.thumbnailView.refreshUI()
|
|
|
|
|
|
- self.thumbnailView.reloadData()
|
|
|
+// self.thumbnailView.reloadData()
|
|
|
+
|
|
|
+ //获取原有page的下标 和 开始添加的下标
|
|
|
+ var indexTemp: Int = toIndex
|
|
|
+ var pageItems: [KMThumbnailPageItem] = []
|
|
|
+ for index in indexs {
|
|
|
+ let newPage: CPDFPage = self.listView?.document.page(at: UInt(index)).copy() as! CPDFPage
|
|
|
+ let pageItem = KMThumbnailPageItem(page: newPage, index: index, oldIndex: index)
|
|
|
+ pageItems.append(pageItem)
|
|
|
+ if (toIndex > index) { /// 删除了插入位置前面的页面,需要改变 toIndex
|
|
|
+ indexTemp -= 1
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ //建立模型
|
|
|
+ var tPageItems: [KMThumbnailPageItem] = []
|
|
|
+ for index in 0...pageItems.count - 1 {
|
|
|
+ let pageItem: KMThumbnailPageItem = pageItems[index]
|
|
|
+ let tItem = KMThumbnailPageItem(page: pageItem.page, index: indexTemp + index, oldIndex: pageItem.index)
|
|
|
+ tPageItems.append(tItem)
|
|
|
+ }
|
|
|
+
|
|
|
+ //进行移动
|
|
|
+ self.dragPageItems(pageItems: tPageItems)
|
|
|
}
|
|
|
|
|
|
//MARK: Noti
|
|
@@ -734,3 +756,57 @@ extension KMThumbnailViewController : NSMenuDelegate,NSMenuItemValidation {
|
|
|
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+//MARK: undoRedo
|
|
|
+extension KMThumbnailViewController {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ func dragPageItems(pageItems: [KMThumbnailPageItem]) {
|
|
|
+ var tempPageItems = pageItems
|
|
|
+ //按照原下标顺序
|
|
|
+ tempPageItems.sort(){$0.oldIndex > $1.oldIndex}
|
|
|
+ //移除现有
|
|
|
+ for pageItem in tempPageItems {
|
|
|
+ self.listView?.document.removePage(at: UInt(pageItem.oldIndex))
|
|
|
+ }
|
|
|
+ //在原位置添加
|
|
|
+ tempPageItems.sort(){$0.index < $1.index}
|
|
|
+ for pageItem in tempPageItems {
|
|
|
+ self.listView?.document.insertPageObject(pageItem.page, at: UInt(pageItem.index))
|
|
|
+ }
|
|
|
+
|
|
|
+ // 刷新UI
|
|
|
+ self.listView?.layoutDocumentView()
|
|
|
+ self.thumbnailView.reloadData()
|
|
|
+
|
|
|
+ self.undoRedoManager.registerUndo(withTarget: self) { targetType in
|
|
|
+ //替换下标顺序
|
|
|
+ var tempPageItems: [KMThumbnailPageItem] = []
|
|
|
+ for pageItem in pageItems {
|
|
|
+ let item = KMThumbnailPageItem(page: pageItem.page, index: pageItem.oldIndex, oldIndex: pageItem.index)
|
|
|
+ tempPageItems.append(item)
|
|
|
+ }
|
|
|
+ self.dragPageItems(pageItems: tempPageItems)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @IBAction func undo(_ sender: Any) {
|
|
|
+ if (self.undoRedoManager.canUndo) {
|
|
|
+ self.undoRedoManager.undo()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @IBAction func redo(_ sender: Any) {
|
|
|
+ if (self.undoRedoManager.canRedo) {
|
|
|
+ self.undoRedoManager.redo()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ struct KMThumbnailPageItem {
|
|
|
+ var page: CPDFPage
|
|
|
+ var index: Int
|
|
|
+ var oldIndex: Int
|
|
|
+ }
|
|
|
+}
|