KMToolbarViewController.swift 147 KB

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