KMToolbarViewController.swift 127 KB

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