KMToolbarViewController.swift 157 KB

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