KMToolbarViewController.swift 95 KB

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