KMToolbarViewController.swift 111 KB

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