KMToolbarViewController.swift 140 KB

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