KMToolbarViewController.swift 97 KB

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