KMHomeQuickToolsView.swift 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  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. setupUI()
  64. reloadData()
  65. }
  66. func setupUI() {
  67. titleLabel.stringValue = KMLocalizedString("Advanced Editing Tools")
  68. titleLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/1")
  69. titleLabel.font = ComponentLibrary.shared.font(forToken: "mac/body-m-bold")
  70. moreButton.properties = ComponentButtonProperty(type: .text_gray,
  71. size: .xxs,
  72. onlyIcon: true)
  73. moreButton.properties.propertyInfo.leftIcon_nor = NSImage(named: "quickTools_more_nor")
  74. moreButton.properties.propertyInfo.leftIcon_nor = NSImage(named: "quickTools_more_press")
  75. moreButton.reloadData()
  76. moreButton.setTarget(self, action: #selector(moreButtonClicked(_:)))
  77. let items = [cardPDFTool1, cardPDFTool2, cardPDFTool3, cardPDFTool4, cardPDFTool5, cardPDFTool6, cardPDFTool7, cardPDFTool8]
  78. for item in items {
  79. item!.delegate = self
  80. }
  81. }
  82. func refreshUI() {
  83. var showCount: CGFloat = 4 //每行显示的个数
  84. if CGRectGetWidth(itemsContendView.frame) < 168*2 + 1*16 {
  85. showCount = 1
  86. } else if CGRectGetWidth(itemsContendView.frame) < 168*3 + 2*16 {
  87. showCount = 2
  88. } else if CGRectGetWidth(itemsContendView.frame) < 168*4 + 3*16 {
  89. showCount = 3
  90. }
  91. print(showCount)
  92. var itemWidth = (CGRectGetWidth(self.itemsContendView.frame) - (showCount-1)*16 - 8)/showCount
  93. if itemWidth < 168 {
  94. itemWidth = 168
  95. }
  96. itemWidthConst.constant = itemWidth
  97. if let subviews = self.itemsContendView?.subviews {
  98. for view in subviews {
  99. if view is ComponentCardPDFTool {
  100. let index = subviews.firstIndex(of: view) ?? 0
  101. if index > KMNHomeQuickToolManager.defaultManager.quickToolsItemMutableArray.count - 1 {
  102. view.isHidden = true
  103. } else {
  104. if CGRectGetMinX(view.frame) > CGRectGetWidth(itemsContendView.frame) {
  105. view.isHidden = true
  106. } else {
  107. view.isHidden = false
  108. }
  109. }
  110. }
  111. }
  112. }
  113. }
  114. public func reloadData() {
  115. if KMNHomeQuickToolManager.defaultManager.collapseTools {
  116. itemHeightConst.constant = 60
  117. } else {
  118. itemHeightConst.constant = 88
  119. }
  120. self.refreshUI()
  121. let items = [cardPDFTool1, cardPDFTool2, cardPDFTool3, cardPDFTool4, cardPDFTool5, cardPDFTool6, cardPDFTool7, cardPDFTool8]
  122. let tagItems = [newTag1, newTag2, newTag3, newTag4, newTag5, newTag6, newTag7, newTag8]
  123. for tagItem in tagItems {
  124. tagItem?.isHidden = true
  125. tagItem?.properties = ComponentTagProperty(tagType: .mark_New, size: .m, text: KMLocalizedString("new"))
  126. }
  127. for item in items {
  128. var index = items.firstIndex(of: item) ?? 0
  129. if index > KMNHomeQuickToolManager.defaultManager.quickToolsItemMutableArray.count - 1 {
  130. index = 0
  131. item?.isHidden = true
  132. continue
  133. }
  134. item?.isHidden = false
  135. let toolType = HomeQuickToolType(rawValue: KMNHomeQuickToolManager.defaultManager.quickToolsItemMutableArray[index])!
  136. let toolMode = KMNHomeQuickToolMode.toolModeData(type: toolType)
  137. if let cardItem = item {
  138. cardItem.properties = ComponentCardPDFToolProperty(collapse: KMNHomeQuickToolManager.defaultManager.collapseTools,
  139. state: .normal,
  140. icon: NSImage(named: toolMode.toolImageName),
  141. text: toolMode.toolTitle,
  142. subText: toolMode.toolSubtitle)
  143. cardItem.properties.customData = toolMode
  144. }
  145. if toolMode.isNewState {
  146. let tagItem = tagItems[index]
  147. tagItem?.isHidden = false
  148. }
  149. }
  150. }
  151. //MARK: - Action
  152. @objc func moreButtonClicked(_ sender: NSView) {
  153. self.showThumbRightMenu(point: CGPointZero)
  154. }
  155. func showThumbRightMenu(point: CGPoint) {
  156. var viewHeight: CGFloat = 8
  157. var menuItemArr: [ComponentMenuitemProperty] = []
  158. var items = ["Collapse All", "Manage Quick Tools"]
  159. if KMNHomeQuickToolManager.defaultManager.collapseTools {
  160. items = ["Expand All", "Manage Quick Tools"]
  161. }
  162. for index in 0...items.count-1 {
  163. let properties_Menuitem: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
  164. itemSelected: false,
  165. isDisabled: false,
  166. keyEquivalent: nil,
  167. text: KMLocalizedString(items[index]),
  168. identifier: itemIdentifys[index])
  169. menuItemArr.append(properties_Menuitem)
  170. viewHeight += 36
  171. }
  172. if groupView == nil {
  173. groupView = ComponentGroup.createFromNib(in: ComponentLibrary.shared.componentBundle())
  174. }
  175. groupView.groupDelegate = self
  176. groupView?.frame = CGRectMake(0, 0, 100, viewHeight)
  177. groupView.updateGroupInfo(menuItemArr)
  178. if let superview = moreButton.superview {
  179. var point = superview.convert(moreButton.frame.origin, to: nil)
  180. point.y -= viewHeight
  181. point.y -= 10
  182. groupView.showWithPoint(point, relativeTo: moreButton)
  183. }
  184. }
  185. }
  186. //MARK: -
  187. extension KMHomeQuickToolsView: ComponentCardPDFToolDelegate {
  188. public func componentCardPDFToolDidClicked(_ view: ComponentCardPDFTool) {
  189. if view.properties.customData is KMNHomeQuickToolMode {
  190. let toolMode: KMNHomeQuickToolMode = view.properties.customData as! KMNHomeQuickToolMode
  191. delegate?.homeQuickToolsViewDidItemClicked?(self, toolMode.quickToolType)
  192. }
  193. }
  194. }
  195. //MARK: - ComponentGroupDelegate
  196. extension KMHomeQuickToolsView: ComponentGroupDelegate {
  197. public func componentGroupDidDismiss(group: ComponentGroup?) {
  198. moreButton.properties.state = .normal
  199. moreButton.reloadData()
  200. }
  201. public func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) {
  202. if menuItemProperty?.identifier == "CollapseToolsID" {
  203. KMNHomeQuickToolManager.defaultManager.collapseTools = !KMNHomeQuickToolManager.defaultManager.collapseTools
  204. self.delegate?.homeQuickToolsViewDidCollapseStateChanged?(self)
  205. } else if menuItemProperty?.identifier == "ManageToolsID" {
  206. self.delegate?.homeQuickToolsViewDidManageTools?(self)
  207. }
  208. }
  209. }