KMBookMarkTableRowView.swift 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. //
  2. // KMBookMarkTableRowView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by lizhe on 2023/3/14.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. typealias KMBookMarkTableRowViewHoverCallback = (_ mouseEntered: Bool, _ mouseBox: KMBox) -> Void
  10. typealias KMBookMarkTableRowViewMouseDown = (_ view: KMBookMarkTableRowView, _ event: NSEvent) -> Void
  11. typealias KMBookMarkTableRowViewRightMouseDown = (_ view: KMBookMarkTableRowView, _ event: NSEvent) -> Void
  12. class KMBookMarkTableRowView: NSTableRowView {
  13. var box: KMBox?
  14. var contentBox: KMBox?
  15. var model: KMBookMarkItem! {
  16. didSet {
  17. self.reloadData()
  18. }
  19. }
  20. var hoverCallback: KMBookMarkTableRowViewHoverCallback?
  21. var mouseDownAction: KMBookMarkTableRowViewMouseDown?
  22. var rightMouseDownAction: KMBookMarkTableRowViewRightMouseDown?
  23. var contentBackgroundColor: NSColor?
  24. var menuClickedAction: ((_ clickPoint: NSPoint) -> NSMenu)?
  25. override func draw(_ dirtyRect: NSRect) {
  26. super.draw(dirtyRect)
  27. self.addBox()
  28. self.drawView()
  29. }
  30. func addBox() {
  31. if self.box == nil {
  32. var rect = self.bounds
  33. rect.origin.x = self.bounds.origin.x + 8.0
  34. rect.size.width = self.bounds.size.width - 16.0
  35. self.box?.wantsLayer = true
  36. self.box?.layer?.masksToBounds = true
  37. self.box = KMBox(frame: rect)
  38. self.box?.borderWidth = 0
  39. self.box?.boxType = .custom
  40. self.addSubview(self.box!, positioned: NSWindow.OrderingMode.below, relativeTo: self)
  41. self.box?.autoresizingMask = [.width, .height]
  42. self.box?.moveCallback = { [unowned self] (mouseEntered, mouseBox) in
  43. self.hoverCallback?(mouseEntered, mouseBox)
  44. self.reloadData()
  45. }
  46. self.box?.downCallback = { [unowned self] (mouseEntered, mouseBox, event) in
  47. self.mouseDownAction?(self, event)
  48. }
  49. self.box?.rightDownCallback = { [unowned self] (mouseEntered, mouseBox, event) in
  50. self.rightMouseDownAction?(self, event)
  51. }
  52. self.contentBox?.wantsLayer = true
  53. self.contentBox?.layer?.masksToBounds = true
  54. self.contentBox = KMBox(frame: self.bounds)
  55. self.contentBox?.borderWidth = 0
  56. self.contentBox?.layer?.cornerRadius = 8
  57. self.contentBox?.boxType = .custom
  58. self.contentBox?.autoresizingMask = [.width, .height]
  59. self.contentBox?.rightDownCallback = { [unowned self] (downEntered, mouseBox, event) in
  60. // guard let callBack = rightMouseDownAction else { return }
  61. //
  62. // callBack(self, event)
  63. }
  64. }
  65. self.addSubview(self.contentBox!, positioned: NSWindow.OrderingMode.above, relativeTo: self)
  66. }
  67. override func drawSelection(in dirtyRect: NSRect) {
  68. // super.drawSelection(in: dirtyRect)
  69. self.reloadData()
  70. }
  71. override func menu(for event: NSEvent) -> NSMenu? {
  72. let point = event.locationInWindow
  73. if menuClickedAction != nil {
  74. let menu = menuClickedAction!(point)
  75. return menu
  76. }
  77. return super.menu(for: event)
  78. }
  79. }
  80. extension KMBookMarkTableRowView {
  81. func reloadData() {
  82. self.drawView()
  83. }
  84. func drawView(_ color: NSColor = NSColor.km_init(hex: "#EDEEF0")) {
  85. if self.model!.select {
  86. self.box?.fillColor = ComponentLibrary.shared.getComponentColorFromKey("colorPrimary/bg-opacity-dark")
  87. } else if self.model.hover {
  88. self.box?.fillColor = ComponentLibrary.shared.getComponentColorFromKey("colorFill/hov-opacity")
  89. } else {
  90. self.box?.fillColor = .clear
  91. }
  92. }
  93. }