KMToolbarViewController.swift 126 KB

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