KMToolbarViewController.swift 120 KB

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