KMToolbarViewController.swift 126 KB

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