KMToolbarViewController.swift 113 KB

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