KMPDFSecToolbarController.swift 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. //
  2. // KMPDFSecToolbarController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by Niehaoyu on 2024/10/8.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. @objc protocol KMPDFSecToolbarControllerDelegate: AnyObject {
  10. @objc optional func kmPDFSecToolbarControllerDidItemClicked(_ controller: KMPDFSecToolbarController, _ property: Any)
  11. }
  12. class KMPDFSecToolbarController: NSViewController {
  13. @IBOutlet var contendBox: NSBox!
  14. @IBOutlet var infoContendView: NSView!
  15. @IBOutlet var rightContendView: NSView!
  16. @IBOutlet var moreToolsView: ComponentDropdownTool!
  17. @IBOutlet var contendViewWidthConst: NSLayoutConstraint!
  18. @IBOutlet var rightContendViewWidthConst: NSLayoutConstraint!
  19. private var propertys: [Any] = []
  20. private var rightPropertys: [Any] = []
  21. weak open var delegate: KMPDFSecToolbarControllerDelegate?
  22. override func viewDidLoad() {
  23. super.viewDidLoad()
  24. // Do view setup here.
  25. setUpProperty()
  26. }
  27. func setUpProperty() {
  28. moreToolsView.properties = ComponentDropdownToolProperty(state: .normal, leftIcon: NSImage(named: "toolbar_doubleArrow_right"))
  29. }
  30. //MARK: - reload
  31. public func reloadMainPropertys(_ arr: [Any]) {
  32. propertys.removeAll()
  33. for item in arr {
  34. propertys.append(item)
  35. }
  36. reloadMainView()
  37. }
  38. public func reloadRightPropertys(_ arr: [Any]) {
  39. rightPropertys.removeAll()
  40. for item in arr {
  41. rightPropertys.append(item)
  42. }
  43. reloadRightView()
  44. }
  45. func reloadMainView() {
  46. let subviews = infoContendView.subviews
  47. for view in subviews {
  48. view.removeFromSuperview()
  49. }
  50. var itemXvalue: CGFloat = 0
  51. for property in propertys {
  52. if property is ComponentButtonProperty {
  53. let buttonProperty = (property as! ComponentButtonProperty)
  54. let button = ComponentButton.init()
  55. button.properties = buttonProperty
  56. if buttonProperty.onlyIcon {
  57. button.frame = CGRectMake(itemXvalue, CGRectGetHeight(infoContendView.frame)/2-14, 28, 28)
  58. } else {
  59. button.frame = CGRectMake(itemXvalue, CGRectGetHeight(infoContendView.frame)/2-14, button.properties.propertyInfo.viewWidth, 28)
  60. }
  61. button.setTarget(self, action: #selector(buttonClicked(_:)))
  62. infoContendView.addSubview(button)
  63. itemXvalue += CGRectGetWidth(button.frame)
  64. itemXvalue += 12
  65. } else if property is ComponentDividerProperty {
  66. let divider = ComponentDivider.init()
  67. divider.frame = CGRectMake(itemXvalue, CGRectGetHeight(infoContendView.frame)/2-8, 1, 16)
  68. divider.properties = (property as! ComponentDividerProperty)
  69. infoContendView.addSubview(divider)
  70. itemXvalue += 1
  71. itemXvalue += 12
  72. } else if property is ComponentDropdownToolProperty {
  73. let dropdownTool = ComponentDropdownTool.init()
  74. dropdownTool.properties = property as! ComponentDropdownToolProperty
  75. dropdownTool.frame = CGRectMake(itemXvalue, CGRectGetHeight(infoContendView.frame)/2-14, dropdownTool.properties.propertyInfo.viewWidth, 28)
  76. dropdownTool.delegate = self
  77. infoContendView.addSubview(dropdownTool)
  78. itemXvalue += CGRectGetWidth(dropdownTool.frame)
  79. itemXvalue += 12
  80. }
  81. }
  82. itemXvalue -= 12
  83. contendViewWidthConst.constant = itemXvalue
  84. }
  85. func reloadRightView() {
  86. let subviews = rightContendView.subviews
  87. for view in subviews {
  88. view.removeFromSuperview()
  89. }
  90. var itemXvalue: CGFloat = 0
  91. for property in rightPropertys {
  92. if property is ComponentButtonProperty {
  93. let buttonProperty = (property as! ComponentButtonProperty)
  94. let button = ComponentButton.init()
  95. button.properties = buttonProperty
  96. if buttonProperty.onlyIcon {
  97. button.frame = CGRectMake(itemXvalue, 0, 28, 28)
  98. } else {
  99. button.frame = CGRectMake(itemXvalue, 0, button.properties.propertyInfo.viewWidth, 28)
  100. }
  101. button.setTarget(self, action: #selector(buttonClicked(_:)))
  102. rightContendView.addSubview(button)
  103. itemXvalue += CGRectGetWidth(button.frame)
  104. itemXvalue += 12
  105. } else if property is ComponentDividerProperty {
  106. let divider = ComponentDivider.init()
  107. divider.frame = CGRectMake(itemXvalue, CGRectGetHeight(infoContendView.frame)/2-8, 1, 16)
  108. divider.properties = (property as! ComponentDividerProperty)
  109. rightContendView.addSubview(divider)
  110. itemXvalue += 1
  111. itemXvalue += 12
  112. }
  113. }
  114. itemXvalue -= 12
  115. rightContendViewWidthConst.constant = itemXvalue
  116. }
  117. func refreshMainview() {
  118. let subviews = infoContendView.subviews
  119. for view in subviews {
  120. if view is ComponentButton {
  121. (view as! ComponentButton).reloadData()
  122. } else if view is ComponentDropdownTool {
  123. (view as! ComponentDropdownTool).reloadData()
  124. }
  125. }
  126. }
  127. func refreshRightview() {
  128. let subviews = rightContendView.subviews
  129. for view in subviews {
  130. if view is ComponentButton {
  131. (view as! ComponentButton).reloadData()
  132. }
  133. }
  134. }
  135. //MARK: -
  136. @objc func buttonClicked(_ sender: ComponentButton) {
  137. delegate?.kmPDFSecToolbarControllerDidItemClicked?(self, sender.properties)
  138. }
  139. }
  140. extension KMPDFSecToolbarController: ComponentDropdownToolDelegate {
  141. func componentDropdownToolDidClicked(_ view: ComponentDropdownTool, menuItem: ComponentMenuitemProperty?) {
  142. if let property = menuItem {
  143. property.itemSelected = false
  144. delegate?.kmPDFSecToolbarControllerDidItemClicked?(self, property)
  145. }
  146. }
  147. }