KMToolbarViewController.swift 96 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717
  1. //
  2. // KMToolbarViewController.swift
  3. // PDF Master
  4. //
  5. // Created by lxy on 2022/12/2.
  6. //
  7. import Cocoa
  8. @objc enum KMToolbarViewType : Int {
  9. case None
  10. case Main
  11. case Annatiton
  12. case Page
  13. case Conversion
  14. case ScanOCR
  15. case editPDF
  16. case Form
  17. case FillSign
  18. case Tool
  19. case redact
  20. case Move
  21. case Magnify
  22. case Select
  23. case SelectZoom
  24. case LeftPanel
  25. case RightPanel
  26. case viewSetting
  27. func isToolMode() -> Bool {
  28. return (self == .Move || self == .Magnify || self == .Select || self == .SelectZoom)
  29. }
  30. func itemIdentifier() -> String {
  31. if (self == .Annatiton) {
  32. return KMDocumentAnnotationToolbarItemIdentifier
  33. } else if (self == .Page) {
  34. return KMDocumentPageToolbarItemIdentifier
  35. } else if (self == .Conversion) {
  36. return KMDocumentConversonToolbarItemIdentifier
  37. } else if (self == .ScanOCR) {
  38. return KMDocumentScanOCRToolbarItemIdentifier
  39. } else if (self == .editPDF) {
  40. return KMDocumentEditToolbarItemIdentifier
  41. } else if (self == .Form) {
  42. return KMDocumentFormToolbarItemIdentifier
  43. } else if (self == .FillSign) {
  44. return KMDocumentFillSginToolbarItemIdentifier
  45. } else if (self == .Tool) {
  46. return KMDocumentToolToolbarItemIdentifier
  47. } else if (self == .Move) {
  48. return KMToolbarMoveToolModeItemIdentifier
  49. } else if (self == .Magnify) {
  50. return KMToolbarMagnifyToolModeItemIdentifier
  51. } else if (self == .Select) {
  52. return KMToolbarSelectToolModeItemIdentifier
  53. } else if (self == .SelectZoom) {
  54. return KMToolbarZoomToSelectionItemIdentifier
  55. } else if (self == .LeftPanel) {
  56. return KMLeftControlToolbarItemIdentifier
  57. } else if (self == .RightPanel) {
  58. return KMRightControlToolbarItemIdentifier
  59. }
  60. return ""
  61. }
  62. }
  63. @objc enum KMToolbarType: Int {
  64. /// conversion
  65. case word = 3000
  66. case excel = 3001
  67. case ppt = 3002
  68. case rtf = 3003
  69. case csv = 3004
  70. case html = 3005
  71. case conversion_text = 3006
  72. case conversion_image = 3007
  73. /// tool
  74. case compress = 8000
  75. case merge = 8001
  76. case fileCompare = 8002
  77. case secure = 8003
  78. case redact = 8004
  79. case watermark = 8005
  80. case background = 8006
  81. case headerAndFooter = 8007
  82. case bates = 8008
  83. case crop = 8009
  84. case comparison = 8010
  85. }
  86. @objc protocol KMToolbarViewControllerDelegate {
  87. @objc optional func changeAnnotationModeAction(item:KMToolbarClickButton)
  88. @objc optional func showPDFLayoutModeAction(show:Bool)
  89. @objc optional func changePDFViewZoomInAction()
  90. @objc optional func changePDFViewZoomOutAction()
  91. @objc optional func changePDFViewGotoNextPageAction()
  92. @objc optional func changePDFViewGoToPreviousPageAction()
  93. @objc optional func changePDFViewGotoBackAction()
  94. @objc optional func changePDFViewGoToForwardAction()
  95. @objc optional func aiTranslationPDFFileAction()
  96. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, zoomSting : String)
  97. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, zoomModel selectedTag:Int)
  98. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, shareAction toolbarItem: KMToolbarItemView)
  99. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, shareDocument item:NSMenuItem)
  100. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, shareFlatten item:NSMenuItem)
  101. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, shareOriginalPDF item:NSMenuItem)
  102. @objc optional func toolbarViewController(_ viewController: KMToolbarViewController, clickMode toolMode: KMToolbarViewType, toolbar toolbarItem: KMToolbarItemView, _ pages: [Int])
  103. @objc optional func toolbarViewController(_ viewController: KMToolbarViewController, clickChaildToolType: KMToolbarType, toolbar toolbarItem: KMToolbarItemView)
  104. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, scanOCRModel selectedTag:Int)
  105. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, itemDidClick toolbarItem: KMToolbarItemView)
  106. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, searchAction searchString: String)
  107. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, menuItemDidClick toolbarItem: KMToolbarItemView, index: Int, info: Any?)
  108. }
  109. class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
  110. var toolbar : KMToolbarView!
  111. var toolbarType : KMToolbarViewType = KMToolbarViewType.None
  112. var toolbarItems : [String : Any] = [:]
  113. @IBOutlet weak var mainWindowController : MainWindowController!
  114. open weak var delegate: KMToolbarViewControllerDelegate?
  115. @IBOutlet var zoomButton: NSPopUpButton!
  116. @IBOutlet var zoomView: NSView!
  117. @IBOutlet weak var zoomTextField: NSTextField!
  118. var pdfView : CPDFListView = CPDFListView()
  119. var shareButton = KMToolbarClickButton()
  120. private var bottomLine = NSView()
  121. // 是否显示所有注释
  122. var isShowAllAnnotations = true
  123. var ignoreCurrentAnnotationTypeChange = false
  124. private var _currentItemView: KMToolbarItemView?
  125. override func viewDidLoad() {
  126. super.viewDidLoad()
  127. self.zoomTextField.delegate = self
  128. NotificationCenter.default.addObserver(self, selector: #selector(listViewAnnotationTypeChangeNotification), name: Notification.Name("CPDFListViewAnnotationTypeChangeNotification"), object: nil)
  129. NotificationCenter.default.addObserver(self, selector: #selector(listViewAnnotationTypeChangeNotification), name: Notification.Name("CPDFListViewToolModeChangeNotification"), object: nil)
  130. }
  131. override func loadView() {
  132. super.loadView()
  133. self.toolbar = KMToolbarView.init(identifier: "KMToolbar_New")
  134. self.toolbar.frame = self.view.bounds
  135. self.toolbar.autoresizingMask = [.width,.height]
  136. self.toolbar.delegate = self
  137. self.view.addSubview(self.toolbar)
  138. self.view.addSubview(self.bottomLine)
  139. self.bottomLine.frame = NSMakeRect(0, 0, NSWidth(self.view.bounds), 1)
  140. self.bottomLine.autoresizingMask = [.width]
  141. self.bottomLine.wantsLayer = true
  142. self.bottomLine.layer?.backgroundColor = NSColor.km_init(hex: "#0000001A").cgColor
  143. }
  144. func updateType(newType:KMToolbarViewType) {
  145. if newType != toolbarType {
  146. toolbarType = newType
  147. if self.toolbar != nil && self.toolbar.superview != nil {
  148. self.toolbar.removeFromSuperview()
  149. }
  150. self.toolbar = KMToolbarView.init(identifier: "KMToolbar_New")
  151. self.toolbar.frame = self.view.bounds
  152. self.toolbar.autoresizingMask = [.width,.height]
  153. self.toolbar.delegate = self
  154. self.view.addSubview(self.toolbar)
  155. }
  156. }
  157. func reloadateToolbar() -> Void {
  158. toolbar.reloadData()
  159. }
  160. func resetToolbar() -> Void {
  161. for item in toolbar.items {
  162. item.isSelected = false
  163. }
  164. }
  165. // MARK: Action
  166. @IBAction func changeAnnotationMode(item: KMToolbarClickButton) {
  167. self.delegate?.changeAnnotationModeAction?(item: item)
  168. }
  169. @IBAction func leftControllButtonAction(item: KMToolbarClickButton) {
  170. let tag = KMToolbarViewType(rawValue: item.tag) ?? .None
  171. if tag == .editPDF {
  172. Task { @MainActor in
  173. #if VERSION_DMG
  174. if await (KMLightMemberManager.manager.canUseAdvanced() == false) {
  175. let _ = KMComparativeTableViewController.show(window: self.view.window!)
  176. return
  177. }
  178. #endif
  179. self.delegate?.toolbarViewController?(self, clickMode: tag, toolbar: item.clickObject as! KMToolbarItemView, [])
  180. }
  181. } else {
  182. self.delegate?.toolbarViewController?(self, clickMode: tag, toolbar: item.clickObject as! KMToolbarItemView, [])
  183. }
  184. }
  185. @objc private func _itemAction(_ item: KMToolbarClickButton) {
  186. if let data = item.clickObject as? KMToolbarItemView {
  187. if data.itemIdentifier == KMToolbarComparisonItemIdentifier {
  188. self._currentItemView = data
  189. if let subMenu = data.menuFormRepresentation?.submenu {
  190. subMenu.popUp(positioning: nil, at: item.frame.origin, in: item.superview)
  191. }
  192. return
  193. }
  194. }
  195. self.delegate?.toolbarViewController?(self, itemDidClick: item.clickObject as! KMToolbarItemView)
  196. }
  197. @objc private func _comparisonAction(sender: NSMenuItem) {
  198. if let data = self._currentItemView {
  199. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  200. } else {
  201. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarComparisonItemIdentifier), index: sender.tag, info: nil)
  202. }
  203. }
  204. @IBAction func showPDFLayoutMode(sender: KMToolbarClickButton) {
  205. let item = sender.clickObject as? KMToolbarItemView
  206. if (item != nil) {
  207. item?.isSelected = !item!.isSelected
  208. }
  209. self.delegate?.showPDFLayoutModeAction?(show: true)
  210. }
  211. @objc func cropMenuAction(item: KMToolbarItemView) {
  212. self.delegate?.toolbarViewController?(self, clickChaildToolType: .crop, toolbar: item)
  213. }
  214. @objc private func _cropAction(_ sender: NSMenuItem) {
  215. if let data = self._currentItemView {
  216. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  217. } else {
  218. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarCropIdentifier), index: sender.tag, info: nil)
  219. }
  220. }
  221. @objc func batesMenuAction(sender: KMToolbarClickButton) {
  222. self._currentItemView = sender.clickObject as? KMToolbarItemView
  223. if let subMenu = (sender.clickObject as? KMToolbarItemView)?.menuFormRepresentation?.submenu {
  224. subMenu.popUp(positioning: nil, at: sender.frame.origin, in: sender.superview)
  225. }
  226. }
  227. @objc private func _batesAction(sender: NSMenuItem) {
  228. if let data = self._currentItemView {
  229. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  230. }
  231. }
  232. @objc func headerfooterMenuAction(sender: KMToolbarClickButton) {
  233. self._currentItemView = sender.clickObject as? KMToolbarItemView
  234. if let subMenu = (sender.clickObject as? KMToolbarItemView)?.menuFormRepresentation?.submenu {
  235. subMenu.popUp(positioning: nil, at: sender.frame.origin, in: sender.superview)
  236. }
  237. }
  238. @objc private func _headerfooterAction(sender: NSMenuItem) {
  239. if let data = self._currentItemView {
  240. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  241. }
  242. }
  243. @objc func backgroundMenuAction(sender: KMToolbarClickButton) {
  244. self._currentItemView = sender.clickObject as? KMToolbarItemView
  245. if let subMenu = (sender.clickObject as? KMToolbarItemView)?.menuFormRepresentation?.submenu {
  246. subMenu.popUp(positioning: nil, at: sender.frame.origin, in: sender.superview)
  247. }
  248. }
  249. @objc private func _backgroundAction(sender: NSMenuItem) {
  250. if let data = self._currentItemView {
  251. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  252. }
  253. }
  254. @objc func watermarkMenuAction(sender: KMToolbarClickButton) {
  255. self._currentItemView = sender.clickObject as? KMToolbarItemView
  256. if let subMenu = (sender.clickObject as? KMToolbarItemView)?.menuFormRepresentation?.submenu {
  257. subMenu.popUp(positioning: nil, at: sender.frame.origin, in: sender.superview)
  258. }
  259. }
  260. @objc private func _watermarkAction(sender: NSMenuItem) {
  261. if let data = self._currentItemView {
  262. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  263. } else {
  264. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarToolWatermarkItemIdentifier), index: sender.tag, info: nil)
  265. }
  266. }
  267. @objc func redactMenuAction(sender: KMToolbarClickButton) {
  268. self.delegate?.toolbarViewController?(self, clickChaildToolType: .redact, toolbar: sender.clickObject as! KMToolbarItemView)
  269. }
  270. @objc func compressMenuAction(sender: KMToolbarClickButton) {
  271. self.delegate?.toolbarViewController?(self, clickChaildToolType: .compress, toolbar: sender.clickObject as! KMToolbarItemView)
  272. }
  273. @objc func secureMenuAction(sender: KMToolbarClickButton) {
  274. self.delegate?.toolbarViewController?(self, clickChaildToolType: .secure, toolbar: sender.clickObject as! KMToolbarItemView)
  275. }
  276. @objc private func _secureAction(sender: NSMenuItem) {
  277. if let data = self._currentItemView {
  278. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  279. } else {
  280. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarToolSecureItemIdentifier), index: sender.tag, info: nil)
  281. }
  282. }
  283. @objc func conversionMenuItemAction(sender: KMToolbarClickButton) {
  284. let item: KMToolbarItemView = sender.clickObject as! KMToolbarItemView
  285. var type: KMToolbarType = .word
  286. if (item.btnTag == KMToolbarType.excel.rawValue) {
  287. type = .excel
  288. } else if (item.btnTag == KMToolbarType.ppt.rawValue) {
  289. type = .ppt
  290. } else if (item.btnTag == KMToolbarType.rtf.rawValue) {
  291. type = .rtf
  292. } else if (item.btnTag == KMToolbarType.csv.rawValue) {
  293. type = .csv
  294. } else if (item.btnTag == KMToolbarType.html.rawValue) {
  295. type = .html
  296. } else if (item.btnTag == KMToolbarType.conversion_text.rawValue) {
  297. type = .conversion_text
  298. } else if (item.btnTag == KMToolbarType.conversion_image.rawValue) {
  299. type = .conversion_image
  300. }
  301. self.delegate?.toolbarViewController?(self, clickChaildToolType: type, toolbar: item)
  302. }
  303. @objc private func _pdfToImageAction(sender: NSMenuItem) {
  304. if let data = self._currentItemView {
  305. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  306. } else {
  307. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarConversionImageItemIdentifier), index: sender.tag, info: nil)
  308. }
  309. }
  310. @objc private func _exportImageAction(sender: NSMenuItem) {
  311. if let data = self._currentItemView {
  312. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  313. } else {
  314. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarConversionExportImageItemIdentifier), index: sender.tag, info: nil)
  315. }
  316. }
  317. @objc private func _newPDFAction(sender: NSMenuItem) {
  318. if let data = self._currentItemView {
  319. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  320. } else {
  321. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarConversionCreatePDFItemIdentifier), index: sender.tag, info: nil)
  322. }
  323. }
  324. @IBAction func zoomModelSelectButtonAction(_ sender: NSPopUpButton) {
  325. self.delegate?.toolbarViewController?(self, zoomModel: sender.selectedTag())
  326. for item in sender.itemArray {
  327. item.state = .off
  328. }
  329. sender.selectedItem?.state = .on
  330. }
  331. @IBAction func zoomPDFViewButtonAction(sender:KMToolbarClickButton) {
  332. if sender.tag == 0 {
  333. self.delegate?.changePDFViewZoomOutAction?()
  334. } else if sender.tag == 1 {
  335. self.delegate?.changePDFViewZoomInAction?()
  336. } else if sender.tag == 2 {
  337. self.delegate?.changePDFViewGotoBackAction?()
  338. } else if sender.tag == 3 {
  339. self.delegate?.changePDFViewGoToForwardAction?()
  340. }
  341. }
  342. @IBAction func aiTranslationButtonAction(sender:KMToolbarClickButton) {
  343. self.delegate?.aiTranslationPDFFileAction?()
  344. }
  345. @IBAction func shareButtonAction(sender:KMToolbarClickButton) {
  346. self.shareButton = sender
  347. let menu = NSMenu()
  348. menu.addItem(withTitle: NSLocalizedString("Document", comment: ""), action: #selector(shareViaWithDocument), target: self)
  349. menu.addItem(withTitle: NSLocalizedString("Flattened Copy", comment: ""), action: #selector(shareViaWithFlatten), target: self)
  350. menu.addItem(withTitle: NSLocalizedString("Original PDF", comment: ""), action: #selector(shareViaWithOriginalPDF), target: self)
  351. menu.popUp(positioning: nil, at: NSPoint(x: sender.frame.origin.x, y: sender.frame.origin.y-10), in: sender.superview)
  352. self.delegate?.toolbarViewController?(self, shareAction: sender.clickObject as! KMToolbarItemView)
  353. }
  354. @IBAction func shareViaWithDocument(sender:NSMenuItem) {
  355. self.delegate?.toolbarViewController?(self, shareDocument: sender)
  356. }
  357. @IBAction func shareViaWithFlatten(sender:NSMenuItem) {
  358. self.delegate?.toolbarViewController?(self, shareFlatten: sender)
  359. }
  360. @IBAction func shareViaWithOriginalPDF(sender:NSMenuItem) {
  361. self.delegate?.toolbarViewController?(self, shareOriginalPDF: sender)
  362. }
  363. @objc func mergeMenuItemAction(sender: KMToolbarClickButton) {
  364. self.delegate?.toolbarViewController?(self, clickChaildToolType: .merge, toolbar: sender.clickObject as! KMToolbarItemView)
  365. }
  366. @IBAction func scanOCRModelSelect(sender:KMToolbarClickButton) {
  367. self.delegate?.toolbarViewController?(self, scanOCRModel: sender.tag)
  368. }
  369. // Form 对齐
  370. @IBAction func formsAlignmentAction(sender:KMToolbarClickButton) {
  371. }
  372. @objc private func _alignmentAction(sender: NSMenuItem) {
  373. if let data = self._currentItemView {
  374. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  375. } else {
  376. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarToolFormAlignIdentifier), index: sender.tag, info: nil)
  377. }
  378. }
  379. // Form 更多操作
  380. @IBAction func formsMoreOperationAction(sender:KMToolbarClickButton) {
  381. }
  382. func toolbarItemFindItemIdentifiers(value : String) -> KMToolbarItemView{
  383. for item in self.toolbarItems {
  384. if item.key == value {
  385. return item.value as! KMToolbarItemView
  386. }
  387. }
  388. return KMToolbarItemView()
  389. }
  390. func controlTextDidEndEditing(_ obj: Notification) {
  391. let textField = obj.object as? NSTextField
  392. if textField == self.zoomTextField {
  393. self.delegate?.toolbarViewController?(self, zoomSting: self.zoomTextField.stringValue)
  394. }
  395. }
  396. func controlTextDidChange(_ obj: Notification) {
  397. }
  398. func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {
  399. switch commandSelector {
  400. case #selector(NSResponder.insertNewline(_:)):
  401. if let inputView = control as? NSTextField {
  402. // //当当前TextField按下enter
  403. if inputView == zoomTextField {
  404. KMPrint("按下 enter")
  405. self.delegate?.toolbarViewController?(self, zoomSting: self.zoomTextField.stringValue)
  406. } else if let _ = control as? NSSearchField {
  407. self.delegate?.toolbarViewController?(self, searchAction: control.stringValue)
  408. }
  409. }
  410. return true
  411. default:
  412. return false
  413. }
  414. }
  415. }
  416. // MARK: - Public Methods
  417. extension KMToolbarViewController {
  418. func itemAction(_ item: KMToolbarItemView) {
  419. self._itemAction(item.clickButton)
  420. }
  421. }
  422. extension KMToolbarViewController : KMToolbarViewDelegate,NSToolbarItemValidation {
  423. func toolbarLeftDefaultItemIdentifiers(_ toolbar: KMToolbarView) -> [String] {
  424. if toolbarType == .Main {
  425. return [KMLeftControlToolbarItemIdentifier,
  426. KMDocumentZoomViewToolbarItemIdentifier, KMDocumentZoomOutToolbarItemIdentifier, KMDocumentZoomToolbarItemIdentifier,
  427. KMDocumentPreviousPageToolbarItemIdentifier, KMDocumentNextPageToolbarItemIdentifier, KMDocumentHomeToolbarItemIdentifier]
  428. } else if (toolbarType == .Conversion) {
  429. return [KMToolbarConversionCreatePDFItemIdentifier]
  430. }
  431. return []
  432. }
  433. func toolbarRightDefaultItemIdentifiers(_ toolbar: KMToolbarView) -> [String] {
  434. if toolbarType == .Main {
  435. return [KMDocumentViewDisplayToolbarItemIdentifier, KMDocumentShareToolbarItemIdentifier,
  436. KMDocumentSearchToolbarItemIdentifier, KMRightControlToolbarItemIdentifier]
  437. } else if [.Annatiton,.Magnify,.Move,.Select,.SelectZoom].contains(toolbarType) {
  438. return [KMToolbarAnnotationSettingItemIdentifier]
  439. }
  440. return []
  441. }
  442. func toolbarAllowedItemIdentifiers(_ toolbar: KMToolbarView) -> [String] {
  443. if [.Annatiton,.Magnify,.Move,.Select,.SelectZoom].contains(toolbarType) {
  444. return [KMNewToolbarSpaceItemIdentifier,
  445. KMToolbarPageEditInsetItemIdentifier, KMToolbarToolMergeItemIdentifier, KMToolbarPageEditSplitItemIdentifier,
  446. KMToolbarToolCompressItemIdentifier, KMToolbarToolSecureItemIdentifier, KMToolbarToolWatermarkItemIdentifier,
  447. KMToolbarToolBackgroundItemIdentifier, KMToolbarToolHeaderFooterItemIdentifier, KMToolbarToolBatesItemIdentifier,
  448. KMToolbarToolCropItemIdentifier,
  449. KMToolbarConversionWordItemIdentifier, KMToolbarConversionExcelItemIdentifier, KMToolbarConversionPPTItemIdentifier,
  450. KMToolbarConversionRTFItemIdentifier, KMToolbarConversionCSVItemIdentifier, KMToolbarConversionHTMLItemIdentifier,
  451. KMToolbarConversionTextItemIdentifier, KMToolbarConversionImageItemIdentifier,
  452. KMToolbarMoveToolModeItemIdentifier,
  453. KMToolbarMagnifyToolModeItemIdentifier,
  454. KMToolbarSelectToolModeItemIdentifier,
  455. KMToolbarZoomToSelectionItemIdentifier,
  456. KMNewToolbarSpaceItemIdentifier,
  457. KMToolbarDividerItemIdentifier,
  458. KMNewToolbarSpaceItemIdentifier,
  459. KMToolbarHighlightAnnotationItemIdentifier,
  460. KMToolbarUnderlineAnnotationItemIdentifier,
  461. KMToolbarStrikeOutAnnotationItemIdentifier,
  462. KMToolbarInkAnnotationItemIdentifier,
  463. KMToolbarFreeTextAnnotationItemIdentifier,
  464. KMToolbarAnchoredAnnotationItemIdentifier,
  465. KMToolbarSquareAnnotationItemIdentifier, KMToolbarCircleAnnotationItemIdentifier, KMToolbarArrowAnnotationItemIdentifier, KMToolbarLineAnnotationItemIdentifier,
  466. KMToolbarLinkAnnotationItemIdentifier,
  467. KMAnnotationStampToolbarItemIdentifier,
  468. KMToolbarSignSignatureAnnotationItemIdentifier,
  469. KMToolbarDividerItemIdentifier,
  470. KMToolbarShowToolbarItemIdentifier,
  471. KMToolbarToolRadioButtonItemIdentifier]
  472. }
  473. return []
  474. }
  475. func toolbarDefaultItemIdentifiers(_ toolbar: KMToolbarView) -> [String] {
  476. switch toolbarType {
  477. case .None:
  478. return []
  479. case .Main:
  480. return [KMDocumentAnnotationToolbarItemIdentifier,
  481. KMDocumentPageToolbarItemIdentifier,
  482. KMDocumentToolToolbarItemIdentifier,
  483. KMDocumentConversonToolbarItemIdentifier,
  484. KMDocumentFormToolbarItemIdentifier,
  485. KMDocumentFillSginToolbarItemIdentifier,
  486. KMDocumentEditToolbarItemIdentifier,
  487. KMDocumentRedactToolbarItemIdentifier,
  488. KMDocumentScanOCRToolbarItemIdentifier]
  489. case .Annatiton,.Magnify,.Move,.Select,.SelectZoom:
  490. let itemIdentifiers: [String]? = self.toolbar?.toolbarIdentifier != nil ? (UserDefaults.standard.object(forKey: self.toolbar!.toolbarIdentifier!) as? [String]) : []
  491. if itemIdentifiers == nil || itemIdentifiers!.count <= 0 {
  492. return [KMToolbarMoveToolModeItemIdentifier,
  493. KMToolbarMagnifyToolModeItemIdentifier,
  494. KMToolbarSelectToolModeItemIdentifier,
  495. KMToolbarZoomToSelectionItemIdentifier,
  496. KMNewToolbarSpaceItemIdentifier,
  497. KMToolbarDividerItemIdentifier,
  498. KMNewToolbarSpaceItemIdentifier,
  499. KMToolbarHighlightAnnotationItemIdentifier,
  500. KMToolbarUnderlineAnnotationItemIdentifier,
  501. KMToolbarStrikeOutAnnotationItemIdentifier,
  502. KMToolbarInkAnnotationItemIdentifier,
  503. KMToolbarFreeTextAnnotationItemIdentifier,
  504. KMToolbarAnchoredAnnotationItemIdentifier,
  505. KMToolbarSquareAnnotationItemIdentifier, KMToolbarCircleAnnotationItemIdentifier, KMToolbarArrowAnnotationItemIdentifier, KMToolbarLineAnnotationItemIdentifier,
  506. KMToolbarLinkAnnotationItemIdentifier,
  507. KMAnnotationStampToolbarItemIdentifier,
  508. KMToolbarSignSignatureAnnotationItemIdentifier,
  509. KMToolbarDividerItemIdentifier,
  510. KMToolbarShowToolbarItemIdentifier]
  511. }
  512. return itemIdentifiers!
  513. case .editPDF:
  514. return [KMToolbarAddTextEditPDFItemIdentifier,
  515. KMToolbarAddImageEditPDFItemIdentifier]
  516. case .Page:
  517. return []
  518. case .Tool:
  519. return [KMToolbarToolCompressItemIdentifier, KMToolbarToolMergeItemIdentifier,
  520. KMToolbarToolSecureItemIdentifier, KMToolbarComparisonItemIdentifier,
  521. KMToolbarToolWatermarkItemIdentifier, KMToolbarToolBackgroundItemIdentifier,
  522. KMToolbarToolHeaderFooterItemIdentifier, KMToolbarToolBatesItemIdentifier]
  523. case .Form:
  524. return [KMToolbarToolTextFieldItemIdentifier,
  525. KMToolbarToolCheckBoxItemIdentifier,
  526. KMToolbarToolRadioButtonItemIdentifier,
  527. KMToolbarToolListBoxItemIdentifier,
  528. KMToolbarToolPullDownmenuItemIdentifier,
  529. KMToolbarToolButtonIdentifier,
  530. KMToolbarToolSignBoxIdentifier,
  531. KMToolbarDividerItemIdentifier,
  532. KMToolbarToolFormAlignIdentifier,
  533. KMToolbarToolFormMoreIdentifier]
  534. case .FillSign:
  535. return [KMToolbarToolTextIdentifier,
  536. KMToolbarToolHookItemIdentifier,
  537. KMToolbarToolForkItemIdentifier,
  538. KMToolbarToolRectangleIdentifier,
  539. KMToolbarToolLineItemIdentifier,
  540. KMToolbarToolDotItemIdentifier,
  541. KMToolbarToolDateIdentifier,
  542. KMToolbarToolProfileIdentifier,
  543. KMToolbarFillSignSignatureIdentifier]
  544. case .Conversion:
  545. return [KMToolbarConversionWordItemIdentifier,
  546. KMToolbarConversionExcelItemIdentifier,
  547. KMToolbarConversionPPTItemIdentifier,
  548. KMToolbarConversionRTFItemIdentifier,
  549. KMToolbarConversionCSVItemIdentifier,
  550. KMToolbarConversionHTMLItemIdentifier,
  551. KMToolbarConversionTextItemIdentifier,
  552. KMToolbarConversionImageItemIdentifier,
  553. KMDocumentScanOCRToolbarItemIdentifier, KMToolbarConversionExportImageItemIdentifier]
  554. case .ScanOCR:
  555. return [KMToolbarToolEnhancedScanIdentifier,
  556. KMToolbarToolOCRTextIdentifier]
  557. case .viewSetting:
  558. return [KMToolbarViewSettingIdentifier, KMToolbarCropIdentifier,
  559. KMToolbarSnapshotIdentifier, KMToolbarTTSIdentifier]
  560. default:
  561. break
  562. }
  563. return []
  564. }
  565. func toolbar(_ toolbar: KMToolbarView, itemFor identifier: String) -> KMToolbarItemView {
  566. var item: KMToolbarItemView? = self.toolbarItems[identifier] as? KMToolbarItemView
  567. var create = true
  568. if let data = item {
  569. let pId = parentIdentifier(data.itemIdentifier ?? "")
  570. if [.Annatiton,.Magnify,.Move,.Select,.SelectZoom].contains(toolbarType) && (pId != KMDocumentAnnotationToolbarItemIdentifier || data.itemIdentifier! == KMToolbarAnnotationSettingItemIdentifier) {
  571. create = true
  572. }
  573. }
  574. if item == nil || create {
  575. item = KMToolbarItemView.init(itemIdentifier: identifier)
  576. self.toolbarItems[identifier] = item
  577. if isMainToolItem(identifier) {
  578. self._setupMainItem(item)
  579. } else {
  580. if (annotationToolIdentifiers.contains(identifier)) {
  581. self._setupAnnotationItem(item)
  582. } else if editPDFItemIdentifiers.contains(identifier) {
  583. self._setupEditItem(item)
  584. } else if conversionToolIdentifiers.contains(identifier) {
  585. self._setupConvertItem(item)
  586. } else if fillSignToolIdentifiers.contains(identifier) {
  587. self._setupFillSignItem(item)
  588. } else if formToolIdentifiers.contains(identifier) {
  589. self._setupFormItem(item)
  590. } else if toolToolIdentifiers.contains(identifier) {
  591. self._setupToolItem(item)
  592. } else if KMViewDisplayIdentifiers.contains(identifier) {
  593. self._setupViewDisplayItem(item)
  594. }
  595. }
  596. }
  597. return item!
  598. }
  599. func validateToolbarItem(_ item: NSToolbarItem) -> Bool {
  600. return true
  601. }
  602. @objc func listViewAnnotationTypeChangeNotification(sender: Notification?) {
  603. // if let notiName = sender?.name, notiName == NSNotification.Name.CPDFListViewAnnotationTypeChange, self.ignoreCurrentAnnotationTypeChange {
  604. // }
  605. if (self.ignoreCurrentAnnotationTypeChange) {
  606. // 忽略后重置 这个属性是基于单次添加,所以使用后会重置
  607. // self.ignoreCurrentAnnotationTypeChange = false
  608. return
  609. }
  610. let annotationType : CAnnotationType = pdfView.annotationType
  611. if annotationType == .square || annotationType == .circle || annotationType == .arrow || annotationType == .line{
  612. UserDefaults.standard.set(pdfView.annotationType.rawValue, forKey: KMToolBarToolPDFShapeStyle)
  613. UserDefaults.standard.synchronize()
  614. }
  615. for item in self.toolbar.items {
  616. if self.toolbarType == .Annatiton || self.toolbarType == .Move || self.toolbarType == .Magnify ||
  617. self.toolbarType == .Select || self.toolbarType == .SelectZoom {
  618. item.isSelected = false
  619. if item.itemIdentifier == KMDocumentAnnotationToolbarItemIdentifier {
  620. item.isSelected = true
  621. } else if item.itemIdentifier == KMToolbarHighlightAnnotationItemIdentifier {
  622. if annotationType == .highlight {
  623. item.isSelected = true
  624. }
  625. } else if item.itemIdentifier == KMToolbarUnderlineAnnotationItemIdentifier {
  626. if annotationType == .underline {
  627. item.isSelected = true
  628. }
  629. } else if item.itemIdentifier == KMToolbarStrikeOutAnnotationItemIdentifier {
  630. if annotationType == .strikeOut {
  631. item.isSelected = true
  632. }
  633. } else if item.itemIdentifier == KMToolbarInkAnnotationItemIdentifier {
  634. if annotationType == .ink || annotationType == .eraser {
  635. item.isSelected = true
  636. }
  637. } else if item.itemIdentifier == KMToolbarFreeTextAnnotationItemIdentifier {
  638. if annotationType == .freeText {
  639. item.isSelected = true
  640. }
  641. } else if item.itemIdentifier == KMToolbarAnchoredAnnotationItemIdentifier {
  642. if annotationType == .anchored {
  643. item.isSelected = true
  644. }
  645. } else if item.itemIdentifier == KMToolbarSquareAnnotationItemIdentifier {
  646. if annotationType == .square {
  647. item.isSelected = true
  648. }
  649. } else if item.itemIdentifier == KMToolbarCircleAnnotationItemIdentifier {
  650. if annotationType == .circle {
  651. item.isSelected = true
  652. }
  653. } else if item.itemIdentifier == KMToolbarArrowAnnotationItemIdentifier {
  654. if annotationType == .arrow {
  655. item.isSelected = true
  656. }
  657. } else if item.itemIdentifier == KMToolbarLineAnnotationItemIdentifier {
  658. if annotationType == .line {
  659. item.isSelected = true
  660. }
  661. } else if item.itemIdentifier == KMToolbarLinkAnnotationItemIdentifier {
  662. if annotationType == .link {
  663. item.isSelected = true
  664. }
  665. } else if item.itemIdentifier == KMAnnotationStampToolbarItemIdentifier {
  666. if annotationType == .stamp {
  667. item.isSelected = true
  668. }
  669. } else if item.itemIdentifier == KMToolbarSignSignatureAnnotationItemIdentifier {
  670. if annotationType == .signSignature {
  671. item.isSelected = true
  672. }
  673. } else if pdfView.toolMode == .moveToolMode {
  674. if item.itemIdentifier == KMToolbarMoveToolModeItemIdentifier {
  675. item.isSelected = true
  676. }
  677. } else if pdfView.toolMode == .magnifyToolMode {
  678. if item.itemIdentifier == KMToolbarMagnifyToolModeItemIdentifier {
  679. item.isSelected = true
  680. }
  681. } else if pdfView.toolMode == .selectToolMode {
  682. if item.itemIdentifier == KMToolbarSelectToolModeItemIdentifier {
  683. item.isSelected = true
  684. }
  685. } else if pdfView.toolMode == .selectZoomToolMode {
  686. if item.itemIdentifier == KMToolbarZoomToSelectionItemIdentifier {
  687. item.isSelected = true
  688. }
  689. }
  690. if (item.itemIdentifier == KMToolbarShowToolbarItemIdentifier) {
  691. item.isSelected = !self.isShowAllAnnotations
  692. }
  693. } else if self.toolbarType == .FillSign {
  694. item.isSelected = false
  695. if pdfView.toolMode == .selfSignMode {
  696. if item.itemIdentifier == KMToolbarToolHookItemIdentifier {
  697. if annotationType == .signTure {
  698. item.isSelected = true
  699. }
  700. } else if item.itemIdentifier == KMToolbarToolForkItemIdentifier {
  701. if annotationType == .signFalse {
  702. item.isSelected = true
  703. }
  704. } else if item.itemIdentifier == KMToolbarToolLineItemIdentifier {
  705. if annotationType == .signLine {
  706. item.isSelected = true
  707. }
  708. } else if item.itemIdentifier == KMToolbarToolDotItemIdentifier {
  709. if annotationType == .signDot {
  710. item.isSelected = true
  711. }
  712. } else if item.itemIdentifier == KMToolbarToolRectangleIdentifier {
  713. if annotationType == .signCircle {
  714. item.isSelected = true
  715. }
  716. } else if item.itemIdentifier == KMToolbarToolDateIdentifier {
  717. if annotationType == .signDate {
  718. item.isSelected = true
  719. }
  720. } else if item.itemIdentifier == KMToolbarToolTextIdentifier {
  721. if annotationType == .signText {
  722. item.isSelected = true
  723. }
  724. } else if (item.itemIdentifier == KMToolbarFillSignSignatureIdentifier) {
  725. if (annotationType == .signSignature) {
  726. item.isSelected = true
  727. }
  728. }
  729. }
  730. }
  731. }
  732. }
  733. }
  734. extension KMToolbarViewController: NSSearchFieldDelegate {
  735. }
  736. extension KMToolbarViewController {
  737. private func _setupMainItem(_ item: KMToolbarItemView?) {
  738. let identifier = item?.itemIdentifier
  739. if identifier == KMLeftControlToolbarItemIdentifier {
  740. item?.image = NSImage(named: "KMImageNameUXIconBtnTriLeftNor")
  741. item?.titleName = NSLocalizedString("Panel", comment: "")
  742. item?.target = self
  743. item?.toolTip = NSLocalizedString("View Settings", comment: "")
  744. item?.boxImagePosition = .imageAbove
  745. item?.btnAction = #selector(_itemAction)
  746. } else if identifier == KMDocumentZoomToolbarItemIdentifier {
  747. item?.image = NSImage(named: "KMImageNameUXIconToolbarZoominNor")
  748. item?.titleName = NSLocalizedString("", comment: "")
  749. item?.target = self
  750. item?.btnTag = 1
  751. item?.toolTip = NSLocalizedString("Zoom In", comment: "")
  752. item?.boxImagePosition = .imageAbove
  753. item?.btnAction = #selector(zoomPDFViewButtonAction)
  754. } else if identifier == KMDocumentZoomOutToolbarItemIdentifier {
  755. item?.image = NSImage(named: "KMImageNameUXIconToolbarZoomoutNor")
  756. item?.titleName = NSLocalizedString("", comment: "")
  757. item?.target = self
  758. item?.btnTag = 0
  759. item?.toolTip = NSLocalizedString("Zoom Out", comment: "")
  760. item?.boxImagePosition = .imageAbove
  761. item?.btnAction = #selector(zoomPDFViewButtonAction)
  762. } else if identifier == KMDocumentZoomViewToolbarItemIdentifier{
  763. item?.titleName = NSLocalizedString("Zoom", comment: "")
  764. item?.target = self
  765. let view = NSView()
  766. view.frame = NSMakeRect(0, 0, 70, 40)
  767. let boxView = NSView()
  768. boxView.frame = NSMakeRect(0, 16, 70, 22)
  769. view.addSubview(boxView)
  770. boxView.addSubview(self.zoomView)
  771. self.zoomView.frame = NSMakeRect(10, 3, NSWidth(self.zoomView.frame), NSHeight(self.zoomView.frame))
  772. let titleLabel = NSTextField(labelWithString: NSLocalizedString("Zoom", comment: ""))
  773. view.addSubview(titleLabel)
  774. titleLabel.frame = NSMakeRect(0, 0, 70, 16)
  775. titleLabel.alignment = .right
  776. boxView.wantsLayer = true
  777. boxView.layer?.borderWidth = 1
  778. boxView.layer?.borderColor = NSColor.lightGray.cgColor
  779. item?.customizeView = view
  780. } else if identifier == KMDocumentNextPageToolbarItemIdentifier {
  781. item?.image = NSImage(named: "KMImageNameToolbarPagenextNor")
  782. item?.titleName = NSLocalizedString("Next", comment: "")
  783. item?.target = self
  784. item?.toolTip = NSLocalizedString("Go To Next Page", comment: "")
  785. item?.boxImagePosition = .imageAbove
  786. item?.btnAction = #selector(_itemAction)
  787. } else if identifier == KMDocumentPreviousPageToolbarItemIdentifier {
  788. item?.image = NSImage(named: "KMImageNameToolbarPagepreviousNor")
  789. item?.titleName = NSLocalizedString("Previous", comment: "")
  790. item?.target = self
  791. item?.toolTip = NSLocalizedString("Go To Previous Page", comment: "")
  792. item?.boxImagePosition = .imageAbove
  793. item?.btnAction = #selector(_itemAction)
  794. } else if identifier == KMDocumentHomeToolbarItemIdentifier {
  795. item?.image = NSImage(named: "KMImageNameToolbarHomeNor")
  796. item?.titleName = NSLocalizedString("Home", comment: "")
  797. item?.target = self
  798. item?.toolTip = NSLocalizedString("A Welcome Gift from Us", comment: "")
  799. item?.boxImagePosition = .imageAbove
  800. item?.btnAction = #selector(_itemAction)
  801. } else if identifier == KMDocumentAnnotationToolbarItemIdentifier {
  802. item?.titleName = NSLocalizedString("Tools", comment: "")
  803. item?.image = NSImage(named: "KMImageNameUXIconToolbarMytoolsNor")
  804. item?.target = self
  805. item?.toolTip = String(format: "%@: %@, %@, %@, %@", KMLocalizedString("Tool Mode", nil),KMLocalizedString("Annotate", nil),KMLocalizedString("Scroll", nil),KMLocalizedString("Magnify", nil),KMLocalizedString("Select", nil))
  806. item?.btnTag = KMToolbarViewType.Annatiton.rawValue
  807. item?.btnAction = #selector(leftControllButtonAction)
  808. item?.boxImagePosition = .imageAbove
  809. } else if identifier == KMDocumentPageToolbarItemIdentifier {
  810. item?.titleName = NSLocalizedString("Page Edit", comment: "")
  811. item?.target = self
  812. item?.image = NSImage(named: "KMImageNameUXIconToolbarPageeditNor")
  813. item?.toolTip = NSLocalizedString("PDF page editor: insert, delete, extract, rotate, reposition, and replace pages in a PDF", comment: "")
  814. item?.btnTag = KMToolbarViewType.Page.rawValue
  815. item?.btnAction = #selector(leftControllButtonAction)
  816. item?.boxImagePosition = .imageAbove
  817. } else if identifier == KMDocumentConversonToolbarItemIdentifier {
  818. item?.titleName = NSLocalizedString("Converter", comment: "")
  819. item?.target = self
  820. item?.image = NSImage(named: "KMImageNameUXIconToolbarConvertNor")
  821. item?.toolTip = NSLocalizedString("Convert PDFs to Microsoft Word, PowerPoint, Excel, RTF, Text, Image, CSV, and more Offline", comment: "")
  822. item?.btnTag = KMToolbarViewType.Conversion.rawValue
  823. item?.btnAction = #selector(leftControllButtonAction)
  824. item?.boxImagePosition = .imageAbove
  825. } else if identifier == KMDocumentScanOCRToolbarItemIdentifier {
  826. item?.titleName = NSLocalizedString("OCR", comment: "")
  827. item?.target = self
  828. item?.image = NSImage(named: "KMImageNameToolbarOCRNor")
  829. item?.boxImagePosition = .imageAbove
  830. item?.toolTip = NSLocalizedString("Recognize text from Image-based or Scanned PDF with OCR", comment: "")
  831. item?.btnAction = #selector(_itemAction)
  832. } else if identifier == KMToolbarToolEnhancedScanIdentifier {
  833. item?.image = NSImage(named: "KMImageNameMainToolEnhancedScan")
  834. item?.target = self
  835. item?.btnTag = 0
  836. item?.toolTip = NSLocalizedString("Enhanced Scan", comment: "")
  837. item?.titleName = NSLocalizedString("Enhanced Scan", comment: "")
  838. item?.boxImagePosition = .imageLeft
  839. item?.btnAction = #selector(scanOCRModelSelect)
  840. } else if identifier == KMToolbarToolOCRTextIdentifier {
  841. item?.image = NSImage(named: "KMImageNameMainToolOCRText")
  842. item?.target = self
  843. item?.toolTip = NSLocalizedString("OCR Text Recognition", comment: "")
  844. item?.titleName = NSLocalizedString("OCR Text Recognition", comment: "")
  845. item?.boxImagePosition = .imageLeft
  846. item?.btnAction = #selector(scanOCRModelSelect)
  847. } else if identifier == KMDocumentEditToolbarItemIdentifier {
  848. item?.titleName = NSLocalizedString("Edit PDF", comment: "")
  849. item?.target = self
  850. item?.image = NSImage(named: "KMImageNameUXIconToolbarEditNor")
  851. item?.boxImagePosition = .imageAbove
  852. item?.btnTag = KMToolbarViewType.editPDF.rawValue
  853. item?.toolTip = NSLocalizedString("Edit text and image in PDF", comment: "")
  854. item?.btnAction = #selector(leftControllButtonAction)
  855. } else if identifier == KMDocumentFormToolbarItemIdentifier {
  856. item?.titleName = NSLocalizedString("Forms", comment: "")
  857. item?.target = self
  858. item?.image = NSImage(named: "KMImageNameUXIconToolbarFormNor")
  859. item?.boxImagePosition = .imageAbove
  860. item?.btnTag = KMToolbarViewType.Form.rawValue
  861. item?.toolTip = NSLocalizedString("Edit PDF Form", comment: "")
  862. item?.btnAction = #selector(leftControllButtonAction)
  863. } else if identifier == KMDocumentFillSginToolbarItemIdentifier {
  864. item?.titleName = NSLocalizedString("Fill & Sign", comment: "")
  865. item?.target = self
  866. item?.image = NSImage(named: "KMImageNameUXIconToolbarFillsignNor")
  867. item?.boxImagePosition = .imageAbove
  868. item?.btnTag = KMToolbarViewType.FillSign.rawValue
  869. item?.toolTip = NSLocalizedString("Fill and sign forms", comment: "")
  870. item?.btnAction = #selector(leftControllButtonAction)
  871. } else if identifier == KMDocumentToolToolbarItemIdentifier {
  872. item?.titleName = NSLocalizedString("Editor", comment: "")
  873. item?.target = self
  874. item?.image = NSImage(named: "KMImageNameUXIconToolbarEdittoolNor")
  875. item?.boxImagePosition = .imageAbove
  876. item?.btnTag = KMToolbarViewType.Tool.rawValue
  877. item?.toolTip = NSLocalizedString("Edit, delete, cut, copy, paste, and insert text in PDFs", comment: "")
  878. item?.btnAction = #selector(leftControllButtonAction)
  879. } else if identifier == KMDocumentRedactToolbarItemIdentifier {
  880. item?.titleName = NSLocalizedString("Redact Text", comment: "")
  881. item?.target = self
  882. item?.image = NSImage(named: "KMImageNameUXIconToolbarRedactNor")
  883. item?.boxImagePosition = .imageAbove
  884. item?.toolTip = NSLocalizedString("Mark for redaction", comment: "")
  885. item?.btnAction = #selector(_itemAction)
  886. } else if identifier == KMDocumentAITranslationToolbarItemIdentifier {
  887. item?.image = NSImage(named: "ic_function_other_AITranslation")
  888. item?.titleName = "AI Translation"
  889. item?.target = self
  890. item?.toolTip = NSLocalizedString("AI Translation", comment: "")
  891. item?.boxImagePosition = .imageOnly
  892. item?.btnAction = #selector(aiTranslationButtonAction)
  893. } else if identifier == KMDocumentPrintToolbarItemIdentifier {
  894. item?.image = NSImage(named: "KMImageNameMainToolbarPrint")
  895. item?.titleName = "Print"
  896. item?.target = self
  897. item?.toolTip = NSLocalizedString("Print", comment: "")
  898. item?.boxImagePosition = .imageOnly
  899. item?.btnAction = #selector(_itemAction)
  900. } else if identifier == KMDocumentViewDisplayToolbarItemIdentifier {
  901. item?.image = NSImage(named: "KMImageNameUXIconToolbarPageviewNor")
  902. item?.titleName = NSLocalizedString("Page Display", comment: "")
  903. item?.target = self
  904. item?.toolTip = NSLocalizedString("Page Display", comment: "")
  905. item?.boxImagePosition = .imageAbove
  906. item?.btnAction = #selector(_itemAction)
  907. } else if identifier == KMDocumentShareToolbarItemIdentifier {
  908. item?.image = NSImage(named: "KMImageNameUXIconToolbarShareNor")
  909. item?.titleName = NSLocalizedString("Share", comment: "")
  910. item?.target = self
  911. item?.toolTip = NSLocalizedString("Share the file with others", comment: "")
  912. item?.boxImagePosition = .imageAbove
  913. item?.btnAction = #selector(shareButtonAction)
  914. let menuItem = NSMenuItem.init(title: item!.titleName ?? "", action: nil, target: self)
  915. let menu = NSMenu()
  916. menu.addItem(withTitle: NSLocalizedString("Document", comment: ""), action: #selector(shareViaWithDocument), target: self)
  917. menu.addItem(withTitle: NSLocalizedString("Flattened Copy", comment: ""), action: #selector(shareViaWithFlatten), target: self)
  918. menu.addItem(withTitle: NSLocalizedString("Original PDF", comment: ""), action: #selector(shareViaWithOriginalPDF), target: self)
  919. menuItem.submenu = menu
  920. item?.menuFormRepresentation = menuItem
  921. } else if identifier == KMDocumentSearchToolbarItemIdentifier {
  922. item?.titleName = NSLocalizedString("Search", comment: "")
  923. item?.target = self
  924. let view = NSView()
  925. view.frame = NSMakeRect(0, 0, 150, 40)
  926. let boxView = NSView()
  927. boxView.frame = NSMakeRect(0, 16, 150, 22)
  928. view.addSubview(boxView)
  929. let searchView = NSSearchField()
  930. searchView.frame = NSMakeRect(0, 0, 150, 22)
  931. searchView.placeholderString = NSLocalizedString("Search", comment: "")
  932. searchView.sendsWholeSearchString = true
  933. searchView.sendsSearchStringImmediately = true
  934. searchView.drawsBackground = false
  935. searchView.delegate = self
  936. boxView.addSubview(searchView)
  937. let titleLabel = NSTextField(labelWithString: NSLocalizedString("Search", comment: ""))
  938. view.addSubview(titleLabel)
  939. titleLabel.frame = NSMakeRect(0, 0, 130, 16)
  940. titleLabel.alignment = .center
  941. item?.customizeView = view
  942. } else if identifier == KMRightControlToolbarItemIdentifier {
  943. item?.image = NSImage(named: "KMImageNameUXIconBtnTriRightNor")
  944. item?.titleName = NSLocalizedString("Properties", comment: "")
  945. item?.target = self
  946. item?.toolTip = NSLocalizedString("Show/Hide Annotation Properties Panel", comment: "")
  947. item?.boxImagePosition = .imageOnly
  948. item?.btnAction = #selector(_itemAction)
  949. } else if identifier == KMToolbarToolRedactItemIdentifier {
  950. item?.image = NSImage(named: "KMImageNameMainToolsRedact")
  951. item?.target = self
  952. item?.btnTag = KMToolbarType.redact.rawValue
  953. item?.toolTip = NSLocalizedString("Redact", comment: "")
  954. item?.titleName = NSLocalizedString("Redact", comment: "")
  955. item?.btnAction = #selector(redactMenuAction)
  956. let menuItem = NSMenuItem.init(title: "Redact", action: #selector(changeAnnotationMode), target: self)
  957. menuItem.tag = item!.btnTag
  958. item?.menuFormRepresentation = menuItem
  959. }
  960. }
  961. private func _setupAnnotationItem(_ item: KMToolbarItemView?) {
  962. let identifier = item?.itemIdentifier
  963. if identifier == KMToolbarMoveToolModeItemIdentifier {
  964. item?.titleName = NSLocalizedString("Scroll Tool", comment: "")
  965. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsPantool)
  966. item?.target = self
  967. item?.btnTag = KMToolbarViewType.Move.rawValue
  968. item?.toolTip = NSLocalizedString("Scroll Tool", comment: "")
  969. item?.boxImagePosition = .imageOnly
  970. item?.btnAction = #selector(leftControllButtonAction)
  971. } else if identifier == KMToolbarMagnifyToolModeItemIdentifier {
  972. item?.titleName = NSLocalizedString("Magnify Tool", comment: "")
  973. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsMagnifier)
  974. item?.target = self
  975. item?.btnTag = KMToolbarViewType.Magnify.rawValue
  976. item?.toolTip = NSLocalizedString("Magnify Tool", comment: "")
  977. item?.boxImagePosition = .imageOnly
  978. item?.btnAction = #selector(leftControllButtonAction)
  979. } else if identifier == KMToolbarSelectToolModeItemIdentifier {
  980. item?.titleName = NSLocalizedString("Content Selection Tool", comment: "")
  981. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsContentsel)
  982. item?.target = self
  983. item?.btnTag = KMToolbarViewType.Select.rawValue
  984. item?.toolTip = NSLocalizedString("Content Selection Tool", comment: "")
  985. item?.boxImagePosition = .imageOnly
  986. item?.btnAction = #selector(leftControllButtonAction)
  987. } else if identifier == KMToolbarZoomToSelectionItemIdentifier {
  988. item?.titleName = NSLocalizedString("Zoom to selected area", comment: "")
  989. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsAreazoom)
  990. item?.target = self
  991. item?.btnTag = KMToolbarViewType.SelectZoom.rawValue
  992. item?.toolTip = NSLocalizedString("Zoom to selected area", comment: "")
  993. item?.boxImagePosition = .imageOnly
  994. item?.btnAction = #selector(leftControllButtonAction)
  995. } else if identifier == KMToolbarHighlightAnnotationItemIdentifier {
  996. item?.titleName = NSLocalizedString("Highlight", comment: "")
  997. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsUnderline)
  998. item?.target = self
  999. item?.btnTag = CAnnotationType.highlight.rawValue
  1000. item?.toolTip = String(format: "%@ (⌃⌘H)", NSLocalizedString("Highlight", comment: ""))
  1001. item?.boxImagePosition = .imageOnly
  1002. item?.btnAction = #selector(changeAnnotationMode)
  1003. } else if identifier == KMToolbarUnderlineAnnotationItemIdentifier {
  1004. item?.titleName = NSLocalizedString("Underline", comment: "")
  1005. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsUnderline)
  1006. item?.target = self
  1007. item?.btnTag = CAnnotationType.underline.rawValue
  1008. item?.toolTip = String(format: "%@ (⇧⌘M)", NSLocalizedString("Underline", comment: ""))
  1009. item?.boxImagePosition = .imageOnly
  1010. item?.btnAction = #selector(changeAnnotationMode)
  1011. } else if identifier == KMToolbarStrikeOutAnnotationItemIdentifier {
  1012. item?.titleName = NSLocalizedString("Strikethrough", comment: "")
  1013. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsStrikeout)
  1014. item?.target = self
  1015. item?.btnTag = CAnnotationType.strikeOut.rawValue
  1016. item?.toolTip = String(format: "%@ (⌃⌘M)", NSLocalizedString("Strikethrough", comment: ""))
  1017. item?.boxImagePosition = .imageOnly
  1018. item?.btnAction = #selector(changeAnnotationMode)
  1019. } else if identifier == KMToolbarInkAnnotationItemIdentifier {
  1020. item?.titleName = NSLocalizedString("Freehand", comment: "")
  1021. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsPen)
  1022. item?.target = self
  1023. item?.btnTag = CAnnotationType.ink.rawValue
  1024. item?.toolTip = NSLocalizedString("Add freehand drawings by hand writing just like you do with a pen.", comment: "")
  1025. item?.boxImagePosition = .imageOnly
  1026. item?.btnAction = #selector(changeAnnotationMode)
  1027. } else if identifier == KMToolbarFreeTextAnnotationItemIdentifier {
  1028. item?.titleName = NSLocalizedString("Text Note", comment: "")
  1029. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsText)
  1030. item?.target = self
  1031. item?.btnTag = CAnnotationType.freeText.rawValue
  1032. item?.toolTip = String(format: "%@ (⌘N)", NSLocalizedString("Text Note", comment: ""))
  1033. item?.boxImagePosition = .imageOnly
  1034. item?.btnAction = #selector(changeAnnotationMode)
  1035. } else if identifier == KMToolbarAnchoredAnnotationItemIdentifier {
  1036. item?.titleName = NSLocalizedString("Anchored Note", comment: "")
  1037. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsNote)
  1038. item?.target = self
  1039. item?.btnTag = CAnnotationType.anchored.rawValue
  1040. item?.toolTip = String(format: "%@ (⌥⌘N)", NSLocalizedString("Anchored Note", comment: ""))
  1041. item?.boxImagePosition = .imageOnly
  1042. item?.btnAction = #selector(changeAnnotationMode)
  1043. } else if identifier == KMToolbarSquareAnnotationItemIdentifier {
  1044. item?.titleName = NSLocalizedString("Square", comment: "")
  1045. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsRec)
  1046. item?.target = self
  1047. item?.btnTag = CAnnotationType.square.rawValue
  1048. item?.toolTip = NSLocalizedString("Draw rectangle; draw square by holding Shift key", comment: "")
  1049. item?.boxImagePosition = .imageOnly
  1050. item?.btnAction = #selector(changeAnnotationMode)
  1051. }else if identifier == KMToolbarCircleAnnotationItemIdentifier {
  1052. item?.titleName = NSLocalizedString("oval", comment: "")
  1053. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsOval)
  1054. item?.target = self
  1055. item?.btnTag = CAnnotationType.circle.rawValue
  1056. item?.toolTip = NSLocalizedString("Draw oval; draw circle by holding Shift key", comment: "")
  1057. item?.boxImagePosition = .imageOnly
  1058. item?.btnAction = #selector(changeAnnotationMode)
  1059. } else if identifier == KMToolbarArrowAnnotationItemIdentifier {
  1060. item?.titleName = NSLocalizedString("Arrow", comment: "")
  1061. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsArrow)
  1062. item?.target = self
  1063. item?.btnTag = CAnnotationType.arrow.rawValue
  1064. item?.toolTip = NSLocalizedString("Draw arrow; draw straight arrow by holding Shift key", comment: "")
  1065. item?.boxImagePosition = .imageOnly
  1066. item?.btnAction = #selector(changeAnnotationMode)
  1067. } else if identifier == KMToolbarLineAnnotationItemIdentifier {
  1068. item?.titleName = NSLocalizedString("Square", comment: "")
  1069. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsLine)
  1070. item?.target = self
  1071. item?.btnTag = CAnnotationType.line.rawValue
  1072. item?.toolTip = NSLocalizedString("Draw line; draw straight line by holding Shift key", comment: "")
  1073. item?.boxImagePosition = .imageOnly
  1074. item?.btnAction = #selector(changeAnnotationMode)
  1075. } else if identifier == KMToolbarLinkAnnotationItemIdentifier {
  1076. item?.titleName = NSLocalizedString("Link", comment: "")
  1077. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsLink)
  1078. item?.target = self
  1079. item?.btnTag = CAnnotationType.link.rawValue
  1080. item?.toolTip = NSLocalizedString("Select an area or text on a page for a link to be inserted.", comment: "")
  1081. item?.boxImagePosition = .imageOnly
  1082. item?.btnAction = #selector(changeAnnotationMode)
  1083. } else if identifier == KMToolbarSignSignatureAnnotationItemIdentifier {
  1084. item?.titleName = NSLocalizedString("SignSignature", comment: "")
  1085. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsSign)
  1086. item?.target = self
  1087. item?.btnTag = CAnnotationType.signSignature.rawValue
  1088. item?.toolTip = NSLocalizedString("Add beautiful handwriting or use your trackpad to create your own signature.", comment: "")
  1089. item?.boxImagePosition = .imageOnly
  1090. item?.btnAction = #selector(changeAnnotationMode)
  1091. } else if identifier == KMAnnotationStampToolbarItemIdentifier {
  1092. item?.titleName = NSLocalizedString("Stamp", comment: "")
  1093. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsStamp)
  1094. item?.target = self
  1095. item?.btnTag = CAnnotationType.stamp.rawValue
  1096. item?.toolTip = NSLocalizedString("Add New Stamp", comment: "")
  1097. item?.boxImagePosition = .imageOnly
  1098. item?.btnAction = #selector(changeAnnotationMode)
  1099. } else if identifier == KMToolbarShowToolbarItemIdentifier {
  1100. item?.image = NSImage(named: "KMImageNameMainToolShow")
  1101. item?.selectedImage = NSImage(named: "KMImageNameMainToolHide")
  1102. item?.alternateImage = NSImage(named: "KMImageNameMainToolShow")
  1103. item?.selectedBackgroundColor = NSColor.clear
  1104. item?.target = self
  1105. item?.toolTip = NSLocalizedString("Hide", comment: "")
  1106. item?.titleName = NSLocalizedString("Hide", comment: "")
  1107. item?.boxImagePosition = .imageOnly
  1108. item?.btnAction = #selector(showPDFLayoutMode)
  1109. } else if identifier == KMToolbarAnnotationSettingItemIdentifier {
  1110. item?.image = NSImage(named: "KMImageNameUXIconBtnSetNor")
  1111. item?.target = self
  1112. item?.titleName = NSLocalizedString("Setting", comment: "")
  1113. item?.boxImagePosition = .imageOnly
  1114. item?.btnAction = #selector(_itemAction)
  1115. }
  1116. }
  1117. private func _setupEditItem(_ item: KMToolbarItemView?) {
  1118. let identifier = item?.itemIdentifier
  1119. if identifier == KMToolbarAddTextEditPDFItemIdentifier {
  1120. item?.image = NSImage(named: "KMImageNameMainToolFreeText")
  1121. item?.target = self
  1122. item?.btnTag = CAnnotationType.addText.rawValue
  1123. item?.toolTip = NSLocalizedString("Add Text", comment: "")
  1124. item?.titleName = NSLocalizedString("Add Text", comment: "")
  1125. item?.boxImagePosition = .imageLeft
  1126. item?.btnAction = #selector(changeAnnotationMode)
  1127. } else if identifier == KMToolbarAddImageEditPDFItemIdentifier {
  1128. item?.image = NSImage(named: "KMImageNameMainToolEditImage")
  1129. item?.target = self
  1130. item?.btnTag = CAnnotationType.addImage.rawValue
  1131. item?.toolTip = NSLocalizedString("Add Image", comment: "")
  1132. item?.titleName = NSLocalizedString("Add Image", comment: "")
  1133. item?.boxImagePosition = .imageLeft
  1134. item?.btnAction = #selector(changeAnnotationMode)
  1135. }
  1136. }
  1137. private func _setupConvertItem(_ item: KMToolbarItemView?) {
  1138. let identifier = item?.itemIdentifier
  1139. if identifier == KMToolbarConversionWordItemIdentifier {
  1140. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertWord)
  1141. item?.target = self
  1142. item?.btnTag = KMToolbarType.word.rawValue
  1143. item?.toolTip = NSLocalizedString("Convert all the great work stored in your PDF to a Word document that’s easy to update. Keep the fonts and layouts intact — including bullets and tables.", comment: "")
  1144. item?.titleName = NSLocalizedString("To Word", comment: "")
  1145. item?.boxImagePosition = .imageLeft
  1146. item?.btnAction = #selector(conversionMenuItemAction)
  1147. } else if identifier == KMToolbarConversionExcelItemIdentifier {
  1148. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertExcel)
  1149. item?.target = self
  1150. item?.btnTag = KMToolbarType.excel.rawValue
  1151. item?.toolTip = NSLocalizedString("Skip the data entry steps and tedious reformatting tasks, too. When you convert to Excel, your data is preserved along with your columns, layouts, and formatting.", comment: "")
  1152. item?.titleName = NSLocalizedString("To Excel", comment: "")
  1153. item?.boxImagePosition = .imageLeft
  1154. item?.btnAction = #selector(conversionMenuItemAction)
  1155. } else if identifier == KMToolbarConversionPPTItemIdentifier {
  1156. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertPPT)
  1157. item?.target = self
  1158. item?.btnTag = KMToolbarType.ppt.rawValue
  1159. item?.toolTip = NSLocalizedString("When you use PDF Reader Pro to convert PDFs to PowerPoint, you know your formats will be saved, too. So you don’t have to bother redoing bullets, tables, objects, or master layouts.", comment: "")
  1160. item?.titleName = NSLocalizedString("To PPT", comment: "")
  1161. item?.boxImagePosition = .imageLeft
  1162. item?.btnAction = #selector(conversionMenuItemAction)
  1163. } else if identifier == KMToolbarConversionRTFItemIdentifier {
  1164. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertRTF)
  1165. item?.target = self
  1166. item?.btnTag = KMToolbarType.rtf.rawValue
  1167. item?.toolTip = NSLocalizedString("Turn PDF documents into Rich Text Format (RTF) files that can be opened in virtually any word processor.", comment: "")
  1168. item?.titleName = NSLocalizedString("To RTF", comment: "")
  1169. item?.boxImagePosition = .imageLeft
  1170. item?.btnAction = #selector(conversionMenuItemAction)
  1171. } else if identifier == KMToolbarConversionCSVItemIdentifier {
  1172. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertCSV)
  1173. item?.target = self
  1174. item?.btnTag = KMToolbarType.csv.rawValue
  1175. item?.toolTip = NSLocalizedString("PDF To CSV", comment: "")
  1176. item?.titleName = NSLocalizedString("To CSV", comment: "")
  1177. item?.boxImagePosition = .imageLeft
  1178. item?.btnAction = #selector(conversionMenuItemAction)
  1179. } else if identifier == KMToolbarConversionHTMLItemIdentifier {
  1180. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertHtml)
  1181. item?.target = self
  1182. item?.btnTag = KMToolbarType.html.rawValue
  1183. item?.toolTip = NSLocalizedString("PDF To HTML", comment: "")
  1184. item?.titleName = NSLocalizedString("To HTML", comment: "")
  1185. item?.boxImagePosition = .imageLeft
  1186. item?.btnAction = #selector(conversionMenuItemAction)
  1187. } else if identifier == KMToolbarConversionTextItemIdentifier {
  1188. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertText)
  1189. item?.target = self
  1190. item?.btnTag = KMToolbarType.conversion_text.rawValue
  1191. item?.toolTip = NSLocalizedString("PDF To Text", comment: "")
  1192. item?.titleName = NSLocalizedString("To Text", comment: "")
  1193. item?.boxImagePosition = .imageLeft
  1194. item?.btnAction = #selector(conversionMenuItemAction)
  1195. } else if identifier == KMToolbarConversionImageItemIdentifier {
  1196. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertPDFToIMG)
  1197. item?.target = self
  1198. item?.btnTag = KMToolbarType.conversion_image.rawValue
  1199. item?.toolTip = NSLocalizedString("Convert PDF to JPEG, PNG, TIFF, BMP, GIF or TGA files", comment: "")
  1200. item?.titleName = NSLocalizedString("To Image", comment: "")
  1201. item?.boxImagePosition = .imageExpandLeft
  1202. item?.needExpandAction = true
  1203. item?.btnAction = #selector(conversionMenuItemAction)
  1204. let menuItem = NSMenuItem.init(title: "To Image", action: #selector(conversionMenuItemAction), target: self)
  1205. let subMenu = NSMenu()
  1206. subMenu.addItem(title: NSLocalizedString("PDF To JPEG", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.jpeg.rawValue)
  1207. subMenu.addItem(title: NSLocalizedString("PDF To JPG", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.jpg.rawValue)
  1208. subMenu.addItem(title: NSLocalizedString("PDF To PNG", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.png.rawValue)
  1209. subMenu.addItem(title: NSLocalizedString("PDF To GIF", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.gif.rawValue)
  1210. subMenu.addItem(title: NSLocalizedString("PDF To TIFF", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.tiff.rawValue)
  1211. subMenu.addItem(title: NSLocalizedString("PDF To TGA", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.tga.rawValue)
  1212. subMenu.addItem(title: NSLocalizedString("PDF To BMP", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.bmp.rawValue)
  1213. menuItem.submenu = subMenu
  1214. item?.menuFormRepresentation = menuItem
  1215. } else if item?.itemIdentifier == KMToolbarConversionExportImageItemIdentifier {
  1216. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertExportImage)
  1217. item?.target = self
  1218. item?.toolTip = NSLocalizedString("The range you can extract images includes current page, odd page, even page, custom page, and all pages.", comment: "")
  1219. item?.titleName = NSLocalizedString("Extract Images", comment: "")
  1220. item?.boxImagePosition = .imageExpandLeft
  1221. item?.needExpandAction = true
  1222. let menuItem = NSMenuItem.init(title: "To Image", action: nil, target: self)
  1223. let subMenu = NSMenu()
  1224. subMenu.addItem(title: NSLocalizedString("Extract All Images", comment: ""), action: #selector(_exportImageAction), target: self, tag: 1)
  1225. subMenu.addItem(title: NSLocalizedString("Extract Images", comment: ""), action: #selector(_exportImageAction), target: self, tag: 2)
  1226. menuItem.submenu = subMenu
  1227. item?.menuFormRepresentation = menuItem
  1228. } else if item?.itemIdentifier == KMToolbarConversionCreatePDFItemIdentifier {
  1229. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertCreatPDF)
  1230. item?.target = self
  1231. item?.toolTip = NSLocalizedString("Convert JPEG, JPG, PNG, TIFF, BMP or PSD files to PDFs", comment: "")
  1232. item?.titleName = NSLocalizedString("New PDF Document", comment: "")
  1233. item?.boxImagePosition = .imageExpandLeft
  1234. item?.needExpandAction = true
  1235. let menuItem = NSMenuItem.init(title: "New PDF Document", action: nil, target: self)
  1236. let subMenu = NSMenu()
  1237. subMenu.addItem(title: NSLocalizedString("New Blank Page", comment: ""), action: #selector(_newPDFAction), target: self, tag: 1)
  1238. subMenu.addItem(title: NSLocalizedString("New From Images", comment: ""), action: #selector(_newPDFAction), target: self, tag: 2)
  1239. subMenu.addItem(NSMenuItem.separator())
  1240. subMenu.addItem(title: NSLocalizedString("New From Web Page", comment: ""), action: #selector(_newPDFAction), target: self, tag: 3)
  1241. subMenu.addItem(title: NSLocalizedString("Import From Camera", comment: ""), action: #selector(_newPDFAction), target: self, tag: 4)
  1242. subMenu.addItem(NSMenuItem.separator())
  1243. subMenu.addItem(title: NSLocalizedString("Import From Scanner", comment: ""), action: #selector(_newPDFAction), target: self, tag: 5)
  1244. menuItem.submenu = subMenu
  1245. item?.menuFormRepresentation = menuItem
  1246. }
  1247. }
  1248. private func _setupFillSignItem(_ item: KMToolbarItemView?) {
  1249. let identifier = item?.itemIdentifier
  1250. if identifier == KMToolbarToolHookItemIdentifier {
  1251. item?.image = NSImage(named: "KMImageNameFillSignHook")
  1252. item?.target = self
  1253. item?.btnTag = CAnnotationType.signTure.rawValue
  1254. item?.toolTip = NSLocalizedString("Signature", comment: "")
  1255. item?.titleName = NSLocalizedString("Signature", comment: "")
  1256. item?.boxImagePosition = .imageOnly
  1257. item?.btnAction = #selector(changeAnnotationMode)
  1258. } else if identifier == KMToolbarToolForkItemIdentifier {
  1259. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignFork)
  1260. item?.target = self
  1261. item?.btnTag = CAnnotationType.signFalse.rawValue
  1262. item?.toolTip = NSLocalizedString("Add X", comment: "")
  1263. item?.boxImagePosition = .imageOnly
  1264. item?.btnAction = #selector(changeAnnotationMode)
  1265. } else if identifier == KMToolbarToolLineItemIdentifier {
  1266. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignLine)
  1267. item?.target = self
  1268. item?.btnTag = CAnnotationType.signLine.rawValue
  1269. item?.toolTip = NSLocalizedString("Add line", comment: "")
  1270. item?.boxImagePosition = .imageOnly
  1271. item?.btnAction = #selector(changeAnnotationMode)
  1272. } else if identifier == KMToolbarToolDotItemIdentifier {
  1273. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignPoint)
  1274. item?.target = self
  1275. item?.btnTag = CAnnotationType.signDot.rawValue
  1276. item?.toolTip = NSLocalizedString("Add dot", comment: "")
  1277. item?.boxImagePosition = .imageOnly
  1278. item?.btnAction = #selector(changeAnnotationMode)
  1279. } else if identifier == KMToolbarToolRectangleIdentifier {
  1280. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignRoundedrec)
  1281. item?.target = self
  1282. item?.btnTag = CAnnotationType.signCircle.rawValue
  1283. item?.toolTip = NSLocalizedString("Add circle", comment: "")
  1284. item?.boxImagePosition = .imageOnly
  1285. item?.btnAction = #selector(changeAnnotationMode)
  1286. } else if identifier == KMToolbarToolTextIdentifier {
  1287. item?.image = NSImage(named: KMImageNameToolbarFreeText)
  1288. item?.target = self
  1289. item?.btnTag = CAnnotationType.signText.rawValue
  1290. item?.toolTip = NSLocalizedString("Add text", comment: "")
  1291. item?.titleName = NSLocalizedString("Text", comment: "")
  1292. item?.boxImagePosition = .imageOnly
  1293. item?.btnAction = #selector(changeAnnotationMode)
  1294. } else if identifier == KMToolbarToolDateIdentifier {
  1295. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignDate)
  1296. item?.target = self
  1297. item?.btnTag = CAnnotationType.signDate.rawValue
  1298. item?.toolTip = NSLocalizedString("Date", comment: "")
  1299. item?.boxImagePosition = .imageOnly
  1300. item?.btnAction = #selector(changeAnnotationMode)
  1301. } else if (identifier == KMToolbarToolProfileIdentifier) {
  1302. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignMyprofile)
  1303. item?.target = self
  1304. item?.toolTip = NSLocalizedString("My Profile", comment: "")
  1305. item?.boxImagePosition = .imageOnly
  1306. item?.btnAction = #selector(_itemAction)
  1307. }else if (identifier == KMToolbarFillSignSignatureIdentifier) {
  1308. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignMysignature)
  1309. item?.target = self
  1310. item?.btnTag = CAnnotationType.signSignature.rawValue
  1311. item?.toolTip = NSLocalizedString("Sign document by typing or drawing a signature", comment: "")
  1312. item?.boxImagePosition = .imageOnly
  1313. item?.btnAction = #selector(changeAnnotationMode)
  1314. }
  1315. }
  1316. private func _setupFormItem(_ item: KMToolbarItemView?) {
  1317. let identifier = item?.itemIdentifier
  1318. if identifier == KMToolbarToolTextFieldItemIdentifier {
  1319. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormTextfield)
  1320. item?.target = self
  1321. item?.btnTag = CAnnotationType.textField.rawValue
  1322. item?.toolTip = NSLocalizedString("Text Field", comment: "")
  1323. item?.titleName = NSLocalizedString("Text Field", comment: "")
  1324. item?.boxImagePosition = .imageLeft
  1325. item?.btnAction = #selector(changeAnnotationMode)
  1326. let menuItem = NSMenuItem.init(title: "TextField", action: #selector(changeAnnotationMode), target: self)
  1327. menuItem.tag = item!.btnTag
  1328. item?.menuFormRepresentation = menuItem
  1329. } else if identifier == KMToolbarToolCheckBoxItemIdentifier {
  1330. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormCheckbox)
  1331. item?.target = self
  1332. item?.btnTag = CAnnotationType.checkBox.rawValue
  1333. item?.toolTip = NSLocalizedString("Check Box", comment: "")
  1334. item?.titleName = NSLocalizedString("Check Box", comment: "")
  1335. item?.boxImagePosition = .imageLeft
  1336. item?.btnAction = #selector(changeAnnotationMode)
  1337. } else if identifier == KMToolbarToolRadioButtonItemIdentifier {
  1338. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormRadiobutton)
  1339. item?.target = self
  1340. item?.btnTag = CAnnotationType.radioButton.rawValue
  1341. item?.toolTip = NSLocalizedString("Radio Button", comment: "")
  1342. item?.titleName = NSLocalizedString("Radio Button", comment: "")
  1343. item?.boxImagePosition = .imageLeft
  1344. item?.btnAction = #selector(changeAnnotationMode)
  1345. let menuItem = NSMenuItem.init(title: "RadioButton", action: #selector(changeAnnotationMode), target: self)
  1346. menuItem.tag = item!.btnTag
  1347. item?.menuFormRepresentation = menuItem
  1348. } else if identifier == KMToolbarToolListBoxItemIdentifier {
  1349. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormListbox)
  1350. item?.target = self
  1351. item?.btnTag = CAnnotationType.listMenu.rawValue
  1352. item?.toolTip = NSLocalizedString("List Box", comment: "")
  1353. item?.titleName = NSLocalizedString("List Box", comment: "")
  1354. item?.boxImagePosition = .imageLeft
  1355. item?.btnAction = #selector(changeAnnotationMode)
  1356. let menuItem = NSMenuItem.init(title: "List Box", action: #selector(changeAnnotationMode), target: self)
  1357. menuItem.tag = item!.btnTag
  1358. item?.menuFormRepresentation = menuItem
  1359. } else if identifier == KMToolbarToolPullDownmenuItemIdentifier {
  1360. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormPulldownmenu)
  1361. item?.target = self
  1362. item?.btnTag = CAnnotationType.comboBox.rawValue
  1363. item?.toolTip = NSLocalizedString("Combo Box", comment: "")
  1364. item?.titleName = NSLocalizedString("Combo Box", comment: "")
  1365. item?.boxImagePosition = .imageLeft
  1366. item?.btnAction = #selector(changeAnnotationMode)
  1367. let menuItem = NSMenuItem.init(title: "PullDownmenu", action: #selector(changeAnnotationMode), target: self)
  1368. menuItem.tag = item!.btnTag
  1369. item?.menuFormRepresentation = menuItem
  1370. } else if identifier == KMToolbarToolButtonIdentifier {
  1371. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormButton)
  1372. item?.target = self
  1373. item?.btnTag = CAnnotationType.actionButton.rawValue
  1374. item?.toolTip = NSLocalizedString("Button", comment: "")
  1375. item?.titleName = NSLocalizedString("Button", comment: "")
  1376. item?.boxImagePosition = .imageLeft
  1377. item?.btnAction = #selector(changeAnnotationMode)
  1378. let menuItem = NSMenuItem.init(title: "Button", action: #selector(changeAnnotationMode), target: self)
  1379. menuItem.tag = item!.btnTag
  1380. item?.menuFormRepresentation = menuItem
  1381. } else if identifier == KMToolbarToolSignBoxIdentifier {
  1382. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormSign)
  1383. item?.target = self
  1384. item?.btnTag = CAnnotationType.signature.rawValue
  1385. item?.toolTip = NSLocalizedString("Signature", comment: "")
  1386. item?.titleName = NSLocalizedString("Signature", comment: "")
  1387. item?.boxImagePosition = .imageLeft
  1388. item?.btnAction = #selector(changeAnnotationMode)
  1389. let menuItem = NSMenuItem.init(title: "SignBox", action: #selector(changeAnnotationMode), target: self)
  1390. menuItem.tag = item!.btnTag
  1391. item?.menuFormRepresentation = menuItem
  1392. } else if identifier == KMToolbarToolFormAlignIdentifier {
  1393. item?.image = NSImage(named: KMImageNameUXIconPropertybarAlignLeftToor)
  1394. item?.target = self
  1395. item?.toolTip = NSLocalizedString("Alignment", comment: "")
  1396. item?.titleName = NSLocalizedString("Alignment", comment: "")
  1397. item?.boxImagePosition = .imageExpandLeft
  1398. item?.needExpandAction = true
  1399. item?.btnAction = #selector(formsAlignmentAction)
  1400. let menuItem = NSMenuItem.init(title: "Alignment", action: #selector(formsAlignmentAction), target: self)
  1401. let subMenu = NSMenu()
  1402. subMenu.addItem(title: NSLocalizedString("Align Left", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignLeftNor", action: #selector(_alignmentAction), target: self, tag: 0)
  1403. subMenu.addItem(title: NSLocalizedString("Align Vertically", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignVercenterNor", action: #selector(_alignmentAction), target: self, tag: 1)
  1404. subMenu.addItem(title: NSLocalizedString("Align Right", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignRightNor", action: #selector(_alignmentAction), target: self, tag: 2)
  1405. subMenu.addItem(NSMenuItem.separator())
  1406. subMenu.addItem(title: NSLocalizedString("Align Top", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignUpNor", action: #selector(_alignmentAction), target: self, tag: 3)
  1407. subMenu.addItem(title: NSLocalizedString("Align Horizontally", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignHorcenterNor", action: #selector(_alignmentAction), target: self, tag: 4)
  1408. subMenu.addItem(title: NSLocalizedString("Align Bottom", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignDownNor", action: #selector(_alignmentAction), target: self, tag: 5)
  1409. subMenu.addItem(NSMenuItem.separator())
  1410. subMenu.addItem(title: NSLocalizedString("Distribute Horizontally", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignHorsplitNor", action: #selector(_alignmentAction), target: self, tag: 6)
  1411. subMenu.addItem(title: NSLocalizedString("Distribute Vertically", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignVersplitNor", action: #selector(_alignmentAction), target: self, tag: 7)
  1412. menuItem.submenu = subMenu
  1413. menuItem.tag = item!.btnTag
  1414. item?.menuFormRepresentation = menuItem
  1415. } else if identifier == KMToolbarToolFormMoreIdentifier {
  1416. item?.image = NSImage(named: "KMImageNameMainToolFormMore")
  1417. item?.target = self
  1418. item?.toolTip = NSLocalizedString("More", comment: "")
  1419. item?.titleName = NSLocalizedString("More", comment: "")
  1420. item?.boxImagePosition = .imageExpandLeft
  1421. item?.btnAction = #selector(formsMoreOperationAction)
  1422. let menuItem = NSMenuItem.init(title: "More", action: #selector(formsMoreOperationAction), target: self)
  1423. menuItem.tag = item!.btnTag
  1424. item?.menuFormRepresentation = menuItem
  1425. }
  1426. }
  1427. private func _setupViewDisplayItem(_ item: KMToolbarItemView?) {
  1428. let identifier = item?.itemIdentifier
  1429. if identifier == KMToolbarViewSettingIdentifier {
  1430. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarDisplayView)
  1431. item?.target = self
  1432. item?.toolTip = NSLocalizedString("View Settings", comment: "")
  1433. item?.titleName = NSLocalizedString("View Settings", comment: "")
  1434. item?.boxImagePosition = .imageLeft
  1435. item?.btnAction = #selector(_itemAction)
  1436. } else if identifier == KMToolbarCropIdentifier {
  1437. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarDisplayTailor)
  1438. item?.target = self
  1439. item?.toolTip = NSLocalizedString("Note: Cropping a PDF hides some of the PDF’s content without removing it.", comment: "")
  1440. item?.titleName = NSLocalizedString("Crop", comment: "")
  1441. item?.boxImagePosition = .imageExpandLeft
  1442. item?.needExpandAction = true
  1443. item?.btnAction = #selector(cropMenuAction)
  1444. let menuItem = NSMenuItem.init(title: "Crop", action: #selector(cropMenuAction), target: self)
  1445. let subMenu = NSMenu()
  1446. subMenu.addItem(title: NSLocalizedString("Crop All Pages", comment: ""), action: #selector(_cropAction), target: self, tag: 1)
  1447. subMenu.addItem(title: NSLocalizedString("Crop Current Page", comment: ""), action: #selector(_cropAction), target: self, tag: 2)
  1448. subMenu.addItem(title: NSLocalizedString("Auto Crop – Separate", comment: ""), action: #selector(_cropAction), target: self, tag: 3)
  1449. subMenu.addItem(title: NSLocalizedString("Auto Crop – Combined", comment: ""), action: #selector(_cropAction), target: self, tag: 4)
  1450. subMenu.addItem(title: NSLocalizedString("Select Area", comment: ""), action: #selector(_cropAction), target: self, tag: 5)
  1451. subMenu.addItem(title: NSLocalizedString("Crop Options...", comment: ""), action: #selector(_cropAction), target: self, tag: 6)
  1452. menuItem.submenu = subMenu
  1453. item?.menuFormRepresentation = menuItem
  1454. } else if identifier == KMToolbarSnapshotIdentifier {
  1455. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarDisplaySnapshot)
  1456. item?.target = self
  1457. item?.toolTip = NSLocalizedString("Take Snapshot", comment: "")
  1458. item?.titleName = NSLocalizedString("Snapshot", comment: "")
  1459. item?.boxImagePosition = .imageLeft
  1460. item?.btnAction = #selector(_itemAction)
  1461. } else if identifier == KMToolbarTTSIdentifier {
  1462. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarDisplayTTS)
  1463. item?.target = self
  1464. item?.toolTip = NSLocalizedString("TTS (Text-to-speech)", comment: "")
  1465. item?.titleName = NSLocalizedString("TTS", comment: "")
  1466. item?.boxImagePosition = .imageLeft
  1467. item?.btnAction = #selector(_itemAction)
  1468. }
  1469. }
  1470. private func _setupToolItem(_ item: KMToolbarItemView?) {
  1471. let identifier = item?.itemIdentifier
  1472. if identifier == KMToolbarToolCropItemIdentifier {
  1473. item?.image = NSImage(named: "KMImageNameMainToolsCrop")
  1474. item?.alternateImage = NSImage(named: "KMImageNameMainToolsCrop")
  1475. item?.target = self
  1476. item?.btnTag = KMToolbarType.crop.rawValue
  1477. item?.toolTip = NSLocalizedString("Crop pages", comment: "")
  1478. item?.titleName = NSLocalizedString("Crop", comment: "")
  1479. item?.boxImagePosition = .imageExpandLeft
  1480. item?.btnAction = #selector(cropMenuAction)
  1481. let menuItem = NSMenuItem.init(title: "Crop", action: #selector(cropMenuAction), target: self)
  1482. item?.menuFormRepresentation = menuItem
  1483. } else if identifier == KMToolbarComparisonItemIdentifier {
  1484. item?.image = NSImage(named: KMImageNameUXIconBatchComparison)
  1485. item?.target = self
  1486. item?.btnTag = KMToolbarType.comparison.rawValue
  1487. item?.toolTip = NSLocalizedString("Compare", comment: "")
  1488. item?.titleName = NSLocalizedString("Compare", comment: "")
  1489. item?.boxImagePosition = .imageExpandLeft
  1490. item?.needExpandAction = true
  1491. // item?.btnAction = #selector(_itemAction)
  1492. let menuItem = NSMenuItem.init(title: "Bates Number", action: #selector(_itemAction), target: self)
  1493. let subMenu = NSMenu()
  1494. subMenu.addItem(title: NSLocalizedString("Side-by-Side View", comment: ""), action: #selector(_comparisonAction), target: self, tag: 1)
  1495. subMenu.addItem(title: NSLocalizedString("Compare by File Overlay", comment: ""), action: #selector(_comparisonAction), target: self, tag: 2)
  1496. menuItem.submenu = subMenu
  1497. item?.menuFormRepresentation = menuItem
  1498. } else if identifier == KMToolbarToolBatesItemIdentifier {
  1499. item?.image = NSImage(named: "KMImageNameUXIconBatchBatesNor")
  1500. item?.target = self
  1501. item?.btnTag = KMToolbarType.bates.rawValue
  1502. item?.toolTip = NSLocalizedString("Add PDF Bates numbering to your legal, medical, or business documents", comment: "")
  1503. item?.titleName = NSLocalizedString("Bates Number", comment: "")
  1504. item?.boxImagePosition = .imageExpandLeft
  1505. item?.needExpandAction = true
  1506. // item?.btnAction = #selector(batesMenuAction)
  1507. let menuItem = NSMenuItem.init(title: "Bates Number", action: #selector(batesMenuAction), target: self)
  1508. let subMenu = NSMenu()
  1509. subMenu.addItem(title: NSLocalizedString("Add Bates Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 1)
  1510. subMenu.addItem(title: NSLocalizedString("Remove Bates Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 2)
  1511. subMenu.addItem(title: NSLocalizedString("Batch Add Batch Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 3)
  1512. subMenu.addItem(title: NSLocalizedString("Batch Remove Bates Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 4)
  1513. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_batesAction), target: self, tag: 5)
  1514. menuItem.submenu = subMenu
  1515. item?.menuFormRepresentation = menuItem
  1516. } else if identifier == KMToolbarToolHeaderFooterItemIdentifier {
  1517. item?.image = NSImage(named: "KMImageNameUXIconBatchHeaderandfooterNor")
  1518. item?.target = self
  1519. item?.btnTag = KMToolbarType.headerAndFooter.rawValue
  1520. item?.toolTip = NSLocalizedString("Insert header, footer, and page numbers to PDF", comment: "")
  1521. item?.titleName = NSLocalizedString("Header & Footer", comment: "")
  1522. item?.boxImagePosition = .imageExpandLeft
  1523. item?.needExpandAction = true
  1524. // item?.btnAction = #selector(headerfooterMenuAction)
  1525. let menuItem = NSMenuItem.init(title: "Header & Footer", action: #selector(headerfooterMenuAction), target: self)
  1526. let subMenu = NSMenu()
  1527. subMenu.addItem(title: NSLocalizedString("Add Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 1)
  1528. subMenu.addItem(title: NSLocalizedString("Remove Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 2)
  1529. subMenu.addItem(title: NSLocalizedString("Batch Add Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 3)
  1530. subMenu.addItem(title: NSLocalizedString("Batch Remove Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 4)
  1531. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 5)
  1532. menuItem.submenu = subMenu
  1533. item?.menuFormRepresentation = menuItem
  1534. } else if identifier == KMToolbarToolBackgroundItemIdentifier {
  1535. item?.image = NSImage(named: "KMImageNameUXIconBatchBackgroundNor")
  1536. item?.target = self
  1537. item?.btnTag = KMToolbarType.background.rawValue
  1538. item?.toolTip = NSLocalizedString("Insert PDF page background by color or image", comment: "")
  1539. item?.titleName = NSLocalizedString("Backgroud", comment: "")
  1540. item?.boxImagePosition = .imageExpandLeft
  1541. item?.needExpandAction = true
  1542. // item?.btnAction = #selector(backgroundMenuAction)
  1543. let menuItem = NSMenuItem.init(title: "Backgroud", action: #selector(backgroundMenuAction), target: self)
  1544. let subMenu = NSMenu()
  1545. subMenu.addItem(title: NSLocalizedString("Add Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 1)
  1546. subMenu.addItem(title: NSLocalizedString("Remove Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 2)
  1547. subMenu.addItem(title: NSLocalizedString("Batch Add Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 3)
  1548. subMenu.addItem(title: NSLocalizedString("Batch Remove Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 4)
  1549. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_backgroundAction), target: self, tag: 5)
  1550. menuItem.submenu = subMenu
  1551. item?.menuFormRepresentation = menuItem
  1552. } else if identifier == KMToolbarToolWatermarkItemIdentifier {
  1553. item?.image = NSImage(named: "KMImageNameMainToolsWatermark")
  1554. item?.target = self
  1555. item?.btnTag = KMToolbarType.watermark.rawValue
  1556. item?.toolTip = NSLocalizedString("Watermark", comment: "")
  1557. item?.titleName = NSLocalizedString("Watermark", comment: "")
  1558. item?.boxImagePosition = .imageExpandLeft
  1559. item?.needExpandAction = true
  1560. // item?.btnAction = #selector(watermarkMenuAction)
  1561. let menuItem = NSMenuItem.init(title: "Watermark", action: #selector(watermarkMenuAction), target: self)
  1562. let subMenu = NSMenu()
  1563. subMenu.addItem(title: NSLocalizedString("Add Watermark", comment: ""), action: #selector(_watermarkAction), target: self, tag: 1)
  1564. subMenu.addItem(title: NSLocalizedString("Remove Watermark", comment: ""), action: #selector(_watermarkAction), target: self, tag: 2)
  1565. subMenu.addItem(title: NSLocalizedString("Batch Add Watermarks", comment: ""), action: #selector(_watermarkAction), target: self, tag: 3)
  1566. subMenu.addItem(title: NSLocalizedString("Batch Remove Watermarks", comment: ""), action: #selector(_watermarkAction), target: self, tag: 4)
  1567. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_watermarkAction), target: self, tag: 5)
  1568. menuItem.submenu = subMenu
  1569. item?.menuFormRepresentation = menuItem
  1570. } else if identifier == KMToolbarToolCompressItemIdentifier {
  1571. item?.image = NSImage(named: "KMImageNameUXIconBatchOptimizeNor")
  1572. item?.target = self
  1573. item?.btnTag = KMToolbarType.compress.rawValue
  1574. item?.boxImagePosition = .imageLeft
  1575. item?.toolTip = NSLocalizedString("Reduce file size", comment: "")
  1576. item?.titleName = NSLocalizedString("Compress", comment: "")
  1577. item?.btnAction = #selector(compressMenuAction)
  1578. } else if identifier == KMToolbarToolSecureItemIdentifier {
  1579. item?.image = NSImage(named: "KMImageNameUXIconBatchSafeNor")
  1580. item?.target = self
  1581. item?.toolTip = NSLocalizedString("Batch encrypting PDF documents", comment: "")
  1582. item?.titleName = NSLocalizedString("Security", comment: "")
  1583. item?.boxImagePosition = .imageExpandLeft
  1584. item?.needExpandAction = true
  1585. // item?.btnAction = #selector(secureMenuAction)
  1586. let menuItem = NSMenuItem.init(title: NSLocalizedString("Security", comment: ""), action: #selector(secureMenuAction), target: self)
  1587. let subMenu = NSMenu()
  1588. subMenu.addItem(title: NSLocalizedString("Set Passwords", comment: ""), action: #selector(_secureAction), target: self, tag: 1)
  1589. subMenu.addItem(title: NSLocalizedString("Remove Security", comment: ""), action: #selector(_secureAction), target: self, tag: 2)
  1590. menuItem.submenu = subMenu
  1591. item?.menuFormRepresentation = menuItem
  1592. }else if identifier == KMToolbarToolMergeItemIdentifier {
  1593. item?.image = NSImage(named: "KMImageNameUXIconBatchMergeNor")
  1594. item?.target = self
  1595. item?.btnTag = KMToolbarType.merge.rawValue
  1596. item?.toolTip = NSLocalizedString("Combine multiple documents into a new PDF, or borrow individual pages", comment: "")
  1597. item?.titleName = NSLocalizedString("Merge", comment: "")
  1598. item?.boxImagePosition = .imageLeft
  1599. item?.btnAction = #selector(mergeMenuItemAction)
  1600. }
  1601. }
  1602. }