KMHomeRightView.swift 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. //
  2. // KMHomeRightView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by Niehaoyu on 2024/10/10.
  6. //
  7. import Cocoa
  8. class KMHomeRightView: BaseXibView {
  9. @IBOutlet var rightScrollView: NSScrollView!
  10. @IBOutlet var rightCollectionView: NSCollectionView!
  11. var filesHeaderView: KMHomeFilesHeaderView = KMHomeFilesHeaderView()
  12. //MARK: - func
  13. override func draw(_ dirtyRect: NSRect) {
  14. super.draw(dirtyRect)
  15. // Drawing code here.
  16. }
  17. public required init?(coder decoder: NSCoder) {
  18. super.init(coder: decoder)
  19. }
  20. override init(frame frameRect: NSRect) {
  21. super.init(frame: frameRect)
  22. }
  23. public override func awakeFromNib() {
  24. super.awakeFromNib()
  25. self.configUI()
  26. }
  27. override func layout() {
  28. super.layout()
  29. rightCollectionView.reloadData()
  30. }
  31. func configUI() {
  32. rightScrollView.scrollerStyle = .overlay
  33. rightCollectionView.backgroundColors = [NSColor.clear]
  34. rightCollectionView.wantsLayer = true
  35. rightCollectionView.layer?.backgroundColor = NSColor.clear.cgColor
  36. rightCollectionView.delegate = self
  37. rightCollectionView.dataSource = self
  38. rightCollectionView.allowsEmptySelection = true
  39. rightCollectionView.register(KMHistoryFileThumbItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHistoryFileThumbItem"))
  40. rightCollectionView.register(KMHistoryFileListItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHistoryFileListItem"))
  41. rightCollectionView.register(KMHomeQuickToolsView.self, forSupplementaryViewOfKind: NSCollectionView.elementKindSectionHeader, withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "kmHomeQuickToolsView"))
  42. rightCollectionView.register(KMHomeFilesHeaderView.self, forSupplementaryViewOfKind: NSCollectionView.elementKindSectionHeader, withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "kmHomeFilesHeaderView"))
  43. rightCollectionView.register(KMHomeFilesEmptyHeaderView.self, forSupplementaryViewOfKind: NSCollectionView.elementKindSectionHeader, withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHomeFilesEmptyHeaderView"))
  44. rightCollectionView.register(KMHomeFilesEmptyHeaderView.self, forSupplementaryViewOfKind: NSCollectionView.elementKindSectionFooter, withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHomeFilesEmptyHeaderView"))
  45. }
  46. func reloadData() {
  47. self.rightCollectionView.reloadData()
  48. }
  49. private func collectionViewSelectedChanged() {
  50. let indexs = rightCollectionView.selectionIndexPaths
  51. HistoryFilesManager.manager.selectFiles.removeAll()
  52. if indexs.count >= 0 {
  53. for index in indexs {
  54. let url = HistoryFilesManager.manager.files[index.item]
  55. HistoryFilesManager.manager.selectFiles.append(url)
  56. }
  57. }
  58. filesHeaderView.updateDeleteButtonState()
  59. }
  60. }
  61. //MARK: - NSCollectionViewDelegate, NSCollectionViewDataSource
  62. extension KMHomeRightView: NSCollectionViewDelegate, NSCollectionViewDataSource, NSCollectionViewDelegateFlowLayout {
  63. func numberOfSections(in collectionView: NSCollectionView) -> Int {
  64. return 2
  65. }
  66. func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
  67. if section == 0 {
  68. return 0
  69. }
  70. return HistoryFilesManager.manager.files.count
  71. }
  72. func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
  73. if indexPath.item >= HistoryFilesManager.manager.files.count {
  74. return NSCollectionViewItem()
  75. }
  76. if HistoryFilesManager.manager.showMode == .Thumbnail {
  77. let item: KMHistoryFileThumbItem = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHistoryFileThumbItem"), for: indexPath) as! KMHistoryFileThumbItem
  78. return item
  79. } else if HistoryFilesManager.manager.showMode == .List {
  80. let item: KMHistoryFileListItem = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHistoryFileListItem"), for: indexPath) as! KMHistoryFileListItem
  81. item.fileURL = HistoryFilesManager.manager.files[indexPath.item]
  82. item.reloadData()
  83. return item
  84. }
  85. return NSCollectionViewItem()
  86. }
  87. func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> NSSize {
  88. if HistoryFilesManager.manager.showMode == .Thumbnail {
  89. return CGSize(width: 226, height: 248)
  90. } else if HistoryFilesManager.manager.showMode == .List {
  91. let width = collectionView.frame.size.width - 80
  92. return CGSize(width: width, height: 80)
  93. }
  94. return CGSize(width: 0.01, height: 0.01)
  95. }
  96. func collectionView(_ collectionView: NSCollectionView, viewForSupplementaryElementOfKind kind: NSCollectionView.SupplementaryElementKind, at indexPath: IndexPath) -> NSView {
  97. if kind == NSCollectionView.elementKindSectionHeader {
  98. if indexPath.section == 0 {
  99. //quick tools
  100. let view = collectionView.makeSupplementaryView(ofKind: kind, withIdentifier: NSUserInterfaceItemIdentifier("kmHomeQuickToolsView"), for: indexPath) as! KMHomeQuickToolsView
  101. return view
  102. } else if indexPath.section == 1 {
  103. //Recently
  104. filesHeaderView = collectionView.makeSupplementaryView(ofKind: kind, withIdentifier: NSUserInterfaceItemIdentifier("kmHomeFilesHeaderView"), for: indexPath) as! KMHomeFilesHeaderView
  105. filesHeaderView.delegate = self
  106. return filesHeaderView
  107. }
  108. } else if kind == NSCollectionView.elementKindSectionFooter {
  109. let view = collectionView.makeSupplementaryView(ofKind: kind, withIdentifier: NSUserInterfaceItemIdentifier("KMHomeFilesEmptyHeaderView"), for: indexPath) as! KMHomeFilesEmptyHeaderView
  110. return view
  111. }
  112. return NSView()
  113. }
  114. func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
  115. return 8
  116. }
  117. func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
  118. return 0.01
  119. }
  120. public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> NSSize {
  121. if section == 0 {
  122. return NSSize(width: collectionView.frame.size.width, height: 232)
  123. } else if section == 1 {
  124. return NSSize(width: collectionView.frame.size.width, height: 28)
  125. }
  126. return NSSize(width: 0, height: 0.01)
  127. }
  128. public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, referenceSizeForFooterInSection section: Int) -> NSSize {
  129. if section == 0 {
  130. return NSSize(width: 0, height: 40)
  131. }
  132. return NSSize(width: 0, height: 0.01)
  133. }
  134. public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, insetForSectionAt section: Int) -> NSEdgeInsets {
  135. return NSEdgeInsetsMake(12, 40, 0, 40)
  136. }
  137. func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) {
  138. self.collectionViewSelectedChanged()
  139. }
  140. func collectionView(_ collectionView: NSCollectionView, didDeselectItemsAt indexPaths: Set<IndexPath>) {
  141. self.collectionViewSelectedChanged()
  142. }
  143. }
  144. extension KMHomeRightView: KMHomeFilesHeaderViewDelegate {
  145. func homeFilesShowModeDidUpdate(_ view: KMHomeFilesHeaderView) {
  146. self.reloadData()
  147. }
  148. func homeFilesHeaderViewDeleteButtonClicked(_ view: KMHomeFilesHeaderView) {
  149. }
  150. }