KMBookmarkOutlineView.swift 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. //
  2. // KMBookemarkOutlineView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by lizhe on 2024/3/4.
  6. //
  7. import Cocoa
  8. private let kLabelIdentifier = NSUserInterfaceItemIdentifier("Label")
  9. private let kFileIdentifier = NSUserInterfaceItemIdentifier("File")
  10. private let kPageIdentifier = NSUserInterfaceItemIdentifier("Page")
  11. class KMBookmarkOutlineView: KMBaseXibView {
  12. @IBOutlet weak var outlineView: NSOutlineView!
  13. var data: KMRootBookmark? {
  14. didSet {
  15. self.reloadData()
  16. }
  17. }
  18. override func draw(_ dirtyRect: NSRect) {
  19. super.draw(dirtyRect)
  20. // Drawing code here.
  21. }
  22. override func setup() {
  23. outlineView.delegate = self
  24. outlineView.dataSource = self
  25. outlineView.registerForDraggedTypes([kPasteboardTypeBookmarkRows, .fileURL, .string])
  26. outlineView.doubleAction = #selector(doubleClickBookmark)
  27. }
  28. override func reloadData() {
  29. guard let data = data else { return }
  30. self.outlineView.reloadData()
  31. }
  32. }
  33. //MARK: Action
  34. extension KMBookmarkOutlineView {
  35. @objc func doubleClickBookmark() {
  36. }
  37. }
  38. // MARK: - NSOutlineViewDataSource
  39. extension KMBookmarkOutlineView: NSOutlineViewDataSource {
  40. func outlineView(_ outlineView: NSOutlineView, numberOfChildrenOfItem item: Any?) -> Int {
  41. let bookmark = item as? KMBookmark ?? data
  42. guard let bookmark = bookmark else { return 0}
  43. return bookmark.bookmarkType == .folder ? bookmark.children.count : 0
  44. }
  45. func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool {
  46. let bookmark = item as! KMBookmark
  47. return bookmark.bookmarkType == .folder
  48. }
  49. func outlineView(_ outlineView: NSOutlineView, child index: Int, ofItem item: Any?) -> Any {
  50. let bookmark = (item as? KMBookmark) ?? data
  51. return bookmark?.objectOfChidren(index: index) as Any
  52. }
  53. }
  54. extension KMBookmarkOutlineView: NSOutlineViewDelegate {
  55. // MARK: - NSOutlineViewDelegate
  56. func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {
  57. guard let column = tableColumn else { return nil }
  58. guard let item = item as? KMBookmark else { return nil }
  59. let identifier = column.identifier
  60. var cell: NSTableCellView = NSTableCellView()
  61. switch identifier {
  62. case kLabelIdentifier: do {
  63. cell = KMBookmarkOutlineTitleCellView()
  64. }
  65. case kPageIdentifier: do {
  66. cell = KMBookmarkOutlinePageCellView()
  67. }
  68. case kFileIdentifier: do {
  69. cell = KMBookmarkOutlineFileCellView()
  70. }
  71. default:
  72. break
  73. }
  74. return cell
  75. }
  76. }