KMToolbarViewController.swift 126 KB

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