KMToolbarViewController.swift 111 KB

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