KMHomeQuickToolsView.swift 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. //
  2. // KMHomeQuickToolsView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by Niehaoyu on 2024/10/10.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. @objc public protocol KMHomeQuickToolsViewDelegate: AnyObject {
  10. @objc optional func homeQuickToolsViewDidCollapseStateChanged(_ view: KMHomeQuickToolsView)
  11. @objc optional func homeQuickToolsViewDidManageTools(_ view: KMHomeQuickToolsView)
  12. @objc optional func homeQuickToolsViewDidItemClicked(_ view: KMHomeQuickToolsView, _ toolType: HomeQuickToolType)
  13. }
  14. public class KMHomeQuickToolsView: BaseXibView {
  15. @IBOutlet var contendBox: NSBox!
  16. @IBOutlet var titleLabel: NSTextField!
  17. @IBOutlet var moreButton: ComponentButton!
  18. @IBOutlet var itemsContendView: NSView!
  19. @IBOutlet var cardPDFTool1: ComponentCardPDFTool!
  20. @IBOutlet var cardPDFTool2: ComponentCardPDFTool!
  21. @IBOutlet var cardPDFTool3: ComponentCardPDFTool!
  22. @IBOutlet var cardPDFTool4: ComponentCardPDFTool!
  23. @IBOutlet var cardPDFTool5: ComponentCardPDFTool!
  24. @IBOutlet var cardPDFTool6: ComponentCardPDFTool!
  25. @IBOutlet var cardPDFTool7: ComponentCardPDFTool!
  26. @IBOutlet var cardPDFTool8: ComponentCardPDFTool!
  27. @IBOutlet var newTag1: ComponentTag!
  28. @IBOutlet var newTag2: ComponentTag!
  29. @IBOutlet var newTag3: ComponentTag!
  30. @IBOutlet var newTag4: ComponentTag!
  31. @IBOutlet var newTag5: ComponentTag!
  32. @IBOutlet var newTag6: ComponentTag!
  33. @IBOutlet var newTag7: ComponentTag!
  34. @IBOutlet var newTag8: ComponentTag!
  35. @IBOutlet var itemWidthConst: NSLayoutConstraint!
  36. @IBOutlet var itemHeightConst: NSLayoutConstraint!
  37. private var groupView: ComponentGroup!
  38. var itemIdentifys = ["CollapseToolsID", "ManageToolsID"]
  39. weak open var delegate: KMHomeQuickToolsViewDelegate?
  40. var isCollapse = false
  41. //MARK: - func
  42. public override func draw(_ dirtyRect: NSRect) {
  43. super.draw(dirtyRect)
  44. // Drawing code here.
  45. }
  46. public required init?(coder decoder: NSCoder) {
  47. super.init(coder: decoder)
  48. }
  49. override init(frame frameRect: NSRect) {
  50. super.init(frame: frameRect)
  51. }
  52. public override func awakeFromNib() {
  53. super.awakeFromNib()
  54. self.setupUI()
  55. }
  56. override func updateUILanguage() {
  57. super.updateUILanguage()
  58. setupUI()
  59. reloadData()
  60. }
  61. override func updateUIThemeColor() {
  62. super.updateUIThemeColor()
  63. }
  64. func setupUI() {
  65. titleLabel.stringValue = KMLocalizedString("Advanced Editing Tools")
  66. titleLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/1")
  67. titleLabel.font = ComponentLibrary.shared.font(forToken: "mac/body-m-bold")
  68. moreButton.properties = ComponentButtonProperty(type: .text_gray,
  69. size: .xxs,
  70. onlyIcon: true)
  71. moreButton.properties.propertyInfo.leftIcon_nor = NSImage(named: "quickTools_more_nor")
  72. moreButton.properties.propertyInfo.leftIcon_nor = NSImage(named: "quickTools_more_press")
  73. moreButton.reloadData()
  74. moreButton.setTarget(self, action: #selector(moreButtonClicked(_:)))
  75. let items = [cardPDFTool1, cardPDFTool2, cardPDFTool3, cardPDFTool4, cardPDFTool5, cardPDFTool6, cardPDFTool7, cardPDFTool8]
  76. for item in items {
  77. item!.delegate = self
  78. }
  79. }
  80. func refreshUI() {
  81. var showCount: CGFloat = 4 //每行显示的个数
  82. if CGRectGetWidth(itemsContendView.frame) < 168*2 + 1*16 {
  83. showCount = 1
  84. } else if CGRectGetWidth(itemsContendView.frame) < 168*3 + 2*16 {
  85. showCount = 2
  86. } else if CGRectGetWidth(itemsContendView.frame) < 168*4 + 3*16 {
  87. showCount = 3
  88. }
  89. print(showCount)
  90. var itemWidth = (CGRectGetWidth(self.itemsContendView.frame) - (showCount-1)*16 - 8)/showCount
  91. if itemWidth < 168 {
  92. itemWidth = 168
  93. }
  94. itemWidthConst.constant = itemWidth
  95. if let subviews = self.itemsContendView?.subviews {
  96. for view in subviews {
  97. if view is ComponentCardPDFTool {
  98. let index = subviews.firstIndex(of: view) ?? 0
  99. if index > KMNHomeQuickToolManager.defaultManager.quickToolsItemMutableArray.count - 1 {
  100. view.isHidden = true
  101. } else {
  102. if CGRectGetMinX(view.frame) > CGRectGetWidth(itemsContendView.frame) {
  103. view.isHidden = true
  104. } else {
  105. view.isHidden = false
  106. }
  107. }
  108. }
  109. }
  110. }
  111. }
  112. public func reloadData() {
  113. if KMNHomeQuickToolManager.defaultManager.collapseTools {
  114. itemHeightConst.constant = 60
  115. } else {
  116. itemHeightConst.constant = 88
  117. }
  118. self.refreshUI()
  119. let items = [cardPDFTool1, cardPDFTool2, cardPDFTool3, cardPDFTool4, cardPDFTool5, cardPDFTool6, cardPDFTool7, cardPDFTool8]
  120. let tagItems = [newTag1, newTag2, newTag3, newTag4, newTag5, newTag6, newTag7, newTag8]
  121. for tagItem in tagItems {
  122. tagItem?.isHidden = true
  123. tagItem?.properties = ComponentTagProperty(tagType: .mark_New, size: .m, text: KMLocalizedString("new"))
  124. }
  125. for item in items {
  126. var index = items.firstIndex(of: item) ?? 0
  127. if index > KMNHomeQuickToolManager.defaultManager.quickToolsItemMutableArray.count - 1 {
  128. index = 0
  129. item?.isHidden = true
  130. continue
  131. }
  132. item?.isHidden = false
  133. let toolType = HomeQuickToolType(rawValue: KMNHomeQuickToolManager.defaultManager.quickToolsItemMutableArray[index])!
  134. let toolMode = KMNHomeQuickToolMode.toolModeData(type: toolType)
  135. if let cardItem = item {
  136. cardItem.properties = ComponentCardPDFToolProperty(collapse: KMNHomeQuickToolManager.defaultManager.collapseTools,
  137. state: .normal,
  138. icon: NSImage(named: toolMode.toolImageName),
  139. text: toolMode.toolTitle,
  140. subText: toolMode.toolSubtitle)
  141. cardItem.properties.customData = toolMode
  142. }
  143. if toolMode.isNewState {
  144. let tagItem = tagItems[index]
  145. tagItem?.isHidden = false
  146. }
  147. }
  148. }
  149. //MARK: - Action
  150. @objc func moreButtonClicked(_ sender: NSView) {
  151. self.showThumbRightMenu(point: CGPointZero)
  152. }
  153. func showThumbRightMenu(point: CGPoint) {
  154. var viewHeight: CGFloat = 8
  155. var menuItemArr: [ComponentMenuitemProperty] = []
  156. var items = ["Collapse All", "Manage Quick Tools"]
  157. if KMNHomeQuickToolManager.defaultManager.collapseTools {
  158. items = ["Expand All", "Manage Quick Tools"]
  159. }
  160. for index in 0...items.count-1 {
  161. let properties_Menuitem: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
  162. itemSelected: false,
  163. isDisabled: false,
  164. keyEquivalent: nil,
  165. text: KMLocalizedString(items[index]),
  166. identifier: itemIdentifys[index])
  167. menuItemArr.append(properties_Menuitem)
  168. viewHeight += 36
  169. }
  170. if groupView == nil {
  171. groupView = ComponentGroup.createFromNib(in: ComponentLibrary.shared.componentBundle())
  172. }
  173. groupView.groupDelegate = self
  174. groupView?.frame = CGRectMake(0, 0, 100, viewHeight)
  175. groupView.updateGroupInfo(menuItemArr)
  176. if let superview = moreButton.superview {
  177. var point = superview.convert(moreButton.frame.origin, to: nil)
  178. point.y -= viewHeight
  179. point.y -= 10
  180. groupView.showWithPoint(point, relativeTo: moreButton)
  181. }
  182. }
  183. }
  184. //MARK: -
  185. extension KMHomeQuickToolsView: ComponentCardPDFToolDelegate {
  186. public func componentCardPDFToolDidClicked(_ view: ComponentCardPDFTool) {
  187. if view.properties.customData is KMNHomeQuickToolMode {
  188. let toolMode: KMNHomeQuickToolMode = view.properties.customData as! KMNHomeQuickToolMode
  189. delegate?.homeQuickToolsViewDidItemClicked?(self, toolMode.quickToolType)
  190. }
  191. }
  192. }
  193. //MARK: - ComponentGroupDelegate
  194. extension KMHomeQuickToolsView: ComponentGroupDelegate {
  195. public func componentGroupDidDismiss(group: ComponentGroup?) {
  196. moreButton.properties.state = .normal
  197. moreButton.reloadData()
  198. }
  199. public func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) {
  200. if menuItemProperty?.identifier == "CollapseToolsID" {
  201. KMNHomeQuickToolManager.defaultManager.collapseTools = !KMNHomeQuickToolManager.defaultManager.collapseTools
  202. self.delegate?.homeQuickToolsViewDidCollapseStateChanged?(self)
  203. } else if menuItemProperty?.identifier == "ManageToolsID" {
  204. self.delegate?.homeQuickToolsViewDidManageTools?(self)
  205. }
  206. }
  207. }