KMLongerButton.swift 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. //
  2. // KMLongerButton.swift
  3. // PDF Master
  4. //
  5. // Created by kdanmobile on 2023/10/26.
  6. //
  7. import Cocoa
  8. class KMLongerButton: NSButton{
  9. var containerViewController: KMBatchOperateLeftViewController?
  10. var isImageToPDF = false
  11. var popOver: NSPopover?
  12. var buttonLayer: CALayer?
  13. override func draw(_ dirtyRect: NSRect) {
  14. super.draw(dirtyRect)
  15. }
  16. override var intrinsicContentSize: NSSize {
  17. var size = super.intrinsicContentSize
  18. size.width += 20
  19. return size
  20. }
  21. override func awakeFromNib() {
  22. super.awakeFromNib()
  23. self.newTrackingArea()
  24. self.wantsLayer = true
  25. self.buttonLayer = CALayer()
  26. self.layer?.addSublayer(self.buttonLayer!)
  27. self.buttonLayer?.frame = CGRect(x: 0, y: 0, width: CGRectGetWidth(self.bounds), height: CGRectGetHeight(self.bounds))
  28. self.buttonLayer?.backgroundColor = KMAppearance.KM_000000_Color5DarkChange01().cgColor
  29. self.buttonLayer?.cornerRadius = 1
  30. self.buttonLayer?.isHidden = true
  31. }
  32. func newTrackingArea() {
  33. let trackingArea = NSTrackingArea(rect: self.bounds, options: [.mouseEnteredAndExited, .inVisibleRect, .activeAlways], owner: self, userInfo: nil)
  34. self.addTrackingArea(trackingArea)
  35. }
  36. func showPop(sender: NSView) {
  37. let menuViewController = KMCustomButtonPopMenuViewController()
  38. self.popOver = NSPopover()
  39. self.popOver?.contentViewController = menuViewController
  40. self.popOver?.animates = false
  41. self.popOver?.behavior = .semitransient
  42. self.popOver?.contentSize = menuViewController.view.frame.size
  43. var sourcesRect = sender.bounds
  44. sourcesRect = sender.convert(sourcesRect, to: nil)
  45. sourcesRect.origin.y -= 20
  46. sourcesRect.size.height += 20
  47. self.window!.popover = self.popOver
  48. self.window!.sourcesRect = sourcesRect
  49. self.popOver?.show(relativeTo: self.bounds.insetBy(dx: 0, dy: 5), of: self, preferredEdge: .maxY)
  50. }
  51. func closePop() {
  52. popOver?.close()
  53. popOver = nil
  54. window?.popover = nil
  55. }
  56. override func mouseEntered(with event: NSEvent) {
  57. super.mouseEntered(with: event)
  58. self.showPop(sender: self)
  59. self.buttonLayer?.isHidden = false
  60. }
  61. override func mouseExited(with event: NSEvent) {
  62. super.mouseExited(with: event)
  63. self.buttonLayer?.isHidden = true
  64. }
  65. override func mouseDown(with event: NSEvent) {
  66. super.mouseDown(with: event)
  67. }
  68. override func mouseUp(with event: NSEvent) {
  69. super.mouseUp(with: event)
  70. }
  71. func customViewButtonPopDidSelectIndex(_ index: Int) {
  72. self.closePop()
  73. if isImageToPDF {
  74. if index == 0 {
  75. containerViewController?.chooseFile()
  76. } else if index == 1 {
  77. containerViewController?.chooseFileFromCamera()
  78. } else {
  79. containerViewController?.chooseFileFromScanner()
  80. }
  81. } else {
  82. if index == 0 {
  83. containerViewController?.chooseFile()
  84. } else {
  85. containerViewController?.addOpendFile()
  86. }
  87. }
  88. }
  89. }