KMToolbarViewController.swift 113 KB

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