KMPDFToolbarController.swift 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682
  1. //
  2. // KMPDFToolbarController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by Niehaoyu on 2024/10/8.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. @objc protocol KMPDFToolbarControllerDelegate: AnyObject {
  10. @objc optional func kmPDFToolbarControllerDidToolbarItemClicked(_ controller: KMPDFToolbarController, _ itemIdentifier: String)
  11. }
  12. class KMPDFToolbarController: NSViewController {
  13. @IBOutlet var contendBox: NSBox!
  14. @IBOutlet var leftViewButton: ComponentButton!
  15. @IBOutlet var pageButton: ComponentButton!
  16. @IBOutlet var toolsView: ComponentDropdownTool!
  17. @IBOutlet var dividerView: ComponentDivider!
  18. @IBOutlet var selectZoom: ComponentSelectZoom!
  19. @IBOutlet var tabsView: ComponentTabs!
  20. @IBOutlet var rightToolsView: NSView!
  21. @IBOutlet var secondContendView: NSView!
  22. @IBOutlet var rightViewWidthConst: NSLayoutConstraint!
  23. private var customRightGroupView: ComponentGroup!
  24. private var undoRedo_Menuitem_Property = ComponentMenuitemProperty(type: .normal, multipleSelect: true, itemSelected: false, text: KMLocalizedString("Undo / Redo"), identifier: "undoRedo_Menuitem_PropertyKey")
  25. private var save_Menuitem_Property = ComponentMenuitemProperty(type: .normal, multipleSelect: true, itemSelected: false, text: KMLocalizedString("Save"), identifier: "save_Menuitem_PropertyKey")
  26. private var aiTools_Menuitem_Property = ComponentMenuitemProperty(type: .normal, multipleSelect: true, itemSelected: false, text: KMLocalizedString("AI Tools"), identifier: "aiTools_Menuitem_PropertyKey")
  27. private var batch_Menuitem_Property = ComponentMenuitemProperty(type: .normal, multipleSelect: true, itemSelected: false, text: KMLocalizedString("Batch"), identifier: "batch_Menuitem_PropertyKey")
  28. private var tts_Menuitem_Property = ComponentMenuitemProperty(type: .normal, multipleSelect: true, itemSelected: false, text: KMLocalizedString("TTS"), identifier: "tts_Menuitem_PropertyKey")
  29. private var ppt_Menuitem_Property = ComponentMenuitemProperty(type: .normal, multipleSelect: true, itemSelected: false, text: KMLocalizedString("Slide Show"), identifier: "ppt_Menuitem_PropertyKey")
  30. private var print_Menuitem_Property = ComponentMenuitemProperty(type: .normal, multipleSelect: true, itemSelected: false, text: KMLocalizedString("Print"), identifier: "print_Menuitem_PropertyKey")
  31. private var share_Menuitem_Property = ComponentMenuitemProperty(type: .normal, multipleSelect: true, itemSelected: false, text: KMLocalizedString("Share"), identifier: "share_Menuitem_PropertyKey")
  32. var pdfView: CPDFListView?
  33. var secondToolBar: KMPDFSecToolbarController = KMPDFSecToolbarController.init()
  34. weak open var delegate: KMPDFToolbarControllerDelegate?
  35. override func viewDidLoad() {
  36. super.viewDidLoad()
  37. // Do view setup here.
  38. contendBox.fillColor = ComponentLibrary.shared.getComponentColorFromKey("colorBg/layout-middle")
  39. setUpProperty()
  40. setUpRightViews()
  41. setupSecondToolbar()
  42. }
  43. func setUpProperty() {
  44. leftViewButton.properties = KMPDFToolbarManager.manager.viewProperty
  45. leftViewButton.setTarget(self, action: #selector(buttonClicked(_:)))
  46. pageButton.properties = KMPDFToolbarManager.manager.pageProperty
  47. pageButton.setTarget(self, action: #selector(buttonClicked(_:)))
  48. dividerView.properties = ComponentDividerProperty(type: .vertical, dash: false)
  49. toolsView.properties = KMPDFToolbarManager.manager.toolsProperty
  50. toolsView.delegate = self
  51. selectZoom.properties = KMPDFToolbarManager.manager.selectZoomProperty
  52. selectZoom.delegate = self
  53. tabsView.updateItemProperty([KMPDFToolbarManager.manager.markupMode_Property, KMPDFToolbarManager.manager.editMode_Property,
  54. KMPDFToolbarManager.manager.formMode_Property, KMPDFToolbarManager.manager.fillMode_Property,
  55. KMPDFToolbarManager.manager.convertMode_Property, KMPDFToolbarManager.manager.protectMode_Property,
  56. KMPDFToolbarManager.manager.toolsMode_Property])
  57. tabsView.delegate = self
  58. }
  59. //MARK: - 刷新一级工具栏
  60. func reloadToolbarTabsView() {
  61. KMPDFToolbarManager.manager.markupMode_Property.state = KMPDFManager.manager.toolMode == .Markup ? .pressed : .normal
  62. KMPDFToolbarManager.manager.editMode_Property.state = KMPDFManager.manager.toolMode == .Edit ? .pressed : .normal
  63. KMPDFToolbarManager.manager.formMode_Property.state = KMPDFManager.manager.toolMode == .Form ? .pressed : .normal
  64. KMPDFToolbarManager.manager.fillMode_Property.state = KMPDFManager.manager.toolMode == .Fill ? .pressed : .normal
  65. KMPDFToolbarManager.manager.convertMode_Property.state = KMPDFManager.manager.toolMode == .Convert ? .pressed : .normal
  66. KMPDFToolbarManager.manager.protectMode_Property.state = KMPDFManager.manager.toolMode == .Protect ? .pressed : .normal
  67. KMPDFToolbarManager.manager.toolsMode_Property.state = KMPDFManager.manager.toolMode == .Tools ? .pressed : .normal
  68. tabsView.refreshItems()
  69. }
  70. func reloadLeftIconView() {
  71. KMPDFToolbarManager.manager.viewProperty.state = KMPDFManager.manager.showView ? .pressed : .normal
  72. KMPDFToolbarManager.manager.viewProperty.isDisabled = false
  73. if KMPDFManager.manager.isPageEditMode {
  74. KMPDFToolbarManager.manager.viewProperty.isDisabled = true
  75. }
  76. leftViewButton.reloadData()
  77. }
  78. func reloadPageEditView() {
  79. KMPDFToolbarManager.manager.pageProperty.state = KMPDFManager.manager.isPageEditMode ? .pressed : .normal
  80. pageButton.reloadData()
  81. }
  82. func reloadSelectZoomView() {
  83. KMPDFToolbarManager.manager.selectZoomProperty.isDisabled = false
  84. if KMPDFManager.manager.isPageEditMode {
  85. KMPDFToolbarManager.manager.selectZoomProperty.isDisabled = true
  86. }
  87. if let pdfview = self.pdfView {
  88. KMPDFToolbarManager.manager.selectZoomProperty.text = (NSString(format: "%.0f", pdfview.scaleFactor * 100) as String) + "%"
  89. }
  90. selectZoom.reloadData()
  91. }
  92. //MARK: -右侧工具模块
  93. func setUpRightViews() {
  94. let subviews = rightToolsView.subviews
  95. for view in subviews {
  96. view.removeFromSuperview()
  97. }
  98. var itemXvalue: CGFloat = 4
  99. let _manager = KMPDFToolbarManager.manager
  100. var propertys: [Any] = []
  101. var adddividerA: Bool = false
  102. var adddividerB: Bool = false
  103. for property in _manager.validRightPropertys {
  104. if property == _manager.undoProperty ||
  105. property == _manager.redoProperty ||
  106. property == _manager.saveProperty {
  107. adddividerA = true
  108. } else if property == _manager.aiToolsProperty ||
  109. property == _manager.batchProperty ||
  110. property == _manager.ttsProperty ||
  111. property == _manager.pptProperty ||
  112. property == _manager.printProperty ||
  113. property == _manager.shareProperty {
  114. adddividerB = true
  115. }
  116. }
  117. for property in _manager.validRightPropertys {
  118. if adddividerA == true {
  119. if property == _manager.aiToolsProperty ||
  120. property == _manager.batchProperty ||
  121. property == _manager.ttsProperty ||
  122. property == _manager.pptProperty ||
  123. property == _manager.printProperty ||
  124. property == _manager.shareProperty {
  125. propertys.append(ComponentDividerProperty(type: .vertical, dash: false))
  126. adddividerA = false
  127. }
  128. }
  129. propertys.append(property)
  130. }
  131. if adddividerB == true {
  132. if propertys.last is ComponentDividerProperty {
  133. } else {
  134. propertys.append(ComponentDividerProperty(type: .vertical, dash: false))
  135. }
  136. }
  137. propertys.append(_manager.rightViewProperty)
  138. for property in propertys {
  139. if property is ComponentButtonProperty {
  140. let buttonProperty = (property as! ComponentButtonProperty)
  141. let button = ComponentButton.init()
  142. button.properties = buttonProperty
  143. if buttonProperty.onlyIcon {
  144. button.frame = CGRectMake(itemXvalue, 0, 28, 28)
  145. } else {
  146. button.frame = CGRectMake(itemXvalue, 0, button.properties.propertyInfo.viewWidth, 28)
  147. }
  148. button.setTarget(self, action: #selector(buttonClicked(_:)))
  149. rightToolsView.addSubview(button)
  150. itemXvalue += CGRectGetWidth(button.frame)
  151. itemXvalue += 12
  152. } else if property is ComponentDividerProperty {
  153. let divider = ComponentDivider.init()
  154. divider.frame = CGRectMake(itemXvalue, CGRectGetHeight(rightToolsView.frame)/2-8, 1, 16)
  155. divider.properties = (property as! ComponentDividerProperty)
  156. rightToolsView.addSubview(divider)
  157. itemXvalue += 1
  158. itemXvalue += 12
  159. } else if property is ComponentDropdownToolProperty {
  160. let dropdownTool = ComponentDropdownTool.init()
  161. dropdownTool.properties = property as! ComponentDropdownToolProperty
  162. dropdownTool.frame = CGRectMake(itemXvalue, 0, 28, 28)
  163. dropdownTool.delegate = self
  164. rightToolsView.addSubview(dropdownTool)
  165. itemXvalue += CGRectGetWidth(dropdownTool.frame)
  166. itemXvalue += 12
  167. }
  168. }
  169. itemXvalue -= 12
  170. rightViewWidthConst.constant = itemXvalue
  171. }
  172. //MARK: - 二级工具栏
  173. func setupSecondToolbar() {
  174. secondToolBar.view.frame = secondContendView.bounds
  175. secondToolBar.delegate = self
  176. secondToolBar.view.autoresizingMask = [.width, .height]
  177. secondContendView.addSubview(secondToolBar.view)
  178. }
  179. func reloadSecondToolbar() {
  180. let _manager = KMPDFToolbarManager.manager
  181. if KMPDFManager.manager.isPageEditMode {
  182. secondToolBar.reloadMainPropertys(_manager.getSubToolbarItems(isPageEditMode: true))
  183. secondToolBar.reloadRightPropertys([_manager.page_Reduce_Property, _manager.page_Increase_Property])
  184. } else {
  185. secondToolBar.reloadMainPropertys(_manager.getSubToolbarItems(KMPDFManager.manager.toolMode))
  186. secondToolBar.reloadRightPropertys([])
  187. }
  188. }
  189. //只刷新Item状态
  190. func refreshSecondToolbarItemsState() {
  191. secondToolBar.refreshMainview()
  192. secondToolBar.refreshRightview()
  193. }
  194. //MARK: - reloadData
  195. func reloadData() {
  196. reloadLeftIconView()
  197. reloadPageEditView()
  198. reloadToolsView()
  199. reloadSelectZoomView()
  200. reloadToolbarTabsView()
  201. reloadSecondToolbar()
  202. }
  203. //MARK: - 刷新tools工具
  204. func reloadToolsView() {
  205. KMPDFToolbarManager.manager.reloadToolsData()
  206. toolsView.reloadData()
  207. }
  208. //MARK: - Action
  209. @objc func buttonClicked(_ sender: ComponentButton) {
  210. if sender.properties == KMPDFToolbarManager.manager.viewProperty {
  211. KMPDFManager.manager.showView = !KMPDFManager.manager.showView
  212. sender.properties.state = KMPDFManager.manager.showView ? .pressed : .normal
  213. sender.reloadData()
  214. } else if sender.properties == KMPDFToolbarManager.manager.pageProperty {
  215. KMPDFManager.manager.isPageEditMode = !KMPDFManager.manager.isPageEditMode
  216. sender.properties.state = KMPDFManager.manager.isPageEditMode ? .pressed : .normal
  217. sender.reloadData()
  218. KMPDFManager.manager.toolMode = .None
  219. }
  220. delegate?.kmPDFToolbarControllerDidToolbarItemClicked?(self, sender.properties.identifier)
  221. reloadData()
  222. }
  223. //MARK: - 自定义工具栏
  224. func showPageTurnMenuWithPoint(_ point: CGPoint) {
  225. if (customRightGroupView?.superview) != nil {
  226. return
  227. }
  228. undoRedo_Menuitem_Property.itemSelected = false
  229. save_Menuitem_Property.itemSelected = false
  230. aiTools_Menuitem_Property.itemSelected = false
  231. batch_Menuitem_Property.itemSelected = false
  232. tts_Menuitem_Property.itemSelected = false
  233. ppt_Menuitem_Property.itemSelected = false
  234. print_Menuitem_Property.itemSelected = false
  235. share_Menuitem_Property.itemSelected = false
  236. let _manager = KMPDFToolbarManager.manager
  237. for property in _manager.validRightPropertys {
  238. if property == _manager.undoProperty ||
  239. property == _manager.redoProperty {
  240. undoRedo_Menuitem_Property.itemSelected = true
  241. } else if property == _manager.saveProperty {
  242. save_Menuitem_Property.itemSelected = true
  243. } else if property == _manager.aiToolsProperty {
  244. aiTools_Menuitem_Property.itemSelected = true
  245. } else if property == _manager.batchProperty {
  246. batch_Menuitem_Property.itemSelected = true
  247. } else if property == _manager.ttsProperty {
  248. tts_Menuitem_Property.itemSelected = true
  249. } else if property == _manager.pptProperty {
  250. ppt_Menuitem_Property.itemSelected = true
  251. } else if property == _manager.printProperty {
  252. print_Menuitem_Property.itemSelected = true
  253. } else if property == _manager.shareProperty {
  254. share_Menuitem_Property.itemSelected = true
  255. }
  256. }
  257. var items: [ComponentMenuitemProperty] = [ComponentMenuitemProperty.header(KMLocalizedString("Show Right Tools")), undoRedo_Menuitem_Property, save_Menuitem_Property, ComponentMenuitemProperty.divider(),
  258. aiTools_Menuitem_Property, batch_Menuitem_Property, tts_Menuitem_Property, ppt_Menuitem_Property, print_Menuitem_Property, share_Menuitem_Property]
  259. var viewHeight: CGFloat = 8.0
  260. for item in items {
  261. item.state = .normal
  262. if item.type == .normal {
  263. viewHeight += 36
  264. } else if item.type == .divider {
  265. viewHeight += 8
  266. } else if item.type == .header {
  267. viewHeight += 36
  268. }
  269. }
  270. if customRightGroupView == nil {
  271. customRightGroupView = ComponentGroup.createFromNib(in: ComponentLibrary.shared.componentBundle())
  272. }
  273. customRightGroupView.clickedAutoHide = false
  274. customRightGroupView?.frame = CGRectMake(0, 0, 160, viewHeight)
  275. customRightGroupView?.reloadData()
  276. customRightGroupView.groupDelegate = self
  277. customRightGroupView.showWithPoint(CGPoint(x: point.x, y: point.y-viewHeight), relativeTo: self.contendBox)
  278. customRightGroupView?.updateGroupInfo(items)
  279. refreshRightMenuState()
  280. }
  281. func hideGroupView() {
  282. customRightGroupView?.removeGroupView()
  283. }
  284. func refreshRightMenuState() {
  285. let totalItems: [ComponentMenuitemProperty] = [undoRedo_Menuitem_Property,
  286. save_Menuitem_Property,
  287. aiTools_Menuitem_Property,
  288. batch_Menuitem_Property,
  289. tts_Menuitem_Property,
  290. ppt_Menuitem_Property,
  291. print_Menuitem_Property,
  292. share_Menuitem_Property]
  293. var selectedCount = 0
  294. for item in totalItems {
  295. if item.itemSelected == true {
  296. selectedCount += 1
  297. }
  298. }
  299. var maxCount = 6
  300. if undoRedo_Menuitem_Property.itemSelected == true {
  301. maxCount = 5
  302. }
  303. if selectedCount == maxCount {
  304. for item in totalItems {
  305. if item.itemSelected == false {
  306. item.isDisabled = true
  307. }
  308. }
  309. } else {
  310. for item in totalItems {
  311. item.isDisabled = false
  312. }
  313. }
  314. if selectedCount == 5 && undoRedo_Menuitem_Property.itemSelected == false {
  315. //特殊情况,UndoRedo占两个空位
  316. undoRedo_Menuitem_Property.isDisabled = true
  317. }
  318. for item in totalItems {
  319. NotificationCenter.default.post(name: Notification.Name(rawValue: ComponentMenuItemUpdatedKey), object: item.identifier)
  320. }
  321. }
  322. //MARK: - MouseEvent
  323. override func rightMouseUp(with event: NSEvent) {
  324. super.rightMouseUp(with: event)
  325. let point = event.locationInWindow
  326. showPageTurnMenuWithPoint(point)
  327. }
  328. }
  329. //MARK: - ComponentDropdownToolDelegate:工具模式
  330. extension KMPDFToolbarController: ComponentDropdownToolDelegate {
  331. func componentDropdownToolDidClicked(_ view: ComponentDropdownTool, menuItem: ComponentMenuitemProperty?) {
  332. for item in KMPDFToolbarManager.manager.toolsProperty.menuItemArr ?? [] {
  333. item.itemSelected = false
  334. item.state = .normal
  335. }
  336. menuItem?.itemSelected = true
  337. if menuItem == KMPDFToolbarManager.manager.tools_selectProperty {
  338. KMPDFManager.manager.viewToolsType = .Select
  339. } else if menuItem == KMPDFToolbarManager.manager.tools_scrollProperty {
  340. KMPDFManager.manager.viewToolsType = .Scroll
  341. } else if menuItem == KMPDFToolbarManager.manager.tools_contentProperty {
  342. KMPDFManager.manager.viewToolsType = .Content_Selection
  343. } else if menuItem == KMPDFToolbarManager.manager.tools_magnifyProperty {
  344. KMPDFManager.manager.viewToolsType = .Magnify
  345. } else if menuItem == KMPDFToolbarManager.manager.tools_areaProperty {
  346. KMPDFManager.manager.viewToolsType = .AreaZoom
  347. }
  348. reloadToolsView()
  349. }
  350. }
  351. //MARK: - ComponentSelectZoomDelegate:缩放比例
  352. extension KMPDFToolbarController: ComponentSelectZoomDelegate {
  353. func componentSelectZoomDidReduce(view: ComponentSelectZoom) {
  354. let zoomSting = view.properties.text
  355. var scale = CGFloat((NSString(string: zoomSting)).floatValue / 100.0)
  356. switch scale {
  357. case 0...0.25:
  358. scale = 0
  359. case 0.25...3:
  360. scale -= 0.25
  361. case 3.1...10:
  362. scale -= 0.4
  363. case 10.1...100:
  364. scale -= 1
  365. default:
  366. scale -= 1
  367. }
  368. pdfView?.scaleFactor = scale
  369. }
  370. func componentSelectZoomDidSelect(view: ComponentSelectZoom?, menuItemProperty: ComponentMenuitemProperty?) {
  371. if menuItemProperty?.identifier == KMPDFToolbar_Zoom_AdapWidth_Identifier {
  372. if pdfView?.scaleFactor != 1.0 {
  373. pdfView?.scaleFactor = 1.0
  374. pdfView?.autoScales = false
  375. }
  376. } else if menuItemProperty?.identifier == KMPDFToolbar_Zoom_AdapPage_Identifier {
  377. let pageHeight = pdfView?.currentPage()!.size.height
  378. let pdfviewHeight = pdfView?.bounds.size.height
  379. pdfView?.scaleFactor = pdfviewHeight!/pageHeight!
  380. pdfView?.autoScales = false
  381. } else if menuItemProperty?.identifier == KMPDFToolbar_Zoom_ActualSize_Identifier {
  382. pdfView?.autoScales = true
  383. } else if menuItemProperty?.identifier == KMPDFToolbar_Zoom_10_Identifier {
  384. pdfView?.scaleFactor = 0.1
  385. } else if menuItemProperty?.identifier == KMPDFToolbar_Zoom_25_Identifier {
  386. pdfView?.scaleFactor = 0.25
  387. } else if menuItemProperty?.identifier == KMPDFToolbar_Zoom_50_Identifier {
  388. pdfView?.scaleFactor = 0.5
  389. } else if menuItemProperty?.identifier == KMPDFToolbar_Zoom_75_Identifier {
  390. pdfView?.scaleFactor = 0.75
  391. } else if menuItemProperty?.identifier == KMPDFToolbar_Zoom_100_Identifier {
  392. pdfView?.scaleFactor = 1.0
  393. } else if menuItemProperty?.identifier == KMPDFToolbar_Zoom_150_Identifier {
  394. pdfView?.scaleFactor = 1.5
  395. } else if menuItemProperty?.identifier == KMPDFToolbar_Zoom_200_Identifier {
  396. pdfView?.scaleFactor = 2.0
  397. } else if menuItemProperty?.identifier == KMPDFToolbar_Zoom_400_Identifier {
  398. pdfView?.scaleFactor = 4.0
  399. } else if menuItemProperty?.identifier == KMPDFToolbar_Zoom_800_Identifier {
  400. pdfView?.scaleFactor = 8.0
  401. }
  402. }
  403. func componentSelectZoomDidAdd(view: ComponentSelectZoom) {
  404. let zoomSting = view.properties.text
  405. var scale = CGFloat((NSString(string: zoomSting)).floatValue / 100.0)
  406. switch scale {
  407. case 0...0.25:
  408. scale += 0.25
  409. case 0.25...3:
  410. scale += 0.25
  411. case 3.1...10:
  412. scale += 0.4
  413. case 10.1...100:
  414. scale += 1
  415. default:
  416. scale += 1
  417. }
  418. pdfView?.scaleFactor = scale
  419. }
  420. }
  421. //MARK: - ComponentTabsDelegate
  422. extension KMPDFToolbarController: ComponentTabsDelegate {
  423. func componentTabsDidSelected(_ view: ComponentTabs, _ property: ComponentTabsProperty) {
  424. let _manager = KMPDFManager.manager
  425. _manager.viewToolsType = .Select
  426. _manager.isPageEditMode = false
  427. if property == KMPDFToolbarManager.manager.markupMode_Property {
  428. if _manager.toolMode == .Markup {
  429. _manager.toolMode = .None
  430. property.state = .normal
  431. view.refreshItems()
  432. } else {
  433. _manager.toolMode = .Markup
  434. }
  435. } else if property == KMPDFToolbarManager.manager.editMode_Property {
  436. if _manager.toolMode == .Edit {
  437. _manager.toolMode = .None
  438. property.state = .normal
  439. view.refreshItems()
  440. } else {
  441. _manager.toolMode = .Edit
  442. }
  443. } else if property == KMPDFToolbarManager.manager.formMode_Property {
  444. if _manager.toolMode == .Form {
  445. _manager.toolMode = .None
  446. property.state = .normal
  447. view.refreshItems()
  448. } else {
  449. _manager.toolMode = .Form
  450. }
  451. } else if property == KMPDFToolbarManager.manager.fillMode_Property {
  452. if _manager.toolMode == .Fill {
  453. _manager.toolMode = .None
  454. property.state = .normal
  455. view.refreshItems()
  456. } else {
  457. _manager.toolMode = .Fill
  458. }
  459. } else if property == KMPDFToolbarManager.manager.convertMode_Property {
  460. if _manager.toolMode == .Convert {
  461. _manager.toolMode = .None
  462. property.state = .normal
  463. view.refreshItems()
  464. } else {
  465. _manager.toolMode = .Convert
  466. }
  467. } else if property == KMPDFToolbarManager.manager.protectMode_Property {
  468. if _manager.toolMode == .Protect {
  469. _manager.toolMode = .None
  470. property.state = .normal
  471. view.refreshItems()
  472. } else {
  473. _manager.toolMode = .Protect
  474. }
  475. } else if property == KMPDFToolbarManager.manager.toolsMode_Property {
  476. if _manager.toolMode == .Tools {
  477. _manager.toolMode = .None
  478. property.state = .normal
  479. view.refreshItems()
  480. } else {
  481. _manager.toolMode = .Tools
  482. }
  483. }
  484. delegate?.kmPDFToolbarControllerDidToolbarItemClicked?(self, property.identifier)
  485. reloadData()
  486. }
  487. }
  488. //MARK: - KMPDFSecToolbarControllerDelegate:二级工具栏
  489. extension KMPDFToolbarController: KMPDFSecToolbarControllerDelegate {
  490. func kmPDFSecToolbarControllerDidItemClicked(_ controller: KMPDFSecToolbarController, _ property: Any) {
  491. if let value = property as? ComponentButtonProperty {
  492. delegate?.kmPDFToolbarControllerDidToolbarItemClicked?(self, value.identifier)
  493. } else if let value = property as? ComponentMenuitemProperty {
  494. delegate?.kmPDFToolbarControllerDidToolbarItemClicked?(self, value.identifier)
  495. }
  496. }
  497. }
  498. //MARK: - ComponentGroupDelegate:右侧工具栏
  499. extension KMPDFToolbarController: ComponentGroupDelegate {
  500. func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) {
  501. let _manager = KMPDFToolbarManager.manager
  502. var validItems:[NSObject] = []
  503. if undoRedo_Menuitem_Property.itemSelected {
  504. validItems.append(_manager.undoProperty)
  505. validItems.append(_manager.redoProperty)
  506. }
  507. if save_Menuitem_Property.itemSelected {
  508. validItems.append(_manager.saveProperty)
  509. }
  510. if aiTools_Menuitem_Property.itemSelected {
  511. validItems.append(_manager.aiToolsProperty)
  512. }
  513. if batch_Menuitem_Property.itemSelected {
  514. validItems.append(_manager.batchProperty)
  515. }
  516. if tts_Menuitem_Property.itemSelected {
  517. validItems.append(_manager.ttsProperty)
  518. }
  519. if ppt_Menuitem_Property.itemSelected {
  520. validItems.append(_manager.pptProperty)
  521. }
  522. if print_Menuitem_Property.itemSelected {
  523. validItems.append(_manager.printProperty)
  524. }
  525. if share_Menuitem_Property.itemSelected {
  526. validItems.append(_manager.shareProperty)
  527. }
  528. let sortArray = _manager.totalRightPropertys
  529. let sortedArray = validItems.sorted {
  530. guard let indexA = sortArray.firstIndex(of: $0 as NSObject),
  531. let indexB = sortArray.firstIndex(of: $1 as NSObject) else {
  532. return false
  533. }
  534. return indexA < indexB
  535. }
  536. _manager.validRightPropertys = sortedArray
  537. setUpRightViews()
  538. refreshRightMenuState()
  539. }
  540. }