KMToolbarViewController.swift 92 KB

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