KMToolbarViewController.swift 86 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567
  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. func isToolMode() -> Bool {
  27. return (self == .Move || self == .Magnify || self == .Select || self == .SelectZoom)
  28. }
  29. func itemIdentifier() -> String {
  30. if (self == .Annatiton) {
  31. return KMDocumentAnnotationToolbarItemIdentifier
  32. } else if (self == .Page) {
  33. return KMDocumentPageToolbarItemIdentifier
  34. } else if (self == .Conversion) {
  35. return KMDocumentConversonToolbarItemIdentifier
  36. } else if (self == .ScanOCR) {
  37. return KMDocumentScanOCRToolbarItemIdentifier
  38. } else if (self == .editPDF) {
  39. return KMDocumentEditToolbarItemIdentifier
  40. } else if (self == .Form) {
  41. return KMDocumentFormToolbarItemIdentifier
  42. } else if (self == .FillSign) {
  43. return KMDocumentFillSginToolbarItemIdentifier
  44. } else if (self == .Tool) {
  45. return KMDocumentToolToolbarItemIdentifier
  46. } else if (self == .Move) {
  47. return KMToolbarMoveToolModeItemIdentifier
  48. } else if (self == .Magnify) {
  49. return KMToolbarMagnifyToolModeItemIdentifier
  50. } else if (self == .Select) {
  51. return KMToolbarSelectToolModeItemIdentifier
  52. } else if (self == .SelectZoom) {
  53. return KMToolbarZoomToSelectionItemIdentifier
  54. } else if (self == .LeftPanel) {
  55. return KMLeftControlToolbarItemIdentifier
  56. } else if (self == .RightPanel) {
  57. return KMRightControlToolbarItemIdentifier
  58. }
  59. return ""
  60. }
  61. }
  62. @objc enum KMToolbarType: Int {
  63. /// conversion
  64. case word = 3000
  65. case excel = 3001
  66. case ppt = 3002
  67. case rtf = 3003
  68. case csv = 3004
  69. case html = 3005
  70. case conversion_text = 3006
  71. case conversion_image = 3007
  72. /// tool
  73. case compress = 8000
  74. case merge = 8001
  75. case fileCompare = 8002
  76. case secure = 8003
  77. case redact = 8004
  78. case watermark = 8005
  79. case background = 8006
  80. case headerAndFooter = 8007
  81. case bates = 8008
  82. case crop = 8009
  83. case comparison = 8010
  84. }
  85. @objc protocol KMToolbarViewControllerDelegate {
  86. @objc optional func changeAnnotationModeAction(item:KMToolbarClickButton)
  87. @objc optional func showPDFLayoutModeAction(show:Bool)
  88. @objc optional func changePDFViewZoomInAction()
  89. @objc optional func changePDFViewZoomOutAction()
  90. @objc optional func changePDFViewGotoNextPageAction()
  91. @objc optional func changePDFViewGoToPreviousPageAction()
  92. @objc optional func changePDFViewGotoBackAction()
  93. @objc optional func changePDFViewGoToForwardAction()
  94. @objc optional func aiTranslationPDFFileAction()
  95. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, zoomSting : String)
  96. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, zoomModel selectedTag:Int)
  97. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, shareAction toolbarItem: KMToolbarItemView)
  98. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, shareDocument item:NSMenuItem)
  99. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, shareFlatten item:NSMenuItem)
  100. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, shareOriginalPDF item:NSMenuItem)
  101. @objc optional func toolbarViewController(_ viewController: KMToolbarViewController, clickMode toolMode: KMToolbarViewType, toolbar toolbarItem: KMToolbarItemView, _ pages: [Int])
  102. @objc optional func toolbarViewController(_ viewController: KMToolbarViewController, clickChaildToolType: KMToolbarType, toolbar toolbarItem: KMToolbarItemView)
  103. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, scanOCRModel selectedTag:Int)
  104. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, itemDidClick toolbarItem: KMToolbarItemView)
  105. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, searchAction searchString: String)
  106. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, menuItemDidClick toolbarItem: KMToolbarItemView, index: Int, info: Any?)
  107. }
  108. class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
  109. var toolbar : KMToolbarView!
  110. var toolbarType : KMToolbarViewType = KMToolbarViewType.None
  111. var toolbarItems : [String : Any] = [:]
  112. @IBOutlet weak var mainWindowController : MainWindowController!
  113. open weak var delegate: KMToolbarViewControllerDelegate?
  114. @IBOutlet var zoomButton: NSPopUpButton!
  115. @IBOutlet var zoomView: NSView!
  116. @IBOutlet weak var zoomTextField: NSTextField!
  117. var pdfView : CPDFListView = CPDFListView()
  118. var shareButton = KMToolbarClickButton()
  119. private var bottomLine = NSView()
  120. // 是否显示所有注释
  121. var isShowAllAnnotations = true
  122. var ignoreCurrentAnnotationTypeChange = false
  123. private var _currentItemView: KMToolbarItemView?
  124. override func viewDidLoad() {
  125. super.viewDidLoad()
  126. self.zoomTextField.delegate = self
  127. NotificationCenter.default.addObserver(self, selector: #selector(listViewAnnotationTypeChangeNotification), name: Notification.Name("CPDFListViewAnnotationTypeChangeNotification"), object: nil)
  128. NotificationCenter.default.addObserver(self, selector: #selector(listViewAnnotationTypeChangeNotification), name: Notification.Name("CPDFListViewToolModeChangeNotification"), object: nil)
  129. }
  130. override func loadView() {
  131. super.loadView()
  132. self.toolbar = KMToolbarView.init(identifier: "KMToolbar_New")
  133. self.toolbar.frame = self.view.bounds
  134. self.toolbar.autoresizingMask = [.width,.height]
  135. self.toolbar.delegate = self
  136. self.view.addSubview(self.toolbar)
  137. self.view.addSubview(self.bottomLine)
  138. self.bottomLine.frame = NSMakeRect(0, 0, NSWidth(self.view.bounds), 1)
  139. self.bottomLine.autoresizingMask = [.width]
  140. self.bottomLine.wantsLayer = true
  141. self.bottomLine.layer?.backgroundColor = NSColor.km_init(hex: "#0000001A").cgColor
  142. }
  143. func updateType(newType:KMToolbarViewType) {
  144. if newType != toolbarType {
  145. toolbarType = newType
  146. if self.toolbar != nil && self.toolbar.superview != nil {
  147. self.toolbar.removeFromSuperview()
  148. }
  149. self.toolbar = KMToolbarView.init(identifier: "KMToolbar_New")
  150. self.toolbar.frame = self.view.bounds
  151. self.toolbar.autoresizingMask = [.width,.height]
  152. self.toolbar.delegate = self
  153. self.view.addSubview(self.toolbar)
  154. }
  155. }
  156. func reloadateToolbar() -> Void {
  157. toolbar.reloadData()
  158. }
  159. func resetToolbar() -> Void {
  160. for item in toolbar.items {
  161. item.isSelected = false
  162. }
  163. }
  164. // MARK: Action
  165. @IBAction func changeAnnotationMode(item: KMToolbarClickButton) {
  166. self.delegate?.changeAnnotationModeAction?(item: item)
  167. }
  168. @IBAction func leftControllButtonAction(item: KMToolbarClickButton) {
  169. let tag = KMToolbarViewType(rawValue: item.tag) ?? .None
  170. if tag == .editPDF {
  171. Task { @MainActor in
  172. #if VERSION_DMG
  173. if await (KMLightMemberManager.manager.canUseAdvanced() == false) {
  174. let _ = KMComparativeTableViewController.show(window: self.view.window!)
  175. return
  176. }
  177. #endif
  178. self.delegate?.toolbarViewController?(self, clickMode: tag, toolbar: item.clickObject as! KMToolbarItemView, [])
  179. }
  180. } else {
  181. self.delegate?.toolbarViewController?(self, clickMode: tag, toolbar: item.clickObject as! KMToolbarItemView, [])
  182. }
  183. }
  184. @objc private func _itemAction(_ item: KMToolbarClickButton) {
  185. if let data = item.clickObject as? KMToolbarItemView {
  186. if data.itemIdentifier == KMToolbarComparisonItemIdentifier {
  187. self._currentItemView = data
  188. if let subMenu = data.menuFormRepresentation?.submenu {
  189. subMenu.popUp(positioning: nil, at: item.frame.origin, in: item.superview)
  190. }
  191. return
  192. }
  193. }
  194. self.delegate?.toolbarViewController?(self, itemDidClick: item.clickObject as! KMToolbarItemView)
  195. }
  196. @objc private func _comparisonAction(sender: NSMenuItem) {
  197. if let data = self._currentItemView {
  198. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  199. }
  200. }
  201. @IBAction func showPDFLayoutMode(sender: KMToolbarClickButton) {
  202. let item = sender.clickObject as? KMToolbarItemView
  203. if (item != nil) {
  204. item?.isSelected = !item!.isSelected
  205. }
  206. self.delegate?.showPDFLayoutModeAction?(show: true)
  207. }
  208. @objc func cropMenuAction(item: KMToolbarItemView) {
  209. self.delegate?.toolbarViewController?(self, clickChaildToolType: .crop, toolbar: item)
  210. }
  211. @objc func batesMenuAction(sender: KMToolbarClickButton) {
  212. self._currentItemView = sender.clickObject as? KMToolbarItemView
  213. if let subMenu = (sender.clickObject as? KMToolbarItemView)?.menuFormRepresentation?.submenu {
  214. subMenu.popUp(positioning: nil, at: sender.frame.origin, in: sender.superview)
  215. }
  216. }
  217. @objc private func _batesAction(sender: NSMenuItem) {
  218. if let data = self._currentItemView {
  219. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  220. }
  221. }
  222. @objc func headerfooterMenuAction(sender: KMToolbarClickButton) {
  223. self._currentItemView = sender.clickObject as? KMToolbarItemView
  224. if let subMenu = (sender.clickObject as? KMToolbarItemView)?.menuFormRepresentation?.submenu {
  225. subMenu.popUp(positioning: nil, at: sender.frame.origin, in: sender.superview)
  226. }
  227. }
  228. @objc private func _headerfooterAction(sender: NSMenuItem) {
  229. if let data = self._currentItemView {
  230. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  231. }
  232. }
  233. @objc func backgroundMenuAction(sender: KMToolbarClickButton) {
  234. self._currentItemView = sender.clickObject as? KMToolbarItemView
  235. if let subMenu = (sender.clickObject as? KMToolbarItemView)?.menuFormRepresentation?.submenu {
  236. subMenu.popUp(positioning: nil, at: sender.frame.origin, in: sender.superview)
  237. }
  238. }
  239. @objc private func _backgroundAction(sender: NSMenuItem) {
  240. if let data = self._currentItemView {
  241. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  242. }
  243. }
  244. @objc func watermarkMenuAction(sender: KMToolbarClickButton) {
  245. self._currentItemView = sender.clickObject as? KMToolbarItemView
  246. if let subMenu = (sender.clickObject as? KMToolbarItemView)?.menuFormRepresentation?.submenu {
  247. subMenu.popUp(positioning: nil, at: sender.frame.origin, in: sender.superview)
  248. }
  249. }
  250. @objc private func _watermarkAction(sender: NSMenuItem) {
  251. if let data = self._currentItemView {
  252. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  253. } else {
  254. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarToolWatermarkItemIdentifier), index: sender.tag, info: nil)
  255. }
  256. }
  257. @objc func redactMenuAction(sender: KMToolbarClickButton) {
  258. self.delegate?.toolbarViewController?(self, clickChaildToolType: .redact, toolbar: sender.clickObject as! KMToolbarItemView)
  259. }
  260. @objc func compressMenuAction(sender: KMToolbarClickButton) {
  261. self.delegate?.toolbarViewController?(self, clickChaildToolType: .compress, toolbar: sender.clickObject as! KMToolbarItemView)
  262. }
  263. @objc func secureMenuAction(sender: KMToolbarClickButton) {
  264. self.delegate?.toolbarViewController?(self, clickChaildToolType: .secure, toolbar: sender.clickObject as! KMToolbarItemView)
  265. }
  266. @objc func conversionMenuItemAction(sender: KMToolbarClickButton) {
  267. let item: KMToolbarItemView = sender.clickObject as! KMToolbarItemView
  268. var type: KMToolbarType = .word
  269. if (item.btnTag == KMToolbarType.excel.rawValue) {
  270. type = .excel
  271. } else if (item.btnTag == KMToolbarType.ppt.rawValue) {
  272. type = .ppt
  273. } else if (item.btnTag == KMToolbarType.rtf.rawValue) {
  274. type = .rtf
  275. } else if (item.btnTag == KMToolbarType.csv.rawValue) {
  276. type = .csv
  277. } else if (item.btnTag == KMToolbarType.html.rawValue) {
  278. type = .html
  279. } else if (item.btnTag == KMToolbarType.conversion_text.rawValue) {
  280. type = .conversion_text
  281. } else if (item.btnTag == KMToolbarType.conversion_image.rawValue) {
  282. type = .conversion_image
  283. }
  284. self.delegate?.toolbarViewController?(self, clickChaildToolType: type, toolbar: item)
  285. }
  286. @IBAction func zoomModelSelectButtonAction(_ sender: NSPopUpButton) {
  287. self.delegate?.toolbarViewController?(self, zoomModel: sender.selectedTag())
  288. for item in sender.itemArray {
  289. item.state = .off
  290. }
  291. sender.selectedItem?.state = .on
  292. }
  293. @IBAction func zoomPDFViewButtonAction(sender:KMToolbarClickButton) {
  294. if sender.tag == 0 {
  295. self.delegate?.changePDFViewZoomOutAction?()
  296. } else if sender.tag == 1 {
  297. self.delegate?.changePDFViewZoomInAction?()
  298. } else if sender.tag == 2 {
  299. self.delegate?.changePDFViewGotoBackAction?()
  300. } else if sender.tag == 3 {
  301. self.delegate?.changePDFViewGoToForwardAction?()
  302. }
  303. }
  304. @IBAction func aiTranslationButtonAction(sender:KMToolbarClickButton) {
  305. self.delegate?.aiTranslationPDFFileAction?()
  306. }
  307. @IBAction func shareButtonAction(sender:KMToolbarClickButton) {
  308. self.shareButton = sender
  309. let menu = NSMenu()
  310. menu.addItem(withTitle: NSLocalizedString("Document", comment: ""), action: #selector(shareViaWithDocument), target: self)
  311. menu.addItem(withTitle: NSLocalizedString("Flattened Copy", comment: ""), action: #selector(shareViaWithFlatten), target: self)
  312. menu.addItem(withTitle: NSLocalizedString("Original PDF", comment: ""), action: #selector(shareViaWithOriginalPDF), target: self)
  313. menu.popUp(positioning: nil, at: NSPoint(x: sender.frame.origin.x, y: sender.frame.origin.y-10), in: sender.superview)
  314. self.delegate?.toolbarViewController?(self, shareAction: sender.clickObject as! KMToolbarItemView)
  315. }
  316. @IBAction func shareViaWithDocument(sender:NSMenuItem) {
  317. self.delegate?.toolbarViewController?(self, shareDocument: sender)
  318. }
  319. @IBAction func shareViaWithFlatten(sender:NSMenuItem) {
  320. self.delegate?.toolbarViewController?(self, shareFlatten: sender)
  321. }
  322. @IBAction func shareViaWithOriginalPDF(sender:NSMenuItem) {
  323. self.delegate?.toolbarViewController?(self, shareOriginalPDF: sender)
  324. }
  325. @objc func mergeMenuItemAction(sender: KMToolbarClickButton) {
  326. self.delegate?.toolbarViewController?(self, clickChaildToolType: .merge, toolbar: sender.clickObject as! KMToolbarItemView)
  327. }
  328. @IBAction func scanOCRModelSelect(sender:KMToolbarClickButton) {
  329. self.delegate?.toolbarViewController?(self, scanOCRModel: sender.tag)
  330. }
  331. // Form 对齐
  332. @IBAction func formsAlignmentAction(sender:KMToolbarClickButton) {
  333. }
  334. @objc private func _alignmentAction(sender: NSMenuItem) {
  335. if let data = self._currentItemView {
  336. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  337. } else {
  338. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarToolFormAlignIdentifier), index: sender.tag, info: nil)
  339. }
  340. }
  341. // Form 更多操作
  342. @IBAction func formsMoreOperationAction(sender:KMToolbarClickButton) {
  343. }
  344. func toolbarItemFindItemIdentifiers(value : String) -> KMToolbarItemView{
  345. for item in self.toolbarItems {
  346. if item.key == value {
  347. return item.value as! KMToolbarItemView
  348. }
  349. }
  350. return KMToolbarItemView()
  351. }
  352. func controlTextDidEndEditing(_ obj: Notification) {
  353. let textField = obj.object as? NSTextField
  354. if textField == self.zoomTextField {
  355. self.delegate?.toolbarViewController?(self, zoomSting: self.zoomTextField.stringValue)
  356. }
  357. }
  358. func controlTextDidChange(_ obj: Notification) {
  359. }
  360. func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {
  361. switch commandSelector {
  362. case #selector(NSResponder.insertNewline(_:)):
  363. if let inputView = control as? NSTextField {
  364. // //当当前TextField按下enter
  365. if inputView == zoomTextField {
  366. KMPrint("按下 enter")
  367. self.delegate?.toolbarViewController?(self, zoomSting: self.zoomTextField.stringValue)
  368. } else if let _ = control as? NSSearchField {
  369. self.delegate?.toolbarViewController?(self, searchAction: control.stringValue)
  370. }
  371. }
  372. return true
  373. default:
  374. return false
  375. }
  376. }
  377. }
  378. // MARK: - Public Methods
  379. extension KMToolbarViewController {
  380. func itemAction(_ item: KMToolbarItemView) {
  381. self._itemAction(item.clickButton)
  382. }
  383. }
  384. extension KMToolbarViewController : KMToolbarViewDelegate,NSToolbarItemValidation {
  385. func toolbarLeftDefaultItemIdentifiers(_ toolbar: KMToolbarView) -> [String] {
  386. if toolbarType == .Main {
  387. return [KMLeftControlToolbarItemIdentifier,
  388. KMDocumentZoomViewToolbarItemIdentifier, KMDocumentZoomOutToolbarItemIdentifier, KMDocumentZoomToolbarItemIdentifier,
  389. KMDocumentPreviousPageToolbarItemIdentifier, KMDocumentNextPageToolbarItemIdentifier, KMDocumentHomeToolbarItemIdentifier]
  390. }
  391. return []
  392. }
  393. func toolbarRightDefaultItemIdentifiers(_ toolbar: KMToolbarView) -> [String] {
  394. if toolbarType == .Main {
  395. return [KMDocumentViewSettingToolbarItemIdentifier, KMDocumentShareToolbarItemIdentifier,
  396. KMDocumentSearchToolbarItemIdentifier, KMRightControlToolbarItemIdentifier]
  397. } else if [.Annatiton,.Magnify,.Move,.Select,.SelectZoom].contains(toolbarType) {
  398. return [KMToolbarAnnotationSettingItemIdentifier]
  399. }
  400. return []
  401. }
  402. func toolbarAllowedItemIdentifiers(_ toolbar: KMToolbarView) -> [String] {
  403. if [.Annatiton,.Magnify,.Move,.Select,.SelectZoom].contains(toolbarType) {
  404. return [KMNewToolbarSpaceItemIdentifier,
  405. KMToolbarPageEditInsetItemIdentifier, KMToolbarToolMergeItemIdentifier, KMToolbarPageEditSplitItemIdentifier,
  406. KMToolbarToolCompressItemIdentifier, KMToolbarToolSecureItemIdentifier, KMToolbarToolWatermarkItemIdentifier,
  407. KMToolbarToolBackgroundItemIdentifier, KMToolbarToolHeaderFooterItemIdentifier, KMToolbarToolBatesItemIdentifier,
  408. KMToolbarToolCropItemIdentifier,
  409. KMToolbarConversionWordItemIdentifier, KMToolbarConversionExcelItemIdentifier, KMToolbarConversionPPTItemIdentifier,
  410. KMToolbarConversionRTFItemIdentifier, KMToolbarConversionCSVItemIdentifier, KMToolbarConversionHTMLItemIdentifier,
  411. KMToolbarConversionTextItemIdentifier, KMToolbarConversionImageItemIdentifier,
  412. KMToolbarMoveToolModeItemIdentifier,
  413. KMToolbarMagnifyToolModeItemIdentifier,
  414. KMToolbarSelectToolModeItemIdentifier,
  415. KMToolbarZoomToSelectionItemIdentifier,
  416. KMNewToolbarSpaceItemIdentifier,
  417. KMToolbarDividerItemIdentifier,
  418. KMNewToolbarSpaceItemIdentifier,
  419. KMToolbarHighlightAnnotationItemIdentifier,
  420. KMToolbarUnderlineAnnotationItemIdentifier,
  421. KMToolbarStrikeOutAnnotationItemIdentifier,
  422. KMToolbarInkAnnotationItemIdentifier,
  423. KMToolbarFreeTextAnnotationItemIdentifier,
  424. KMToolbarAnchoredAnnotationItemIdentifier,
  425. KMToolbarSquareAnnotationItemIdentifier, KMToolbarCircleAnnotationItemIdentifier, KMToolbarArrowAnnotationItemIdentifier, KMToolbarLineAnnotationItemIdentifier,
  426. KMToolbarLinkAnnotationItemIdentifier,
  427. KMAnnotationStampToolbarItemIdentifier,
  428. KMToolbarSignSignatureAnnotationItemIdentifier,
  429. KMToolbarDividerItemIdentifier,
  430. KMToolbarShowToolbarItemIdentifier,
  431. KMToolbarToolRadioButtonItemIdentifier]
  432. }
  433. return []
  434. }
  435. func toolbarDefaultItemIdentifiers(_ toolbar: KMToolbarView) -> [String] {
  436. switch toolbarType {
  437. case .None:
  438. return []
  439. case .Main:
  440. return [KMDocumentAnnotationToolbarItemIdentifier,
  441. KMDocumentPageToolbarItemIdentifier,
  442. KMDocumentToolToolbarItemIdentifier,
  443. KMDocumentConversonToolbarItemIdentifier,
  444. KMDocumentFormToolbarItemIdentifier,
  445. KMDocumentFillSginToolbarItemIdentifier,
  446. KMDocumentEditToolbarItemIdentifier,
  447. KMDocumentRedactToolbarItemIdentifier,
  448. KMDocumentScanOCRToolbarItemIdentifier]
  449. case .Annatiton,.Magnify,.Move,.Select,.SelectZoom:
  450. let itemIdentifiers: [String]? = self.toolbar?.toolbarIdentifier != nil ? (UserDefaults.standard.object(forKey: self.toolbar!.toolbarIdentifier!) as? [String]) : []
  451. if itemIdentifiers == nil || itemIdentifiers!.count <= 0 {
  452. return [KMToolbarMoveToolModeItemIdentifier,
  453. KMToolbarMagnifyToolModeItemIdentifier,
  454. KMToolbarSelectToolModeItemIdentifier,
  455. KMToolbarZoomToSelectionItemIdentifier,
  456. KMNewToolbarSpaceItemIdentifier,
  457. KMToolbarDividerItemIdentifier,
  458. KMNewToolbarSpaceItemIdentifier,
  459. KMToolbarHighlightAnnotationItemIdentifier,
  460. KMToolbarUnderlineAnnotationItemIdentifier,
  461. KMToolbarStrikeOutAnnotationItemIdentifier,
  462. KMToolbarInkAnnotationItemIdentifier,
  463. KMToolbarFreeTextAnnotationItemIdentifier,
  464. KMToolbarAnchoredAnnotationItemIdentifier,
  465. KMToolbarSquareAnnotationItemIdentifier, KMToolbarCircleAnnotationItemIdentifier, KMToolbarArrowAnnotationItemIdentifier, KMToolbarLineAnnotationItemIdentifier,
  466. KMToolbarLinkAnnotationItemIdentifier,
  467. KMAnnotationStampToolbarItemIdentifier,
  468. KMToolbarSignSignatureAnnotationItemIdentifier,
  469. KMToolbarDividerItemIdentifier,
  470. KMToolbarShowToolbarItemIdentifier]
  471. }
  472. return itemIdentifiers!
  473. case .editPDF:
  474. return [KMToolbarAddTextEditPDFItemIdentifier,
  475. KMToolbarAddImageEditPDFItemIdentifier]
  476. case .Page:
  477. return []
  478. case .Tool:
  479. return [KMToolbarToolCompressItemIdentifier, KMToolbarToolMergeItemIdentifier,
  480. KMToolbarToolSecureItemIdentifier, KMToolbarComparisonItemIdentifier,
  481. KMToolbarToolWatermarkItemIdentifier, KMToolbarToolBackgroundItemIdentifier,
  482. KMToolbarToolHeaderFooterItemIdentifier, KMToolbarToolBatesItemIdentifier]
  483. case .Form:
  484. return [KMToolbarToolTextFieldItemIdentifier,
  485. KMToolbarToolCheckBoxItemIdentifier,
  486. KMToolbarToolRadioButtonItemIdentifier,
  487. KMToolbarToolListBoxItemIdentifier,
  488. KMToolbarToolPullDownmenuItemIdentifier,
  489. KMToolbarToolButtonIdentifier,
  490. KMToolbarToolSignBoxIdentifier,
  491. KMToolbarDividerItemIdentifier,
  492. KMToolbarToolFormAlignIdentifier,
  493. KMToolbarToolFormMoreIdentifier]
  494. case .FillSign:
  495. return [KMToolbarToolTextIdentifier,
  496. KMToolbarToolHookItemIdentifier,
  497. KMToolbarToolForkItemIdentifier,
  498. KMToolbarToolRectangleIdentifier,
  499. KMToolbarToolLineItemIdentifier,
  500. KMToolbarToolDotItemIdentifier,
  501. KMToolbarToolDateIdentifier,
  502. KMToolbarToolProfileIdentifier,
  503. KMToolbarFillSignSignatureIdentifier]
  504. case .Conversion:
  505. return [KMToolbarConversionWordItemIdentifier,
  506. KMToolbarConversionExcelItemIdentifier,
  507. KMToolbarConversionPPTItemIdentifier,
  508. KMToolbarConversionRTFItemIdentifier,
  509. KMToolbarConversionCSVItemIdentifier,
  510. KMToolbarConversionHTMLItemIdentifier,
  511. KMToolbarConversionTextItemIdentifier,
  512. KMToolbarConversionImageItemIdentifier]
  513. case .ScanOCR:
  514. return [KMToolbarToolEnhancedScanIdentifier,
  515. KMToolbarToolOCRTextIdentifier]
  516. default:
  517. break
  518. }
  519. return []
  520. }
  521. func toolbar(_ toolbar: KMToolbarView, itemFor identifier: String) -> KMToolbarItemView {
  522. var item: KMToolbarItemView? = self.toolbarItems[identifier] as? KMToolbarItemView
  523. var create = true
  524. if let data = item {
  525. let pId = parentIdentifier(data.itemIdentifier ?? "")
  526. if [.Annatiton,.Magnify,.Move,.Select,.SelectZoom].contains(toolbarType) && (pId != KMDocumentAnnotationToolbarItemIdentifier || data.itemIdentifier! == KMToolbarAnnotationSettingItemIdentifier) {
  527. create = true
  528. }
  529. }
  530. if item == nil || create {
  531. item = KMToolbarItemView.init(itemIdentifier: identifier)
  532. self.toolbarItems[identifier] = item
  533. if isMainToolItem(identifier) {
  534. self._setupMainItem(item)
  535. } else {
  536. if (annotationToolIdentifiers.contains(identifier)) {
  537. self._setupAnnotationItem(item)
  538. } else if editPDFItemIdentifiers.contains(identifier) {
  539. self._setupEditItem(item)
  540. } else if conversionToolIdentifiers.contains(identifier) {
  541. self._setupConvertItem(item)
  542. } else if fillSignToolIdentifiers.contains(identifier) {
  543. self._setupFillSignItem(item)
  544. } else if formToolIdentifiers.contains(identifier) {
  545. self._setupFormItem(item)
  546. } else if toolToolIdentifiers.contains(identifier) {
  547. self._setupToolItem(item)
  548. }
  549. }
  550. }
  551. return item!
  552. }
  553. func validateToolbarItem(_ item: NSToolbarItem) -> Bool {
  554. return true
  555. }
  556. @objc func listViewAnnotationTypeChangeNotification(sender: Notification?) {
  557. // if let notiName = sender?.name, notiName == NSNotification.Name.CPDFListViewAnnotationTypeChange, self.ignoreCurrentAnnotationTypeChange {
  558. // }
  559. if (self.ignoreCurrentAnnotationTypeChange) {
  560. // 忽略后重置 这个属性是基于单次添加,所以使用后会重置
  561. // self.ignoreCurrentAnnotationTypeChange = false
  562. return
  563. }
  564. let annotationType : CAnnotationType = pdfView.annotationType
  565. if annotationType == .square || annotationType == .circle || annotationType == .arrow || annotationType == .line{
  566. UserDefaults.standard.set(pdfView.annotationType.rawValue, forKey: KMToolBarToolPDFShapeStyle)
  567. UserDefaults.standard.synchronize()
  568. }
  569. for item in self.toolbar.items {
  570. if self.toolbarType == .Annatiton || self.toolbarType == .Move || self.toolbarType == .Magnify ||
  571. self.toolbarType == .Select || self.toolbarType == .SelectZoom {
  572. item.isSelected = false
  573. if item.itemIdentifier == KMDocumentAnnotationToolbarItemIdentifier {
  574. item.isSelected = true
  575. } else if item.itemIdentifier == KMToolbarHighlightAnnotationItemIdentifier {
  576. if annotationType == .highlight {
  577. item.isSelected = true
  578. }
  579. } else if item.itemIdentifier == KMToolbarUnderlineAnnotationItemIdentifier {
  580. if annotationType == .underline {
  581. item.isSelected = true
  582. }
  583. } else if item.itemIdentifier == KMToolbarStrikeOutAnnotationItemIdentifier {
  584. if annotationType == .strikeOut {
  585. item.isSelected = true
  586. }
  587. } else if item.itemIdentifier == KMToolbarInkAnnotationItemIdentifier {
  588. if annotationType == .ink || annotationType == .eraser {
  589. item.isSelected = true
  590. }
  591. } else if item.itemIdentifier == KMToolbarFreeTextAnnotationItemIdentifier {
  592. if annotationType == .freeText {
  593. item.isSelected = true
  594. }
  595. } else if item.itemIdentifier == KMToolbarAnchoredAnnotationItemIdentifier {
  596. if annotationType == .anchored {
  597. item.isSelected = true
  598. }
  599. } else if item.itemIdentifier == KMToolbarSquareAnnotationItemIdentifier {
  600. if annotationType == .square {
  601. item.isSelected = true
  602. }
  603. } else if item.itemIdentifier == KMToolbarCircleAnnotationItemIdentifier {
  604. if annotationType == .circle {
  605. item.isSelected = true
  606. }
  607. } else if item.itemIdentifier == KMToolbarArrowAnnotationItemIdentifier {
  608. if annotationType == .arrow {
  609. item.isSelected = true
  610. }
  611. } else if item.itemIdentifier == KMToolbarLineAnnotationItemIdentifier {
  612. if annotationType == .line {
  613. item.isSelected = true
  614. }
  615. } else if item.itemIdentifier == KMToolbarLinkAnnotationItemIdentifier {
  616. if annotationType == .link {
  617. item.isSelected = true
  618. }
  619. } else if item.itemIdentifier == KMAnnotationStampToolbarItemIdentifier {
  620. if annotationType == .stamp {
  621. item.isSelected = true
  622. }
  623. } else if item.itemIdentifier == KMToolbarSignSignatureAnnotationItemIdentifier {
  624. if annotationType == .signSignature {
  625. item.isSelected = true
  626. }
  627. } else if pdfView.toolMode == .moveToolMode {
  628. if item.itemIdentifier == KMToolbarMoveToolModeItemIdentifier {
  629. item.isSelected = true
  630. }
  631. } else if pdfView.toolMode == .magnifyToolMode {
  632. if item.itemIdentifier == KMToolbarMagnifyToolModeItemIdentifier {
  633. item.isSelected = true
  634. }
  635. } else if pdfView.toolMode == .selectToolMode {
  636. if item.itemIdentifier == KMToolbarSelectToolModeItemIdentifier {
  637. item.isSelected = true
  638. }
  639. } else if pdfView.toolMode == .selectZoomToolMode {
  640. if item.itemIdentifier == KMToolbarZoomToSelectionItemIdentifier {
  641. item.isSelected = true
  642. }
  643. }
  644. if (item.itemIdentifier == KMToolbarShowToolbarItemIdentifier) {
  645. item.isSelected = !self.isShowAllAnnotations
  646. }
  647. } else if self.toolbarType == .FillSign {
  648. item.isSelected = false
  649. if pdfView.toolMode == .selfSignMode {
  650. if item.itemIdentifier == KMToolbarToolHookItemIdentifier {
  651. if annotationType == .signTure {
  652. item.isSelected = true
  653. }
  654. } else if item.itemIdentifier == KMToolbarToolForkItemIdentifier {
  655. if annotationType == .signFalse {
  656. item.isSelected = true
  657. }
  658. } else if item.itemIdentifier == KMToolbarToolLineItemIdentifier {
  659. if annotationType == .signLine {
  660. item.isSelected = true
  661. }
  662. } else if item.itemIdentifier == KMToolbarToolDotItemIdentifier {
  663. if annotationType == .signDot {
  664. item.isSelected = true
  665. }
  666. } else if item.itemIdentifier == KMToolbarToolRectangleIdentifier {
  667. if annotationType == .signCircle {
  668. item.isSelected = true
  669. }
  670. } else if item.itemIdentifier == KMToolbarToolDateIdentifier {
  671. if annotationType == .signDate {
  672. item.isSelected = true
  673. }
  674. } else if item.itemIdentifier == KMToolbarToolTextIdentifier {
  675. if annotationType == .signText {
  676. item.isSelected = true
  677. }
  678. } else if (item.itemIdentifier == KMToolbarFillSignSignatureIdentifier) {
  679. if (annotationType == .signSignature) {
  680. item.isSelected = true
  681. }
  682. }
  683. }
  684. }
  685. }
  686. }
  687. }
  688. extension KMToolbarViewController: NSSearchFieldDelegate {
  689. }
  690. extension KMToolbarViewController {
  691. private func _setupMainItem(_ item: KMToolbarItemView?) {
  692. let identifier = item?.itemIdentifier
  693. if identifier == KMLeftControlToolbarItemIdentifier {
  694. item?.image = NSImage(named: "KMImageNameUXIconBtnTriLeftNor")
  695. item?.titleName = NSLocalizedString("Panel", comment: "")
  696. item?.target = self
  697. item?.toolTip = NSLocalizedString("View Settings", comment: "")
  698. item?.boxImagePosition = .imageAbove
  699. item?.btnAction = #selector(_itemAction)
  700. } else if identifier == KMDocumentZoomToolbarItemIdentifier {
  701. item?.image = NSImage(named: "KMImageNameUXIconToolbarZoominNor")
  702. item?.titleName = NSLocalizedString("", comment: "")
  703. item?.target = self
  704. item?.btnTag = 1
  705. item?.toolTip = NSLocalizedString("Zoom In", comment: "")
  706. item?.boxImagePosition = .imageAbove
  707. item?.btnAction = #selector(zoomPDFViewButtonAction)
  708. } else if identifier == KMDocumentZoomOutToolbarItemIdentifier {
  709. item?.image = NSImage(named: "KMImageNameUXIconToolbarZoomoutNor")
  710. item?.titleName = NSLocalizedString("", comment: "")
  711. item?.target = self
  712. item?.btnTag = 0
  713. item?.toolTip = NSLocalizedString("Zoom Out", comment: "")
  714. item?.boxImagePosition = .imageAbove
  715. item?.btnAction = #selector(zoomPDFViewButtonAction)
  716. } else if identifier == KMDocumentZoomViewToolbarItemIdentifier{
  717. item?.titleName = NSLocalizedString("Zoom", comment: "")
  718. item?.target = self
  719. let view = NSView()
  720. view.frame = NSMakeRect(0, 0, 70, 40)
  721. let boxView = NSView()
  722. boxView.frame = NSMakeRect(0, 16, 70, 22)
  723. view.addSubview(boxView)
  724. boxView.addSubview(self.zoomView)
  725. self.zoomView.frame = NSMakeRect(10, 3, NSWidth(self.zoomView.frame), NSHeight(self.zoomView.frame))
  726. let titleLabel = NSTextField(labelWithString: NSLocalizedString("Zoom", comment: ""))
  727. view.addSubview(titleLabel)
  728. titleLabel.frame = NSMakeRect(0, 0, 70, 16)
  729. titleLabel.alignment = .right
  730. boxView.wantsLayer = true
  731. boxView.layer?.borderWidth = 1
  732. boxView.layer?.borderColor = NSColor.lightGray.cgColor
  733. item?.customizeView = view
  734. } else if identifier == KMDocumentNextPageToolbarItemIdentifier {
  735. item?.image = NSImage(named: "KMImageNameToolbarPagenextNor")
  736. item?.titleName = NSLocalizedString("Next", comment: "")
  737. item?.target = self
  738. item?.toolTip = NSLocalizedString("Go To Next Page", comment: "")
  739. item?.boxImagePosition = .imageAbove
  740. item?.btnAction = #selector(_itemAction)
  741. } else if identifier == KMDocumentPreviousPageToolbarItemIdentifier {
  742. item?.image = NSImage(named: "KMImageNameToolbarPagepreviousNor")
  743. item?.titleName = NSLocalizedString("Previous", comment: "")
  744. item?.target = self
  745. item?.toolTip = NSLocalizedString("Go To Previous Page", comment: "")
  746. item?.boxImagePosition = .imageAbove
  747. item?.btnAction = #selector(_itemAction)
  748. } else if identifier == KMDocumentHomeToolbarItemIdentifier {
  749. item?.image = NSImage(named: "KMImageNameToolbarHomeNor")
  750. item?.titleName = NSLocalizedString("Home", comment: "")
  751. item?.target = self
  752. item?.toolTip = NSLocalizedString("A Welcome Gift from Us", comment: "")
  753. item?.boxImagePosition = .imageAbove
  754. item?.btnAction = #selector(_itemAction)
  755. } else if identifier == KMDocumentAnnotationToolbarItemIdentifier {
  756. item?.titleName = NSLocalizedString("Tools", comment: "")
  757. item?.image = NSImage(named: "KMImageNameUXIconToolbarMytoolsNor")
  758. item?.target = self
  759. item?.toolTip = String(format: "%@: %@, %@, %@, %@", KMLocalizedString("Tool Mode", nil),KMLocalizedString("Annotate", nil),KMLocalizedString("Scroll", nil),KMLocalizedString("Magnify", nil),KMLocalizedString("Select", nil))
  760. item?.btnTag = KMToolbarViewType.Annatiton.rawValue
  761. item?.btnAction = #selector(leftControllButtonAction)
  762. item?.boxImagePosition = .imageAbove
  763. } else if identifier == KMDocumentPageToolbarItemIdentifier {
  764. item?.titleName = NSLocalizedString("Page Edit", comment: "")
  765. item?.target = self
  766. item?.image = NSImage(named: "KMImageNameUXIconToolbarPageeditNor")
  767. item?.toolTip = NSLocalizedString("PDF page editor: insert, delete, extract, rotate, reposition, and replace pages in a PDF", comment: "")
  768. item?.btnTag = KMToolbarViewType.Page.rawValue
  769. item?.btnAction = #selector(leftControllButtonAction)
  770. item?.boxImagePosition = .imageAbove
  771. } else if identifier == KMDocumentConversonToolbarItemIdentifier {
  772. item?.titleName = NSLocalizedString("Converter", comment: "")
  773. item?.target = self
  774. item?.image = NSImage(named: "KMImageNameUXIconToolbarConvertNor")
  775. item?.toolTip = NSLocalizedString("Convert PDFs to Microsoft Word, PowerPoint, Excel, RTF, Text, Image, CSV, and more Offline", comment: "")
  776. item?.btnTag = KMToolbarViewType.Conversion.rawValue
  777. item?.btnAction = #selector(leftControllButtonAction)
  778. item?.boxImagePosition = .imageAbove
  779. } else if identifier == KMDocumentScanOCRToolbarItemIdentifier {
  780. item?.titleName = NSLocalizedString("OCR", comment: "")
  781. item?.target = self
  782. item?.image = NSImage(named: "KMImageNameToolbarOCRNor")
  783. item?.boxImagePosition = .imageAbove
  784. item?.toolTip = NSLocalizedString("Recognize text from Image-based or Scanned PDF with OCR", comment: "")
  785. item?.btnAction = #selector(_itemAction)
  786. } else if identifier == KMToolbarToolEnhancedScanIdentifier {
  787. item?.image = NSImage(named: "KMImageNameMainToolEnhancedScan")
  788. item?.target = self
  789. item?.btnTag = 0
  790. item?.toolTip = NSLocalizedString("Enhanced Scan", comment: "")
  791. item?.titleName = NSLocalizedString("Enhanced Scan", comment: "")
  792. item?.boxImagePosition = .imageLeft
  793. item?.btnAction = #selector(scanOCRModelSelect)
  794. } else if identifier == KMToolbarToolOCRTextIdentifier {
  795. item?.image = NSImage(named: "KMImageNameMainToolOCRText")
  796. item?.target = self
  797. item?.toolTip = NSLocalizedString("OCR Text Recognition", comment: "")
  798. item?.titleName = NSLocalizedString("OCR Text Recognition", comment: "")
  799. item?.boxImagePosition = .imageLeft
  800. item?.btnAction = #selector(scanOCRModelSelect)
  801. } else if identifier == KMDocumentEditToolbarItemIdentifier {
  802. item?.titleName = NSLocalizedString("Edit PDF", comment: "")
  803. item?.target = self
  804. item?.image = NSImage(named: "KMImageNameUXIconToolbarEditNor")
  805. item?.boxImagePosition = .imageAbove
  806. item?.btnTag = KMToolbarViewType.editPDF.rawValue
  807. item?.toolTip = NSLocalizedString("Edit text and image in PDF", comment: "")
  808. item?.btnAction = #selector(leftControllButtonAction)
  809. } else if identifier == KMDocumentFormToolbarItemIdentifier {
  810. item?.titleName = NSLocalizedString("Forms", comment: "")
  811. item?.target = self
  812. item?.image = NSImage(named: "KMImageNameUXIconToolbarFormNor")
  813. item?.boxImagePosition = .imageAbove
  814. item?.btnTag = KMToolbarViewType.Form.rawValue
  815. item?.toolTip = NSLocalizedString("Edit PDF Form", comment: "")
  816. item?.btnAction = #selector(leftControllButtonAction)
  817. } else if identifier == KMDocumentFillSginToolbarItemIdentifier {
  818. item?.titleName = NSLocalizedString("Fill & Sign", comment: "")
  819. item?.target = self
  820. item?.image = NSImage(named: "KMImageNameUXIconToolbarFillsignNor")
  821. item?.boxImagePosition = .imageAbove
  822. item?.btnTag = KMToolbarViewType.FillSign.rawValue
  823. item?.toolTip = NSLocalizedString("Fill and sign forms", comment: "")
  824. item?.btnAction = #selector(leftControllButtonAction)
  825. } else if identifier == KMDocumentToolToolbarItemIdentifier {
  826. item?.titleName = NSLocalizedString("Editor", comment: "")
  827. item?.target = self
  828. item?.image = NSImage(named: "KMImageNameUXIconToolbarEdittoolNor")
  829. item?.boxImagePosition = .imageAbove
  830. item?.btnTag = KMToolbarViewType.Tool.rawValue
  831. item?.toolTip = NSLocalizedString("Edit, delete, cut, copy, paste, and insert text in PDFs", comment: "")
  832. item?.btnAction = #selector(leftControllButtonAction)
  833. } else if identifier == KMDocumentRedactToolbarItemIdentifier {
  834. item?.titleName = NSLocalizedString("Redact Text", comment: "")
  835. item?.target = self
  836. item?.image = NSImage(named: "KMImageNameUXIconToolbarRedactNor")
  837. item?.boxImagePosition = .imageAbove
  838. item?.toolTip = NSLocalizedString("Mark for redaction", comment: "")
  839. item?.btnAction = #selector(_itemAction)
  840. } else if identifier == KMDocumentAITranslationToolbarItemIdentifier {
  841. item?.image = NSImage(named: "ic_function_other_AITranslation")
  842. item?.titleName = "AI Translation"
  843. item?.target = self
  844. item?.toolTip = NSLocalizedString("AI Translation", comment: "")
  845. item?.boxImagePosition = .imageOnly
  846. item?.btnAction = #selector(aiTranslationButtonAction)
  847. } else if identifier == KMDocumentPrintToolbarItemIdentifier {
  848. item?.image = NSImage(named: "KMImageNameMainToolbarPrint")
  849. item?.titleName = "Print"
  850. item?.target = self
  851. item?.toolTip = NSLocalizedString("Print", comment: "")
  852. item?.boxImagePosition = .imageOnly
  853. item?.btnAction = #selector(_itemAction)
  854. } else if identifier == KMDocumentViewSettingToolbarItemIdentifier {
  855. item?.image = NSImage(named: "KMImageNameUXIconToolbarPageviewNor")
  856. item?.titleName = NSLocalizedString("Page Display", comment: "")
  857. item?.target = self
  858. item?.toolTip = NSLocalizedString("Page Display", comment: "")
  859. item?.boxImagePosition = .imageAbove
  860. item?.btnAction = #selector(_itemAction)
  861. } else if identifier == KMDocumentShareToolbarItemIdentifier {
  862. item?.image = NSImage(named: "KMImageNameUXIconToolbarShareNor")
  863. item?.titleName = NSLocalizedString("Share", comment: "")
  864. item?.target = self
  865. item?.toolTip = NSLocalizedString("Share the file with others", comment: "")
  866. item?.boxImagePosition = .imageAbove
  867. item?.btnAction = #selector(shareButtonAction)
  868. let menuItem = NSMenuItem.init(title: item!.titleName ?? "", action: nil, target: self)
  869. let menu = NSMenu()
  870. menu.addItem(withTitle: NSLocalizedString("Document", comment: ""), action: #selector(shareViaWithDocument), target: self)
  871. menu.addItem(withTitle: NSLocalizedString("Flattened Copy", comment: ""), action: #selector(shareViaWithFlatten), target: self)
  872. menu.addItem(withTitle: NSLocalizedString("Original PDF", comment: ""), action: #selector(shareViaWithOriginalPDF), target: self)
  873. menuItem.submenu = menu
  874. item?.menuFormRepresentation = menuItem
  875. } else if identifier == KMDocumentSearchToolbarItemIdentifier {
  876. item?.titleName = NSLocalizedString("Search", comment: "")
  877. item?.target = self
  878. let view = NSView()
  879. view.frame = NSMakeRect(0, 0, 150, 40)
  880. let boxView = NSView()
  881. boxView.frame = NSMakeRect(0, 16, 150, 22)
  882. view.addSubview(boxView)
  883. let searchView = NSSearchField()
  884. searchView.frame = NSMakeRect(0, 0, 150, 22)
  885. searchView.placeholderString = NSLocalizedString("Search", comment: "")
  886. searchView.sendsWholeSearchString = true
  887. searchView.sendsSearchStringImmediately = true
  888. searchView.drawsBackground = false
  889. searchView.delegate = self
  890. boxView.addSubview(searchView)
  891. let titleLabel = NSTextField(labelWithString: NSLocalizedString("Search", comment: ""))
  892. view.addSubview(titleLabel)
  893. titleLabel.frame = NSMakeRect(0, 0, 130, 16)
  894. titleLabel.alignment = .center
  895. item?.customizeView = view
  896. } else if identifier == KMRightControlToolbarItemIdentifier {
  897. item?.image = NSImage(named: "KMImageNameUXIconBtnTriRightNor")
  898. item?.titleName = NSLocalizedString("Properties", comment: "")
  899. item?.target = self
  900. item?.toolTip = NSLocalizedString("Show/Hide Annotation Properties Panel", comment: "")
  901. item?.boxImagePosition = .imageOnly
  902. item?.btnAction = #selector(_itemAction)
  903. } else if identifier == KMToolbarToolRedactItemIdentifier {
  904. item?.image = NSImage(named: "KMImageNameMainToolsRedact")
  905. item?.target = self
  906. item?.btnTag = KMToolbarType.redact.rawValue
  907. item?.toolTip = NSLocalizedString("Redact", comment: "")
  908. item?.titleName = NSLocalizedString("Redact", comment: "")
  909. item?.btnAction = #selector(redactMenuAction)
  910. let menuItem = NSMenuItem.init(title: "Redact", action: #selector(changeAnnotationMode), target: self)
  911. menuItem.tag = item!.btnTag
  912. item?.menuFormRepresentation = menuItem
  913. }
  914. }
  915. private func _setupAnnotationItem(_ item: KMToolbarItemView?) {
  916. let identifier = item?.itemIdentifier
  917. if identifier == KMToolbarMoveToolModeItemIdentifier {
  918. item?.titleName = NSLocalizedString("Scroll Tool", comment: "")
  919. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsPantool)
  920. item?.target = self
  921. item?.btnTag = KMToolbarViewType.Move.rawValue
  922. item?.toolTip = NSLocalizedString("Scroll Tool", comment: "")
  923. item?.boxImagePosition = .imageOnly
  924. item?.btnAction = #selector(leftControllButtonAction)
  925. } else if identifier == KMToolbarMagnifyToolModeItemIdentifier {
  926. item?.titleName = NSLocalizedString("Magnify Tool", comment: "")
  927. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsMagnifier)
  928. item?.target = self
  929. item?.btnTag = KMToolbarViewType.Magnify.rawValue
  930. item?.toolTip = NSLocalizedString("Magnify Tool", comment: "")
  931. item?.boxImagePosition = .imageOnly
  932. item?.btnAction = #selector(leftControllButtonAction)
  933. } else if identifier == KMToolbarSelectToolModeItemIdentifier {
  934. item?.titleName = NSLocalizedString("Content Selection Tool", comment: "")
  935. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsContentsel)
  936. item?.target = self
  937. item?.btnTag = KMToolbarViewType.Select.rawValue
  938. item?.toolTip = NSLocalizedString("Content Selection Tool", comment: "")
  939. item?.boxImagePosition = .imageOnly
  940. item?.btnAction = #selector(leftControllButtonAction)
  941. } else if identifier == KMToolbarZoomToSelectionItemIdentifier {
  942. item?.titleName = NSLocalizedString("Zoom to selected area", comment: "")
  943. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsAreazoom)
  944. item?.target = self
  945. item?.btnTag = KMToolbarViewType.SelectZoom.rawValue
  946. item?.toolTip = NSLocalizedString("Zoom to selected area", comment: "")
  947. item?.boxImagePosition = .imageOnly
  948. item?.btnAction = #selector(leftControllButtonAction)
  949. } else if identifier == KMToolbarHighlightAnnotationItemIdentifier {
  950. item?.titleName = NSLocalizedString("Highlight", comment: "")
  951. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsUnderline)
  952. item?.target = self
  953. item?.btnTag = CAnnotationType.highlight.rawValue
  954. item?.toolTip = String(format: "%@ (⌃⌘H)", NSLocalizedString("Highlight", comment: ""))
  955. item?.boxImagePosition = .imageOnly
  956. item?.btnAction = #selector(changeAnnotationMode)
  957. } else if identifier == KMToolbarUnderlineAnnotationItemIdentifier {
  958. item?.titleName = NSLocalizedString("Underline", comment: "")
  959. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsUnderline)
  960. item?.target = self
  961. item?.btnTag = CAnnotationType.underline.rawValue
  962. item?.toolTip = String(format: "%@ (⇧⌘M)", NSLocalizedString("Underline", comment: ""))
  963. item?.boxImagePosition = .imageOnly
  964. item?.btnAction = #selector(changeAnnotationMode)
  965. } else if identifier == KMToolbarStrikeOutAnnotationItemIdentifier {
  966. item?.titleName = NSLocalizedString("Strikethrough", comment: "")
  967. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsStrikeout)
  968. item?.target = self
  969. item?.btnTag = CAnnotationType.strikeOut.rawValue
  970. item?.toolTip = String(format: "%@ (⌃⌘M)", NSLocalizedString("Strikethrough", comment: ""))
  971. item?.boxImagePosition = .imageOnly
  972. item?.btnAction = #selector(changeAnnotationMode)
  973. } else if identifier == KMToolbarInkAnnotationItemIdentifier {
  974. item?.titleName = NSLocalizedString("Freehand", comment: "")
  975. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsPen)
  976. item?.target = self
  977. item?.btnTag = CAnnotationType.ink.rawValue
  978. item?.toolTip = NSLocalizedString("Add freehand drawings by hand writing just like you do with a pen.", comment: "")
  979. item?.boxImagePosition = .imageOnly
  980. item?.btnAction = #selector(changeAnnotationMode)
  981. } else if identifier == KMToolbarFreeTextAnnotationItemIdentifier {
  982. item?.titleName = NSLocalizedString("Text Note", comment: "")
  983. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsText)
  984. item?.target = self
  985. item?.btnTag = CAnnotationType.freeText.rawValue
  986. item?.toolTip = String(format: "%@ (⌘N)", NSLocalizedString("Text Note", comment: ""))
  987. item?.boxImagePosition = .imageOnly
  988. item?.btnAction = #selector(changeAnnotationMode)
  989. } else if identifier == KMToolbarAnchoredAnnotationItemIdentifier {
  990. item?.titleName = NSLocalizedString("Anchored Note", comment: "")
  991. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsNote)
  992. item?.target = self
  993. item?.btnTag = CAnnotationType.anchored.rawValue
  994. item?.toolTip = String(format: "%@ (⌥⌘N)", NSLocalizedString("Anchored Note", comment: ""))
  995. item?.boxImagePosition = .imageOnly
  996. item?.btnAction = #selector(changeAnnotationMode)
  997. } else if identifier == KMToolbarSquareAnnotationItemIdentifier {
  998. item?.titleName = NSLocalizedString("Square", comment: "")
  999. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsRec)
  1000. item?.target = self
  1001. item?.btnTag = CAnnotationType.square.rawValue
  1002. item?.toolTip = NSLocalizedString("Draw rectangle; draw square by holding Shift key", comment: "")
  1003. item?.boxImagePosition = .imageOnly
  1004. item?.btnAction = #selector(changeAnnotationMode)
  1005. }else if identifier == KMToolbarCircleAnnotationItemIdentifier {
  1006. item?.titleName = NSLocalizedString("oval", comment: "")
  1007. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsOval)
  1008. item?.target = self
  1009. item?.btnTag = CAnnotationType.circle.rawValue
  1010. item?.toolTip = NSLocalizedString("Draw oval; draw circle by holding Shift key", comment: "")
  1011. item?.boxImagePosition = .imageOnly
  1012. item?.btnAction = #selector(changeAnnotationMode)
  1013. } else if identifier == KMToolbarArrowAnnotationItemIdentifier {
  1014. item?.titleName = NSLocalizedString("Arrow", comment: "")
  1015. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsArrow)
  1016. item?.target = self
  1017. item?.btnTag = CAnnotationType.arrow.rawValue
  1018. item?.toolTip = NSLocalizedString("Draw arrow; draw straight arrow by holding Shift key", comment: "")
  1019. item?.boxImagePosition = .imageOnly
  1020. item?.btnAction = #selector(changeAnnotationMode)
  1021. } else if identifier == KMToolbarLineAnnotationItemIdentifier {
  1022. item?.titleName = NSLocalizedString("Square", comment: "")
  1023. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsLine)
  1024. item?.target = self
  1025. item?.btnTag = CAnnotationType.line.rawValue
  1026. item?.toolTip = NSLocalizedString("Draw line; draw straight line by holding Shift key", comment: "")
  1027. item?.boxImagePosition = .imageOnly
  1028. item?.btnAction = #selector(changeAnnotationMode)
  1029. } else if identifier == KMToolbarLinkAnnotationItemIdentifier {
  1030. item?.titleName = NSLocalizedString("Link", comment: "")
  1031. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsLink)
  1032. item?.target = self
  1033. item?.btnTag = CAnnotationType.link.rawValue
  1034. item?.toolTip = NSLocalizedString("Select an area or text on a page for a link to be inserted.", comment: "")
  1035. item?.boxImagePosition = .imageOnly
  1036. item?.btnAction = #selector(changeAnnotationMode)
  1037. } else if identifier == KMToolbarSignSignatureAnnotationItemIdentifier {
  1038. item?.titleName = NSLocalizedString("SignSignature", comment: "")
  1039. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsSign)
  1040. item?.target = self
  1041. item?.btnTag = CAnnotationType.signSignature.rawValue
  1042. item?.toolTip = NSLocalizedString("Add beautiful handwriting or use your trackpad to create your own signature.", comment: "")
  1043. item?.boxImagePosition = .imageOnly
  1044. item?.btnAction = #selector(changeAnnotationMode)
  1045. } else if identifier == KMAnnotationStampToolbarItemIdentifier {
  1046. item?.titleName = NSLocalizedString("Stamp", comment: "")
  1047. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsStamp)
  1048. item?.target = self
  1049. item?.btnTag = CAnnotationType.stamp.rawValue
  1050. item?.toolTip = NSLocalizedString("Add New Stamp", comment: "")
  1051. item?.boxImagePosition = .imageOnly
  1052. item?.btnAction = #selector(changeAnnotationMode)
  1053. } else if identifier == KMToolbarShowToolbarItemIdentifier {
  1054. item?.image = NSImage(named: "KMImageNameMainToolShow")
  1055. item?.selectedImage = NSImage(named: "KMImageNameMainToolHide")
  1056. item?.alternateImage = NSImage(named: "KMImageNameMainToolShow")
  1057. item?.selectedBackgroundColor = NSColor.clear
  1058. item?.target = self
  1059. item?.toolTip = NSLocalizedString("Hide", comment: "")
  1060. item?.titleName = NSLocalizedString("Hide", comment: "")
  1061. item?.boxImagePosition = .imageOnly
  1062. item?.btnAction = #selector(showPDFLayoutMode)
  1063. } else if identifier == KMToolbarAnnotationSettingItemIdentifier {
  1064. item?.image = NSImage(named: "KMImageNameUXIconBtnSetNor")
  1065. item?.target = self
  1066. item?.titleName = NSLocalizedString("Setting", comment: "")
  1067. item?.boxImagePosition = .imageOnly
  1068. item?.btnAction = #selector(_itemAction)
  1069. }
  1070. }
  1071. private func _setupEditItem(_ item: KMToolbarItemView?) {
  1072. let identifier = item?.itemIdentifier
  1073. if identifier == KMToolbarAddTextEditPDFItemIdentifier {
  1074. item?.image = NSImage(named: "KMImageNameMainToolFreeText")
  1075. item?.target = self
  1076. item?.btnTag = CAnnotationType.addText.rawValue
  1077. item?.toolTip = NSLocalizedString("Add Text", comment: "")
  1078. item?.titleName = NSLocalizedString("Add Text", comment: "")
  1079. item?.boxImagePosition = .imageLeft
  1080. item?.btnAction = #selector(changeAnnotationMode)
  1081. } else if identifier == KMToolbarAddImageEditPDFItemIdentifier {
  1082. item?.image = NSImage(named: "KMImageNameMainToolEditImage")
  1083. item?.target = self
  1084. item?.btnTag = CAnnotationType.addImage.rawValue
  1085. item?.toolTip = NSLocalizedString("Add Image", comment: "")
  1086. item?.titleName = NSLocalizedString("Add Image", comment: "")
  1087. item?.boxImagePosition = .imageLeft
  1088. item?.btnAction = #selector(changeAnnotationMode)
  1089. }
  1090. }
  1091. private func _setupConvertItem(_ item: KMToolbarItemView?) {
  1092. let identifier = item?.itemIdentifier
  1093. if identifier == KMToolbarConversionWordItemIdentifier {
  1094. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertWord)
  1095. item?.target = self
  1096. item?.btnTag = KMToolbarType.word.rawValue
  1097. 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: "")
  1098. item?.titleName = NSLocalizedString("To Word", comment: "")
  1099. item?.boxImagePosition = .imageLeft
  1100. item?.btnAction = #selector(conversionMenuItemAction)
  1101. } else if identifier == KMToolbarConversionExcelItemIdentifier {
  1102. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertExcel)
  1103. item?.target = self
  1104. item?.btnTag = KMToolbarType.excel.rawValue
  1105. 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: "")
  1106. item?.titleName = NSLocalizedString("To Excel", comment: "")
  1107. item?.boxImagePosition = .imageLeft
  1108. item?.btnAction = #selector(conversionMenuItemAction)
  1109. } else if identifier == KMToolbarConversionPPTItemIdentifier {
  1110. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertPPT)
  1111. item?.target = self
  1112. item?.btnTag = KMToolbarType.ppt.rawValue
  1113. 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: "")
  1114. item?.titleName = NSLocalizedString("To PPT", comment: "")
  1115. item?.boxImagePosition = .imageLeft
  1116. item?.btnAction = #selector(conversionMenuItemAction)
  1117. } else if identifier == KMToolbarConversionRTFItemIdentifier {
  1118. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertRTF)
  1119. item?.target = self
  1120. item?.btnTag = KMToolbarType.rtf.rawValue
  1121. item?.toolTip = NSLocalizedString("Turn PDF documents into Rich Text Format (RTF) files that can be opened in virtually any word processor.", comment: "")
  1122. item?.titleName = NSLocalizedString("To RTF", comment: "")
  1123. item?.boxImagePosition = .imageLeft
  1124. item?.btnAction = #selector(conversionMenuItemAction)
  1125. } else if identifier == KMToolbarConversionCSVItemIdentifier {
  1126. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertCSV)
  1127. item?.target = self
  1128. item?.btnTag = KMToolbarType.csv.rawValue
  1129. item?.toolTip = NSLocalizedString("PDF To CSV", comment: "")
  1130. item?.titleName = NSLocalizedString("To CSV", comment: "")
  1131. item?.boxImagePosition = .imageLeft
  1132. item?.btnAction = #selector(conversionMenuItemAction)
  1133. } else if identifier == KMToolbarConversionHTMLItemIdentifier {
  1134. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertHtml)
  1135. item?.target = self
  1136. item?.btnTag = KMToolbarType.html.rawValue
  1137. item?.toolTip = NSLocalizedString("PDF To HTML", comment: "")
  1138. item?.titleName = NSLocalizedString("To HTML", comment: "")
  1139. item?.boxImagePosition = .imageLeft
  1140. item?.btnAction = #selector(conversionMenuItemAction)
  1141. } else if identifier == KMToolbarConversionTextItemIdentifier {
  1142. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertText)
  1143. item?.target = self
  1144. item?.btnTag = KMToolbarType.conversion_text.rawValue
  1145. item?.toolTip = NSLocalizedString("PDF To Text", comment: "")
  1146. item?.titleName = NSLocalizedString("To Text", comment: "")
  1147. item?.boxImagePosition = .imageLeft
  1148. item?.btnAction = #selector(conversionMenuItemAction)
  1149. } else if identifier == KMToolbarConversionImageItemIdentifier {
  1150. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertPDFToIMG)
  1151. item?.target = self
  1152. item?.btnTag = KMToolbarType.conversion_image.rawValue
  1153. item?.toolTip = NSLocalizedString("Convert PDF to JPEG, PNG, TIFF, BMP, GIF or TGA files", comment: "")
  1154. item?.titleName = NSLocalizedString("To Image", comment: "")
  1155. item?.boxImagePosition = .imageLeft
  1156. item?.btnAction = #selector(conversionMenuItemAction)
  1157. }
  1158. }
  1159. private func _setupFillSignItem(_ item: KMToolbarItemView?) {
  1160. let identifier = item?.itemIdentifier
  1161. if identifier == KMToolbarToolHookItemIdentifier {
  1162. item?.image = NSImage(named: "KMImageNameFillSignHook")
  1163. item?.target = self
  1164. item?.btnTag = CAnnotationType.signTure.rawValue
  1165. item?.toolTip = NSLocalizedString("Signature", comment: "")
  1166. item?.titleName = NSLocalizedString("Signature", comment: "")
  1167. item?.boxImagePosition = .imageOnly
  1168. item?.btnAction = #selector(changeAnnotationMode)
  1169. } else if identifier == KMToolbarToolForkItemIdentifier {
  1170. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignFork)
  1171. item?.target = self
  1172. item?.btnTag = CAnnotationType.signFalse.rawValue
  1173. item?.toolTip = NSLocalizedString("Add X", comment: "")
  1174. item?.boxImagePosition = .imageOnly
  1175. item?.btnAction = #selector(changeAnnotationMode)
  1176. } else if identifier == KMToolbarToolLineItemIdentifier {
  1177. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignLine)
  1178. item?.target = self
  1179. item?.btnTag = CAnnotationType.signLine.rawValue
  1180. item?.toolTip = NSLocalizedString("Add line", comment: "")
  1181. item?.boxImagePosition = .imageOnly
  1182. item?.btnAction = #selector(changeAnnotationMode)
  1183. } else if identifier == KMToolbarToolDotItemIdentifier {
  1184. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignPoint)
  1185. item?.target = self
  1186. item?.btnTag = CAnnotationType.signDot.rawValue
  1187. item?.toolTip = NSLocalizedString("Add dot", comment: "")
  1188. item?.boxImagePosition = .imageOnly
  1189. item?.btnAction = #selector(changeAnnotationMode)
  1190. } else if identifier == KMToolbarToolRectangleIdentifier {
  1191. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignRoundedrec)
  1192. item?.target = self
  1193. item?.btnTag = CAnnotationType.signCircle.rawValue
  1194. item?.toolTip = NSLocalizedString("Add circle", comment: "")
  1195. item?.boxImagePosition = .imageOnly
  1196. item?.btnAction = #selector(changeAnnotationMode)
  1197. } else if identifier == KMToolbarToolTextIdentifier {
  1198. item?.image = NSImage(named: KMImageNameToolbarFreeText)
  1199. item?.target = self
  1200. item?.btnTag = CAnnotationType.signText.rawValue
  1201. item?.toolTip = NSLocalizedString("Add text", comment: "")
  1202. item?.titleName = NSLocalizedString("Text", comment: "")
  1203. item?.boxImagePosition = .imageOnly
  1204. item?.btnAction = #selector(changeAnnotationMode)
  1205. } else if identifier == KMToolbarToolDateIdentifier {
  1206. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignDate)
  1207. item?.target = self
  1208. item?.btnTag = CAnnotationType.signDate.rawValue
  1209. item?.toolTip = NSLocalizedString("Date", comment: "")
  1210. item?.boxImagePosition = .imageOnly
  1211. item?.btnAction = #selector(changeAnnotationMode)
  1212. } else if (identifier == KMToolbarToolProfileIdentifier) {
  1213. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignMyprofile)
  1214. item?.target = self
  1215. item?.toolTip = NSLocalizedString("My Profile", comment: "")
  1216. item?.boxImagePosition = .imageOnly
  1217. item?.btnAction = #selector(_itemAction)
  1218. }else if (identifier == KMToolbarFillSignSignatureIdentifier) {
  1219. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignMysignature)
  1220. item?.target = self
  1221. item?.btnTag = CAnnotationType.signSignature.rawValue
  1222. item?.toolTip = NSLocalizedString("Sign document by typing or drawing a signature", comment: "")
  1223. item?.boxImagePosition = .imageOnly
  1224. item?.btnAction = #selector(changeAnnotationMode)
  1225. }
  1226. }
  1227. private func _setupFormItem(_ item: KMToolbarItemView?) {
  1228. let identifier = item?.itemIdentifier
  1229. if identifier == KMToolbarToolTextFieldItemIdentifier {
  1230. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormTextfield)
  1231. item?.target = self
  1232. item?.btnTag = CAnnotationType.textField.rawValue
  1233. item?.toolTip = NSLocalizedString("Text Field", comment: "")
  1234. item?.titleName = NSLocalizedString("Text Field", comment: "")
  1235. item?.boxImagePosition = .imageLeft
  1236. item?.btnAction = #selector(changeAnnotationMode)
  1237. let menuItem = NSMenuItem.init(title: "TextField", action: #selector(changeAnnotationMode), target: self)
  1238. menuItem.tag = item!.btnTag
  1239. item?.menuFormRepresentation = menuItem
  1240. } else if identifier == KMToolbarToolCheckBoxItemIdentifier {
  1241. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormCheckbox)
  1242. item?.target = self
  1243. item?.btnTag = CAnnotationType.checkBox.rawValue
  1244. item?.toolTip = NSLocalizedString("Check Box", comment: "")
  1245. item?.titleName = NSLocalizedString("Check Box", comment: "")
  1246. item?.boxImagePosition = .imageLeft
  1247. item?.btnAction = #selector(changeAnnotationMode)
  1248. } else if identifier == KMToolbarToolRadioButtonItemIdentifier {
  1249. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormRadiobutton)
  1250. item?.target = self
  1251. item?.btnTag = CAnnotationType.radioButton.rawValue
  1252. item?.toolTip = NSLocalizedString("Radio Button", comment: "")
  1253. item?.titleName = NSLocalizedString("Radio Button", comment: "")
  1254. item?.boxImagePosition = .imageLeft
  1255. item?.btnAction = #selector(changeAnnotationMode)
  1256. let menuItem = NSMenuItem.init(title: "RadioButton", action: #selector(changeAnnotationMode), target: self)
  1257. menuItem.tag = item!.btnTag
  1258. item?.menuFormRepresentation = menuItem
  1259. } else if identifier == KMToolbarToolListBoxItemIdentifier {
  1260. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormListbox)
  1261. item?.target = self
  1262. item?.btnTag = CAnnotationType.listMenu.rawValue
  1263. item?.toolTip = NSLocalizedString("List Box", comment: "")
  1264. item?.titleName = NSLocalizedString("List Box", comment: "")
  1265. item?.boxImagePosition = .imageLeft
  1266. item?.btnAction = #selector(changeAnnotationMode)
  1267. let menuItem = NSMenuItem.init(title: "List Box", action: #selector(changeAnnotationMode), target: self)
  1268. menuItem.tag = item!.btnTag
  1269. item?.menuFormRepresentation = menuItem
  1270. } else if identifier == KMToolbarToolPullDownmenuItemIdentifier {
  1271. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormPulldownmenu)
  1272. item?.target = self
  1273. item?.btnTag = CAnnotationType.comboBox.rawValue
  1274. item?.toolTip = NSLocalizedString("Combo Box", comment: "")
  1275. item?.titleName = NSLocalizedString("Combo Box", comment: "")
  1276. item?.boxImagePosition = .imageLeft
  1277. item?.btnAction = #selector(changeAnnotationMode)
  1278. let menuItem = NSMenuItem.init(title: "PullDownmenu", action: #selector(changeAnnotationMode), target: self)
  1279. menuItem.tag = item!.btnTag
  1280. item?.menuFormRepresentation = menuItem
  1281. } else if identifier == KMToolbarToolButtonIdentifier {
  1282. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormButton)
  1283. item?.target = self
  1284. item?.btnTag = CAnnotationType.actionButton.rawValue
  1285. item?.toolTip = NSLocalizedString("Button", comment: "")
  1286. item?.titleName = NSLocalizedString("Button", comment: "")
  1287. item?.boxImagePosition = .imageLeft
  1288. item?.btnAction = #selector(changeAnnotationMode)
  1289. let menuItem = NSMenuItem.init(title: "Button", action: #selector(changeAnnotationMode), target: self)
  1290. menuItem.tag = item!.btnTag
  1291. item?.menuFormRepresentation = menuItem
  1292. } else if identifier == KMToolbarToolSignBoxIdentifier {
  1293. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormSign)
  1294. item?.target = self
  1295. item?.btnTag = CAnnotationType.signature.rawValue
  1296. item?.toolTip = NSLocalizedString("Signature", comment: "")
  1297. item?.titleName = NSLocalizedString("Signature", comment: "")
  1298. item?.boxImagePosition = .imageLeft
  1299. item?.btnAction = #selector(changeAnnotationMode)
  1300. let menuItem = NSMenuItem.init(title: "SignBox", action: #selector(changeAnnotationMode), target: self)
  1301. menuItem.tag = item!.btnTag
  1302. item?.menuFormRepresentation = menuItem
  1303. } else if identifier == KMToolbarToolFormAlignIdentifier {
  1304. item?.image = NSImage(named: KMImageNameUXIconPropertybarAlignLeftToor)
  1305. item?.target = self
  1306. item?.toolTip = NSLocalizedString("Alignment", comment: "")
  1307. item?.titleName = NSLocalizedString("Alignment", comment: "")
  1308. item?.boxImagePosition = .imageExpandLeft
  1309. item?.needExpandAction = true
  1310. item?.btnAction = #selector(formsAlignmentAction)
  1311. let menuItem = NSMenuItem.init(title: "Alignment", action: #selector(formsAlignmentAction), target: self)
  1312. let subMenu = NSMenu()
  1313. subMenu.addItem(title: NSLocalizedString("Align Left", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignLeftNor", action: #selector(_alignmentAction), target: self, tag: 0)
  1314. subMenu.addItem(title: NSLocalizedString("Align Vertically", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignVercenterNor", action: #selector(_alignmentAction), target: self, tag: 1)
  1315. subMenu.addItem(title: NSLocalizedString("Align Right", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignRightNor", action: #selector(_alignmentAction), target: self, tag: 2)
  1316. subMenu.addItem(NSMenuItem.separator())
  1317. subMenu.addItem(title: NSLocalizedString("Align Top", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignUpNor", action: #selector(_alignmentAction), target: self, tag: 3)
  1318. subMenu.addItem(title: NSLocalizedString("Align Horizontally", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignHorcenterNor", action: #selector(_alignmentAction), target: self, tag: 4)
  1319. subMenu.addItem(title: NSLocalizedString("Align Bottom", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignDownNor", action: #selector(_alignmentAction), target: self, tag: 5)
  1320. subMenu.addItem(NSMenuItem.separator())
  1321. subMenu.addItem(title: NSLocalizedString("Distribute Horizontally", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignHorsplitNor", action: #selector(_alignmentAction), target: self, tag: 6)
  1322. subMenu.addItem(title: NSLocalizedString("Distribute Vertically", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignVersplitNor", action: #selector(_alignmentAction), target: self, tag: 7)
  1323. menuItem.submenu = subMenu
  1324. menuItem.tag = item!.btnTag
  1325. item?.menuFormRepresentation = menuItem
  1326. } else if identifier == KMToolbarToolFormMoreIdentifier {
  1327. item?.image = NSImage(named: "KMImageNameMainToolFormMore")
  1328. item?.target = self
  1329. item?.toolTip = NSLocalizedString("More", comment: "")
  1330. item?.titleName = NSLocalizedString("More", comment: "")
  1331. item?.boxImagePosition = .imageExpandLeft
  1332. item?.btnAction = #selector(formsMoreOperationAction)
  1333. let menuItem = NSMenuItem.init(title: "More", action: #selector(formsMoreOperationAction), target: self)
  1334. menuItem.tag = item!.btnTag
  1335. item?.menuFormRepresentation = menuItem
  1336. }
  1337. }
  1338. private func _setupToolItem(_ item: KMToolbarItemView?) {
  1339. let identifier = item?.itemIdentifier
  1340. if identifier == KMToolbarToolCropItemIdentifier {
  1341. item?.image = NSImage(named: "KMImageNameMainToolsCrop")
  1342. item?.alternateImage = NSImage(named: "KMImageNameMainToolsCrop")
  1343. item?.target = self
  1344. item?.btnTag = KMToolbarType.crop.rawValue
  1345. item?.toolTip = NSLocalizedString("Crop pages", comment: "")
  1346. item?.titleName = NSLocalizedString("Crop", comment: "")
  1347. item?.boxImagePosition = .imageExpandLeft
  1348. item?.btnAction = #selector(cropMenuAction)
  1349. let menuItem = NSMenuItem.init(title: "Crop", action: #selector(cropMenuAction), target: self)
  1350. item?.menuFormRepresentation = menuItem
  1351. } else if identifier == KMToolbarComparisonItemIdentifier {
  1352. item?.image = NSImage(named: KMImageNameUXIconBatchComparison)
  1353. item?.target = self
  1354. item?.btnTag = KMToolbarType.comparison.rawValue
  1355. item?.toolTip = NSLocalizedString("Compare", comment: "")
  1356. item?.titleName = NSLocalizedString("Compare", comment: "")
  1357. item?.boxImagePosition = .imageExpandLeft
  1358. item?.btnAction = #selector(_itemAction)
  1359. let menuItem = NSMenuItem.init(title: "Bates Number", action: #selector(batesMenuAction), target: self)
  1360. let subMenu = NSMenu()
  1361. subMenu.addItem(title: NSLocalizedString("Side-by-Side View", comment: ""), action: #selector(_comparisonAction), target: self, tag: 1)
  1362. subMenu.addItem(title: NSLocalizedString("Compare by File Overlay", comment: ""), action: #selector(_comparisonAction), target: self, tag: 2)
  1363. menuItem.submenu = subMenu
  1364. item?.menuFormRepresentation = menuItem
  1365. } else if identifier == KMToolbarToolBatesItemIdentifier {
  1366. item?.image = NSImage(named: "KMImageNameUXIconBatchBatesNor")
  1367. item?.target = self
  1368. item?.btnTag = KMToolbarType.bates.rawValue
  1369. item?.toolTip = NSLocalizedString("Add PDF Bates numbering to your legal, medical, or business documents", comment: "")
  1370. item?.titleName = NSLocalizedString("Bates Number", comment: "")
  1371. item?.boxImagePosition = .imageExpandLeft
  1372. item?.needExpandAction = true
  1373. item?.btnAction = #selector(batesMenuAction)
  1374. let menuItem = NSMenuItem.init(title: "Bates Number", action: #selector(batesMenuAction), target: self)
  1375. let subMenu = NSMenu()
  1376. subMenu.addItem(title: NSLocalizedString("Add Bates Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 1)
  1377. subMenu.addItem(title: NSLocalizedString("Remove Bates Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 2)
  1378. subMenu.addItem(title: NSLocalizedString("Batch Add Batch Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 3)
  1379. subMenu.addItem(title: NSLocalizedString("Batch Remove Bates Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 4)
  1380. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_batesAction), target: self, tag: 5)
  1381. menuItem.submenu = subMenu
  1382. item?.menuFormRepresentation = menuItem
  1383. } else if identifier == KMToolbarToolHeaderFooterItemIdentifier {
  1384. item?.image = NSImage(named: "KMImageNameUXIconBatchHeaderandfooterNor")
  1385. item?.target = self
  1386. item?.btnTag = KMToolbarType.headerAndFooter.rawValue
  1387. item?.toolTip = NSLocalizedString("Insert header, footer, and page numbers to PDF", comment: "")
  1388. item?.titleName = NSLocalizedString("Header & Footer", comment: "")
  1389. item?.boxImagePosition = .imageExpandLeft
  1390. item?.needExpandAction = true
  1391. item?.btnAction = #selector(headerfooterMenuAction)
  1392. let menuItem = NSMenuItem.init(title: "Header & Footer", action: #selector(headerfooterMenuAction), target: self)
  1393. let subMenu = NSMenu()
  1394. subMenu.addItem(title: NSLocalizedString("Add Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 1)
  1395. subMenu.addItem(title: NSLocalizedString("Remove Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 2)
  1396. subMenu.addItem(title: NSLocalizedString("Batch Add Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 3)
  1397. subMenu.addItem(title: NSLocalizedString("Batch Remove Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 4)
  1398. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 5)
  1399. menuItem.submenu = subMenu
  1400. item?.menuFormRepresentation = menuItem
  1401. } else if identifier == KMToolbarToolBackgroundItemIdentifier {
  1402. item?.image = NSImage(named: "KMImageNameUXIconBatchBackgroundNor")
  1403. item?.target = self
  1404. item?.btnTag = KMToolbarType.background.rawValue
  1405. item?.toolTip = NSLocalizedString("Insert PDF page background by color or image", comment: "")
  1406. item?.titleName = NSLocalizedString("Backgroud", comment: "")
  1407. item?.boxImagePosition = .imageExpandLeft
  1408. item?.needExpandAction = true
  1409. item?.btnAction = #selector(backgroundMenuAction)
  1410. let menuItem = NSMenuItem.init(title: "Backgroud", action: #selector(backgroundMenuAction), target: self)
  1411. let subMenu = NSMenu()
  1412. subMenu.addItem(title: NSLocalizedString("Add Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 1)
  1413. subMenu.addItem(title: NSLocalizedString("Remove Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 2)
  1414. subMenu.addItem(title: NSLocalizedString("Batch Add Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 3)
  1415. subMenu.addItem(title: NSLocalizedString("Batch Remove Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 4)
  1416. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_backgroundAction), target: self, tag: 5)
  1417. menuItem.submenu = subMenu
  1418. item?.menuFormRepresentation = menuItem
  1419. } else if identifier == KMToolbarToolWatermarkItemIdentifier {
  1420. item?.image = NSImage(named: "KMImageNameMainToolsWatermark")
  1421. item?.target = self
  1422. item?.btnTag = KMToolbarType.watermark.rawValue
  1423. item?.toolTip = NSLocalizedString("Watermark", comment: "")
  1424. item?.titleName = NSLocalizedString("Watermark", comment: "")
  1425. item?.boxImagePosition = .imageExpandLeft
  1426. item?.needExpandAction = true
  1427. item?.btnAction = #selector(watermarkMenuAction)
  1428. let menuItem = NSMenuItem.init(title: "Watermark", action: #selector(watermarkMenuAction), target: self)
  1429. let subMenu = NSMenu()
  1430. subMenu.addItem(title: NSLocalizedString("Add Watermark", comment: ""), action: #selector(_watermarkAction), target: self, tag: 1)
  1431. subMenu.addItem(title: NSLocalizedString("Remove Watermark", comment: ""), action: #selector(_watermarkAction), target: self, tag: 2)
  1432. subMenu.addItem(title: NSLocalizedString("Batch Add Watermarks", comment: ""), action: #selector(_watermarkAction), target: self, tag: 3)
  1433. subMenu.addItem(title: NSLocalizedString("Batch Remove Watermarks", comment: ""), action: #selector(_watermarkAction), target: self, tag: 4)
  1434. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_watermarkAction), target: self, tag: 5)
  1435. menuItem.submenu = subMenu
  1436. item?.menuFormRepresentation = menuItem
  1437. } else if identifier == KMToolbarToolCompressItemIdentifier {
  1438. item?.image = NSImage(named: "KMImageNameUXIconBatchOptimizeNor")
  1439. item?.target = self
  1440. item?.btnTag = KMToolbarType.compress.rawValue
  1441. item?.boxImagePosition = .imageLeft
  1442. item?.toolTip = NSLocalizedString("Reduce file size", comment: "")
  1443. item?.titleName = NSLocalizedString("Compress", comment: "")
  1444. item?.btnAction = #selector(compressMenuAction)
  1445. } else if identifier == KMToolbarToolSecureItemIdentifier {
  1446. item?.image = NSImage(named: "KMImageNameUXIconBatchSafeNor")
  1447. item?.target = self
  1448. item?.toolTip = NSLocalizedString("Batch encrypting PDF documents", comment: "")
  1449. item?.titleName = NSLocalizedString("Security", comment: "")
  1450. item?.boxImagePosition = .imageExpandLeft
  1451. item?.needExpandAction = true
  1452. item?.btnAction = #selector(secureMenuAction)
  1453. let menuItem = NSMenuItem.init(title: "Security", action: #selector(secureMenuAction), target: self)
  1454. menuItem.tag = item!.btnTag
  1455. item?.menuFormRepresentation = menuItem
  1456. }else if identifier == KMToolbarToolMergeItemIdentifier {
  1457. item?.image = NSImage(named: "KMImageNameUXIconBatchMergeNor")
  1458. item?.target = self
  1459. item?.btnTag = KMToolbarType.merge.rawValue
  1460. item?.toolTip = NSLocalizedString("Combine multiple documents into a new PDF, or borrow individual pages", comment: "")
  1461. item?.titleName = NSLocalizedString("Merge", comment: "")
  1462. item?.boxImagePosition = .imageLeft
  1463. item?.btnAction = #selector(mergeMenuItemAction)
  1464. }
  1465. }
  1466. }