KMToolbarViewController.swift 118 KB

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