KMToolbarViewController.swift 118 KB

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