KMToolbarViewController.swift 101 KB

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