KMToolbarViewController.swift 97 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723
  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(convertToImage)
  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. @objc func convertToImage(_ sender: KMToolbarItem) {
  1249. // if let subMenu = sender.menuFormRepresentation?.submenu {
  1250. // subMenu.popUp(positioning: nil, at: sender.frame.origin, in: sender.superview)
  1251. // }
  1252. }
  1253. private func _setupFillSignItem(_ item: KMToolbarItemView?) {
  1254. let identifier = item?.itemIdentifier
  1255. if identifier == KMToolbarToolHookItemIdentifier {
  1256. item?.image = NSImage(named: "KMImageNameFillSignHook")
  1257. item?.target = self
  1258. item?.btnTag = CAnnotationType.signTure.rawValue
  1259. item?.toolTip = NSLocalizedString("Signature", comment: "")
  1260. item?.titleName = NSLocalizedString("Signature", comment: "")
  1261. item?.boxImagePosition = .imageOnly
  1262. item?.btnAction = #selector(changeAnnotationMode)
  1263. } else if identifier == KMToolbarToolForkItemIdentifier {
  1264. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignFork)
  1265. item?.target = self
  1266. item?.btnTag = CAnnotationType.signFalse.rawValue
  1267. item?.toolTip = NSLocalizedString("Add X", comment: "")
  1268. item?.boxImagePosition = .imageOnly
  1269. item?.btnAction = #selector(changeAnnotationMode)
  1270. } else if identifier == KMToolbarToolLineItemIdentifier {
  1271. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignLine)
  1272. item?.target = self
  1273. item?.btnTag = CAnnotationType.signLine.rawValue
  1274. item?.toolTip = NSLocalizedString("Add line", comment: "")
  1275. item?.boxImagePosition = .imageOnly
  1276. item?.btnAction = #selector(changeAnnotationMode)
  1277. } else if identifier == KMToolbarToolDotItemIdentifier {
  1278. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignPoint)
  1279. item?.target = self
  1280. item?.btnTag = CAnnotationType.signDot.rawValue
  1281. item?.toolTip = NSLocalizedString("Add dot", comment: "")
  1282. item?.boxImagePosition = .imageOnly
  1283. item?.btnAction = #selector(changeAnnotationMode)
  1284. } else if identifier == KMToolbarToolRectangleIdentifier {
  1285. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignRoundedrec)
  1286. item?.target = self
  1287. item?.btnTag = CAnnotationType.signCircle.rawValue
  1288. item?.toolTip = NSLocalizedString("Add circle", comment: "")
  1289. item?.boxImagePosition = .imageOnly
  1290. item?.btnAction = #selector(changeAnnotationMode)
  1291. } else if identifier == KMToolbarToolTextIdentifier {
  1292. item?.image = NSImage(named: KMImageNameToolbarFreeText)
  1293. item?.target = self
  1294. item?.btnTag = CAnnotationType.signText.rawValue
  1295. item?.toolTip = NSLocalizedString("Add text", comment: "")
  1296. item?.titleName = NSLocalizedString("Text", comment: "")
  1297. item?.boxImagePosition = .imageOnly
  1298. item?.btnAction = #selector(changeAnnotationMode)
  1299. } else if identifier == KMToolbarToolDateIdentifier {
  1300. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignDate)
  1301. item?.target = self
  1302. item?.btnTag = CAnnotationType.signDate.rawValue
  1303. item?.toolTip = NSLocalizedString("Date", comment: "")
  1304. item?.boxImagePosition = .imageOnly
  1305. item?.btnAction = #selector(changeAnnotationMode)
  1306. } else if (identifier == KMToolbarToolProfileIdentifier) {
  1307. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignMyprofile)
  1308. item?.target = self
  1309. item?.toolTip = NSLocalizedString("My Profile", comment: "")
  1310. item?.boxImagePosition = .imageOnly
  1311. item?.btnAction = #selector(_itemAction)
  1312. }else if (identifier == KMToolbarFillSignSignatureIdentifier) {
  1313. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignMysignature)
  1314. item?.target = self
  1315. item?.btnTag = CAnnotationType.signSignature.rawValue
  1316. item?.toolTip = NSLocalizedString("Sign document by typing or drawing a signature", comment: "")
  1317. item?.boxImagePosition = .imageOnly
  1318. item?.btnAction = #selector(changeAnnotationMode)
  1319. }
  1320. }
  1321. private func _setupFormItem(_ item: KMToolbarItemView?) {
  1322. let identifier = item?.itemIdentifier
  1323. if identifier == KMToolbarToolTextFieldItemIdentifier {
  1324. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormTextfield)
  1325. item?.target = self
  1326. item?.btnTag = CAnnotationType.textField.rawValue
  1327. item?.toolTip = NSLocalizedString("Text Field", comment: "")
  1328. item?.titleName = NSLocalizedString("Text Field", comment: "")
  1329. item?.boxImagePosition = .imageLeft
  1330. item?.btnAction = #selector(changeAnnotationMode)
  1331. let menuItem = NSMenuItem.init(title: "TextField", action: #selector(changeAnnotationMode), target: self)
  1332. menuItem.tag = item!.btnTag
  1333. item?.menuFormRepresentation = menuItem
  1334. } else if identifier == KMToolbarToolCheckBoxItemIdentifier {
  1335. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormCheckbox)
  1336. item?.target = self
  1337. item?.btnTag = CAnnotationType.checkBox.rawValue
  1338. item?.toolTip = NSLocalizedString("Check Box", comment: "")
  1339. item?.titleName = NSLocalizedString("Check Box", comment: "")
  1340. item?.boxImagePosition = .imageLeft
  1341. item?.btnAction = #selector(changeAnnotationMode)
  1342. } else if identifier == KMToolbarToolRadioButtonItemIdentifier {
  1343. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormRadiobutton)
  1344. item?.target = self
  1345. item?.btnTag = CAnnotationType.radioButton.rawValue
  1346. item?.toolTip = NSLocalizedString("Radio Button", comment: "")
  1347. item?.titleName = NSLocalizedString("Radio Button", comment: "")
  1348. item?.boxImagePosition = .imageLeft
  1349. item?.btnAction = #selector(changeAnnotationMode)
  1350. let menuItem = NSMenuItem.init(title: "RadioButton", action: #selector(changeAnnotationMode), target: self)
  1351. menuItem.tag = item!.btnTag
  1352. item?.menuFormRepresentation = menuItem
  1353. } else if identifier == KMToolbarToolListBoxItemIdentifier {
  1354. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormListbox)
  1355. item?.target = self
  1356. item?.btnTag = CAnnotationType.listMenu.rawValue
  1357. item?.toolTip = NSLocalizedString("List Box", comment: "")
  1358. item?.titleName = NSLocalizedString("List Box", comment: "")
  1359. item?.boxImagePosition = .imageLeft
  1360. item?.btnAction = #selector(changeAnnotationMode)
  1361. let menuItem = NSMenuItem.init(title: "List Box", action: #selector(changeAnnotationMode), target: self)
  1362. menuItem.tag = item!.btnTag
  1363. item?.menuFormRepresentation = menuItem
  1364. } else if identifier == KMToolbarToolPullDownmenuItemIdentifier {
  1365. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormPulldownmenu)
  1366. item?.target = self
  1367. item?.btnTag = CAnnotationType.comboBox.rawValue
  1368. item?.toolTip = NSLocalizedString("Combo Box", comment: "")
  1369. item?.titleName = NSLocalizedString("Combo Box", comment: "")
  1370. item?.boxImagePosition = .imageLeft
  1371. item?.btnAction = #selector(changeAnnotationMode)
  1372. let menuItem = NSMenuItem.init(title: "PullDownmenu", action: #selector(changeAnnotationMode), target: self)
  1373. menuItem.tag = item!.btnTag
  1374. item?.menuFormRepresentation = menuItem
  1375. } else if identifier == KMToolbarToolButtonIdentifier {
  1376. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormButton)
  1377. item?.target = self
  1378. item?.btnTag = CAnnotationType.actionButton.rawValue
  1379. item?.toolTip = NSLocalizedString("Button", comment: "")
  1380. item?.titleName = NSLocalizedString("Button", comment: "")
  1381. item?.boxImagePosition = .imageLeft
  1382. item?.btnAction = #selector(changeAnnotationMode)
  1383. let menuItem = NSMenuItem.init(title: "Button", action: #selector(changeAnnotationMode), target: self)
  1384. menuItem.tag = item!.btnTag
  1385. item?.menuFormRepresentation = menuItem
  1386. } else if identifier == KMToolbarToolSignBoxIdentifier {
  1387. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormSign)
  1388. item?.target = self
  1389. item?.btnTag = CAnnotationType.signature.rawValue
  1390. item?.toolTip = NSLocalizedString("Signature", comment: "")
  1391. item?.titleName = NSLocalizedString("Signature", comment: "")
  1392. item?.boxImagePosition = .imageLeft
  1393. item?.btnAction = #selector(changeAnnotationMode)
  1394. let menuItem = NSMenuItem.init(title: "SignBox", action: #selector(changeAnnotationMode), target: self)
  1395. menuItem.tag = item!.btnTag
  1396. item?.menuFormRepresentation = menuItem
  1397. } else if identifier == KMToolbarToolFormAlignIdentifier {
  1398. item?.image = NSImage(named: KMImageNameUXIconPropertybarAlignLeftToor)
  1399. item?.target = self
  1400. item?.toolTip = NSLocalizedString("Alignment", comment: "")
  1401. item?.titleName = NSLocalizedString("Alignment", comment: "")
  1402. item?.boxImagePosition = .imageExpandLeft
  1403. item?.needExpandAction = true
  1404. item?.btnAction = #selector(formsAlignmentAction)
  1405. let menuItem = NSMenuItem.init(title: "Alignment", action: #selector(formsAlignmentAction), target: self)
  1406. let subMenu = NSMenu()
  1407. subMenu.addItem(title: NSLocalizedString("Align Left", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignLeftNor", action: #selector(_alignmentAction), target: self, tag: 0)
  1408. subMenu.addItem(title: NSLocalizedString("Align Vertically", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignVercenterNor", action: #selector(_alignmentAction), target: self, tag: 1)
  1409. subMenu.addItem(title: NSLocalizedString("Align Right", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignRightNor", action: #selector(_alignmentAction), target: self, tag: 2)
  1410. subMenu.addItem(NSMenuItem.separator())
  1411. subMenu.addItem(title: NSLocalizedString("Align Top", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignUpNor", action: #selector(_alignmentAction), target: self, tag: 3)
  1412. subMenu.addItem(title: NSLocalizedString("Align Horizontally", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignHorcenterNor", action: #selector(_alignmentAction), target: self, tag: 4)
  1413. subMenu.addItem(title: NSLocalizedString("Align Bottom", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignDownNor", action: #selector(_alignmentAction), target: self, tag: 5)
  1414. subMenu.addItem(NSMenuItem.separator())
  1415. subMenu.addItem(title: NSLocalizedString("Distribute Horizontally", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignHorsplitNor", action: #selector(_alignmentAction), target: self, tag: 6)
  1416. subMenu.addItem(title: NSLocalizedString("Distribute Vertically", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignVersplitNor", action: #selector(_alignmentAction), target: self, tag: 7)
  1417. menuItem.submenu = subMenu
  1418. menuItem.tag = item!.btnTag
  1419. item?.menuFormRepresentation = menuItem
  1420. } else if identifier == KMToolbarToolFormMoreIdentifier {
  1421. item?.image = NSImage(named: "KMImageNameMainToolFormMore")
  1422. item?.target = self
  1423. item?.toolTip = NSLocalizedString("More", comment: "")
  1424. item?.titleName = NSLocalizedString("More", comment: "")
  1425. item?.boxImagePosition = .imageExpandLeft
  1426. item?.btnAction = #selector(formsMoreOperationAction)
  1427. let menuItem = NSMenuItem.init(title: "More", action: #selector(formsMoreOperationAction), target: self)
  1428. menuItem.tag = item!.btnTag
  1429. item?.menuFormRepresentation = menuItem
  1430. }
  1431. }
  1432. private func _setupViewDisplayItem(_ item: KMToolbarItemView?) {
  1433. let identifier = item?.itemIdentifier
  1434. if identifier == KMToolbarViewSettingIdentifier {
  1435. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarDisplayView)
  1436. item?.target = self
  1437. item?.toolTip = NSLocalizedString("View Settings", comment: "")
  1438. item?.titleName = NSLocalizedString("View Settings", comment: "")
  1439. item?.boxImagePosition = .imageLeft
  1440. item?.btnAction = #selector(_itemAction)
  1441. } else if identifier == KMToolbarCropIdentifier {
  1442. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarDisplayTailor)
  1443. item?.target = self
  1444. item?.toolTip = NSLocalizedString("Note: Cropping a PDF hides some of the PDF’s content without removing it.", comment: "")
  1445. item?.titleName = NSLocalizedString("Crop", comment: "")
  1446. item?.boxImagePosition = .imageExpandLeft
  1447. item?.needExpandAction = true
  1448. item?.btnAction = #selector(cropMenuAction)
  1449. let menuItem = NSMenuItem.init(title: "Crop", action: #selector(cropMenuAction), target: self)
  1450. let subMenu = NSMenu()
  1451. subMenu.addItem(title: NSLocalizedString("Crop All Pages", comment: ""), action: #selector(_cropAction), target: self, tag: 1)
  1452. subMenu.addItem(title: NSLocalizedString("Crop Current Page", comment: ""), action: #selector(_cropAction), target: self, tag: 2)
  1453. subMenu.addItem(title: NSLocalizedString("Auto Crop – Separate", comment: ""), action: #selector(_cropAction), target: self, tag: 3)
  1454. subMenu.addItem(title: NSLocalizedString("Auto Crop – Combined", comment: ""), action: #selector(_cropAction), target: self, tag: 4)
  1455. subMenu.addItem(title: NSLocalizedString("Select Area", comment: ""), action: #selector(_cropAction), target: self, tag: 5)
  1456. subMenu.addItem(title: NSLocalizedString("Crop Options...", comment: ""), action: #selector(_cropAction), target: self, tag: 6)
  1457. menuItem.submenu = subMenu
  1458. item?.menuFormRepresentation = menuItem
  1459. } else if identifier == KMToolbarSnapshotIdentifier {
  1460. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarDisplaySnapshot)
  1461. item?.target = self
  1462. item?.toolTip = NSLocalizedString("Take Snapshot", comment: "")
  1463. item?.titleName = NSLocalizedString("Snapshot", comment: "")
  1464. item?.boxImagePosition = .imageLeft
  1465. item?.btnAction = #selector(_itemAction)
  1466. } else if identifier == KMToolbarTTSIdentifier {
  1467. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarDisplayTTS)
  1468. item?.target = self
  1469. item?.toolTip = NSLocalizedString("TTS (Text-to-speech)", comment: "")
  1470. item?.titleName = NSLocalizedString("TTS", comment: "")
  1471. item?.boxImagePosition = .imageLeft
  1472. item?.btnAction = #selector(_itemAction)
  1473. }
  1474. }
  1475. private func _setupToolItem(_ item: KMToolbarItemView?) {
  1476. let identifier = item?.itemIdentifier
  1477. if identifier == KMToolbarToolCropItemIdentifier {
  1478. item?.image = NSImage(named: "KMImageNameMainToolsCrop")
  1479. item?.alternateImage = NSImage(named: "KMImageNameMainToolsCrop")
  1480. item?.target = self
  1481. item?.btnTag = KMToolbarType.crop.rawValue
  1482. item?.toolTip = NSLocalizedString("Crop pages", comment: "")
  1483. item?.titleName = NSLocalizedString("Crop", comment: "")
  1484. item?.boxImagePosition = .imageExpandLeft
  1485. item?.btnAction = #selector(cropMenuAction)
  1486. let menuItem = NSMenuItem.init(title: "Crop", action: #selector(cropMenuAction), target: self)
  1487. item?.menuFormRepresentation = menuItem
  1488. } else if identifier == KMToolbarComparisonItemIdentifier {
  1489. item?.image = NSImage(named: KMImageNameUXIconBatchComparison)
  1490. item?.target = self
  1491. item?.btnTag = KMToolbarType.comparison.rawValue
  1492. item?.toolTip = NSLocalizedString("Compare", comment: "")
  1493. item?.titleName = NSLocalizedString("Compare", comment: "")
  1494. item?.boxImagePosition = .imageExpandLeft
  1495. item?.needExpandAction = true
  1496. // item?.btnAction = #selector(_itemAction)
  1497. let menuItem = NSMenuItem.init(title: "Bates Number", action: #selector(_itemAction), target: self)
  1498. let subMenu = NSMenu()
  1499. subMenu.addItem(title: NSLocalizedString("Side-by-Side View", comment: ""), action: #selector(_comparisonAction), target: self, tag: 1)
  1500. subMenu.addItem(title: NSLocalizedString("Compare by File Overlay", comment: ""), action: #selector(_comparisonAction), target: self, tag: 2)
  1501. menuItem.submenu = subMenu
  1502. item?.menuFormRepresentation = menuItem
  1503. } else if identifier == KMToolbarToolBatesItemIdentifier {
  1504. item?.image = NSImage(named: "KMImageNameUXIconBatchBatesNor")
  1505. item?.target = self
  1506. item?.btnTag = KMToolbarType.bates.rawValue
  1507. item?.toolTip = NSLocalizedString("Add PDF Bates numbering to your legal, medical, or business documents", comment: "")
  1508. item?.titleName = NSLocalizedString("Bates Number", comment: "")
  1509. item?.boxImagePosition = .imageExpandLeft
  1510. item?.needExpandAction = true
  1511. // item?.btnAction = #selector(batesMenuAction)
  1512. let menuItem = NSMenuItem.init(title: "Bates Number", action: #selector(batesMenuAction), target: self)
  1513. let subMenu = NSMenu()
  1514. subMenu.addItem(title: NSLocalizedString("Add Bates Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 1)
  1515. subMenu.addItem(title: NSLocalizedString("Remove Bates Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 2)
  1516. subMenu.addItem(title: NSLocalizedString("Batch Add Batch Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 3)
  1517. subMenu.addItem(title: NSLocalizedString("Batch Remove Bates Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 4)
  1518. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_batesAction), target: self, tag: 5)
  1519. menuItem.submenu = subMenu
  1520. item?.menuFormRepresentation = menuItem
  1521. } else if identifier == KMToolbarToolHeaderFooterItemIdentifier {
  1522. item?.image = NSImage(named: "KMImageNameUXIconBatchHeaderandfooterNor")
  1523. item?.target = self
  1524. item?.btnTag = KMToolbarType.headerAndFooter.rawValue
  1525. item?.toolTip = NSLocalizedString("Insert header, footer, and page numbers to PDF", comment: "")
  1526. item?.titleName = NSLocalizedString("Header & Footer", comment: "")
  1527. item?.boxImagePosition = .imageExpandLeft
  1528. item?.needExpandAction = true
  1529. // item?.btnAction = #selector(headerfooterMenuAction)
  1530. let menuItem = NSMenuItem.init(title: "Header & Footer", action: #selector(headerfooterMenuAction), target: self)
  1531. let subMenu = NSMenu()
  1532. subMenu.addItem(title: NSLocalizedString("Add Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 1)
  1533. subMenu.addItem(title: NSLocalizedString("Remove Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 2)
  1534. subMenu.addItem(title: NSLocalizedString("Batch Add Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 3)
  1535. subMenu.addItem(title: NSLocalizedString("Batch Remove Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 4)
  1536. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 5)
  1537. menuItem.submenu = subMenu
  1538. item?.menuFormRepresentation = menuItem
  1539. } else if identifier == KMToolbarToolBackgroundItemIdentifier {
  1540. item?.image = NSImage(named: "KMImageNameUXIconBatchBackgroundNor")
  1541. item?.target = self
  1542. item?.btnTag = KMToolbarType.background.rawValue
  1543. item?.toolTip = NSLocalizedString("Insert PDF page background by color or image", comment: "")
  1544. item?.titleName = NSLocalizedString("Backgroud", comment: "")
  1545. item?.boxImagePosition = .imageExpandLeft
  1546. item?.needExpandAction = true
  1547. // item?.btnAction = #selector(backgroundMenuAction)
  1548. let menuItem = NSMenuItem.init(title: "Backgroud", action: #selector(backgroundMenuAction), target: self)
  1549. let subMenu = NSMenu()
  1550. subMenu.addItem(title: NSLocalizedString("Add Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 1)
  1551. subMenu.addItem(title: NSLocalizedString("Remove Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 2)
  1552. subMenu.addItem(title: NSLocalizedString("Batch Add Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 3)
  1553. subMenu.addItem(title: NSLocalizedString("Batch Remove Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 4)
  1554. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_backgroundAction), target: self, tag: 5)
  1555. menuItem.submenu = subMenu
  1556. item?.menuFormRepresentation = menuItem
  1557. } else if identifier == KMToolbarToolWatermarkItemIdentifier {
  1558. item?.image = NSImage(named: "KMImageNameMainToolsWatermark")
  1559. item?.target = self
  1560. item?.btnTag = KMToolbarType.watermark.rawValue
  1561. item?.toolTip = NSLocalizedString("Watermark", comment: "")
  1562. item?.titleName = NSLocalizedString("Watermark", comment: "")
  1563. item?.boxImagePosition = .imageExpandLeft
  1564. item?.needExpandAction = true
  1565. // item?.btnAction = #selector(watermarkMenuAction)
  1566. let menuItem = NSMenuItem.init(title: "Watermark", action: #selector(watermarkMenuAction), target: self)
  1567. let subMenu = NSMenu()
  1568. subMenu.addItem(title: NSLocalizedString("Add Watermark", comment: ""), action: #selector(_watermarkAction), target: self, tag: 1)
  1569. subMenu.addItem(title: NSLocalizedString("Remove Watermark", comment: ""), action: #selector(_watermarkAction), target: self, tag: 2)
  1570. subMenu.addItem(title: NSLocalizedString("Batch Add Watermarks", comment: ""), action: #selector(_watermarkAction), target: self, tag: 3)
  1571. subMenu.addItem(title: NSLocalizedString("Batch Remove Watermarks", comment: ""), action: #selector(_watermarkAction), target: self, tag: 4)
  1572. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_watermarkAction), target: self, tag: 5)
  1573. menuItem.submenu = subMenu
  1574. item?.menuFormRepresentation = menuItem
  1575. } else if identifier == KMToolbarToolCompressItemIdentifier {
  1576. item?.image = NSImage(named: "KMImageNameUXIconBatchOptimizeNor")
  1577. item?.target = self
  1578. item?.btnTag = KMToolbarType.compress.rawValue
  1579. item?.boxImagePosition = .imageLeft
  1580. item?.toolTip = NSLocalizedString("Reduce file size", comment: "")
  1581. item?.titleName = NSLocalizedString("Compress", comment: "")
  1582. item?.btnAction = #selector(compressMenuAction)
  1583. } else if identifier == KMToolbarToolSecureItemIdentifier {
  1584. item?.image = NSImage(named: "KMImageNameUXIconBatchSafeNor")
  1585. item?.target = self
  1586. item?.toolTip = NSLocalizedString("Batch encrypting PDF documents", comment: "")
  1587. item?.titleName = NSLocalizedString("Security", comment: "")
  1588. item?.boxImagePosition = .imageExpandLeft
  1589. item?.needExpandAction = true
  1590. // item?.btnAction = #selector(secureMenuAction)
  1591. let menuItem = NSMenuItem.init(title: NSLocalizedString("Security", comment: ""), action: #selector(secureMenuAction), target: self)
  1592. let subMenu = NSMenu()
  1593. subMenu.addItem(title: NSLocalizedString("Set Passwords", comment: ""), action: #selector(_secureAction), target: self, tag: 1)
  1594. subMenu.addItem(title: NSLocalizedString("Remove Security", comment: ""), action: #selector(_secureAction), target: self, tag: 2)
  1595. menuItem.submenu = subMenu
  1596. item?.menuFormRepresentation = menuItem
  1597. }else if identifier == KMToolbarToolMergeItemIdentifier {
  1598. item?.image = NSImage(named: "KMImageNameUXIconBatchMergeNor")
  1599. item?.target = self
  1600. item?.btnTag = KMToolbarType.merge.rawValue
  1601. item?.toolTip = NSLocalizedString("Combine multiple documents into a new PDF, or borrow individual pages", comment: "")
  1602. item?.titleName = NSLocalizedString("Merge", comment: "")
  1603. item?.boxImagePosition = .imageLeft
  1604. item?.btnAction = #selector(mergeMenuItemAction)
  1605. }
  1606. }
  1607. }