KMToolbarViewController.swift 121 KB

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