KMToolbarViewController.swift 113 KB

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