KMPageEditThumbnailView.swift 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. //
  2. // KMPageEditThumbnailView.swift
  3. // PDF Master
  4. //
  5. // Created by tangchao on 2023/1/6.
  6. //
  7. import Cocoa
  8. typealias KMPageEditThumbnailViewSelectionDidChange = (_ selectedIndexs: Set<IndexPath>) -> ()
  9. class KMPageEditThumbnailView: KMPDFThumbnailView {
  10. var selectionDidChange: KMPageEditThumbnailViewSelectionDidChange!
  11. private let defaultItemSize = NSMakeSize(208, 294)
  12. private var defaultThumbnailSzie: NSSize!
  13. var selectionIndexPaths: Set<IndexPath> {
  14. get {
  15. return self.collectionView.selectionIndexPaths
  16. }
  17. set {
  18. var indexpaths: Set<IndexPath> = []
  19. for indexpath in newValue {
  20. if (indexpath.section >= self.collectionView.numberOfSections) {
  21. continue
  22. }
  23. if (indexpath.item >= self.collectionView.numberOfItems(inSection: indexpath.section)) {
  24. continue
  25. }
  26. indexpaths.insert(indexpath)
  27. }
  28. self.collectionView.selectionIndexPaths = indexpaths
  29. // 通知外面
  30. guard let callback = self.selectionDidChange else {
  31. return
  32. }
  33. callback(self.collectionView.selectionIndexPaths)
  34. }
  35. }
  36. override func initDefaultValue() {
  37. super.initDefaultValue()
  38. self.collectionView.allowsMultipleSelection = true
  39. self.register(KMPageEditThumbnailItem.self)
  40. self.collectionView.registerForDraggedTypes([NSPasteboard.PasteboardType(rawValue: "localForDraggedTypes"), .fileURL,.string,.pdf])
  41. self.collectionView.setDraggingSourceOperationMask([.copy, .delete], forLocal: false)
  42. self.itemSize = NSMakeSize(208, 294)
  43. self.defaultThumbnailSzie = self.thumbnailSzie
  44. self.isShowPageSize = true
  45. }
  46. func selectPages(at indexpaths: Set<IndexPath>) {
  47. self.selectionIndexPaths = indexpaths
  48. }
  49. public func refreshUI(indexs: Set<IndexPath> = []) {
  50. if (Thread.isMainThread) {
  51. if (indexs.isEmpty) {
  52. self.reloadData()
  53. } else {
  54. self.reloadData(indexs: indexs)
  55. }
  56. } else {
  57. DispatchQueue.main.async {
  58. if (indexs.isEmpty) {
  59. self.reloadData()
  60. } else {
  61. self.reloadData(indexs: indexs)
  62. }
  63. }
  64. }
  65. }
  66. public func zoomOut() {
  67. if (self.itemSize.width > self.defaultItemSize.width) {
  68. return
  69. }
  70. if (self.itemSize.width < self.defaultItemSize.width) {
  71. self.itemSize = self.defaultItemSize
  72. self.thumbnailSzie = self.defaultThumbnailSzie
  73. } else if (self.itemSize.width == self.defaultItemSize.width) {
  74. self.itemSize = NSSize(width: self.defaultItemSize.width*1.5, height: self.defaultItemSize.height*1.5)
  75. self.thumbnailSzie = NSSize(width: self.defaultThumbnailSzie.width*1.5, height: self.defaultThumbnailSzie.height*1.5)
  76. }
  77. let indexpaths = self.collectionView.selectionIndexPaths
  78. self.refreshUI()
  79. self.collectionView.selectionIndexPaths = indexpaths
  80. }
  81. public func zoomIn() {
  82. if (self.itemSize.width < self.defaultItemSize.width) {
  83. return
  84. }
  85. if (self.itemSize.width > self.defaultItemSize.width) {
  86. self.itemSize = self.defaultItemSize
  87. self.thumbnailSzie = self.defaultThumbnailSzie
  88. } else if (self.itemSize.width == self.defaultItemSize.width) {
  89. self.itemSize = NSSize(width: self.defaultItemSize.width*0.5, height: self.defaultItemSize.height*0.5)
  90. self.thumbnailSzie = NSSize(width: self.defaultThumbnailSzie.width*0.5, height: self.defaultThumbnailSzie.height*0.5)
  91. }
  92. let indexpaths = self.collectionView.selectionIndexPaths
  93. self.refreshUI()
  94. self.collectionView.selectionIndexPaths = indexpaths
  95. }
  96. }
  97. extension KMPageEditThumbnailView {
  98. override func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) {
  99. super.collectionView(collectionView, didSelectItemsAt: indexPaths)
  100. DispatchQueue.main.async {
  101. guard let callback = self.selectionDidChange else {
  102. return
  103. }
  104. callback(collectionView.selectionIndexPaths)
  105. }
  106. }
  107. override func collectionView(_ collectionView: NSCollectionView, didDeselectItemsAt indexPaths: Set<IndexPath>) {
  108. super.collectionView(collectionView, didDeselectItemsAt: indexPaths)
  109. DispatchQueue.main.async {
  110. guard let callback = self.selectionDidChange else {
  111. return
  112. }
  113. callback(collectionView.selectionIndexPaths)
  114. }
  115. }
  116. }