KMToolbarViewController.swift 118 KB

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