KMToolbarViewController.swift 166 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911
  1. //
  2. // KMToolbarViewController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by lxy on 2022/12/2.
  6. //
  7. import Cocoa
  8. @objc enum KMToolbarViewType : Int {
  9. case None
  10. case Main
  11. case Annatiton
  12. case Page
  13. case Conversion
  14. case ScanOCR
  15. case editPDF
  16. case Form
  17. case FillSign
  18. case Tool
  19. case redact
  20. case Move
  21. case Magnify
  22. case Select
  23. case SelectZoom
  24. case LeftPanel
  25. case RightPanel
  26. case viewSetting
  27. case sign
  28. case AITools
  29. func isToolMode() -> Bool {
  30. return (self == .Move || self == .Magnify || self == .Select || self == .SelectZoom)
  31. }
  32. func itemIdentifier() -> String {
  33. if (self == .Annatiton) {
  34. return KMDocumentAnnotationToolbarItemIdentifier
  35. } else if (self == .Page) {
  36. return KMDocumentPageToolbarItemIdentifier
  37. } else if (self == .Conversion) {
  38. return KMDocumentConversonToolbarItemIdentifier
  39. } else if (self == .ScanOCR) {
  40. return KMDocumentScanOCRToolbarItemIdentifier
  41. } else if (self == .editPDF) {
  42. return KMDocumentEditToolbarItemIdentifier
  43. } else if (self == .Form) {
  44. return KMDocumentFormToolbarItemIdentifier
  45. } else if (self == .FillSign) {
  46. return KMDocumentFillSginToolbarItemIdentifier
  47. } else if (self == .Tool) {
  48. return KMDocumentToolToolbarItemIdentifier
  49. } else if (self == .Move) {
  50. return KMToolbarMoveToolModeItemIdentifier
  51. } else if (self == .Magnify) {
  52. return KMToolbarMagnifyToolModeItemIdentifier
  53. } else if (self == .Select) {
  54. return KMToolbarSelectToolModeItemIdentifier
  55. } else if (self == .SelectZoom) {
  56. return KMToolbarZoomToSelectionItemIdentifier
  57. } else if (self == .LeftPanel) {
  58. return KMLeftControlToolbarItemIdentifier
  59. } else if (self == .RightPanel) {
  60. return KMRightControlToolbarItemIdentifier
  61. } else if (self == .AITools) {
  62. return KMDocumentAIToolsToolbarItemIdentifier
  63. }
  64. return ""
  65. }
  66. }
  67. @objc enum KMToolbarType: Int {
  68. /// conversion
  69. case word = 3000
  70. case excel = 3001
  71. case ppt = 3002
  72. case rtf = 3003
  73. case csv = 3004
  74. case html = 3005
  75. case conversion_text = 3006
  76. case conversion_image = 3007
  77. case conversion_imageToPDF = 3008
  78. case conversion_other = 3009
  79. case json = 3010
  80. /// tool
  81. case compress = 8000
  82. case merge = 8001
  83. case fileCompare = 8002
  84. case secure = 8003
  85. case redact = 8004
  86. case watermark = 8005
  87. case background = 8006
  88. case headerAndFooter = 8007
  89. case bates = 8008
  90. case crop = 8009
  91. case comparison = 8010
  92. case aiTools = 8011
  93. case measure = 8012
  94. }
  95. @objc protocol KMToolbarViewControllerDelegate {
  96. @objc optional func changeAnnotationModeAction(item:KMToolbarClickButton)
  97. @objc optional func showPDFLayoutModeAction(show:Bool)
  98. @objc optional func changePDFViewZoomInAction()
  99. @objc optional func changePDFViewZoomOutAction()
  100. @objc optional func changePDFViewGotoNextPageAction()
  101. @objc optional func changePDFViewGoToPreviousPageAction()
  102. @objc optional func changePDFViewGotoBackAction()
  103. @objc optional func changePDFViewGoToForwardAction()
  104. @objc optional func aiTranslationPDFFileAction()
  105. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, zoomSting : String)
  106. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, zoomModel selectedTag:Int)
  107. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, shareAction toolbarItem: KMToolbarItemView)
  108. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, shareDocument item:NSMenuItem)
  109. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, shareFlatten item:NSMenuItem)
  110. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, shareOriginalPDF item:NSMenuItem)
  111. @objc optional func toolbarViewController(_ viewController: KMToolbarViewController, clickMode toolMode: KMToolbarViewType, toolbar toolbarItem: KMToolbarItemView, _ pages: [Int])
  112. @objc optional func toolbarViewController(_ viewController: KMToolbarViewController, clickChaildToolType: KMToolbarType, toolbar toolbarItem: KMToolbarItemView)
  113. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, scanOCRModel selectedTag:Int)
  114. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, itemDidClick toolbarItem: KMToolbarItemView)
  115. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, searchAction searchString: String, forward: Bool)
  116. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, findSearchAction searchString: String, forward: Bool)
  117. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, menuItemDidClick toolbarItem: KMToolbarItemView, index: Int, info: Any?)
  118. @objc optional func toolbarViewController(_ viewController:KMToolbarViewController, viewItemDidClick toolbarItem: KMToolbarItemView, index: Int, info: Any?)
  119. }
  120. class KMToolbarViewController: NSViewController, NSTextFieldDelegate {
  121. var toolbar : KMToolbarView?
  122. var toolbarType : KMToolbarViewType = KMToolbarViewType.None
  123. var toolbarItems : [String : Any] = [:]
  124. @IBOutlet weak var mainWindowController : MainWindowController!
  125. open weak var delegate: KMToolbarViewControllerDelegate?
  126. @IBOutlet var zoomButton: NSPopUpButton!
  127. @IBOutlet var zoomView: NSView!
  128. @IBOutlet weak var zoomTextField: NSTextField!
  129. var searchField: NSSearchField = NSSearchField()
  130. weak var pdfView: CPDFListView?
  131. var shareButton = KMToolbarClickButton()
  132. private var bottomLine = NSView()
  133. // 是否显示所有注释
  134. var isShowAllAnnotations = true
  135. var ignoreCurrentAnnotationTypeChange = false
  136. private var _currentItemView: KMToolbarItemView?
  137. lazy var rightItemView: KMToolbarItemView = {
  138. let item = KMToolbarCustomItemView(itemIdentifier: KMToolbarAnnotationSettingItemIdentifier)
  139. item.image = NSImage(named: "KMImageNameUXIconBtnSetNor")
  140. item.target = self
  141. item.isShowCustomToolTip = true
  142. item.toolTip = String(format: "%@\n%@", NSLocalizedString("Customize Toolbar", comment: ""),NSLocalizedString("Drag-and-drop tools to change their order", comment: ""))
  143. item.isPopToolTip = true
  144. item.titleName = NSLocalizedString("Setting", comment: "")
  145. item.boxImagePosition = .imageOnly
  146. item.btnAction = #selector(_itemAction)
  147. item.selectBackgroundType = .imageBox
  148. return item
  149. }()
  150. override func viewDidLoad() {
  151. super.viewDidLoad()
  152. self.zoomTextField.delegate = self
  153. for item in self.zoomButton.itemArray {
  154. let string = item.title
  155. item.title = NSLocalizedString(string, comment: "")
  156. }
  157. NotificationCenter.default.addObserver(self, selector: #selector(listViewAnnotationTypeChangeNotification), name: Notification.Name("CPDFListViewAnnotationTypeChangeNotification"), object: nil)
  158. NotificationCenter.default.addObserver(self, selector: #selector(listViewAnnotationTypeChangeNotification), name: Notification.Name("CPDFListViewToolModeChangeNotification"), object: nil)
  159. }
  160. override func loadView() {
  161. super.loadView()
  162. self.toolbar = KMToolbarView.init(identifier: "KMToolbar_New")
  163. self.toolbar?.frame = self.view.bounds
  164. self.toolbar?.autoresizingMask = [.width,.height]
  165. self.toolbar?.delegate = self
  166. self.view.addSubview(self.toolbar!)
  167. self.view.addSubview(self.bottomLine)
  168. self.bottomLine.frame = NSMakeRect(0, 0, NSWidth(self.view.bounds), 1)
  169. self.bottomLine.autoresizingMask = [.width]
  170. self.bottomLine.wantsLayer = true
  171. self.bottomLine.layer?.backgroundColor = NSColor.km_init(hex: "#0000001A").cgColor
  172. self.view.addSubview(self.rightItemView)
  173. let wh: CGFloat = 28
  174. self.rightItemView.frame = NSRect(x: NSWidth(self.view.frame)-wh-8, y: (NSHeight(self.view.frame)-wh)*0.5, width: wh, height: wh)
  175. self.rightItemView.autoresizingMask = [.minXMargin]
  176. self.rightItemView.isHidden = true
  177. }
  178. func updateType(newType:KMToolbarViewType) {
  179. if newType != toolbarType {
  180. toolbarType = newType
  181. if self.toolbar != nil && self.toolbar?.superview != nil {
  182. self.toolbar?.removeFromSuperview()
  183. }
  184. self.toolbar = KMToolbarView.init(identifier: "KMToolbar_New")
  185. self.toolbar?.frame = self.view.bounds
  186. self.toolbar?.autoresizingMask = [.width,.height]
  187. self.toolbar?.delegate = self
  188. self.view.addSubview(self.toolbar!)
  189. }
  190. }
  191. func reloadateToolbar() -> Void {
  192. self.toolbar?.reloadData()
  193. }
  194. func resetToolbar() -> Void {
  195. for item in self.toolbar?.items ?? [] {
  196. item.isSelected = false
  197. }
  198. }
  199. // MARK: Action
  200. @IBAction func changeAnnotationMode(item: KMToolbarClickButton) {
  201. self.delegate?.changeAnnotationModeAction?(item: item)
  202. if item.isKind(of: KMToolbarClickButton.self) {
  203. self._itemSetPromptFlag(item: item.clickObject as? KMToolbarItemView)
  204. } else {
  205. }
  206. }
  207. @IBAction func leftControllButtonAction(item: KMToolbarClickButton) {
  208. let tag = KMToolbarViewType(rawValue: item.tag) ?? .None
  209. if tag == .editPDF {
  210. if IAPProductsManager.default().isAvailableAllFunction() == false {
  211. KMPreference.shared.openDocumentType = .newWindow
  212. let winC = KMPurchaseCompareWindowController.sharedInstance()
  213. winC?.kEventName = "Reading_EditPDF_BuyNow"
  214. winC?.showWindow(nil)
  215. return
  216. }
  217. let allowsPrinting = self.pdfView?.document?.allowsPrinting ?? false
  218. let allowsCopying = self.pdfView?.document?.allowsCopying ?? false
  219. if !allowsPrinting || !allowsCopying {
  220. let alert = NSAlert()
  221. alert.alertStyle = .critical
  222. alert.messageText = NSLocalizedString("This is a secured document. Editing is not permitted.", comment: "")
  223. alert.runModal()
  224. return
  225. }
  226. Task { @MainActor in
  227. self.delegate?.toolbarViewController?(self, clickMode: tag, toolbar: item.clickObject as! KMToolbarItemView, [])
  228. }
  229. } else {
  230. self.delegate?.toolbarViewController?(self, clickMode: tag, toolbar: item.clickObject as! KMToolbarItemView, [])
  231. }
  232. self._itemSetPromptFlag(item: item.clickObject as? KMToolbarItemView)
  233. }
  234. @objc private func _itemAction(_ item: KMToolbarClickButton) {
  235. if item.clickObject?.itemIdentifier == KMAnnotationImageToolbarItemIdentifier || item.clickObject?.itemIdentifier == KMAnnotationTableToolbarItemIdentifier {
  236. self.pdfView?.toolMode = .textToolMode
  237. self.pdfView?.annotationType = .unkown
  238. }
  239. if let data = item.clickObject as? KMToolbarItemView {
  240. if data.itemIdentifier == KMToolbarComparisonItemIdentifier {
  241. self._currentItemView = data
  242. if let subMenu = data.menuFormRepresentation?.submenu {
  243. subMenu.popUp(positioning: nil, at: item.frame.origin, in: item.superview)
  244. }
  245. return
  246. }
  247. }
  248. if let itemView = item.clickObject as? KMToolbarItemView {
  249. if itemView.itemIdentifier == KMDocumentRedactToolbarItemIdentifier {
  250. self.delegate?.toolbarViewController?(self, clickMode: .redact, toolbar: itemView, [])
  251. } else {
  252. self.delegate?.toolbarViewController?(self, itemDidClick: itemView)
  253. }
  254. self._itemSetPromptFlag(item: itemView)
  255. }
  256. }
  257. @objc private func OCRbtnAction1(_ item: KMToolbarClickButton) {
  258. FMTrackEventManager.defaultManager.trackEvent(event: "Tbr", withProperties: ["Tbr_Btn": "Btn_Tbr_OCR"])
  259. self._itemAction(item)
  260. }
  261. @objc private func OCRbtnAction2(_ item: KMToolbarClickButton) {
  262. FMTrackEventManager.defaultManager.trackEvent(event: "SubTbr_Converter", withProperties: ["SubTbr_Btn": "Btn_SubTbr_Converter_OCR"])
  263. self._itemAction(item)
  264. }
  265. @objc private func _menuItemAction(_ item: NSMenuItem) {
  266. guard let itemId = item.representedObject as? String else {
  267. NSSound.beep()
  268. return
  269. }
  270. if itemId == KMDocumentConversonToolbarItemIdentifier {
  271. let item_ = self.toolbarItemFindItemIdentifiers(value: itemId)
  272. self.leftControllButtonAction(item: item_.clickButton)
  273. self._itemSetPromptFlag(item: item_)
  274. } else if itemId == KMDocumentRedactToolbarItemIdentifier {
  275. let item_ = self.toolbarItemFindItemIdentifiers(value: itemId)
  276. self._itemAction(item_.clickButton)
  277. self._itemSetPromptFlag(item: item_)
  278. } else if itemId == KMDocumentAnnotationToolbarItemIdentifier {
  279. let item_ = self.toolbarItemFindItemIdentifiers(value: itemId)
  280. self.leftControllButtonAction(item: item_.clickButton)
  281. self._itemSetPromptFlag(item: item_)
  282. } else if itemId == KMDocumentPageToolbarItemIdentifier {
  283. let item_ = self.toolbarItemFindItemIdentifiers(value: itemId)
  284. self.leftControllButtonAction(item: item_.clickButton)
  285. self._itemSetPromptFlag(item: item_)
  286. } else if itemId == KMDocumentToolToolbarItemIdentifier {
  287. let item_ = self.toolbarItemFindItemIdentifiers(value: itemId)
  288. self.leftControllButtonAction(item: item_.clickButton)
  289. self._itemSetPromptFlag(item: item_)
  290. } else if itemId == KMDocumentPresentationToolbarItemIdentifier {
  291. let item_ = self.toolbarItemFindItemIdentifiers(value: itemId)
  292. self._itemAction(item_.clickButton)
  293. self._itemSetPromptFlag(item: item_)
  294. } else {
  295. let item_ = self.toolbarItemFindItemIdentifiers(value: itemId)
  296. self.delegate?.toolbarViewController?(self, menuItemDidClick: item_, index: item.tag, info: nil)
  297. self._itemSetPromptFlag(item: item_)
  298. }
  299. }
  300. @objc private func _comparisonAction(sender: NSMenuItem) {
  301. if let data = self._currentItemView {
  302. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  303. } else {
  304. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarComparisonItemIdentifier), index: sender.tag, info: nil)
  305. }
  306. self._itemSetPromptFlag(itemIdentifier: KMToolbarComparisonItemIdentifier)
  307. }
  308. @IBAction func showPDFLayoutMode(sender: KMToolbarClickButton) {
  309. if let item = sender.clickObject as? KMToolbarItemView {
  310. item.isSelected = !item.isSelected
  311. self.delegate?.showPDFLayoutModeAction?(show: true)
  312. self._itemSetPromptFlag(item: item)
  313. }
  314. }
  315. @objc func cropMenuAction(item: KMToolbarItemView) {
  316. self.delegate?.toolbarViewController?(self, clickChaildToolType: .crop, toolbar: item)
  317. }
  318. @objc private func _cropAction(_ sender: NSMenuItem) {
  319. if let data = self._currentItemView {
  320. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  321. } else {
  322. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarCropIdentifier), index: sender.tag, info: nil)
  323. }
  324. self._itemSetPromptFlag(itemIdentifier: KMToolbarCropIdentifier)
  325. }
  326. @objc func batesMenuAction(sender: KMToolbarClickButton) {
  327. self._currentItemView = sender.clickObject as? KMToolbarItemView
  328. if let subMenu = (sender.clickObject as? KMToolbarItemView)?.menuFormRepresentation?.submenu {
  329. subMenu.popUp(positioning: nil, at: sender.frame.origin, in: sender.superview)
  330. }
  331. }
  332. @objc private func _batesAction(sender: NSMenuItem) {
  333. if let data = self._currentItemView {
  334. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  335. } else {
  336. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarToolBatesItemIdentifier), index: sender.tag, info: nil)
  337. }
  338. self._itemSetPromptFlag(itemIdentifier: KMToolbarToolBatesItemIdentifier)
  339. }
  340. @objc private func _AIAction(sender: NSMenuItem) {
  341. if let data = self._currentItemView {
  342. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  343. } else {
  344. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarAIItemIdentifier), index: sender.tag, info: nil)
  345. }
  346. self._itemSetPromptFlag(itemIdentifier: KMToolbarToolBatesItemIdentifier)
  347. }
  348. @objc func headerfooterMenuAction(sender: KMToolbarClickButton) {
  349. self._currentItemView = sender.clickObject as? KMToolbarItemView
  350. if let subMenu = (sender.clickObject as? KMToolbarItemView)?.menuFormRepresentation?.submenu {
  351. subMenu.popUp(positioning: nil, at: sender.frame.origin, in: sender.superview)
  352. }
  353. }
  354. @objc private func _headerfooterAction(sender: NSMenuItem) {
  355. if let data = self._currentItemView {
  356. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  357. } else {
  358. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarToolHeaderFooterItemIdentifier), index: sender.tag, info: nil)
  359. }
  360. self._itemSetPromptFlag(itemIdentifier: KMToolbarToolHeaderFooterItemIdentifier)
  361. }
  362. @objc func backgroundMenuAction(sender: KMToolbarClickButton) {
  363. self._currentItemView = sender.clickObject as? KMToolbarItemView
  364. if let subMenu = (sender.clickObject as? KMToolbarItemView)?.menuFormRepresentation?.submenu {
  365. subMenu.popUp(positioning: nil, at: sender.frame.origin, in: sender.superview)
  366. }
  367. }
  368. @objc private func _backgroundAction(sender: NSMenuItem) {
  369. if let data = self._currentItemView {
  370. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  371. } else {
  372. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarToolBackgroundItemIdentifier), index: sender.tag, info: nil)
  373. }
  374. self._itemSetPromptFlag(itemIdentifier: KMToolbarToolBackgroundItemIdentifier)
  375. }
  376. @objc func watermarkMenuAction(sender: KMToolbarClickButton) {
  377. self._currentItemView = sender.clickObject as? KMToolbarItemView
  378. if let subMenu = (sender.clickObject as? KMToolbarItemView)?.menuFormRepresentation?.submenu {
  379. subMenu.popUp(positioning: nil, at: sender.frame.origin, in: sender.superview)
  380. }
  381. }
  382. @objc private func _watermarkAction(sender: NSMenuItem) {
  383. if let data = self._currentItemView {
  384. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  385. } else {
  386. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarToolWatermarkItemIdentifier), index: sender.tag, info: nil)
  387. }
  388. self._itemSetPromptFlag(itemIdentifier: KMToolbarToolWatermarkItemIdentifier)
  389. }
  390. @objc func redactMenuAction(sender: KMToolbarClickButton) {
  391. self.delegate?.toolbarViewController?(self, clickChaildToolType: .redact, toolbar: sender.clickObject as! KMToolbarItemView)
  392. self._itemSetPromptFlag(item: sender.clickObject as? KMToolbarItemView)
  393. }
  394. @objc func compressMenuAction(sender: KMToolbarClickButton) {
  395. self.delegate?.toolbarViewController?(self, clickChaildToolType: .compress, toolbar: sender.clickObject as! KMToolbarItemView)
  396. self._itemSetPromptFlag(item: sender.clickObject as? KMToolbarItemView)
  397. }
  398. @objc func secureMenuAction(sender: KMToolbarClickButton) {
  399. self.delegate?.toolbarViewController?(self, clickChaildToolType: .secure, toolbar: sender.clickObject as! KMToolbarItemView)
  400. self._itemSetPromptFlag(item: sender.clickObject as? KMToolbarItemView)
  401. }
  402. @objc private func _secureAction(sender: NSMenuItem) {
  403. if let data = self._currentItemView {
  404. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  405. } else {
  406. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarToolSecureItemIdentifier), index: sender.tag, info: nil)
  407. }
  408. self._itemSetPromptFlag(itemIdentifier: KMToolbarToolSecureItemIdentifier)
  409. }
  410. @objc func measureMenuAction(sender: KMToolbarClickButton) {
  411. self.delegate?.toolbarViewController?(self, clickChaildToolType: .measure, toolbar: sender.clickObject as! KMToolbarItemView)
  412. self._itemSetPromptFlag(item: sender.clickObject as? KMToolbarItemView)
  413. }
  414. @objc private func _measureAction(sender: NSMenuItem) {
  415. if let data = self._currentItemView {
  416. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  417. } else {
  418. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarMeasureItemIdentifier), index: sender.tag, info: nil)
  419. }
  420. self._itemSetPromptFlag(itemIdentifier: KMToolbarMeasureItemIdentifier)
  421. }
  422. @objc func conversionMenuItemAction(sender: KMToolbarClickButton) {
  423. if let item: KMToolbarItemView = sender.clickObject as? KMToolbarItemView {
  424. var type: KMToolbarType = .word
  425. if (item.btnTag == KMToolbarType.excel.rawValue) {
  426. type = .excel
  427. } else if (item.btnTag == KMToolbarType.ppt.rawValue) {
  428. type = .ppt
  429. } else if (item.btnTag == KMToolbarType.rtf.rawValue) {
  430. type = .rtf
  431. } else if (item.btnTag == KMToolbarType.csv.rawValue) {
  432. type = .csv
  433. } else if (item.btnTag == KMToolbarType.html.rawValue) {
  434. type = .html
  435. } else if (item.btnTag == KMToolbarType.conversion_text.rawValue) {
  436. type = .conversion_text
  437. } else if (item.btnTag == KMToolbarType.conversion_image.rawValue) {
  438. type = .conversion_image
  439. } else if (item.btnTag == KMToolbarType.conversion_imageToPDF.rawValue) {
  440. type = .conversion_imageToPDF
  441. }
  442. self.delegate?.toolbarViewController?(self, clickChaildToolType: type, toolbar: item)
  443. self._itemSetPromptFlag(item: item)
  444. }
  445. }
  446. @objc private func _pdfToImageAction(sender: NSMenuItem) {
  447. if let data = self._currentItemView {
  448. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  449. } else {
  450. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarConversionImageItemIdentifier), index: sender.tag, info: nil)
  451. }
  452. self._itemSetPromptFlag(itemIdentifier: KMToolbarConversionImageItemIdentifier)
  453. }
  454. @objc private func _exportImageAction(sender: NSMenuItem) {
  455. if let data = self._currentItemView {
  456. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  457. } else {
  458. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarConversionExportImageItemIdentifier), index: sender.tag, info: nil)
  459. }
  460. self._itemSetPromptFlag(itemIdentifier: KMToolbarConversionExportImageItemIdentifier)
  461. }
  462. @objc private func _newPDFAction(sender: NSMenuItem) {
  463. if let data = self._currentItemView {
  464. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  465. } else {
  466. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarConversionCreatePDFItemIdentifier), index: sender.tag, info: nil)
  467. }
  468. self._itemSetPromptFlag(itemIdentifier: KMToolbarConversionCreatePDFItemIdentifier)
  469. }
  470. @IBAction func zoomModelSelectButtonAction(_ sender: NSPopUpButton) {
  471. self.delegate?.toolbarViewController?(self, zoomModel: sender.selectedTag())
  472. for item in sender.itemArray {
  473. item.state = .off
  474. }
  475. sender.selectedItem?.state = .on
  476. }
  477. @IBAction func zoomPDFViewButtonAction(sender:KMToolbarClickButton) {
  478. if sender.tag == 0 {
  479. self.delegate?.changePDFViewZoomOutAction?()
  480. } else if sender.tag == 1 {
  481. self.delegate?.changePDFViewZoomInAction?()
  482. } else if sender.tag == 2 {
  483. self.delegate?.changePDFViewGotoBackAction?()
  484. } else if sender.tag == 3 {
  485. self.delegate?.changePDFViewGoToForwardAction?()
  486. }
  487. }
  488. @IBAction func aiTranslationButtonAction(sender:KMToolbarClickButton) {
  489. self.delegate?.aiTranslationPDFFileAction?()
  490. }
  491. @IBAction func shareButtonAction(sender:KMToolbarClickButton) {
  492. self.shareButton = sender
  493. let menu = NSMenu()
  494. menu.addItem(withTitle: NSLocalizedString("Document", comment: ""), action: #selector(shareViaWithDocument), target: self)
  495. menu.addItem(withTitle: NSLocalizedString("Flattened Copy", comment: ""), action: #selector(shareViaWithFlatten), target: self)
  496. menu.addItem(withTitle: NSLocalizedString("Original PDF", comment: ""), action: #selector(shareViaWithOriginalPDF), target: self)
  497. menu.popUp(positioning: nil, at: NSPoint(x: sender.frame.origin.x, y: sender.frame.origin.y-10), in: sender.superview)
  498. self.delegate?.toolbarViewController?(self, shareAction: sender.clickObject as! KMToolbarItemView)
  499. }
  500. @IBAction func shareViaWithDocument(sender:NSMenuItem) {
  501. self.delegate?.toolbarViewController?(self, shareDocument: sender)
  502. }
  503. @IBAction func shareViaWithFlatten(sender:NSMenuItem) {
  504. self.delegate?.toolbarViewController?(self, shareFlatten: sender)
  505. }
  506. @IBAction func shareViaWithOriginalPDF(sender:NSMenuItem) {
  507. self.delegate?.toolbarViewController?(self, shareOriginalPDF: sender)
  508. }
  509. @objc func mergeMenuItemAction(sender: KMToolbarClickButton) {
  510. self.delegate?.toolbarViewController?(self, clickChaildToolType: .merge, toolbar: sender.clickObject as! KMToolbarItemView)
  511. }
  512. @IBAction func scanOCRModelSelect(sender:KMToolbarClickButton) {
  513. self.delegate?.toolbarViewController?(self, scanOCRModel: sender.tag)
  514. }
  515. // Form 对齐
  516. @IBAction func formsAlignmentAction(sender:KMToolbarClickButton) {
  517. if sender.tag == 0 {
  518. self.pdfView?.formsAnnotationAlign(.left)
  519. } else if sender.tag == 1 {
  520. self.pdfView?.formsAnnotationAlign(.vertical)
  521. } else if sender.tag == 2 {
  522. self.pdfView?.formsAnnotationAlign(.right)
  523. } else if sender.tag == 3 {
  524. self.pdfView?.formsAnnotationAlign(.top)
  525. } else if sender.tag == 4 {
  526. self.pdfView?.formsAnnotationAlign(.horizontally)
  527. } else if sender.tag == 5 {
  528. self.pdfView?.formsAnnotationAlign(.bottom)
  529. } else if sender.tag == 6 {
  530. self.pdfView?.formsAnnotationAlign(.disHorizontally)
  531. } else if sender.tag == 7 {
  532. self.pdfView?.formsAnnotationAlign(.disVertical)
  533. }
  534. }
  535. @objc private func _alignmentAction(sender: NSMenuItem) {
  536. if let data = self._currentItemView {
  537. self.delegate?.toolbarViewController?(self, menuItemDidClick: data, index: sender.tag, info: nil)
  538. } else {
  539. self.delegate?.toolbarViewController?(self, menuItemDidClick: self.toolbarItemFindItemIdentifiers(value: KMToolbarToolFormAlignIdentifier), index: sender.tag, info: nil)
  540. }
  541. }
  542. // Form 更多操作
  543. @IBAction func formsMoreOperationAction(sender:KMToolbarClickButton) {
  544. }
  545. func toolbarItemFindItemIdentifiers(value : String) -> KMToolbarItemView{
  546. for item in self.toolbarItems {
  547. if item.key == value {
  548. return item.value as! KMToolbarItemView
  549. }
  550. }
  551. return KMToolbarItemView()
  552. }
  553. func controlTextDidEndEditing(_ obj: Notification) {
  554. let textField = obj.object as? NSTextField
  555. if textField == self.zoomTextField {
  556. self.delegate?.toolbarViewController?(self, zoomSting: self.zoomTextField.stringValue)
  557. }
  558. }
  559. func controlTextDidChange(_ obj: Notification) {
  560. }
  561. func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {
  562. switch commandSelector {
  563. case #selector(NSResponder.insertNewline(_:)):
  564. if let inputView = control as? NSTextField {
  565. // //当当前TextField按下enter
  566. if inputView == zoomTextField {
  567. KMPrint("按下 enter")
  568. self.delegate?.toolbarViewController?(self, zoomSting: self.zoomTextField.stringValue)
  569. } else if let _ = control as? NSSearchField {
  570. self.searchPDFKey(control.stringValue)
  571. }
  572. }
  573. return true
  574. default:
  575. return false
  576. }
  577. }
  578. // MARK: - Private Methods
  579. private func _itemSetPromptFlag(item: KMToolbarItemView?) {
  580. if let item_ = item {
  581. if let identifier = item_.promptIdentifier {
  582. item?.isShowPrompt = false
  583. KMDataManager.ud_set(true, forKey: identifier)
  584. }
  585. }
  586. }
  587. private func _itemSetPromptFlag(itemIdentifier: String?) {
  588. let item = self.toolbarItemFindItemIdentifiers(value: itemIdentifier ?? "")
  589. self._itemSetPromptFlag(item: item)
  590. }
  591. override func interfaceThemeDidChanged(_ appearance: NSAppearance.Name) {
  592. super.interfaceThemeDidChanged(appearance)
  593. self.toolbar?.appearance = .init(named: appearance)
  594. self.bottomLine.wantsLayer = true
  595. if KMAppearance.isDarkMode() {
  596. self.bottomLine.layer?.backgroundColor = NSColor.km_init(hex: "#393B3E", alpha: 1).cgColor
  597. } else {
  598. self.bottomLine.layer?.backgroundColor = NSColor.km_init(hex: "#0000001A").cgColor
  599. }
  600. }
  601. }
  602. // MARK: - Public Methods
  603. extension KMToolbarViewController {
  604. func itemAction(_ item: KMToolbarItemView) {
  605. self._itemAction(item.clickButton)
  606. }
  607. func zoomDidChange(pdfView: CPDFView?) {
  608. guard let scale = pdfView?.scaleFactor else {
  609. return
  610. }
  611. // 置空数据
  612. for item in self.zoomButton.itemArray {
  613. item.state = .off
  614. }
  615. if scale == 0.1 {
  616. let item = self.zoomButton.itemArray.safe_element(for: 5) as? NSMenuItem
  617. item?.state = .on
  618. } else if scale == 0.25 {
  619. let item = self.zoomButton.itemArray.safe_element(for: 6) as? NSMenuItem
  620. item?.state = .on
  621. } else if scale == 0.5 {
  622. let item = self.zoomButton.itemArray.safe_element(for: 7) as? NSMenuItem
  623. item?.state = .on
  624. } else if scale == 0.75 {
  625. let item = self.zoomButton.itemArray.safe_element(for: 8) as? NSMenuItem
  626. item?.state = .on
  627. } else if scale == 1 {
  628. let item = self.zoomButton.itemArray.safe_element(for: 9) as? NSMenuItem
  629. item?.state = .on
  630. } else if scale == 1.5 {
  631. let item = self.zoomButton.itemArray.safe_element(for: 10) as? NSMenuItem
  632. item?.state = .on
  633. } else if scale == 2 {
  634. let item = self.zoomButton.itemArray.safe_element(for: 11) as? NSMenuItem
  635. item?.state = .on
  636. } else if scale == 4 {
  637. let item = self.zoomButton.itemArray.safe_element(for: 12) as? NSMenuItem
  638. item?.state = .on
  639. } else if scale == 8 {
  640. let item = self.zoomButton.itemArray.safe_element(for: 13) as? NSMenuItem
  641. item?.state = .on
  642. } else if scale == 16 {
  643. let item = self.zoomButton.itemArray.safe_element(for: 14) as? NSMenuItem
  644. item?.state = .on
  645. } else if scale == 32 {
  646. let item = self.zoomButton.itemArray.safe_element(for: 15) as? NSMenuItem
  647. item?.state = .on
  648. } else if scale == 64 {
  649. let item = self.zoomButton.itemArray.safe_element(for: 16) as? NSMenuItem
  650. item?.state = .on
  651. } else if scale == 100 {
  652. let item = self.zoomButton.itemArray.safe_element(for: 17) as? NSMenuItem
  653. item?.state = .on
  654. }
  655. }
  656. }
  657. extension KMToolbarViewController : KMToolbarViewDelegate,NSToolbarItemValidation {
  658. func toolbarLeftDefaultItemIdentifiers(_ toolbar: KMToolbarView) -> [String] {
  659. if toolbarType == .Main {
  660. if let model = KMDataManager.toolbar_getData() {
  661. return model.leftCellIdentifiers ?? []
  662. }
  663. return [KMLeftControlToolbarItemIdentifier,
  664. KMNewToolbarSpaceItemIdentifier, KMDocumentZoomViewToolbarItemIdentifier,
  665. KMDocumentPreviousPageToolbarItemIdentifier, KMDocumentHomeToolbarItemIdentifier]
  666. }
  667. return []
  668. }
  669. func toolbarRightDefaultItemIdentifiers(_ toolbar: KMToolbarView) -> [String] {
  670. if toolbarType == .Main {
  671. if let model = KMDataManager.toolbar_getData() {
  672. return model.rightCellIdentifiers ?? []
  673. }
  674. return [KMDocumentViewDisplayToolbarItemIdentifier, KMDocumentShareToolbarItemIdentifier,
  675. KMDocumentSearchToolbarItemIdentifier, KMRightControlToolbarItemIdentifier]
  676. } else if [.Annatiton,.Magnify,.Move,.Select,.SelectZoom].contains(toolbarType) {
  677. // return [KMToolbarAnnotationSettingItemIdentifier]
  678. }
  679. return []
  680. }
  681. func toolbarAllowedItemIdentifiers(_ toolbar: KMToolbarView) -> [String] {
  682. switch toolbarType {
  683. case .None:
  684. return []
  685. case .Main:
  686. var defaultCellIdentifiers = mainToolIdentifiers
  687. if defaultCellIdentifiers.contains(KMDocumentHomeToolbarItemIdentifier) {
  688. defaultCellIdentifiers.removeObject(KMDocumentHomeToolbarItemIdentifier)
  689. }
  690. return defaultCellIdentifiers
  691. case .Annatiton,.Magnify,.Move,.Select,.SelectZoom:
  692. // return annotationToolIdentifiers
  693. return [KMNewToolbarSpaceItemIdentifier,
  694. KMToolbarPageEditInsetItemIdentifier, KMToolbarToolMergeItemIdentifier, KMToolbarPageEditSplitItemIdentifier,
  695. KMToolbarToolCompressItemIdentifier, KMToolbarToolSecureItemIdentifier, KMToolbarToolWatermarkItemIdentifier,
  696. KMToolbarToolBackgroundItemIdentifier, KMToolbarToolHeaderFooterItemIdentifier, KMToolbarToolBatesItemIdentifier,KMToolbarMeasureItemIdentifier,
  697. KMToolbarAIItemIdentifier,
  698. KMToolbarCropIdentifier,
  699. KMToolbarConversionWordItemIdentifier, KMToolbarConversionExcelItemIdentifier, KMToolbarConversionPPTItemIdentifier,
  700. KMToolbarConversionRTFItemIdentifier, KMToolbarConversionCSVItemIdentifier, KMToolbarConversionHTMLItemIdentifier,
  701. KMToolbarConversionTextItemIdentifier, KMToolbarConversionImageItemIdentifier,
  702. KMToolbarMoveToolModeItemIdentifier,
  703. KMToolbarMagnifyToolModeItemIdentifier,
  704. KMToolbarSelectToolModeItemIdentifier,
  705. KMToolbarZoomToSelectionItemIdentifier,
  706. KMNewToolbarSpaceItemIdentifier,
  707. KMToolbarDividerItemIdentifier,
  708. KMNewToolbarSpaceItemIdentifier,
  709. KMToolbarHighlightAnnotationItemIdentifier,
  710. KMToolbarUnderlineAnnotationItemIdentifier,
  711. KMToolbarStrikeOutAnnotationItemIdentifier, KMToolbarSquigglyAnnotationItemIdentifier,
  712. KMToolbarInkAnnotationItemIdentifier, KMToolbarEraserAnnotationItemIdentifier,
  713. KMToolbarFreeTextAnnotationItemIdentifier,
  714. KMToolbarAnchoredAnnotationItemIdentifier,
  715. KMToolbarSquareAnnotationItemIdentifier, KMToolbarCircleAnnotationItemIdentifier, KMToolbarArrowAnnotationItemIdentifier, KMToolbarLineAnnotationItemIdentifier,
  716. KMToolbarLinkAnnotationItemIdentifier,
  717. KMAnnotationStampToolbarItemIdentifier,
  718. KMToolbarSignSignatureAnnotationItemIdentifier,
  719. KMToolbarDividerItemIdentifier,
  720. KMToolbarShowToolbarItemIdentifier
  721. //
  722. // KMToolbarToolRadioButtonItemIdentifier
  723. ]
  724. case .editPDF:
  725. return editPDFItemIdentifiers
  726. case .Page:
  727. return pageEditToolIdentifiers
  728. case .Tool:
  729. return toolToolIdentifiers
  730. case .Form:
  731. return formToolIdentifiers
  732. case .FillSign:
  733. return fillSignToolIdentifiers
  734. case .Conversion:
  735. return conversionToolIdentifiers
  736. case .viewSetting:
  737. return [KMToolbarViewSettingIdentifier, KMToolbarCropIdentifier,
  738. KMToolbarSnapshotIdentifier, KMToolbarTTSIdentifier]
  739. default:
  740. break
  741. }
  742. return []
  743. }
  744. func toolbarDefaultItemIdentifiers(_ toolbar: KMToolbarView) -> [String] {
  745. switch toolbarType {
  746. case .None:
  747. return []
  748. case .Main:
  749. if let model = KMDataManager.toolbar_getData() {
  750. return model.centerCellIdentifiers ?? []
  751. }
  752. return [KMDocumentAnnotationToolbarItemIdentifier,
  753. KMDocumentPageToolbarItemIdentifier,
  754. KMDocumentToolToolbarItemIdentifier,
  755. KMDocumentConversonToolbarItemIdentifier,
  756. KMDocumentFormToolbarItemIdentifier,
  757. KMDocumentFillSginToolbarItemIdentifier,
  758. KMDocumentEditToolbarItemIdentifier,
  759. KMDocumentSignToolbarItemIdentifier,
  760. KMDocumentRedactToolbarItemIdentifier,
  761. KMDocumentScanOCRToolbarItemIdentifier, KMDocumentAIToolsToolbarItemIdentifier]
  762. case .Annatiton,.Magnify,.Move,.Select,.SelectZoom:
  763. let itemIdentifiers: [String]? = self.toolbar?.toolbarIdentifier != nil ? (UserDefaults.standard.object(forKey: self.toolbar?.toolbarIdentifier ?? "") as? [String]) : []
  764. if itemIdentifiers == nil || itemIdentifiers!.count <= 0 {
  765. return [KMToolbarMoveToolModeItemIdentifier,
  766. KMToolbarMagnifyToolModeItemIdentifier,
  767. KMToolbarSelectToolModeItemIdentifier,
  768. KMToolbarZoomToSelectionItemIdentifier,
  769. KMNewToolbarSpaceItemIdentifier,
  770. KMNewToolbarSpaceItemIdentifier,
  771. KMToolbarHighlightAnnotationItemIdentifier,
  772. KMToolbarUnderlineAnnotationItemIdentifier,
  773. KMToolbarStrikeOutAnnotationItemIdentifier, KMToolbarSquigglyAnnotationItemIdentifier,
  774. KMToolbarInkAnnotationItemIdentifier, KMToolbarEraserAnnotationItemIdentifier,
  775. KMToolbarFreeTextAnnotationItemIdentifier,
  776. KMToolbarAnchoredAnnotationItemIdentifier,
  777. KMToolbarSquareAnnotationItemIdentifier, KMToolbarCircleAnnotationItemIdentifier, KMToolbarArrowAnnotationItemIdentifier, KMToolbarLineAnnotationItemIdentifier,
  778. KMToolbarLinkAnnotationItemIdentifier,
  779. KMNewToolbarSpaceItemIdentifier, KMNewToolbarSpaceItemIdentifier,
  780. KMAnnotationStampToolbarItemIdentifier, KMAnnotationImageToolbarItemIdentifier,
  781. KMToolbarSignSignatureAnnotationItemIdentifier, KMAnnotationTableToolbarItemIdentifier,
  782. KMToolbarDividerItemIdentifier, KMToolbarShowToolbarItemIdentifier]
  783. }
  784. return itemIdentifiers!
  785. case .editPDF:
  786. return [KMToolbarAddTextEditPDFItemIdentifier,
  787. KMToolbarAddImageEditPDFItemIdentifier]
  788. case .Page:
  789. return []
  790. case .Tool:
  791. return [KMToolbarToolCompressItemIdentifier, KMToolbarToolMergeItemIdentifier,
  792. KMToolbarToolSecureItemIdentifier, KMToolbarComparisonItemIdentifier,
  793. KMToolbarToolWatermarkItemIdentifier, KMToolbarToolBackgroundItemIdentifier,
  794. KMToolbarToolHeaderFooterItemIdentifier, KMToolbarToolBatesItemIdentifier,
  795. KMToolbarMeasureItemIdentifier]
  796. case .Form:
  797. return [KMToolbarToolTextFieldItemIdentifier,
  798. KMToolbarToolCheckBoxItemIdentifier,
  799. KMToolbarToolRadioButtonItemIdentifier,
  800. KMToolbarToolListBoxItemIdentifier,
  801. KMToolbarToolPullDownmenuItemIdentifier,
  802. KMToolbarToolButtonIdentifier,
  803. // KMToolbarToolSignBoxIdentifier,
  804. KMToolbarDividerItemIdentifier,
  805. KMToolbarToolFormAlignIdentifier]
  806. case .FillSign:
  807. return [
  808. // KMToolbarToolTextIdentifier,
  809. KMToolbarToolHookItemIdentifier,
  810. KMToolbarToolForkItemIdentifier,
  811. KMToolbarToolRectangleIdentifier,
  812. KMToolbarToolLineItemIdentifier,
  813. KMToolbarToolDotItemIdentifier,
  814. KMToolbarToolDateIdentifier,
  815. KMToolbarToolProfileIdentifier,
  816. KMToolbarFillSignSignatureIdentifier]
  817. case .Conversion:
  818. return [
  819. // KMToolbarConversionCreatePDFItemIdentifier,
  820. KMToolbarConversionWordItemIdentifier,
  821. KMToolbarConversionPPTItemIdentifier,
  822. KMToolbarConversionExcelItemIdentifier,
  823. // KMToolbarConversionRTFItemIdentifier,
  824. // KMToolbarConversionCSVItemIdentifier,
  825. // KMToolbarConversionHTMLItemIdentifier,
  826. // KMToolbarConversionTextItemIdentifier,
  827. KMToolbarConversionImageItemIdentifier, KMToolbarConversionImageToPDFItemIdentifier, KMToolbarConversionOtherItemIdentifier,
  828. KMToolbarDividerItemIdentifier, KMToolbarConversionOCRIdentifier, KMToolbarConversionExportImageItemIdentifier]
  829. case .ScanOCR:
  830. return [KMToolbarToolEnhancedScanIdentifier,
  831. KMToolbarToolOCRTextIdentifier]
  832. case .viewSetting:
  833. return [KMToolbarViewSettingIdentifier, KMToolbarCropIdentifier,
  834. KMToolbarSnapshotIdentifier /*, KMToolbarTTSIdentifier*/]
  835. case .sign:
  836. return [KMToolbarToolSignBoxIdentifier, KMSignDigitalSignToolbarItemIdentifier]
  837. default:
  838. break
  839. }
  840. return []
  841. }
  842. func toolbar(_ toolbar: KMToolbarView, itemFor identifier: String) -> KMToolbarItemView {
  843. var item: KMToolbarItemView? = self.toolbarItems[identifier] as? KMToolbarItemView
  844. var create = false
  845. if let data = item {
  846. let pId = parentIdentifier(data.itemIdentifier ?? "")
  847. if [.Annatiton,.Magnify,.Move,.Select,.SelectZoom].contains(toolbarType) && (pId != KMDocumentAnnotationToolbarItemIdentifier || data.itemIdentifier! == KMToolbarAnnotationSettingItemIdentifier) {
  848. create = true
  849. } else {
  850. if let toolbarId = self.toolbar?.toolbarIdentifier {
  851. let itemIdentifiers = (UserDefaults.standard.object(forKey: toolbarId) as? [String]) ?? []
  852. if itemIdentifiers.contains(identifier) && annotationToolIdentifiers.contains(identifier) == false {
  853. create = true
  854. }
  855. if create == false {
  856. if pId == KMDocumentAnnotationToolbarItemIdentifier {
  857. create = NSAppearance.current != self.view.window?.appearance
  858. }
  859. }
  860. }
  861. }
  862. }
  863. if create == false {
  864. if KMDataManager.default.toolbarConfigDataUpdated {
  865. create = true
  866. }
  867. }
  868. if item == nil || create {
  869. if isMainToolItem(identifier) {
  870. item = KMToolbarMainItemView(itemIdentifier: identifier)
  871. } else if annotationToolIdentifiers.contains(identifier) {
  872. item = KMToolbarCustomItemView.init(itemIdentifier: identifier)
  873. } else {
  874. item = KMToolbarCustomItemView.init(itemIdentifier: identifier)
  875. }
  876. self.toolbarItems[identifier] = item
  877. if isMainToolItem(identifier) {
  878. self._setupMainItem(item)
  879. } else {
  880. if (annotationToolIdentifiers.contains(identifier)) {
  881. self._setupAnnotationItem(item)
  882. } else if editPDFItemIdentifiers.contains(identifier) {
  883. self._setupEditItem(item)
  884. } else if conversionToolIdentifiers.contains(identifier) {
  885. self._setupConvertItem(item)
  886. } else if fillSignToolIdentifiers.contains(identifier) {
  887. self._setupFillSignItem(item)
  888. } else if formToolIdentifiers.contains(identifier) {
  889. self._setupFormItem(item)
  890. } else if toolToolIdentifiers.contains(identifier) {
  891. self._setupToolItem(item)
  892. } else if KMViewDisplayIdentifiers.contains(identifier) {
  893. self._setupViewDisplayItem(item)
  894. } else if pageEditToolIdentifiers.contains(identifier) {
  895. if (identifier == KMToolbarPageEditPageRangeItemIdentifier) {
  896. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarPageRange)
  897. item?.target = self
  898. item?.btnTag = KMPageEditType.pageRange.rawValue
  899. // item?.toolTip = NSLocalizedString("pageRange", comment: "")
  900. item?.titleName = NSLocalizedString("Page Range", comment: "")
  901. item?.boxImagePosition = .imageExpandLeft
  902. // item?.btnAction = #selector(pageRangeMenuAction)
  903. item?.needExpandAction = true
  904. } else if (identifier == KMToolbarPageEditRotateItemIdentifier) {
  905. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarPageRotate)
  906. item?.alternateImage = NSImage(named: KMImageNameUXIconSubtoolbarPageRotate)
  907. item?.target = self
  908. item?.btnTag = KMPageEditType.rightRotate.rawValue
  909. item?.toolTip = NSLocalizedString("Rotate", comment: "")
  910. item?.titleName = NSLocalizedString("Rotate", comment: "")
  911. item?.boxImagePosition = .imageLeft
  912. } else if (identifier == KMToolbarPageEditLeftRotateItemIdentifier) {
  913. item?.image = NSImage(named: "KMImageNameMainToolPageLeftRotate")
  914. item?.alternateImage = NSImage(named: "KMImageNameMainToolPageLeftRotate")
  915. item?.target = self
  916. item?.btnTag = KMPageEditType.leftRotate.rawValue
  917. item?.toolTip = NSLocalizedString("Rotate Left", comment: "")
  918. item?.titleName = NSLocalizedString("", comment: "")
  919. item?.boxImagePosition = .imageLeft
  920. } else if (identifier == KMToolbarPageEditRightRotateItemIdentifier) {
  921. item?.image = NSImage(named: "KMImageNameMainToolPageRightRotate")
  922. item?.alternateImage = NSImage(named: "KMImageNameMainToolPageRightRotate")
  923. item?.target = self
  924. item?.btnTag = KMPageEditType.rightRotate.rawValue
  925. item?.toolTip = NSLocalizedString("Rotate Right", comment: "")
  926. item?.titleName = NSLocalizedString("", comment: "")
  927. item?.boxImagePosition = .imageLeft
  928. } else if (identifier == KMToolbarPageEditInsetItemIdentifier) {
  929. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarPageInsert)
  930. item?.alternateImage = NSImage(named: KMImageNameUXIconSubtoolbarPageInsert)
  931. item?.target = self
  932. item?.btnTag = KMPageEditType.insert.rawValue
  933. item?.isShowCustomToolTip = true
  934. item?.toolTip = NSLocalizedString("Inserting pages into an existing PDF", comment: "")
  935. item?.isPopToolTip = true
  936. item?.titleName = NSLocalizedString("Insert", comment: "")
  937. item?.boxImagePosition = .imageOnly
  938. item?.btnAction = #selector(_itemAction)
  939. let menuItem = NSMenuItem.init(title: NSLocalizedString("Insert", comment: ""), action: #selector(_menuItemAction), target: self)
  940. item?.menuFormRepresentation = menuItem
  941. menuItem.representedObject = identifier
  942. } else if (identifier == KMToolbarPageEditExtractItemIdentifier) {
  943. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarPageExtract)
  944. item?.alternateImage = NSImage(named: KMImageNameUXIconSubtoolbarPageExtract)
  945. item?.target = self
  946. item?.btnTag = KMPageEditType.extract.rawValue
  947. // item?.toolTip = NSLocalizedString("Exctract selected pages", comment: "")
  948. item?.titleName = NSLocalizedString("Extract", comment: "")
  949. item?.boxImagePosition = .imageExpandLeft
  950. // item?.btnAction = #selector(extractMenuAction)
  951. item?.needExpandAction = true
  952. } else if (identifier == KMToolbarPageEditReplaceItemIdentifier) {
  953. item?.image = NSImage(named: KMImageNameToolbarReplace)
  954. item?.alternateImage = NSImage(named: KMImageNameToolbarReplace)
  955. item?.target = self
  956. item?.btnTag = KMPageEditType.replace.rawValue
  957. item?.toolTip = NSLocalizedString("Replace", comment: "")
  958. item?.titleName = NSLocalizedString("Replace", comment: "")
  959. item?.boxImagePosition = .imageLeft
  960. } else if (identifier == KMToolbarPageEditSplitItemIdentifier) {
  961. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarPageSplit)
  962. item?.alternateImage = NSImage(named: KMImageNameUXIconSubtoolbarPageSplit)
  963. item?.target = self
  964. item?.btnTag = KMPageEditType.split.rawValue
  965. item?.isShowCustomToolTip = true
  966. item?.toolTip = NSLocalizedString("Split and save selected PDF pages as a new separate document", comment: "")
  967. item?.isPopToolTip = true
  968. item?.titleName = NSLocalizedString("Split", comment: "")
  969. item?.boxImagePosition = .imageOnly
  970. item?.btnAction = #selector(_itemAction)
  971. let menuItem = NSMenuItem.init(title: NSLocalizedString("Split", comment: ""), action: #selector(_menuItemAction), target: self)
  972. item?.menuFormRepresentation = menuItem
  973. menuItem.representedObject = identifier
  974. } else if (identifier == KMToolbarPageEditReverseItemIdentifier) {
  975. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarPageReverse)
  976. item?.alternateImage = NSImage(named: KMImageNameUXIconSubtoolbarPageReverse)
  977. item?.target = self
  978. item?.btnTag = KMPageEditType.reverse.rawValue
  979. item?.toolTip = NSLocalizedString("Reverse", comment: "")
  980. item?.titleName = NSLocalizedString("Reverse", comment: "")
  981. item?.boxImagePosition = .imageLeft
  982. } else if (identifier == KMToolbarPageEditCopyItemIdentifier) {
  983. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarPageCopy)
  984. item?.alternateImage = NSImage(named: KMImageNameUXIconSubtoolbarPageCopy)
  985. item?.target = self
  986. item?.btnTag = KMPageEditType.delete.rawValue
  987. item?.toolTip = NSLocalizedString("Copy", comment: "")
  988. item?.titleName = NSLocalizedString("Copy", comment: "")
  989. item?.boxImagePosition = .imageLeft
  990. } else if (identifier == KMToolbarPageEditPasteItemIdentifier) {
  991. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarPagePaste)
  992. item?.alternateImage = NSImage(named: KMImageNameUXIconSubtoolbarPagePaste)
  993. item?.target = self
  994. item?.btnTag = KMPageEditType.delete.rawValue
  995. item?.toolTip = NSLocalizedString("Paste", comment: "")
  996. item?.titleName = NSLocalizedString("Paste", comment: "")
  997. item?.boxImagePosition = .imageLeft
  998. } else if (identifier == KMToolbarPageEditDeleteItemIdentifier) {
  999. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarPageDelete)
  1000. item?.alternateImage = NSImage(named: KMImageNameUXIconSubtoolbarPageDelete)
  1001. item?.target = self
  1002. item?.btnTag = KMPageEditType.delete.rawValue
  1003. item?.toolTip = NSLocalizedString("Delete", comment: "")
  1004. item?.titleName = NSLocalizedString("Delete", comment: "")
  1005. item?.boxImagePosition = .imageLeft
  1006. }
  1007. return item!
  1008. } else if KMSignIdentifiers.contains(identifier) {
  1009. self._setupSignItem(item)
  1010. }
  1011. }
  1012. } else {
  1013. if item?.itemIdentifier == KMToolbarToolSignBoxIdentifier {
  1014. item?.isSelected = false
  1015. }
  1016. }
  1017. return item!
  1018. }
  1019. func validateToolbarItem(_ item: NSToolbarItem) -> Bool {
  1020. return true
  1021. }
  1022. @objc func listViewAnnotationTypeChangeNotification(sender: Notification?) {
  1023. // if let notiName = sender?.name, notiName == NSNotification.Name.CPDFListViewAnnotationTypeChange, self.ignoreCurrentAnnotationTypeChange {
  1024. // }
  1025. if (self.ignoreCurrentAnnotationTypeChange) {
  1026. // 忽略后重置 这个属性是基于单次添加,所以使用后会重置
  1027. // self.ignoreCurrentAnnotationTypeChange = false
  1028. return
  1029. }
  1030. let annotationType : CAnnotationType = pdfView?.annotationType ?? .unkown
  1031. if annotationType == .square || annotationType == .circle || annotationType == .arrow || annotationType == .line{
  1032. UserDefaults.standard.set(annotationType.rawValue, forKey: KMToolBarToolPDFShapeStyle)
  1033. UserDefaults.standard.synchronize()
  1034. }
  1035. let toolMode = pdfView?.toolMode ?? .none
  1036. for item in self.toolbar?.items ?? [] {
  1037. if self.toolbarType == .Annatiton || self.toolbarType == .Move || self.toolbarType == .Magnify ||
  1038. self.toolbarType == .Select || self.toolbarType == .SelectZoom {
  1039. item.isSelected = false
  1040. if item.itemIdentifier == KMDocumentAnnotationToolbarItemIdentifier {
  1041. item.isSelected = true
  1042. } else if item.itemIdentifier == KMToolbarHighlightAnnotationItemIdentifier {
  1043. if annotationType == .highlight {
  1044. item.isSelected = true
  1045. }
  1046. } else if item.itemIdentifier == KMToolbarUnderlineAnnotationItemIdentifier {
  1047. if annotationType == .underline {
  1048. item.isSelected = true
  1049. }
  1050. } else if item.itemIdentifier == KMToolbarStrikeOutAnnotationItemIdentifier {
  1051. if annotationType == .strikeOut {
  1052. item.isSelected = true
  1053. }
  1054. } else if item.itemIdentifier == KMToolbarSquigglyAnnotationItemIdentifier {
  1055. if annotationType == .squiggly {
  1056. item.isSelected = true
  1057. }
  1058. } else if item.itemIdentifier == KMToolbarInkAnnotationItemIdentifier {
  1059. if annotationType == .ink { //|| annotationType == .eraser
  1060. item.isSelected = true
  1061. }
  1062. } else if item.itemIdentifier == KMToolbarEraserAnnotationItemIdentifier {
  1063. if annotationType == .eraser {
  1064. item.isSelected = true
  1065. }
  1066. } else if item.itemIdentifier == KMToolbarFreeTextAnnotationItemIdentifier {
  1067. if annotationType == .freeText {
  1068. item.isSelected = true
  1069. }
  1070. } else if item.itemIdentifier == KMToolbarAnchoredAnnotationItemIdentifier {
  1071. if annotationType == .anchored {
  1072. item.isSelected = true
  1073. }
  1074. } else if item.itemIdentifier == KMToolbarSquareAnnotationItemIdentifier {
  1075. if annotationType == .square {
  1076. item.isSelected = true
  1077. }
  1078. } else if item.itemIdentifier == KMToolbarCircleAnnotationItemIdentifier {
  1079. if annotationType == .circle {
  1080. item.isSelected = true
  1081. }
  1082. } else if item.itemIdentifier == KMToolbarArrowAnnotationItemIdentifier {
  1083. if annotationType == .arrow {
  1084. item.isSelected = true
  1085. }
  1086. } else if item.itemIdentifier == KMToolbarLineAnnotationItemIdentifier {
  1087. if annotationType == .line {
  1088. item.isSelected = true
  1089. }
  1090. } else if item.itemIdentifier == KMToolbarLinkAnnotationItemIdentifier {
  1091. if annotationType == .link {
  1092. item.isSelected = true
  1093. }
  1094. } else if item.itemIdentifier == KMAnnotationStampToolbarItemIdentifier {
  1095. if annotationType == .stamp {
  1096. item.isSelected = true
  1097. }
  1098. } else if item.itemIdentifier == KMToolbarSignSignatureAnnotationItemIdentifier {
  1099. if annotationType == .signSignature {
  1100. item.isSelected = true
  1101. }
  1102. } else if toolMode == .moveToolMode {
  1103. if item.itemIdentifier == KMToolbarMoveToolModeItemIdentifier {
  1104. item.isSelected = true
  1105. }
  1106. } else if toolMode == .magnifyToolMode {
  1107. if item.itemIdentifier == KMToolbarMagnifyToolModeItemIdentifier {
  1108. item.isSelected = true
  1109. }
  1110. } else if toolMode == .selectToolMode {
  1111. if item.itemIdentifier == KMToolbarSelectToolModeItemIdentifier {
  1112. item.isSelected = true
  1113. }
  1114. } else if toolMode == .selectZoomToolMode {
  1115. if item.itemIdentifier == KMToolbarZoomToSelectionItemIdentifier {
  1116. item.isSelected = true
  1117. }
  1118. }
  1119. if (item.itemIdentifier == KMToolbarShowToolbarItemIdentifier) {
  1120. item.isSelected = !self.isShowAllAnnotations
  1121. }
  1122. } else if self.toolbarType == .FillSign {
  1123. item.isSelected = false
  1124. if toolMode == .selfSignMode {
  1125. if item.itemIdentifier == KMToolbarToolHookItemIdentifier {
  1126. if annotationType == .signTure {
  1127. item.isSelected = true
  1128. }
  1129. } else if item.itemIdentifier == KMToolbarToolForkItemIdentifier {
  1130. if annotationType == .signFalse {
  1131. item.isSelected = true
  1132. }
  1133. } else if item.itemIdentifier == KMToolbarToolLineItemIdentifier {
  1134. if annotationType == .signLine {
  1135. item.isSelected = true
  1136. }
  1137. } else if item.itemIdentifier == KMToolbarToolDotItemIdentifier {
  1138. if annotationType == .signDot {
  1139. item.isSelected = true
  1140. }
  1141. } else if item.itemIdentifier == KMToolbarToolRectangleIdentifier {
  1142. if annotationType == .signCircle {
  1143. item.isSelected = true
  1144. }
  1145. } else if item.itemIdentifier == KMToolbarToolDateIdentifier {
  1146. if annotationType == .signDate {
  1147. item.isSelected = true
  1148. }
  1149. } else if item.itemIdentifier == KMToolbarToolTextIdentifier {
  1150. if annotationType == .signText {
  1151. item.isSelected = true
  1152. }
  1153. } else if (item.itemIdentifier == KMToolbarFillSignSignatureIdentifier) {
  1154. if (annotationType == .signSignature) {
  1155. item.isSelected = true
  1156. }
  1157. }
  1158. }
  1159. } else if self.toolbarType == .Form {
  1160. item.isSelected = false
  1161. if toolMode == .formToolMode {
  1162. if item.itemIdentifier == KMToolbarToolTextFieldItemIdentifier {
  1163. if annotationType == .textField {
  1164. item.isSelected = true
  1165. }
  1166. } else if item.itemIdentifier == KMToolbarToolCheckBoxItemIdentifier {
  1167. if annotationType == .checkBox {
  1168. item.isSelected = true
  1169. }
  1170. } else if item.itemIdentifier == KMToolbarToolRadioButtonItemIdentifier {
  1171. if annotationType == .radioButton {
  1172. item.isSelected = true
  1173. }
  1174. } else if item.itemIdentifier == KMToolbarToolListBoxItemIdentifier {
  1175. if annotationType == .listMenu {
  1176. item.isSelected = true
  1177. }
  1178. } else if item.itemIdentifier == KMToolbarToolPullDownmenuItemIdentifier {
  1179. if annotationType == .comboBox {
  1180. item.isSelected = true
  1181. }
  1182. } else if item.itemIdentifier == KMToolbarToolButtonIdentifier {
  1183. if annotationType == .actionButton {
  1184. item.isSelected = true
  1185. }
  1186. } else if item.itemIdentifier == KMToolbarToolSignBoxIdentifier {
  1187. if annotationType == .signature {
  1188. item.isSelected = true
  1189. }
  1190. }
  1191. }
  1192. }
  1193. }
  1194. }
  1195. }
  1196. extension KMToolbarViewController: NSSearchFieldDelegate {
  1197. }
  1198. extension KMToolbarViewController {
  1199. private func _setupMainItem(_ item: KMToolbarItemView?) {
  1200. let identifier = item?.itemIdentifier
  1201. if identifier == KMLeftControlToolbarItemIdentifier {
  1202. item?.image = NSImage(named: "KMImageNameUXIconBtnTriLeftNor")
  1203. item?.titleName = NSLocalizedString("Panel", comment: "")
  1204. item?.target = self
  1205. item?.toolTip = NSLocalizedString("View Settings", comment: "")
  1206. item?.boxImagePosition = .imageAbove
  1207. item?.selectBackgroundType = .imageBox
  1208. item?.btnAction = #selector(_itemAction)
  1209. } else if identifier == KMDocumentZoomViewToolbarItemIdentifier{
  1210. item?.titleName = NSLocalizedString("Zoom", comment: "")
  1211. item?.target = self
  1212. let view = KMToolbarZoomItemView(zoomView: self.zoomView)
  1213. view.callback = { [weak self] idx, _ in
  1214. if idx == 2 {
  1215. self?.delegate?.changePDFViewZoomInAction?()
  1216. } else if idx == 1 {
  1217. self?.delegate?.changePDFViewZoomOutAction?()
  1218. }
  1219. }
  1220. item?.customizeView = view
  1221. } else if identifier == KMDocumentPreviousPageToolbarItemIdentifier {
  1222. item?.titleName = NSLocalizedString("Zoom", comment: "")
  1223. item?.target = self
  1224. let view = KMToolbarPreviousNextItemView()
  1225. view.callback = { [weak self] idx, _ in
  1226. if idx == 1 {
  1227. self?.delegate?.changePDFViewGoToPreviousPageAction?()
  1228. } else if idx == 2 {
  1229. self?.delegate?.changePDFViewGotoNextPageAction?()
  1230. }
  1231. }
  1232. item?.customizeView = view
  1233. } else if identifier == KMDocumentHomeToolbarItemIdentifier {
  1234. item?.image = NSImage(named: "KMImageNameToolbarHomeNor")
  1235. item?.titleName = NSLocalizedString("Home", comment: "")
  1236. item?.target = self
  1237. item?.toolTip = NSLocalizedString("A Welcome Gift from Us", comment: "")
  1238. item?.boxImagePosition = .imageAbove
  1239. item?.selectBackgroundType = .imageBox
  1240. item?.btnAction = #selector(_itemAction)
  1241. } else if identifier == KMDocumentAnnotationToolbarItemIdentifier {
  1242. item?.titleName = NSLocalizedString("Tools", comment: "")
  1243. item?.image = NSImage(named: "KMImageNameUXIconToolbarMytoolsNor")
  1244. item?.target = self
  1245. item?.toolTip = String(format: "%@: %@, %@, %@, %@", KMLocalizedString("Tool Mode", nil),KMLocalizedString("Annotate", nil),KMLocalizedString("Scroll", nil),KMLocalizedString("Magnify", nil),KMLocalizedString("Select", nil))
  1246. item?.btnTag = KMToolbarViewType.Annatiton.rawValue
  1247. item?.btnAction = #selector(leftControllButtonAction)
  1248. item?.boxImagePosition = .imageAbove
  1249. item?.selectBackgroundType = .imageBox
  1250. let menuItem = NSMenuItem(title: item?.titleName ?? "", action: #selector(_menuItemAction), keyEquivalent: "")
  1251. menuItem.target = self
  1252. menuItem.representedObject = identifier
  1253. item?.menuFormRepresentation = menuItem
  1254. } else if identifier == KMDocumentPageToolbarItemIdentifier {
  1255. item?.titleName = NSLocalizedString("Page Edit", comment: "")
  1256. item?.target = self
  1257. item?.image = NSImage(named: "KMImageNameUXIconToolbarPageeditNor")
  1258. item?.toolTip = NSLocalizedString("PDF page editor: insert, delete, extract, rotate, reposition, and replace pages in a PDF", comment: "")
  1259. item?.btnTag = KMToolbarViewType.Page.rawValue
  1260. item?.btnAction = #selector(leftControllButtonAction)
  1261. item?.boxImagePosition = .imageAbove
  1262. item?.selectBackgroundType = .imageBox
  1263. let menuItem = NSMenuItem(title: item?.titleName ?? "", action: #selector(_menuItemAction), keyEquivalent: "")
  1264. menuItem.target = self
  1265. menuItem.representedObject = identifier
  1266. item?.menuFormRepresentation = menuItem
  1267. } else if identifier == KMDocumentConversonToolbarItemIdentifier {
  1268. item?.titleName = NSLocalizedString("Converter", comment: "")
  1269. item?.target = self
  1270. item?.image = NSImage(named: "KMImageNameUXIconToolbarConvertNor")
  1271. item?.toolTip = NSLocalizedString("Convert PDFs to Microsoft Word, PowerPoint, Excel, RTF, Text, Image, CSV, and more Offline", comment: "")
  1272. item?.btnTag = KMToolbarViewType.Conversion.rawValue
  1273. item?.btnAction = #selector(leftControllButtonAction)
  1274. item?.boxImagePosition = .imageAbove
  1275. item?.selectBackgroundType = .imageBox
  1276. item?.promptIdentifier = identifier
  1277. let menuItem = NSMenuItem(title: NSLocalizedString("Converter", comment: ""), action: #selector(_menuItemAction), keyEquivalent: "")
  1278. menuItem.target = self
  1279. menuItem.representedObject = identifier
  1280. item?.menuFormRepresentation = menuItem
  1281. } else if identifier == KMDocumentScanOCRToolbarItemIdentifier {
  1282. item?.titleName = NSLocalizedString("OCR", comment: "")
  1283. item?.target = self
  1284. item?.image = NSImage(named: "KMImageNameToolbarOCRNor")
  1285. item?.boxImagePosition = .imageAbove
  1286. item?.toolTip = NSLocalizedString("Recognize text from Image-based or Scanned PDF with OCR", comment: "")
  1287. item?.selectBackgroundType = .imageBox
  1288. item?.btnAction = #selector(OCRbtnAction1)
  1289. item?.promptIdentifier = identifier
  1290. let menuItem = NSMenuItem.init(title: NSLocalizedString("OCR", comment: ""), action: #selector(_menuItemAction), target: self)
  1291. menuItem.representedObject = identifier
  1292. item?.menuFormRepresentation = menuItem
  1293. } else if identifier == KMToolbarToolEnhancedScanIdentifier {
  1294. item?.image = NSImage(named: "KMImageNameMainToolEnhancedScan")
  1295. item?.target = self
  1296. item?.btnTag = 0
  1297. item?.toolTip = NSLocalizedString("Enhanced Scan", comment: "")
  1298. item?.titleName = NSLocalizedString("Enhanced Scan", comment: "")
  1299. item?.boxImagePosition = .imageLeft
  1300. item?.selectBackgroundType = .imageBox
  1301. item?.btnAction = #selector(scanOCRModelSelect)
  1302. } else if identifier == KMToolbarToolOCRTextIdentifier {
  1303. item?.image = NSImage(named: "KMImageNameMainToolOCRText")
  1304. item?.target = self
  1305. item?.toolTip = NSLocalizedString("OCR Text Recognition", comment: "")
  1306. item?.titleName = NSLocalizedString("OCR Text Recognition", comment: "")
  1307. item?.boxImagePosition = .imageLeft
  1308. item?.selectBackgroundType = .imageBox
  1309. item?.btnAction = #selector(scanOCRModelSelect)
  1310. item?.promptIdentifier = identifier
  1311. let menuItem = NSMenuItem.init(title: NSLocalizedString("OCR Text Recognition", comment: ""), action: #selector(scanOCRModelSelect), target: self)
  1312. menuItem.representedObject = identifier
  1313. item?.menuFormRepresentation = menuItem
  1314. } else if identifier == KMDocumentEditToolbarItemIdentifier {
  1315. item?.titleName = NSLocalizedString("Edit PDF", comment: "")
  1316. item?.target = self
  1317. item?.image = NSImage(named: "KMImageNameUXIconToolbarEditNor")
  1318. item?.boxImagePosition = .imageAbove
  1319. item?.btnTag = KMToolbarViewType.editPDF.rawValue
  1320. item?.toolTip = NSLocalizedString("Edit text and image in PDF ", comment: "")
  1321. item?.selectBackgroundType = .imageBox
  1322. item?.btnAction = #selector(leftControllButtonAction)
  1323. item?.promptIdentifier = identifier
  1324. let menuItem = NSMenuItem.init(title: NSLocalizedString("Edit PDF", comment: ""), action: #selector(_menuItemAction), target: self)
  1325. menuItem.tag = item!.btnTag
  1326. menuItem.representedObject = identifier
  1327. item?.menuFormRepresentation = menuItem
  1328. } else if identifier == KMDocumentFormToolbarItemIdentifier {
  1329. item?.titleName = NSLocalizedString("Forms", comment: "")
  1330. item?.target = self
  1331. item?.image = NSImage(named: "KMImageNameUXIconToolbarFormNor")
  1332. item?.boxImagePosition = .imageAbove
  1333. item?.btnTag = KMToolbarViewType.Form.rawValue
  1334. item?.toolTip = NSLocalizedString("Edit PDF Form", comment: "")
  1335. item?.selectBackgroundType = .imageBox
  1336. item?.btnAction = #selector(leftControllButtonAction)
  1337. item?.promptIdentifier = identifier
  1338. let menuItem = NSMenuItem.init(title: NSLocalizedString("Forms", comment: ""), action: #selector(_menuItemAction), target: self)
  1339. menuItem.tag = item!.btnTag
  1340. menuItem.representedObject = identifier
  1341. item?.menuFormRepresentation = menuItem
  1342. } else if identifier == KMDocumentFillSginToolbarItemIdentifier {
  1343. item?.titleName = NSLocalizedString("Fill & Sign", comment: "")
  1344. item?.target = self
  1345. item?.image = NSImage(named: "KMImageNameUXIconToolbarFillsignNor")
  1346. item?.boxImagePosition = .imageAbove
  1347. item?.btnTag = KMToolbarViewType.FillSign.rawValue
  1348. item?.toolTip = NSLocalizedString("Fill and sign forms", comment: "")
  1349. item?.selectBackgroundType = .imageBox
  1350. item?.btnAction = #selector(leftControllButtonAction)
  1351. item?.promptIdentifier = identifier
  1352. let menuItem = NSMenuItem.init(title: NSLocalizedString("Fill & Sign", comment: ""), action: #selector(_menuItemAction), target: self)
  1353. menuItem.tag = item!.btnTag
  1354. menuItem.representedObject = identifier
  1355. item?.menuFormRepresentation = menuItem
  1356. } else if identifier == KMDocumentToolToolbarItemIdentifier {
  1357. item?.titleName = NSLocalizedString("Editor", comment: "")
  1358. item?.target = self
  1359. item?.image = NSImage(named: "KMImageNameUXIconToolbarEdittoolNor")
  1360. item?.boxImagePosition = .imageAbove
  1361. item?.btnTag = KMToolbarViewType.Tool.rawValue
  1362. item?.toolTip = NSLocalizedString("Edit, delete, cut, copy, paste, and insert text in PDFs", comment: "")
  1363. item?.selectBackgroundType = .imageBox
  1364. item?.btnAction = #selector(leftControllButtonAction)
  1365. item?.promptIdentifier = identifier
  1366. let menuItem = NSMenuItem(title: item?.titleName ?? "", action: #selector(_menuItemAction), keyEquivalent: "")
  1367. menuItem.target = self
  1368. menuItem.representedObject = identifier
  1369. item?.menuFormRepresentation = menuItem
  1370. } else if identifier == KMDocumentRedactToolbarItemIdentifier {
  1371. item?.titleName = NSLocalizedString("Redact Text", comment: "")
  1372. item?.target = self
  1373. item?.image = NSImage(named: "KMImageNameUXIconToolbarRedactNor")
  1374. item?.boxImagePosition = .imageAbove
  1375. item?.toolTip = NSLocalizedString("Mark for redaction", comment: "")
  1376. item?.selectBackgroundType = .imageBox
  1377. item?.btnAction = #selector(_itemAction)
  1378. item?.promptIdentifier = identifier
  1379. let menuItem = NSMenuItem(title: item?.titleName ?? "", action: #selector(_menuItemAction), keyEquivalent: "")
  1380. menuItem.target = self
  1381. menuItem.representedObject = identifier
  1382. item?.menuFormRepresentation = menuItem
  1383. } else if identifier == KMDocumentAITranslationToolbarItemIdentifier {
  1384. item?.image = NSImage(named: "ic_function_other_AITranslation")
  1385. item?.titleName = "AI Translation"
  1386. item?.target = self
  1387. item?.toolTip = NSLocalizedString("AI Translation", comment: "")
  1388. item?.boxImagePosition = .imageOnly
  1389. item?.btnAction = #selector(aiTranslationButtonAction)
  1390. item?.promptIdentifier = identifier
  1391. } else if identifier == KMDocumentPrintToolbarItemIdentifier {
  1392. item?.image = NSImage(named: "KMImageNameToolbarPrintNor")
  1393. item?.titleName = "Print"
  1394. item?.target = self
  1395. item?.toolTip = NSLocalizedString("Print", comment: "")
  1396. item?.boxImagePosition = .imageOnly
  1397. item?.btnAction = #selector(_itemAction)
  1398. } else if identifier == KMDocumentViewDisplayToolbarItemIdentifier {
  1399. item?.image = NSImage(named: "KMImageNameUXIconToolbarPageviewNor")
  1400. item?.titleName = NSLocalizedString("Page Display", comment: "")
  1401. item?.target = self
  1402. item?.toolTip = NSLocalizedString("Page Display", comment: "")
  1403. item?.boxImagePosition = .imageAbove
  1404. item?.selectBackgroundType = .imageBox
  1405. item?.btnAction = #selector(_itemAction)
  1406. item?.promptIdentifier = identifier
  1407. let menuItem = NSMenuItem.init(title: NSLocalizedString("Page Display", comment: ""), action: #selector(_menuItemAction), target: self)
  1408. menuItem.representedObject = identifier
  1409. item?.menuFormRepresentation = menuItem
  1410. } else if identifier == KMDocumentAIToolsToolbarItemIdentifier {
  1411. item?.image = NSImage(named: "KMImageNameUXIconAINor")
  1412. item?.titleName = NSLocalizedString("AI Tools", comment: "")
  1413. item?.target = self
  1414. item?.toolTip = NSLocalizedString("AI Tools", comment: "")
  1415. item?.boxImagePosition = .imageAbove
  1416. item?.selectBackgroundType = .imageBox
  1417. item?.btnAction = #selector(_itemAction)
  1418. item?.promptIdentifier = identifier
  1419. let menuItem = NSMenuItem.init(title: NSLocalizedString("AI Tools", comment: ""), action: #selector(_menuItemAction), target: self)
  1420. menuItem.representedObject = identifier
  1421. item?.menuFormRepresentation = menuItem
  1422. } else if identifier == KMDocumentShareToolbarItemIdentifier {
  1423. item?.image = NSImage(named: "KMImageNameUXIconToolbarShareNor")
  1424. item?.titleName = NSLocalizedString("Share", comment: "")
  1425. item?.target = self
  1426. // item?.toolTip = NSLocalizedString("Share the file with others", comment: "")
  1427. item?.boxImagePosition = .imageAbove
  1428. item?.selectBackgroundType = .imageBox
  1429. item?.btnAction = #selector(shareButtonAction)
  1430. let menuItem = NSMenuItem.init(title: item?.titleName ?? "", action: nil, target: self)
  1431. let menu = NSMenu()
  1432. _ = menu.addItem(withTitle: NSLocalizedString("Document", comment: ""), action: #selector(shareViaWithDocument), target: self)
  1433. _ = menu.addItem(withTitle: NSLocalizedString("Flattened Copy", comment: ""), action: #selector(shareViaWithFlatten), target: self)
  1434. _ = menu.addItem(withTitle: NSLocalizedString("Original PDF", comment: ""), action: #selector(shareViaWithOriginalPDF), target: self)
  1435. menuItem.submenu = menu
  1436. item?.menuFormRepresentation = menuItem
  1437. } else if identifier == KMDocumentSearchToolbarItemIdentifier {
  1438. item?.titleName = NSLocalizedString("Search", comment: "")
  1439. item?.target = self
  1440. let view = NSView()
  1441. view.frame = NSMakeRect(0, 0, 150, 40)
  1442. let boxView = NSView()
  1443. boxView.frame = NSMakeRect(0, 16, 150, 22)
  1444. view.addSubview(boxView)
  1445. let searchView = NSSearchField()
  1446. searchView.frame = NSMakeRect(0, 0, 150, 22)
  1447. searchView.placeholderString = NSLocalizedString("Search", comment: "")
  1448. searchView.sendsWholeSearchString = true
  1449. searchView.sendsSearchStringImmediately = true
  1450. searchView.drawsBackground = false
  1451. searchView.delegate = self
  1452. self.searchField = searchView
  1453. self.refreshSearchBarMenu()
  1454. boxView.addSubview(searchView)
  1455. let titleLabel = NSTextField(labelWithString: NSLocalizedString("Search", comment: ""))
  1456. view.addSubview(titleLabel)
  1457. titleLabel.frame = NSMakeRect(0, 0, 130, 14)
  1458. titleLabel.alignment = .center
  1459. titleLabel.textColor = KMAppearance.subtitleColor()
  1460. titleLabel.font = KMToolbarMainItemView.textFont
  1461. item?.customizeView = view
  1462. let menuItem = NSMenuItem.init(title: NSLocalizedString("Search", comment: ""), action: #selector(_menuItemAction), target: self)
  1463. menuItem.representedObject = identifier
  1464. item?.menuFormRepresentation = menuItem
  1465. } else if identifier == KMDocumentPageInputToolbarItemIdentifier {
  1466. item?.titleName = NSLocalizedString("Page", comment: "")
  1467. // item?.target = self
  1468. let view = KMToolbarPageInputItemView()
  1469. item?.customizeView = view
  1470. view.totalNumber = Int((self.pdfView?.document.pageCount ?? 0))
  1471. view.currentPageIndex = (self.pdfView?.currentPageIndex ?? 0) + 1
  1472. view.enterAction = { [weak self] stringV in
  1473. if let data = self?.toolbarItemFindItemIdentifiers(value: KMDocumentPageInputToolbarItemIdentifier) {
  1474. self?.delegate?.toolbarViewController?(self!, viewItemDidClick: data, index: 0, info: stringV)
  1475. }
  1476. }
  1477. // let menuItem = NSMenuItem.init(title: NSLocalizedString("Search", comment: ""), action: #selector(_menuItemAction), target: self)
  1478. // menuItem.representedObject = identifier
  1479. // item?.menuFormRepresentation = menuItem
  1480. } else if identifier == KMRightControlToolbarItemIdentifier {
  1481. item?.image = NSImage(named: "KMImageNameUXIconBtnTriRightNor")
  1482. item?.titleName = NSLocalizedString("Properties", comment: "")
  1483. item?.target = self
  1484. item?.toolTip = NSLocalizedString("Show/Hide Annotation Properties Panel", comment: "")
  1485. item?.boxImagePosition = .imageAbove
  1486. item?.selectBackgroundType = .imageBox
  1487. item?.btnAction = #selector(_itemAction)
  1488. let menuItem = NSMenuItem.init(title: NSLocalizedString("Properties", comment: ""), action: #selector(_menuItemAction), target: self)
  1489. menuItem.representedObject = identifier
  1490. item?.menuFormRepresentation = menuItem
  1491. } else if identifier == KMToolbarToolRedactItemIdentifier {
  1492. item?.image = NSImage(named: "KMImageNameMainToolsRedact")
  1493. item?.target = self
  1494. item?.btnTag = KMToolbarType.redact.rawValue
  1495. item?.toolTip = NSLocalizedString("Redact", comment: "")
  1496. item?.titleName = NSLocalizedString("Redact", comment: "")
  1497. item?.selectBackgroundType = .imageBox
  1498. item?.btnAction = #selector(redactMenuAction)
  1499. item?.promptIdentifier = identifier
  1500. let menuItem = NSMenuItem.init(title: NSLocalizedString("Redact", comment: ""), action: #selector(redactMenuAction), target: self)
  1501. menuItem.tag = item!.btnTag
  1502. menuItem.representedObject = identifier
  1503. item?.menuFormRepresentation = menuItem
  1504. } else if identifier == KMDocumentDigitalSignToolbarItemIdentifier {
  1505. item?.image = NSImage(named: "DigitalSign_icon")
  1506. item?.target = self
  1507. 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: "")
  1508. item?.titleName = NSLocalizedString("Digital Sign", comment: "")
  1509. item?.selectBackgroundType = .imageBox
  1510. item?.boxImagePosition = .imageAbove
  1511. item?.btnAction = #selector(_itemAction)
  1512. item?.promptIdentifier = identifier
  1513. let menuItem = NSMenuItem.init(title: NSLocalizedString("Digital Sign", comment: ""), action: #selector(_menuItemAction), target: self)
  1514. menuItem.tag = item!.btnTag
  1515. menuItem.representedObject = identifier
  1516. item?.menuFormRepresentation = menuItem
  1517. } else if identifier == KMDocumentPreviousBackToolbarItemIdentifier {
  1518. let view = KMToolbarPreviousBackItemView()
  1519. item?.customizeView = view
  1520. view.callback = { [weak self] idx, _ in
  1521. if idx == 1 {
  1522. self?.delegate?.changePDFViewGoToForwardAction?()
  1523. } else if idx == 2 {
  1524. self?.delegate?.changePDFViewGotoBackAction?()
  1525. }
  1526. }
  1527. } else if identifier == KMDocumentFirstLastToolbarItemIdentifier {
  1528. let view = KMToolbarFirstLastItemView()
  1529. item?.customizeView = view
  1530. view.callback = { [weak self] idx, _ in
  1531. if let item = self?.toolbarItemFindItemIdentifiers(value: identifier!) {
  1532. self?.delegate?.toolbarViewController?(self!, viewItemDidClick: item, index: idx, info: nil)
  1533. }
  1534. }
  1535. } else if identifier == KMDocumentPageIndicatorToolbarItemIdentifier {
  1536. // let view = KMToolbarPageIndicatorItemView(zoomView: nil)
  1537. // item?.customizeView = view
  1538. } else if identifier == KMDocumentPresentationToolbarItemIdentifier {
  1539. item?.image = NSImage(named: "KMImageNameToolbarSlideshowNor")
  1540. item?.titleName = NSLocalizedString("Presentation", comment: "")
  1541. item?.selectBackgroundType = .imageBox
  1542. item?.boxImagePosition = .imageAbove
  1543. item?.target = self
  1544. item?.btnTag = KMToolbarType.conversion_image.rawValue
  1545. // item?.toolTip = NSLocalizedString("Convert PDF to JPEG, PNG, TIFF, BMP, GIF or TGA files", comment: "")
  1546. item?.btnAction = #selector(_itemAction)
  1547. item?.promptIdentifier = identifier
  1548. let menuItem = NSMenuItem(title: item?.titleName ?? "", action: #selector(_menuItemAction), keyEquivalent: "")
  1549. menuItem.target = self
  1550. menuItem.representedObject = identifier
  1551. item?.menuFormRepresentation = menuItem
  1552. } else if identifier == KMToolbarFixedSpaceItemIdentifier {
  1553. let view = NSView()
  1554. view.frame = NSMakeRect(0, 0, 36, 36)
  1555. item?.customizeView = view
  1556. } else if identifier == KMDocumentSignToolbarItemIdentifier {
  1557. item?.image = NSImage(named: "DigitalSign_icon")
  1558. item?.target = self
  1559. item?.toolTip = NSLocalizedString("Signature", comment: "")
  1560. item?.titleName = NSLocalizedString("Signature", comment: "")
  1561. item?.selectBackgroundType = .imageBox
  1562. item?.boxImagePosition = .imageAbove
  1563. item?.btnAction = #selector(_itemAction)
  1564. item?.promptIdentifier = identifier
  1565. let menuItem = NSMenuItem.init(title: NSLocalizedString("Signature", comment: ""), action: #selector(_menuItemAction), target: self)
  1566. menuItem.tag = item!.btnTag
  1567. menuItem.representedObject = identifier
  1568. item?.menuFormRepresentation = menuItem
  1569. }
  1570. }
  1571. private func _setupAnnotationItem(_ item: KMToolbarItemView?) {
  1572. let identifier = item?.itemIdentifier
  1573. if identifier == KMToolbarMoveToolModeItemIdentifier {
  1574. item?.titleName = NSLocalizedString("Scroll Tool", comment: "")
  1575. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsPantool)
  1576. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsPantoolHighlight")
  1577. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsPantoolHighlight")
  1578. item?.target = self
  1579. item?.btnTag = KMToolbarViewType.Move.rawValue
  1580. item?.isShowCustomToolTip = true
  1581. item?.toolTip = NSLocalizedString("Scroll Tool", comment: "")
  1582. item?.isPopToolTip = true
  1583. item?.boxImagePosition = .imageOnly
  1584. item?.btnAction = #selector(leftControllButtonAction)
  1585. } else if identifier == KMToolbarMagnifyToolModeItemIdentifier {
  1586. item?.titleName = NSLocalizedString("Magnify Tool", comment: "")
  1587. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsMagnifier)
  1588. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsMagnifierHighlight")
  1589. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsMagnifierHighlight")
  1590. item?.target = self
  1591. item?.btnTag = KMToolbarViewType.Magnify.rawValue
  1592. item?.isShowCustomToolTip = true
  1593. item?.toolTip = NSLocalizedString("Magnify Tool", comment: "")
  1594. item?.isPopToolTip = true
  1595. item?.boxImagePosition = .imageOnly
  1596. item?.btnAction = #selector(leftControllButtonAction)
  1597. } else if identifier == KMToolbarSelectToolModeItemIdentifier {
  1598. item?.titleName = NSLocalizedString("Content Selection Tool", comment: "")
  1599. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsContentsel)
  1600. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsContentselHighlight")
  1601. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsContentselHighlight")
  1602. item?.target = self
  1603. item?.btnTag = KMToolbarViewType.Select.rawValue
  1604. item?.isShowCustomToolTip = true
  1605. item?.toolTip = NSLocalizedString("Content Selection Tool", comment: "")
  1606. item?.isPopToolTip = true
  1607. item?.boxImagePosition = .imageOnly
  1608. item?.btnAction = #selector(leftControllButtonAction)
  1609. } else if identifier == KMToolbarZoomToSelectionItemIdentifier {
  1610. item?.titleName = NSLocalizedString("Zoom to selected area", comment: "")
  1611. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsAreazoom)
  1612. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsAreazoomHighlight")
  1613. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsAreazoomHighlight")
  1614. item?.target = self
  1615. item?.btnTag = KMToolbarViewType.SelectZoom.rawValue
  1616. item?.isShowCustomToolTip = true
  1617. item?.toolTip = NSLocalizedString("Zoom to selected area", comment: "")
  1618. item?.isPopToolTip = true
  1619. item?.boxImagePosition = .imageOnly
  1620. item?.btnAction = #selector(leftControllButtonAction)
  1621. } else if identifier == KMToolbarHighlightAnnotationItemIdentifier {
  1622. item?.titleName = NSLocalizedString("Highlight", comment: "")
  1623. // item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsUnderline)
  1624. let imageV = KMNoteTypeImageView()
  1625. let color = UserDefaults.standard.PDFListViewColor(forKey: CHighlightNoteColorKey) ?? .red
  1626. item?.image = imageV.noteTypeImage(withType: SKNHighlightString, color: color)
  1627. item?.selectedImage = imageV.noteTypeImage(withType: SKNHighlightStringHighlight, color: color)
  1628. item?.alternateImage = imageV.noteTypeImage(withType: SKNHighlightStringHighlight, color: color)
  1629. item?.target = self
  1630. item?.btnTag = CAnnotationType.highlight.rawValue
  1631. item?.isShowCustomToolTip = true
  1632. item?.toolTip = String(format: "%@ (⌃⌘H)", NSLocalizedString("Highlight", comment: ""))
  1633. item?.isPopToolTip = true
  1634. item?.boxImagePosition = .imageOnly
  1635. item?.btnAction = #selector(changeAnnotationMode)
  1636. } else if identifier == KMToolbarUnderlineAnnotationItemIdentifier {
  1637. item?.titleName = NSLocalizedString("Underline", comment: "")
  1638. // item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsUnderline)
  1639. let imageV = KMNoteTypeImageView()
  1640. let color = UserDefaults.standard.PDFListViewColor(forKey: CUnderlineNoteColorKey) ?? .red
  1641. item?.image = imageV.noteTypeImage(withType: SKNUnderlineString, color: color)
  1642. item?.selectedImage = imageV.noteTypeImage(withType: SKNUnderlineStringHighlight, color: color)
  1643. item?.alternateImage = imageV.noteTypeImage(withType: SKNUnderlineStringHighlight, color: color)
  1644. item?.target = self
  1645. item?.btnTag = CAnnotationType.underline.rawValue
  1646. item?.isShowCustomToolTip = true
  1647. item?.toolTip = String(format: "%@ (⇧⌘M)", NSLocalizedString("Underline", comment: ""))
  1648. item?.isPopToolTip = true
  1649. item?.boxImagePosition = .imageOnly
  1650. item?.btnAction = #selector(changeAnnotationMode)
  1651. } else if identifier == KMToolbarStrikeOutAnnotationItemIdentifier {
  1652. item?.titleName = NSLocalizedString("Strikethrough", comment: "")
  1653. // item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsStrikeout)
  1654. let imageV = KMNoteTypeImageView()
  1655. let color = UserDefaults.standard.PDFListViewColor(forKey: CStrikeOutNoteColorKey) ?? .red
  1656. item?.image = imageV.noteTypeImage(withType: SKNStrikeOutString, color: color)
  1657. item?.selectedImage = imageV.noteTypeImage(withType: SKNStrikeOutStringHighlight, color: color)
  1658. item?.alternateImage = imageV.noteTypeImage(withType: SKNStrikeOutStringHighlight, color: color)
  1659. item?.target = self
  1660. item?.btnTag = CAnnotationType.strikeOut.rawValue
  1661. item?.isShowCustomToolTip = true
  1662. item?.toolTip = String(format: "%@ (⌃⌘M)", NSLocalizedString("Strikethrough", comment: ""))
  1663. item?.isPopToolTip = true
  1664. item?.boxImagePosition = .imageOnly
  1665. item?.btnAction = #selector(changeAnnotationMode)
  1666. } else if identifier == KMToolbarSquigglyAnnotationItemIdentifier {
  1667. item?.titleName = NSLocalizedString("Squiggly", comment: "")
  1668. let imageV = KMNoteTypeImageView()
  1669. let color = UserDefaults.standard.PDFListViewColor(forKey: CSquigglyNoteColorKey)
  1670. item?.image = imageV.noteTypeImage(withType: "Squiggly", color: color ?? NSColor(red: 255/255.0, green: 115/255.0, blue: 22/255.0, alpha: 1.0))
  1671. item?.target = self
  1672. item?.btnTag = CAnnotationType.squiggly.rawValue
  1673. item?.isShowCustomToolTip = true
  1674. item?.toolTip = String(format: "%@ (⌃⌘W)", NSLocalizedString("Squiggly", comment: ""))
  1675. item?.isPopToolTip = true
  1676. item?.boxImagePosition = .imageOnly
  1677. item?.btnAction = #selector(changeAnnotationMode)
  1678. } else if identifier == KMToolbarInkAnnotationItemIdentifier {
  1679. item?.titleName = NSLocalizedString("Freehand", comment: "")
  1680. // item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsPen)
  1681. let imageV = KMNoteTypeImageView()
  1682. let color = UserDefaults.standard.PDFListViewColor(forKey: CInkNoteColorKey) ?? .red
  1683. item?.image = imageV.noteTypeImage(withType: SKNInkString, color: color)
  1684. item?.selectedImage = imageV.noteTypeImage(withType: SKNInkStringHighlight, color: color)
  1685. item?.alternateImage = imageV.noteTypeImage(withType: SKNInkStringHighlight, color: color)
  1686. item?.target = self
  1687. item?.btnTag = CAnnotationType.ink.rawValue
  1688. item?.isShowCustomToolTip = true
  1689. item?.toolTip = NSLocalizedString("Add freehand drawings by hand writing just like you do with a pen.", comment: "")
  1690. item?.isPopToolTip = true
  1691. item?.boxImagePosition = .imageOnly
  1692. item?.btnAction = #selector(changeAnnotationMode)
  1693. } else if identifier == KMToolbarEraserAnnotationItemIdentifier {
  1694. item?.titleName = NSLocalizedString("Eraser", comment: "")
  1695. // item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsPen)
  1696. let imageV = KMNoteTypeImageView()
  1697. let color = UserDefaults.standard.PDFListViewColor(forKey: CInkNoteColorKey) ?? .red
  1698. item?.image = imageV.noteTypeImage(withType: "eraser", color: color)
  1699. item?.target = self
  1700. item?.btnTag = CAnnotationType.eraser.rawValue
  1701. item?.isShowCustomToolTip = true
  1702. item?.toolTip = NSLocalizedString("Eraser", comment: "")
  1703. item?.isPopToolTip = true
  1704. item?.boxImagePosition = .imageOnly
  1705. item?.btnAction = #selector(changeAnnotationMode)
  1706. } else if identifier == KMToolbarFreeTextAnnotationItemIdentifier {
  1707. item?.titleName = NSLocalizedString("Text Note", comment: "")
  1708. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsText)
  1709. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsTextHighlight")
  1710. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsTextHighlight")
  1711. item?.target = self
  1712. item?.btnTag = CAnnotationType.freeText.rawValue
  1713. item?.isShowCustomToolTip = true
  1714. item?.toolTip = String(format: "%@ (⌘N)", NSLocalizedString("Text Note", comment: ""))
  1715. item?.isPopToolTip = true
  1716. item?.boxImagePosition = .imageOnly
  1717. item?.btnAction = #selector(changeAnnotationMode)
  1718. } else if identifier == KMToolbarAnchoredAnnotationItemIdentifier {
  1719. item?.titleName = NSLocalizedString("Anchored Note", comment: "")
  1720. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsNote)
  1721. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsNoteHighlight")
  1722. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsNoteHighlight")
  1723. item?.target = self
  1724. item?.btnTag = CAnnotationType.anchored.rawValue
  1725. item?.isShowCustomToolTip = true
  1726. item?.toolTip = String(format: "%@ (⌥⌘N)", NSLocalizedString("Anchored Note", comment: ""))
  1727. item?.isPopToolTip = true
  1728. item?.boxImagePosition = .imageOnly
  1729. item?.btnAction = #selector(changeAnnotationMode)
  1730. } else if identifier == KMToolbarSquareAnnotationItemIdentifier {
  1731. item?.titleName = NSLocalizedString("Rectangle", comment: "")
  1732. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsRec)
  1733. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsRecHighlight")
  1734. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsRecHighlight")
  1735. item?.target = self
  1736. item?.btnTag = CAnnotationType.square.rawValue
  1737. item?.isShowCustomToolTip = true
  1738. item?.toolTip = NSLocalizedString("Draw rectangle; draw square by holding Shift key", comment: "")
  1739. item?.isPopToolTip = true
  1740. item?.boxImagePosition = .imageOnly
  1741. item?.btnAction = #selector(changeAnnotationMode)
  1742. }else if identifier == KMToolbarCircleAnnotationItemIdentifier {
  1743. item?.titleName = NSLocalizedString("Circle", comment: "")
  1744. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsOval)
  1745. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsOvalHighlight")
  1746. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsOvalHighlight")
  1747. item?.target = self
  1748. item?.btnTag = CAnnotationType.circle.rawValue
  1749. item?.isShowCustomToolTip = true
  1750. item?.toolTip = NSLocalizedString("Draw oval; draw circle by holding Shift key", comment: "")
  1751. item?.isPopToolTip = true
  1752. item?.boxImagePosition = .imageOnly
  1753. item?.btnAction = #selector(changeAnnotationMode)
  1754. } else if identifier == KMToolbarArrowAnnotationItemIdentifier {
  1755. item?.titleName = NSLocalizedString("Arrow", comment: "")
  1756. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsArrow)
  1757. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsArrowHighlight")
  1758. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsArrowHighlight")
  1759. item?.target = self
  1760. item?.btnTag = CAnnotationType.arrow.rawValue
  1761. item?.isShowCustomToolTip = true
  1762. item?.toolTip = NSLocalizedString("Draw arrow; draw straight arrow by holding Shift key", comment: "")
  1763. item?.isPopToolTip = true
  1764. item?.boxImagePosition = .imageOnly
  1765. item?.btnAction = #selector(changeAnnotationMode)
  1766. } else if identifier == KMToolbarLineAnnotationItemIdentifier {
  1767. item?.titleName = NSLocalizedString("Line", comment: "")
  1768. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsLine)
  1769. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsLineHighlight")
  1770. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsLineHighlight")
  1771. item?.target = self
  1772. item?.btnTag = CAnnotationType.line.rawValue
  1773. item?.isShowCustomToolTip = true
  1774. item?.toolTip = NSLocalizedString("Draw line; draw straight line by holding Shift key", comment: "")
  1775. item?.isPopToolTip = true
  1776. item?.boxImagePosition = .imageOnly
  1777. item?.btnAction = #selector(changeAnnotationMode)
  1778. } else if identifier == KMToolbarLinkAnnotationItemIdentifier {
  1779. item?.titleName = NSLocalizedString("Link", comment: "")
  1780. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsLink)
  1781. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsLinkHighlight")
  1782. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsLinkHighlight")
  1783. item?.target = self
  1784. item?.btnTag = CAnnotationType.link.rawValue
  1785. item?.isShowCustomToolTip = true
  1786. item?.toolTip = NSLocalizedString("Select an area or text on a page for a link to be inserted.", comment: "")
  1787. item?.isPopToolTip = true
  1788. item?.boxImagePosition = .imageOnly
  1789. item?.btnAction = #selector(changeAnnotationMode)
  1790. } else if identifier == KMToolbarSignSignatureAnnotationItemIdentifier {
  1791. item?.titleName = NSLocalizedString("Signature", comment: "")
  1792. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsSign)
  1793. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsSignHighlight")
  1794. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsSignHighlight")
  1795. item?.target = self
  1796. item?.btnTag = CAnnotationType.signSignature.rawValue
  1797. item?.isShowCustomToolTip = true
  1798. item?.toolTip = NSLocalizedString("Add beautiful handwriting or use your trackpad to create your own signature.", comment: "")
  1799. item?.isPopToolTip = true
  1800. item?.boxImagePosition = .imageOnly
  1801. item?.btnAction = #selector(changeAnnotationMode)
  1802. } else if identifier == KMAnnotationStampToolbarItemIdentifier {
  1803. item?.titleName = NSLocalizedString("Stamp", comment: "")
  1804. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsStamp)
  1805. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsStampHighlight")
  1806. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsStampHighlight")
  1807. item?.target = self
  1808. item?.btnTag = CAnnotationType.stamp.rawValue
  1809. item?.isShowCustomToolTip = true
  1810. item?.toolTip = NSLocalizedString("Add New Stamp", comment: "")
  1811. item?.isPopToolTip = true
  1812. item?.boxImagePosition = .imageOnly
  1813. item?.btnAction = #selector(changeAnnotationMode)
  1814. } else if identifier == KMToolbarShowToolbarItemIdentifier {
  1815. item?.image = NSImage(named: "KMImageNameToolbarHide")
  1816. item?.selectedImage = NSImage(named: "KMImageNameToolbarShow")
  1817. item?.alternateImage = NSImage(named: "KMImageNameToolbarHide")
  1818. item?.selectedBackgroundColor = NSColor.clear
  1819. item?.target = self
  1820. item?.isShowCustomToolTip = true
  1821. item?.toolTip = NSLocalizedString("Hide", comment: "")
  1822. item?.isPopToolTip = true
  1823. item?.titleName = NSLocalizedString("Hide", comment: "")
  1824. item?.boxImagePosition = .imageOnly
  1825. item?.btnAction = #selector(showPDFLayoutMode)
  1826. let menuItem = NSMenuItem.init(title: NSLocalizedString("Hide", comment: ""), action: #selector(_menuItemAction), target: self)
  1827. item?.menuFormRepresentation = menuItem
  1828. menuItem.representedObject = identifier
  1829. } else if identifier == KMToolbarAnnotationSettingItemIdentifier {
  1830. item?.image = NSImage(named: "KMImageNameUXIconBtnSetNor")
  1831. item?.target = self
  1832. item?.isShowCustomToolTip = true
  1833. item?.toolTip = String(format: "%@\n%@", NSLocalizedString("Customize Toolbar", comment: ""),NSLocalizedString("Drag-and-drop tools to change their order", comment: ""))
  1834. item?.isPopToolTip = true
  1835. item?.titleName = NSLocalizedString("Setting", comment: "")
  1836. item?.boxImagePosition = .imageOnly
  1837. item?.btnAction = #selector(_itemAction)
  1838. item?.selectBackgroundType = .imageBox
  1839. } else if identifier == KMAnnotationImageToolbarItemIdentifier {
  1840. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsImage)
  1841. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsImageHighlight")
  1842. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsImageHighlight")
  1843. item?.target = self
  1844. item?.titleName = NSLocalizedString("Image", comment: "")
  1845. item?.isShowCustomToolTip = true
  1846. item?.toolTip = NSLocalizedString("Choose an image to insert in a page.", comment: "")
  1847. item?.isPopToolTip = true
  1848. item?.boxImagePosition = .imageOnly
  1849. item?.btnAction = #selector(_itemAction)
  1850. } else if identifier == KMAnnotationTableToolbarItemIdentifier {
  1851. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarMytoolsTable)
  1852. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsTableHighlight")
  1853. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarMytoolsTableHighlight")
  1854. item?.target = self
  1855. item?.btnTag = CAnnotationType.table.rawValue
  1856. item?.titleName = NSLocalizedString("Table", comment: "")
  1857. item?.isShowCustomToolTip = true
  1858. item?.toolTip = NSLocalizedString("Table", comment: "")
  1859. item?.isPopToolTip = true
  1860. item?.boxImagePosition = .imageOnly
  1861. item?.btnAction = #selector(_itemAction)
  1862. let menuItem = NSMenuItem.init(title: NSLocalizedString("Table", comment: ""), action: #selector(_menuItemAction), target: self)
  1863. item?.menuFormRepresentation = menuItem
  1864. menuItem.representedObject = identifier
  1865. }
  1866. }
  1867. private func _setupEditItem(_ item: KMToolbarItemView?) {
  1868. let identifier = item?.itemIdentifier
  1869. if identifier == KMToolbarAddTextEditPDFItemIdentifier {
  1870. item?.image = NSImage(named: "KMImageNameButtonEidtPDFText")
  1871. item?.selectedImage = NSImage(named: "KMImageNameButtonEidtPDFTextHighlight")
  1872. item?.alternateImage = NSImage(named: "KMImageNameButtonEidtPDFTextHighlight")
  1873. item?.target = self
  1874. item?.btnTag = CAnnotationType.addText.rawValue
  1875. item?.toolTip = NSLocalizedString("Add Text", comment: "")
  1876. item?.titleName = NSLocalizedString("Add Text", comment: "")
  1877. item?.boxImagePosition = .imageLeft
  1878. item?.btnAction = #selector(changeAnnotationMode)
  1879. } else if identifier == KMToolbarAddImageEditPDFItemIdentifier {
  1880. item?.image = NSImage(named: "KMImageNameButtonEidtPDFImage")
  1881. item?.selectedImage = NSImage(named: "KMImageNameButtonEidtPDFImageHighlight")
  1882. item?.alternateImage = NSImage(named: "KMImageNameButtonEidtPDFImageHighlight")
  1883. item?.target = self
  1884. item?.btnTag = CAnnotationType.addImage.rawValue
  1885. item?.toolTip = NSLocalizedString("Add Image", comment: "")
  1886. item?.titleName = NSLocalizedString("Add Image", comment: "")
  1887. item?.boxImagePosition = .imageLeft
  1888. item?.btnAction = #selector(changeAnnotationMode)
  1889. }
  1890. }
  1891. private func _setupConvertItem(_ item: KMToolbarItemView?) {
  1892. let identifier = item?.itemIdentifier
  1893. if identifier == KMToolbarConversionWordItemIdentifier {
  1894. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertWord)
  1895. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertWordHighlight")
  1896. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertWordHighlight")
  1897. item?.target = self
  1898. item?.btnTag = KMToolbarType.word.rawValue
  1899. 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: "")
  1900. item?.titleName = NSLocalizedString("To Word", comment: "")
  1901. item?.boxImagePosition = .imageLeft
  1902. item?.btnAction = #selector(conversionMenuItemAction)
  1903. item?.promptIdentifier = identifier
  1904. let menuItem = NSMenuItem.init(title: NSLocalizedString("To Word", comment: ""), action: #selector(_menuItemAction), target: self)
  1905. menuItem.representedObject = identifier
  1906. item?.menuFormRepresentation = menuItem
  1907. } else if identifier == KMToolbarConversionExcelItemIdentifier {
  1908. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertExcel)
  1909. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertExcelHighlight")
  1910. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertExcelHighlight")
  1911. item?.target = self
  1912. item?.btnTag = KMToolbarType.excel.rawValue
  1913. 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: "")
  1914. item?.titleName = NSLocalizedString("To Excel", comment: "")
  1915. item?.boxImagePosition = .imageLeft
  1916. item?.btnAction = #selector(conversionMenuItemAction)
  1917. item?.promptIdentifier = identifier
  1918. let menuItem = NSMenuItem.init(title: NSLocalizedString("To Excel", comment: ""), action: #selector(_menuItemAction), target: self)
  1919. menuItem.representedObject = identifier
  1920. item?.menuFormRepresentation = menuItem
  1921. } else if identifier == KMToolbarConversionPPTItemIdentifier {
  1922. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertPPT)
  1923. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertPPTHighlight")
  1924. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertPPTHighlight")
  1925. item?.target = self
  1926. item?.btnTag = KMToolbarType.ppt.rawValue
  1927. item?.toolTip = NSLocalizedString("When you use PDFull 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: "")
  1928. item?.titleName = NSLocalizedString("To PPT", comment: "")
  1929. item?.boxImagePosition = .imageLeft
  1930. item?.btnAction = #selector(conversionMenuItemAction)
  1931. item?.promptIdentifier = identifier
  1932. let menuItem = NSMenuItem.init(title: NSLocalizedString("To PPT", comment: ""), action: #selector(_menuItemAction), target: self)
  1933. menuItem.representedObject = identifier
  1934. item?.menuFormRepresentation = menuItem
  1935. } else if identifier == KMToolbarConversionRTFItemIdentifier {
  1936. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertRTF)
  1937. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertRTFHighlight")
  1938. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertRTFHighlight")
  1939. item?.target = self
  1940. item?.btnTag = KMToolbarType.rtf.rawValue
  1941. item?.toolTip = NSLocalizedString("Turn PDF documents into Rich Text Format (RTF) files that can be opened in virtually any word processor.", comment: "")
  1942. item?.titleName = NSLocalizedString("To RTF", comment: "")
  1943. item?.boxImagePosition = .imageLeft
  1944. item?.btnAction = #selector(conversionMenuItemAction)
  1945. item?.promptIdentifier = identifier
  1946. let menuItem = NSMenuItem.init(title: NSLocalizedString("To RTF", comment: ""), action: #selector(_menuItemAction), target: self)
  1947. menuItem.representedObject = identifier
  1948. item?.menuFormRepresentation = menuItem
  1949. } else if identifier == KMToolbarConversionCSVItemIdentifier {
  1950. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertCSV)
  1951. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertCSVHighlight")
  1952. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertCSVHighlight")
  1953. item?.target = self
  1954. item?.btnTag = KMToolbarType.csv.rawValue
  1955. item?.toolTip = NSLocalizedString("PDF To CSV", comment: "")
  1956. item?.titleName = NSLocalizedString("To CSV", comment: "")
  1957. item?.boxImagePosition = .imageLeft
  1958. item?.btnAction = #selector(conversionMenuItemAction)
  1959. item?.promptIdentifier = identifier
  1960. let menuItem = NSMenuItem.init(title: NSLocalizedString("To CSV", comment: ""), action: #selector(_menuItemAction), target: self)
  1961. menuItem.representedObject = identifier
  1962. item?.menuFormRepresentation = menuItem
  1963. } else if identifier == KMToolbarConversionHTMLItemIdentifier {
  1964. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertHtml)
  1965. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertHtmlHighlight")
  1966. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertHtmlHighlight")
  1967. item?.target = self
  1968. item?.btnTag = KMToolbarType.html.rawValue
  1969. item?.toolTip = NSLocalizedString("PDF To HTML", comment: "")
  1970. item?.titleName = NSLocalizedString("To HTML", comment: "")
  1971. item?.boxImagePosition = .imageLeft
  1972. item?.btnAction = #selector(conversionMenuItemAction)
  1973. let menuItem = NSMenuItem.init(title: NSLocalizedString("To HTML", comment: ""), action: #selector(_menuItemAction), target: self)
  1974. menuItem.representedObject = identifier
  1975. item?.menuFormRepresentation = menuItem
  1976. } else if identifier == KMToolbarConversionTextItemIdentifier {
  1977. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertText)
  1978. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertTextHighlight")
  1979. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertTextHighlight")
  1980. item?.target = self
  1981. item?.btnTag = KMToolbarType.conversion_text.rawValue
  1982. item?.toolTip = NSLocalizedString("PDF To Text", comment: "")
  1983. item?.titleName = NSLocalizedString("To Text", comment: "")
  1984. item?.boxImagePosition = .imageLeft
  1985. item?.btnAction = #selector(conversionMenuItemAction)
  1986. let menuItem = NSMenuItem.init(title: NSLocalizedString("To Text", comment: ""), action: #selector(_menuItemAction), target: self)
  1987. menuItem.representedObject = identifier
  1988. item?.menuFormRepresentation = menuItem
  1989. } else if identifier == KMToolbarConversionImageToPDFItemIdentifier {
  1990. item?.image = NSImage(named: KMImageNameToolbarImageToPDF)
  1991. item?.target = self
  1992. item?.btnTag = KMToolbarType.conversion_imageToPDF.rawValue
  1993. item?.toolTip = NSLocalizedString("Image To PDF", comment: "")
  1994. item?.titleName = NSLocalizedString("Image To PDF", comment: "")
  1995. item?.boxImagePosition = .imageLeft
  1996. item?.btnAction = #selector(conversionMenuItemAction)
  1997. let menuItem = NSMenuItem.init(title: NSLocalizedString("Image To PDF", comment: ""), action: #selector(_menuItemAction), target: self)
  1998. menuItem.representedObject = identifier
  1999. item?.menuFormRepresentation = menuItem
  2000. }
  2001. else if identifier == KMToolbarConversionOtherItemIdentifier {
  2002. item?.image = NSImage(named: "KMImageNameToolbarPDFToOther")
  2003. item?.target = self
  2004. item?.btnTag = KMToolbarType.conversion_other.rawValue
  2005. item?.titleName = NSLocalizedString("To Other", comment: "")
  2006. item?.boxImagePosition = .imageExpandLeft
  2007. item?.needExpandAction = true
  2008. item?.btnAction = nil
  2009. item?.promptIdentifier = identifier
  2010. let menuItem = NSMenuItem.init(title: item?.titleName ?? "", action: nil, target: self)
  2011. let subMenu = NSMenu()
  2012. let textI = subMenu.addItem_r(title: NSLocalizedString("To Text", comment: ""), action: #selector(_menuItemAction), target: self, tag: KMPDFConvertType.text.rawValue)
  2013. textI?.representedObject = identifier
  2014. let rtfI = subMenu.addItem_r(title: NSLocalizedString("To RTF", comment: ""), action: #selector(_menuItemAction), target: self, tag: KMPDFConvertType.rtf.rawValue)
  2015. rtfI?.representedObject = identifier
  2016. let htmlI = subMenu.addItem_r(title: NSLocalizedString("To HTML", comment: ""), action: #selector(_menuItemAction), target: self, tag: KMPDFConvertType.html.rawValue)
  2017. htmlI?.representedObject = identifier
  2018. let csvI = subMenu.addItem_r(title: NSLocalizedString("To CSV", comment: ""), action: #selector(_menuItemAction), target: self, tag: KMPDFConvertType.csv.rawValue)
  2019. csvI?.representedObject = identifier
  2020. let jsonI = subMenu.addItem_r(title: NSLocalizedString("To Json", comment: ""), action: #selector(_menuItemAction), target: self, tag: KMPDFConvertType.json.rawValue)
  2021. jsonI?.representedObject = identifier
  2022. menuItem.submenu = subMenu
  2023. item?.menuFormRepresentation = menuItem
  2024. }
  2025. else if identifier == KMToolbarConversionImageItemIdentifier {
  2026. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertPDFToIMG)
  2027. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertPDFToIMGHighlight")
  2028. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertPDFToIMGHighlight")
  2029. item?.target = self
  2030. item?.btnTag = KMToolbarType.conversion_image.rawValue
  2031. // item?.toolTip = NSLocalizedString("Convert PDF to JPEG, PNG, TIFF, BMP, GIF or TGA files", comment: "")
  2032. item?.titleName = NSLocalizedString("To Image", comment: "")
  2033. item?.boxImagePosition = .imageExpandLeft
  2034. item?.needExpandAction = true
  2035. item?.btnAction = #selector(convertToImage)
  2036. item?.promptIdentifier = identifier
  2037. let menuItem = NSMenuItem.init(title: item?.titleName ?? "", action: nil, target: self)
  2038. let subMenu = NSMenu()
  2039. subMenu.addItem(title: NSLocalizedString("PDF To JPEG", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.jpeg.rawValue)
  2040. subMenu.addItem(title: NSLocalizedString("PDF To JPG", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.jpg.rawValue)
  2041. subMenu.addItem(title: NSLocalizedString("PDF To PNG", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.png.rawValue)
  2042. subMenu.addItem(title: NSLocalizedString("PDF To GIF", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.gif.rawValue)
  2043. subMenu.addItem(title: NSLocalizedString("PDF To TIFF", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.tiff.rawValue)
  2044. subMenu.addItem(title: NSLocalizedString("PDF To TGA", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.tga.rawValue)
  2045. subMenu.addItem(title: NSLocalizedString("PDF To BMP", comment: ""), action: #selector(_pdfToImageAction), target: self, tag: KMPDFConvertType.bmp.rawValue)
  2046. menuItem.submenu = subMenu
  2047. item?.menuFormRepresentation = menuItem
  2048. } else if item?.itemIdentifier == KMToolbarConversionExportImageItemIdentifier {
  2049. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertExportImage)
  2050. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertExportImageHighlight")
  2051. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertExportImageHighlight")
  2052. item?.target = self
  2053. item?.titleName = NSLocalizedString("Extract Images", comment: "")
  2054. item?.boxImagePosition = .imageExpandLeft
  2055. item?.needExpandAction = true
  2056. item?.promptIdentifier = identifier
  2057. let menuItem = NSMenuItem.init(title: item?.titleName ?? "", action: nil, target: self)
  2058. let subMenu = NSMenu()
  2059. subMenu.addItem(title: NSLocalizedString("Extract All Images", comment: ""), action: #selector(_exportImageAction), target: self, tag: 1)
  2060. subMenu.addItem(title: NSLocalizedString("Extract Images", comment: ""), action: #selector(_exportImageAction), target: self, tag: 2)
  2061. menuItem.submenu = subMenu
  2062. item?.menuFormRepresentation = menuItem
  2063. } else if item?.itemIdentifier == KMToolbarConversionOCRIdentifier {
  2064. item?.titleName = NSLocalizedString("OCR", comment: "")
  2065. item?.target = self
  2066. item?.image = NSImage(named: "KMImageNameToolbarOCRNorSec")
  2067. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertOCRHighlight")
  2068. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertOCRHighlight")
  2069. item?.boxImagePosition = .imageLeft
  2070. item?.toolTip = NSLocalizedString("Recognize text from Image-based or Scanned PDF with OCR", comment: "")
  2071. item?.btnAction = #selector(OCRbtnAction2)
  2072. let menuItem = NSMenuItem.init(title: NSLocalizedString("OCR", comment: ""), action: #selector(_menuItemAction), target: self)
  2073. menuItem.representedObject = KMToolbarConversionOCRIdentifier
  2074. item?.menuFormRepresentation = menuItem
  2075. } else if item?.itemIdentifier == KMToolbarConversionCreatePDFItemIdentifier {
  2076. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarConvertCreatPDF)
  2077. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertCreatpdfHighlight")
  2078. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarConvertCreatpdfHighlight")
  2079. item?.target = self
  2080. item?.titleName = NSLocalizedString("New PDF Document", comment: "")
  2081. item?.boxImagePosition = .imageExpandLeft
  2082. item?.needExpandAction = true
  2083. let menuItem = NSMenuItem.init(title: "New PDF Document", action: nil, target: self)
  2084. let subMenu = NSMenu()
  2085. subMenu.addItem(title: NSLocalizedString("New Blank Page", comment: ""), action: #selector(_newPDFAction), target: self, tag: 1)
  2086. subMenu.addItem(title: NSLocalizedString("New From Images", comment: ""), action: #selector(_newPDFAction), target: self, tag: 2)
  2087. subMenu.addItem(NSMenuItem.separator())
  2088. subMenu.addItem(title: NSLocalizedString("New From Web Page", comment: ""), action: #selector(_newPDFAction), target: self, tag: 3)
  2089. subMenu.addItem(title: NSLocalizedString("Import From Camera", comment: ""), action: #selector(_newPDFAction), target: self, tag: 4)
  2090. subMenu.addItem(NSMenuItem.separator())
  2091. subMenu.addItem(title: NSLocalizedString("Import From Scanner", comment: ""), action: #selector(_newPDFAction), target: self, tag: 5)
  2092. menuItem.submenu = subMenu
  2093. item?.menuFormRepresentation = menuItem
  2094. }
  2095. }
  2096. @objc func convertToImage(_ sender: KMToolbarItem) {
  2097. // if let subMenu = sender.menuFormRepresentation?.submenu {
  2098. // subMenu.popUp(positioning: nil, at: sender.frame.origin, in: sender.superview)
  2099. // }
  2100. }
  2101. private func _setupFillSignItem(_ item: KMToolbarItemView?) {
  2102. let identifier = item?.itemIdentifier
  2103. if identifier == KMToolbarToolHookItemIdentifier {
  2104. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignTick)
  2105. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignTickHighlight")
  2106. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignTickHighlight")
  2107. item?.target = self
  2108. item?.btnTag = CAnnotationType.signTure.rawValue
  2109. item?.toolTip = NSLocalizedString("Signature", comment: "")
  2110. item?.titleName = NSLocalizedString("Signature", comment: "")
  2111. item?.boxImagePosition = .imageOnly
  2112. item?.btnAction = #selector(changeAnnotationMode)
  2113. } else if identifier == KMToolbarToolForkItemIdentifier {
  2114. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignFork)
  2115. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignForkHighlight")
  2116. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignForkHighlight")
  2117. item?.target = self
  2118. item?.btnTag = CAnnotationType.signFalse.rawValue
  2119. item?.toolTip = NSLocalizedString("Add X", comment: "")
  2120. item?.boxImagePosition = .imageOnly
  2121. item?.btnAction = #selector(changeAnnotationMode)
  2122. } else if identifier == KMToolbarToolLineItemIdentifier {
  2123. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignLine)
  2124. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignLineHighlight")
  2125. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignLineHighlight")
  2126. item?.target = self
  2127. item?.btnTag = CAnnotationType.signLine.rawValue
  2128. item?.toolTip = NSLocalizedString("Add line", comment: "")
  2129. item?.boxImagePosition = .imageOnly
  2130. item?.btnAction = #selector(changeAnnotationMode)
  2131. } else if identifier == KMToolbarToolDotItemIdentifier {
  2132. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignPoint)
  2133. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignPointHighlight")
  2134. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignPointHighlight")
  2135. item?.target = self
  2136. item?.btnTag = CAnnotationType.signDot.rawValue
  2137. item?.toolTip = NSLocalizedString("Add dot", comment: "")
  2138. item?.boxImagePosition = .imageOnly
  2139. item?.btnAction = #selector(changeAnnotationMode)
  2140. } else if identifier == KMToolbarToolRectangleIdentifier {
  2141. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignRoundedrec)
  2142. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignRoundedrecHighlight")
  2143. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignRoundedrecHighlight")
  2144. item?.target = self
  2145. item?.btnTag = CAnnotationType.signCircle.rawValue
  2146. item?.toolTip = NSLocalizedString("Add circle", comment: "")
  2147. item?.boxImagePosition = .imageOnly
  2148. item?.btnAction = #selector(changeAnnotationMode)
  2149. } else if identifier == KMToolbarToolTextIdentifier {
  2150. item?.image = NSImage(named: KMImageNameToolbarFreeText)
  2151. item?.selectedImage = NSImage(named: "KMImageNameToolbarFreeTextHighlight")
  2152. item?.alternateImage = NSImage(named: "KMImageNameToolbarFreeTextHighlight")
  2153. item?.target = self
  2154. item?.btnTag = CAnnotationType.signText.rawValue
  2155. item?.toolTip = NSLocalizedString("Add text", comment: "")
  2156. item?.titleName = NSLocalizedString("Text", comment: "")
  2157. item?.boxImagePosition = .imageOnly
  2158. item?.btnAction = #selector(changeAnnotationMode)
  2159. } else if identifier == KMToolbarToolDateIdentifier {
  2160. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignDate)
  2161. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignDateHighlight")
  2162. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignDateHighlight")
  2163. item?.target = self
  2164. item?.btnTag = CAnnotationType.signDate.rawValue
  2165. item?.toolTip = NSLocalizedString("Date", comment: "")
  2166. item?.boxImagePosition = .imageOnly
  2167. item?.btnAction = #selector(changeAnnotationMode)
  2168. } else if (identifier == KMToolbarToolProfileIdentifier) {
  2169. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignMyprofile)
  2170. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignMyprofileHighlight")
  2171. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignMyprofileHighlight")
  2172. item?.target = self
  2173. item?.toolTip = NSLocalizedString("My Profile", comment: "")
  2174. item?.boxImagePosition = .imageOnly
  2175. item?.btnAction = #selector(_itemAction)
  2176. }else if (identifier == KMToolbarFillSignSignatureIdentifier) {
  2177. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFillsignMysignature)
  2178. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignMysignatureHighlight")
  2179. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFillsignMysignatureHighlight")
  2180. item?.target = self
  2181. item?.btnTag = CAnnotationType.signSignature.rawValue
  2182. item?.toolTip = NSLocalizedString("Sign document by typing or drawing a signature", comment: "")
  2183. item?.boxImagePosition = .imageOnly
  2184. item?.btnAction = #selector(changeAnnotationMode)
  2185. }
  2186. }
  2187. private func _setupFormItem(_ item: KMToolbarItemView?) {
  2188. let identifier = item?.itemIdentifier
  2189. if identifier == KMToolbarToolTextFieldItemIdentifier {
  2190. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormTextfield)
  2191. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFormTextfieldHighlight")
  2192. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFormTextfieldHighlight")
  2193. item?.target = self
  2194. item?.btnTag = CAnnotationType.textField.rawValue
  2195. item?.toolTip = NSLocalizedString("Text Field", comment: "")
  2196. item?.titleName = NSLocalizedString("Text Field", comment: "")
  2197. item?.boxImagePosition = .imageLeft
  2198. item?.btnAction = #selector(changeAnnotationMode)
  2199. let menuItem = NSMenuItem.init(title: "TextField", action: #selector(changeAnnotationMode), target: self)
  2200. menuItem.tag = item!.btnTag
  2201. item?.menuFormRepresentation = menuItem
  2202. } else if identifier == KMToolbarToolCheckBoxItemIdentifier {
  2203. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormCheckbox)
  2204. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFormCheckboxHighlight")
  2205. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFormCheckboxHighlight")
  2206. item?.target = self
  2207. item?.btnTag = CAnnotationType.checkBox.rawValue
  2208. item?.toolTip = NSLocalizedString("Check Box", comment: "")
  2209. item?.titleName = NSLocalizedString("Check Box", comment: "")
  2210. item?.boxImagePosition = .imageLeft
  2211. item?.btnAction = #selector(changeAnnotationMode)
  2212. } else if identifier == KMToolbarToolRadioButtonItemIdentifier {
  2213. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormRadiobutton)
  2214. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFormRadiobuttonHighlight")
  2215. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFormRadiobuttonHighlight")
  2216. item?.target = self
  2217. item?.btnTag = CAnnotationType.radioButton.rawValue
  2218. item?.toolTip = NSLocalizedString("Radio Button", comment: "")
  2219. item?.titleName = NSLocalizedString("Radio Button", comment: "")
  2220. item?.boxImagePosition = .imageLeft
  2221. item?.btnAction = #selector(changeAnnotationMode)
  2222. let menuItem = NSMenuItem.init(title: "RadioButton", action: #selector(changeAnnotationMode), target: self)
  2223. menuItem.tag = item!.btnTag
  2224. item?.menuFormRepresentation = menuItem
  2225. } else if identifier == KMToolbarToolListBoxItemIdentifier {
  2226. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormListbox)
  2227. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFormListboxHighlight")
  2228. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFormListboxHighlight")
  2229. item?.target = self
  2230. item?.btnTag = CAnnotationType.listMenu.rawValue
  2231. item?.toolTip = NSLocalizedString("List Box", comment: "")
  2232. item?.titleName = NSLocalizedString("List Box", comment: "")
  2233. item?.boxImagePosition = .imageLeft
  2234. item?.btnAction = #selector(changeAnnotationMode)
  2235. let menuItem = NSMenuItem.init(title: "List Box", action: #selector(changeAnnotationMode), target: self)
  2236. menuItem.tag = item!.btnTag
  2237. item?.menuFormRepresentation = menuItem
  2238. } else if identifier == KMToolbarToolPullDownmenuItemIdentifier {
  2239. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormPulldownmenu)
  2240. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFormPulldownmenuHighlight")
  2241. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFormPulldownmenuHighlight")
  2242. item?.target = self
  2243. item?.btnTag = CAnnotationType.comboBox.rawValue
  2244. item?.toolTip = NSLocalizedString("Combo Box", comment: "")
  2245. item?.titleName = NSLocalizedString("Combo Box", comment: "")
  2246. item?.boxImagePosition = .imageLeft
  2247. item?.btnAction = #selector(changeAnnotationMode)
  2248. let menuItem = NSMenuItem.init(title: "PullDownmenu", action: #selector(changeAnnotationMode), target: self)
  2249. menuItem.tag = item!.btnTag
  2250. item?.menuFormRepresentation = menuItem
  2251. } else if identifier == KMToolbarToolButtonIdentifier {
  2252. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormButton)
  2253. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFormButtonHighlight")
  2254. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFormButtonHighlight")
  2255. item?.target = self
  2256. item?.btnTag = CAnnotationType.actionButton.rawValue
  2257. item?.toolTip = NSLocalizedString("Button", comment: "")
  2258. item?.titleName = NSLocalizedString("Button", comment: "")
  2259. item?.boxImagePosition = .imageLeft
  2260. item?.btnAction = #selector(changeAnnotationMode)
  2261. let menuItem = NSMenuItem.init(title: "Button", action: #selector(changeAnnotationMode), target: self)
  2262. menuItem.tag = item!.btnTag
  2263. item?.menuFormRepresentation = menuItem
  2264. } else if identifier == KMToolbarToolSignBoxIdentifier {
  2265. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarFormSign)
  2266. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarFormSignHighlight")
  2267. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarFormSignHighlight")
  2268. item?.target = self
  2269. item?.btnTag = CAnnotationType.signature.rawValue
  2270. item?.toolTip = NSLocalizedString("Add Electronic Signature", comment: "")
  2271. item?.titleName = NSLocalizedString("Add Electronic Signature", comment: "")
  2272. item?.boxImagePosition = .imageLeft
  2273. item?.btnAction = #selector(changeAnnotationMode)
  2274. let menuItem = NSMenuItem.init(title: "SignBox", action: #selector(changeAnnotationMode), target: self)
  2275. menuItem.tag = item!.btnTag
  2276. item?.menuFormRepresentation = menuItem
  2277. } else if identifier == KMToolbarToolFormAlignIdentifier {
  2278. item?.image = NSImage(named: KMImageNameUXIconPropertybarAlignLeftToor)
  2279. item?.selectedImage = NSImage(named: "KMImageNameUXIconPropertybarAlignLeftToorHighlight")
  2280. item?.alternateImage = NSImage(named: "KMImageNameUXIconPropertybarAlignLeftToorHighlight")
  2281. item?.target = self
  2282. // item?.toolTip = NSLocalizedString("Alignment", comment: "")
  2283. item?.titleName = NSLocalizedString("", comment: "")
  2284. item?.boxImagePosition = .imageExpandLeft
  2285. item?.needExpandAction = true
  2286. item?.btnAction = #selector(formsAlignmentAction)
  2287. item?.pdfView = self.pdfView
  2288. let menuItem = NSMenuItem.init(title: "Alignment", action: nil, target: self)
  2289. let subMenu = NSMenu()
  2290. subMenu.addItem(title: NSLocalizedString("Align Left", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignLeftNor", action: #selector(formsAlignmentAction), target: self, tag: 0)
  2291. subMenu.addItem(title: NSLocalizedString("Align Vertically", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignVercenterNor", action: #selector(formsAlignmentAction), target: self, tag: 1)
  2292. subMenu.addItem(title: NSLocalizedString("Align Right", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignRightNor", action: #selector(formsAlignmentAction), target: self, tag: 2)
  2293. subMenu.addItem(NSMenuItem.separator())
  2294. subMenu.addItem(title: NSLocalizedString("Align Top", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignUpNor", action: #selector(formsAlignmentAction), target: self, tag: 3)
  2295. subMenu.addItem(title: NSLocalizedString("Align Horizontally", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignHorcenterNor", action: #selector(formsAlignmentAction), target: self, tag: 4)
  2296. subMenu.addItem(title: NSLocalizedString("Align Bottom", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignDownNor", action: #selector(formsAlignmentAction), target: self, tag: 5)
  2297. subMenu.addItem(NSMenuItem.separator())
  2298. subMenu.addItem(title: NSLocalizedString("Distribute Horizontally", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignHorsplitNor", action: #selector(formsAlignmentAction), target: self, tag: 6)
  2299. subMenu.addItem(title: NSLocalizedString("Distribute Vertically", comment: ""), imageNamed: "KMImageNameUXIconPropertybarAlignVersplitNor", action: #selector(formsAlignmentAction), target: self, tag: 7)
  2300. menuItem.submenu = subMenu
  2301. menuItem.tag = item!.btnTag
  2302. item?.menuFormRepresentation = menuItem
  2303. } else if identifier == KMToolbarToolFormMoreIdentifier {
  2304. item?.image = NSImage(named: "KMImageNameMainToolFormMore")
  2305. item?.selectedImage = NSImage(named: "KMImageNameMainToolFormMoreHighlight")
  2306. item?.alternateImage = NSImage(named: "KMImageNameMainToolFormMoreHighlight")
  2307. item?.target = self
  2308. item?.toolTip = NSLocalizedString("More", comment: "")
  2309. item?.titleName = NSLocalizedString("More", comment: "")
  2310. item?.boxImagePosition = .imageExpandLeft
  2311. item?.btnAction = #selector(formsMoreOperationAction)
  2312. let menuItem = NSMenuItem.init(title: "More", action: #selector(formsMoreOperationAction), target: self)
  2313. menuItem.tag = item!.btnTag
  2314. item?.menuFormRepresentation = menuItem
  2315. }
  2316. }
  2317. private func _setupViewDisplayItem(_ item: KMToolbarItemView?) {
  2318. let identifier = item?.itemIdentifier
  2319. if identifier == KMToolbarViewSettingIdentifier {
  2320. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarDisplayView)
  2321. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarDisplayViewHighlight")
  2322. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarDisplayViewHighlight")
  2323. item?.target = self
  2324. item?.toolTip = NSLocalizedString("View Settings", comment: "")
  2325. item?.titleName = NSLocalizedString("View Settings", comment: "")
  2326. item?.boxImagePosition = .imageLeft
  2327. item?.btnAction = #selector(_itemAction)
  2328. } else if identifier == KMToolbarCropIdentifier {
  2329. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarDisplayTailor)
  2330. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarDisplayTailorHighlight")
  2331. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarDisplayTailorHighlight")
  2332. item?.target = self
  2333. // item?.toolTip = NSLocalizedString("Note: Cropping a PDF hides some of the PDF’s content without removing it.", comment: "")
  2334. item?.titleName = NSLocalizedString("Crop", comment: "")
  2335. item?.boxImagePosition = .imageExpandLeft
  2336. item?.needExpandAction = true
  2337. // item?.btnAction = #selector(cropMenuAction)
  2338. let menuItem = NSMenuItem.init(title: NSLocalizedString("Crop", comment: ""), action: #selector(cropMenuAction), target: self)
  2339. let subMenu = NSMenu()
  2340. // subMenu.addItem(title: NSLocalizedString("Crop All Pages", comment: ""), action: #selector(_cropAction), target: self, tag: 1)
  2341. subMenu.addItem(title: NSLocalizedString("Crop Current Page", comment: ""), action: #selector(_cropAction), target: self, tag: 2)
  2342. subMenu.addItem(title: NSLocalizedString("Auto Crop – Separate", comment: ""), action: #selector(_cropAction), target: self, tag: 3)
  2343. subMenu.addItem(title: NSLocalizedString("Auto Crop – Combined", comment: ""), action: #selector(_cropAction), target: self, tag: 4)
  2344. subMenu.addItem(title: NSLocalizedString("Select Area", comment: ""), action: #selector(_cropAction), target: self, tag: 5)
  2345. // subMenu.addItem(title: NSLocalizedString("Crop Options...", comment: ""), action: #selector(_cropAction), target: self, tag: 6)
  2346. menuItem.submenu = subMenu
  2347. item?.menuFormRepresentation = menuItem
  2348. } else if identifier == KMToolbarSnapshotIdentifier {
  2349. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarDisplaySnapshot)
  2350. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarDisplaySnapshotHighlight")
  2351. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarDisplaySnapshotHighlight")
  2352. item?.target = self
  2353. item?.toolTip = NSLocalizedString("Take Snapshot", comment: "")
  2354. item?.titleName = NSLocalizedString("Snapshot", comment: "")
  2355. item?.boxImagePosition = .imageLeft
  2356. item?.btnAction = #selector(_itemAction)
  2357. } else if identifier == KMToolbarTTSIdentifier {
  2358. item?.image = NSImage(named: KMImageNameUXIconSubtoolbarDisplayTTS)
  2359. item?.selectedImage = NSImage(named: "KMImageNameUXIconSubtoolbarDisplayTTSHighlight")
  2360. item?.alternateImage = NSImage(named: "KMImageNameUXIconSubtoolbarDisplayTTSHighlight")
  2361. item?.target = self
  2362. item?.toolTip = NSLocalizedString("TTS (Text-to-speech)", comment: "")
  2363. item?.titleName = NSLocalizedString("TTS", comment: "")
  2364. item?.boxImagePosition = .imageLeft
  2365. item?.btnAction = #selector(_itemAction)
  2366. }
  2367. }
  2368. private func _setupToolItem(_ item: KMToolbarItemView?) {
  2369. let identifier = item?.itemIdentifier
  2370. if identifier == KMToolbarToolCropItemIdentifier {
  2371. item?.image = NSImage(named: "KMImageNameMainToolsCrop")
  2372. item?.alternateImage = NSImage(named: "KMImageNameMainToolsCrop")
  2373. item?.target = self
  2374. item?.btnTag = KMToolbarType.crop.rawValue
  2375. item?.toolTip = NSLocalizedString("Crop pages", comment: "")
  2376. item?.titleName = NSLocalizedString("Crop", comment: "")
  2377. item?.boxImagePosition = .imageExpandLeft
  2378. item?.btnAction = #selector(cropMenuAction)
  2379. let menuItem = NSMenuItem.init(title: "Crop", action: #selector(cropMenuAction), target: self)
  2380. item?.menuFormRepresentation = menuItem
  2381. } else if identifier == KMToolbarComparisonItemIdentifier {
  2382. item?.image = NSImage(named: KMImageNameUXIconBatchComparison)
  2383. item?.selectedImage = NSImage(named: "KMImageNameUXIconBatchComparisonHighlight")
  2384. item?.alternateImage = NSImage(named: "KMImageNameUXIconBatchComparisonHighlight")
  2385. item?.target = self
  2386. item?.btnTag = KMToolbarType.comparison.rawValue
  2387. item?.titleName = NSLocalizedString("Compare", comment: "")
  2388. item?.boxImagePosition = .imageExpandLeft
  2389. item?.needExpandAction = true
  2390. let menuItem = NSMenuItem.init(title: NSLocalizedString("Compare", comment: ""), action: nil, target: self)
  2391. let subMenu = NSMenu()
  2392. subMenu.addItem(title: NSLocalizedString("Side-by-Side View", comment: ""), action: #selector(_comparisonAction), target: self, tag: 1)
  2393. subMenu.addItem(title: NSLocalizedString("Compare by File Overlay", comment: ""), action: #selector(_comparisonAction), target: self, tag: 2)
  2394. menuItem.submenu = subMenu
  2395. item?.menuFormRepresentation = menuItem
  2396. } else if identifier == KMToolbarToolBatesItemIdentifier {
  2397. item?.image = NSImage(named: "KMImageNameUXIconBatchBatesNor")
  2398. item?.selectedImage = NSImage(named: "KMImageNameUXIconBatchBatesNorHighlight")
  2399. item?.alternateImage = NSImage(named: "KMImageNameUXIconBatchBatesNorHighlight")
  2400. item?.target = self
  2401. item?.btnTag = KMToolbarType.bates.rawValue
  2402. item?.titleName = NSLocalizedString("Bates Numbers", comment: "")
  2403. item?.boxImagePosition = .imageExpandLeft
  2404. item?.needExpandAction = true
  2405. let menuItem = NSMenuItem.init(title: NSLocalizedString("Bates Numbers", comment: ""), action: nil, target: self)
  2406. let subMenu = NSMenu()
  2407. subMenu.addItem(title: NSLocalizedString("Add Bates Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 1)
  2408. subMenu.addItem(title: NSLocalizedString("Remove Bates Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 2)
  2409. subMenu.addItem(title: NSLocalizedString("Batch Add Batch Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 3)
  2410. subMenu.addItem(title: NSLocalizedString("Batch Remove Bates Numbers", comment: ""), action: #selector(_batesAction), target: self, tag: 4)
  2411. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_batesAction), target: self, tag: 5)
  2412. menuItem.submenu = subMenu
  2413. item?.menuFormRepresentation = menuItem
  2414. } else if identifier == KMToolbarAIItemIdentifier {
  2415. item?.image = NSImage(named: "KMImageNameUXIconAINor")
  2416. item?.target = self
  2417. item?.btnTag = KMToolbarType.aiTools.rawValue
  2418. item?.titleName = NSLocalizedString("AI Tools", comment: "")
  2419. item?.boxImagePosition = .imageExpandLeft
  2420. item?.needExpandAction = true
  2421. let menuItem = NSMenuItem.init(title: "AI Tools", action: nil, target: self)
  2422. let subMenu = NSMenu()
  2423. // subMenu.addItem(title: NSLocalizedString("AI Summarize", comment: ""), action: #selector(_AIAction), target: self, tag: 1)
  2424. // subMenu.addItem(title: NSLocalizedString("AI Rewrite", comment: ""), action: #selector(_AIAction), target: self, tag: 2)
  2425. // subMenu.addItem(title: NSLocalizedString("AI Proofread", comment: ""), action: #selector(_AIAction), target: self, tag: 3)
  2426. // subMenu.addItem(title: NSLocalizedString("AI Translate", comment: ""), action: #selector(_AIAction), target: self, tag: 4)
  2427. menuItem.submenu = subMenu
  2428. item?.menuFormRepresentation = menuItem
  2429. } else if identifier == KMToolbarToolHeaderFooterItemIdentifier {
  2430. item?.image = NSImage(named: "KMImageNameUXIconBatchHeaderandfooterNor")
  2431. item?.selectedImage = NSImage(named: "KMImageNameUXIconBatchHeaderandfooterNorHighlight")
  2432. item?.alternateImage = NSImage(named: "KMImageNameUXIconBatchHeaderandfooterNorHighlight")
  2433. item?.target = self
  2434. item?.btnTag = KMToolbarType.headerAndFooter.rawValue
  2435. item?.titleName = NSLocalizedString("Header & Footer", comment: "")
  2436. item?.boxImagePosition = .imageExpandLeft
  2437. item?.needExpandAction = true
  2438. let menuItem = NSMenuItem.init(title: NSLocalizedString("Header & Footer", comment: ""), action: nil, target: self)
  2439. let subMenu = NSMenu()
  2440. subMenu.addItem(title: NSLocalizedString("Add Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 1)
  2441. subMenu.addItem(title: NSLocalizedString("Remove Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 2)
  2442. subMenu.addItem(title: NSLocalizedString("Batch Add Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 3)
  2443. subMenu.addItem(title: NSLocalizedString("Batch Remove Header & Footer", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 4)
  2444. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_headerfooterAction), target: self, tag: 5)
  2445. menuItem.submenu = subMenu
  2446. item?.menuFormRepresentation = menuItem
  2447. } else if identifier == KMToolbarToolBackgroundItemIdentifier {
  2448. item?.image = NSImage(named: "KMImageNameUXIconBatchBackgroundNor")
  2449. item?.selectedImage = NSImage(named: "KMImageNameUXIconBatchBackgroundNorHighlight")
  2450. item?.alternateImage = NSImage(named: "KMImageNameUXIconBatchBackgroundNorHighlight")
  2451. item?.target = self
  2452. item?.btnTag = KMToolbarType.background.rawValue
  2453. item?.titleName = NSLocalizedString("Background", comment: "")
  2454. item?.boxImagePosition = .imageExpandLeft
  2455. item?.needExpandAction = true
  2456. let menuItem = NSMenuItem.init(title: NSLocalizedString("Background", comment: ""), action: nil, target: self)
  2457. let subMenu = NSMenu()
  2458. subMenu.addItem(title: NSLocalizedString("Add Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 1)
  2459. subMenu.addItem(title: NSLocalizedString("Remove Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 2)
  2460. subMenu.addItem(title: NSLocalizedString("Batch Add Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 3)
  2461. subMenu.addItem(title: NSLocalizedString("Batch Remove Background", comment: ""), action: #selector(_backgroundAction), target: self, tag: 4)
  2462. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_backgroundAction), target: self, tag: 5)
  2463. menuItem.submenu = subMenu
  2464. item?.menuFormRepresentation = menuItem
  2465. } else if identifier == KMToolbarToolWatermarkItemIdentifier {
  2466. item?.image = NSImage(named: "KMImageNameUXIconBatchWatermarkNor")
  2467. item?.selectedImage = NSImage(named: "KMImageNameUXIconBatchWatermarkNorHighlight")
  2468. item?.alternateImage = NSImage(named: "KMImageNameUXIconBatchWatermarkNorHighlight")
  2469. item?.target = self
  2470. item?.btnTag = KMToolbarType.watermark.rawValue
  2471. item?.titleName = NSLocalizedString("Watermark", comment: "")
  2472. item?.boxImagePosition = .imageExpandLeft
  2473. item?.needExpandAction = true
  2474. let menuItem = NSMenuItem.init(title: NSLocalizedString("Watermark", comment: ""), action: nil, target: self)
  2475. let subMenu = NSMenu()
  2476. subMenu.addItem(title: NSLocalizedString("Add Watermark", comment: ""), action: #selector(_watermarkAction), target: self, tag: 1)
  2477. subMenu.addItem(title: NSLocalizedString("Remove Watermark", comment: ""), action: #selector(_watermarkAction), target: self, tag: 2)
  2478. subMenu.addItem(title: NSLocalizedString("Batch Add Watermarks", comment: ""), action: #selector(_watermarkAction), target: self, tag: 3)
  2479. subMenu.addItem(title: NSLocalizedString("Batch Remove Watermarks", comment: ""), action: #selector(_watermarkAction), target: self, tag: 4)
  2480. subMenu.addItem(title: NSLocalizedString("Manage Templates", comment: ""), action: #selector(_watermarkAction), target: self, tag: 5)
  2481. menuItem.submenu = subMenu
  2482. item?.menuFormRepresentation = menuItem
  2483. } else if identifier == KMToolbarToolCompressItemIdentifier {
  2484. item?.image = NSImage(named: "KMImageNameUXIconBatchOptimizeNor")
  2485. item?.selectedImage = NSImage(named: "KMImageNameUXIconBatchOptimizeNorHighlight")
  2486. item?.alternateImage = NSImage(named: "KMImageNameUXIconBatchOptimizeNorHighlight")
  2487. item?.target = self
  2488. item?.btnTag = KMToolbarType.compress.rawValue
  2489. item?.boxImagePosition = .imageLeft
  2490. item?.toolTip = NSLocalizedString("Reduce file size", comment: "")
  2491. item?.titleName = NSLocalizedString("Compress", comment: "")
  2492. item?.btnAction = #selector(compressMenuAction)
  2493. let menuItem = NSMenuItem.init(title: NSLocalizedString("Compress", comment: ""), action: #selector(_menuItemAction), target: self)
  2494. item?.menuFormRepresentation = menuItem
  2495. menuItem.representedObject = identifier
  2496. } else if identifier == KMToolbarToolSecureItemIdentifier {
  2497. item?.image = NSImage(named: "KMImageNameUXIconBatchSafeNor")
  2498. item?.selectedImage = NSImage(named: "KMImageNameUXIconBatchSafeNorHighlight")
  2499. item?.alternateImage = NSImage(named: "KMImageNameUXIconBatchSafeNorHighlight")
  2500. item?.target = self
  2501. item?.titleName = NSLocalizedString("Security", comment: "")
  2502. item?.boxImagePosition = .imageExpandLeft
  2503. item?.needExpandAction = true
  2504. let menuItem = NSMenuItem.init(title: NSLocalizedString("Security", comment: ""), action: nil, target: self)
  2505. let subMenu = NSMenu()
  2506. subMenu.addItem(title: NSLocalizedString("Set Passwords", comment: ""), action: #selector(_secureAction), target: self, tag: 1)
  2507. subMenu.addItem(title: NSLocalizedString("Remove Security", comment: ""), action: #selector(_secureAction), target: self, tag: 2)
  2508. menuItem.submenu = subMenu
  2509. item?.menuFormRepresentation = menuItem
  2510. }else if identifier == KMToolbarToolMergeItemIdentifier {
  2511. item?.image = NSImage(named: "KMImageNameUXIconBatchMergeNor")
  2512. item?.selectedImage = NSImage(named: "KMImageNameUXIconBatchMergeNorHighlight")
  2513. item?.alternateImage = NSImage(named: "KMImageNameUXIconBatchMergeNorHighlight")
  2514. item?.target = self
  2515. item?.btnTag = KMToolbarType.merge.rawValue
  2516. item?.toolTip = NSLocalizedString("Combine multiple documents into a new PDF, or borrow individual pages", comment: "")
  2517. item?.titleName = NSLocalizedString("Merge", comment: "")
  2518. item?.boxImagePosition = .imageLeft
  2519. item?.btnAction = #selector(mergeMenuItemAction)
  2520. let menuItem = NSMenuItem.init(title: NSLocalizedString("Merge", comment: ""), action: #selector(_menuItemAction), target: self)
  2521. item?.menuFormRepresentation = menuItem
  2522. menuItem.representedObject = identifier
  2523. } else if identifier == KMToolbarMeasureItemIdentifier {
  2524. item?.image = NSImage(named: "KMImageNameToolbarMeasure")
  2525. item?.target = self
  2526. item?.titleName = NSLocalizedString("Measure", comment: "")
  2527. item?.boxImagePosition = .imageExpandLeft
  2528. item?.needExpandAction = true
  2529. item?.btnAction = #selector(_itemAction)
  2530. let menuItem = NSMenuItem.init(title: NSLocalizedString("Measure", comment: ""), action: nil, target: self)
  2531. let subMenu = NSMenu()
  2532. subMenu.addItem(title: NSLocalizedString("Line", comment: ""), action: #selector(_measureAction), target: self, tag: 1)
  2533. subMenu.addItem(title: NSLocalizedString("Multilines", comment: ""), action: #selector(_measureAction), target: self, tag: 2)
  2534. subMenu.addItem(title: NSLocalizedString("Polygon", comment: ""), action: #selector(_measureAction), target: self, tag: 3)
  2535. subMenu.addItem(title: NSLocalizedString("Rectangle", comment: ""), action: #selector(_measureAction), target: self, tag: 4)
  2536. menuItem.submenu = subMenu
  2537. item?.menuFormRepresentation = menuItem
  2538. }
  2539. }
  2540. private func _setupSignItem(_ item: KMToolbarItemView?) {
  2541. let identifier = item?.itemIdentifier
  2542. if identifier == KMSignDigitalSignToolbarItemIdentifier {
  2543. item?.image = NSImage(named: "KMImageNameToolbarDigitalSign")
  2544. item?.target = self
  2545. 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: "")
  2546. item?.titleName = NSLocalizedString("Digital Sign", comment: "")
  2547. // item?.selectBackgroundType = .imageBox
  2548. item?.boxImagePosition = .imageLeft
  2549. item?.btnAction = #selector(_itemAction)
  2550. item?.promptIdentifier = identifier
  2551. let menuItem = NSMenuItem.init(title: NSLocalizedString("Digital Sign", comment: ""), action: #selector(_menuItemAction), target: self)
  2552. menuItem.tag = item!.btnTag
  2553. menuItem.representedObject = identifier
  2554. item?.menuFormRepresentation = menuItem
  2555. }
  2556. }
  2557. }
  2558. extension KMToolbarViewController: NSMenuItemValidation {
  2559. func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
  2560. if menuItem.action == #selector(toggleCaseInsensitiveSearch) {
  2561. menuItem.state = KMDataManager.ud_integer(forKey: SKCaseInsensitiveSearchKey) == 1 ? .on : .off
  2562. } else if menuItem.action == #selector(formsAlignmentAction) {
  2563. let cnt = self.pdfView?.activeAnnotations.count ?? 0
  2564. if menuItem.tag < 6 {
  2565. if cnt >= 2 {
  2566. return true
  2567. }
  2568. } else {
  2569. if cnt >= 3 {
  2570. return true
  2571. }
  2572. }
  2573. return false
  2574. }
  2575. return true
  2576. }
  2577. }
  2578. extension KMToolbarViewController {
  2579. func isEnable(isEnable: Bool = true) {
  2580. for item in toolbarItems {
  2581. let itemView: KMToolbarMainItemView = item.value as? KMToolbarMainItemView ?? KMToolbarMainItemView()
  2582. itemView.unEnabled = !isEnable
  2583. itemView.isSelected = false
  2584. if let cv = itemView.customizeView {
  2585. self.subviewsdEnable(view: cv, isEnable: isEnable)
  2586. }
  2587. }
  2588. }
  2589. func subviewsdEnable(view: NSView, isEnable: Bool) {
  2590. if let data = view as? NSButton {
  2591. data.isEnabled = isEnable
  2592. }
  2593. if let data = (view as? NSTextField) {
  2594. data.isEnabled = isEnable
  2595. }
  2596. for subview in view.subviews {
  2597. if subview.subviews.count != 0 {
  2598. self.subviewsdEnable(view: subview, isEnable: isEnable)
  2599. }
  2600. if let data = subview as? NSButton {
  2601. data.isEnabled = isEnable
  2602. }
  2603. if let data = (subview as? NSTextField) {
  2604. data.isEnabled = isEnable
  2605. }
  2606. }
  2607. }
  2608. }
  2609. extension KMToolbarViewController {
  2610. func refreshSearchBarMenu() {
  2611. let words = UserDefaults.standard.array(forKey: "kmDocumentSearchWordArrays") as? [String] ?? []
  2612. let searchMenu = NSMenu()
  2613. // for word in words {
  2614. // var truncatedWord = word
  2615. // if word.count > 15 {
  2616. // truncatedWord = String(word.prefix(15)) + "..."
  2617. // }
  2618. // let item = searchMenu.addItem(withTitle: truncatedWord, action: #selector(searchPDFKeyWord(_:)), keyEquivalent: "")
  2619. // item.representedObject = word
  2620. // }
  2621. let attributes: [NSAttributedString.Key: Any] = [.font: NSFont(name: "Helvetica", size: 12.0)!]
  2622. // if !words.isEmpty {
  2623. // let attributedString = NSAttributedString(string: NSLocalizedString("Search History", comment: ""), attributes: attributes)
  2624. // let item = NSMenuItem()
  2625. // item.attributedTitle = attributedString
  2626. // searchMenu.insertItem(item, at: 0)
  2627. // searchMenu.addItem(NSMenuItem.separator())
  2628. //
  2629. // let attributedString1 = NSAttributedString(string: NSLocalizedString("Clear Search History", comment: ""), attributes: attributes)
  2630. // let item1 = NSMenuItem()
  2631. // item1.attributedTitle = attributedString1
  2632. // item1.action = #selector(clearSearchWordHistory(_:))
  2633. // item1.target = self
  2634. // searchMenu.addItem(item1)
  2635. //
  2636. // searchMenu.insertItem(NSMenuItem.separator(), at: 0)
  2637. // }
  2638. //
  2639. // let attributedString2 = NSAttributedString(string: NSLocalizedString("Ignore Case", comment: ""), attributes: attributes)
  2640. // let ignoreItem = NSMenuItem()
  2641. // ignoreItem.attributedTitle = attributedString2
  2642. // ignoreItem.action = #selector(toggleCaseInsensitiveSearch)
  2643. // ignoreItem.target = self
  2644. // searchMenu.insertItem(ignoreItem, at: 0)
  2645. let attri = NSAttributedString(string: NSLocalizedString("Search", comment: ""), attributes: attributes)
  2646. let item = NSMenuItem()
  2647. item.attributedTitle = attri
  2648. item.action = #selector(searchItemAction)
  2649. item.target = self
  2650. searchMenu.insertItem(item, at: 0)
  2651. let attri2 = NSAttributedString(string: NSLocalizedString("Replace", comment: ""), attributes: attributes)
  2652. let item2 = NSMenuItem()
  2653. item2.attributedTitle = attri2
  2654. item2.action = #selector(replaceItemAction)
  2655. item2.target = self
  2656. searchMenu.insertItem(item2, at: 1)
  2657. (self.searchField.cell as? NSSearchFieldCell)?.searchMenuTemplate = searchMenu
  2658. }
  2659. @objc func searchItemAction(_ sender: NSMenuItem) {
  2660. let item = self.toolbarItemFindItemIdentifiers(value: KMDocumentSearchToolbarItemIdentifier)
  2661. if item.itemIdentifier == KMDocumentSearchToolbarItemIdentifier {
  2662. self.delegate?.toolbarViewController?(self, menuItemDidClick: item, index: 11, info: nil)
  2663. }
  2664. }
  2665. @objc func replaceItemAction(_ sender: NSMenuItem) {
  2666. let item = self.toolbarItemFindItemIdentifiers(value: KMDocumentSearchToolbarItemIdentifier)
  2667. if item.itemIdentifier == KMDocumentSearchToolbarItemIdentifier {
  2668. self.delegate?.toolbarViewController?(self, menuItemDidClick: item, index: 12, info: nil)
  2669. }
  2670. }
  2671. @objc func toggleCaseInsensitiveSearch(_ sender: NSMenuItem) {
  2672. var value = KMDataManager.ud_integer(forKey: SKCaseInsensitiveSearchKey)
  2673. KMDataManager.ud_set(value == 0 ? 1 : 0, forKey: SKCaseInsensitiveSearchKey)
  2674. // let caseInsensitive = UserDefaults.standard.bool(forKey: "SKCaseInsensitiveFindKey")
  2675. // UserDefaults.standard.set(!caseInsensitive, forKey: "SKCaseInsensitiveFindKey")
  2676. self.searchPDFKey(self.searchField.stringValue)
  2677. }
  2678. @objc func searchPDFKeyWord(_ item: NSMenuItem) {
  2679. guard let word = item.representedObject as? String else {
  2680. return
  2681. }
  2682. self.searchPDFKey(word)
  2683. }
  2684. func searchPDFKey(_ string: String) {
  2685. self.searchField.stringValue = string
  2686. self.delegate?.toolbarViewController?(self, searchAction: string, forward: true)
  2687. let word = string
  2688. var words = UserDefaults.standard.array(forKey: "kmDocumentSearchWordArrays") as? [String] ?? []
  2689. var mutableWords = words
  2690. if let index = mutableWords.firstIndex(of: word) {
  2691. mutableWords.remove(at: index)
  2692. }
  2693. mutableWords.insert(word, at: 0)
  2694. if mutableWords.count > 10 {
  2695. mutableWords.removeLast()
  2696. }
  2697. UserDefaults.standard.set(mutableWords, forKey: "kmDocumentSearchWordArrays")
  2698. UserDefaults.standard.synchronize()
  2699. refreshSearchBarMenu()
  2700. }
  2701. @objc func clearSearchWordHistory(_ sender: Any) {
  2702. UserDefaults.standard.removeObject(forKey: "kmDocumentSearchWordArrays")
  2703. UserDefaults.standard.synchronize()
  2704. refreshSearchBarMenu()
  2705. }
  2706. }