AppDelegate+MenuAction.swift 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071
  1. //
  2. // AppDelegate+MenuAction.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by Niehaoyu on 2025/1/2.
  6. //
  7. import Foundation
  8. //MARK: - NSMenuDelegate
  9. extension AppDelegate: NSMenuDelegate, NSMenuItemValidation {
  10. func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
  11. let action = menuItem.action
  12. if self.isPDFReaderProMenuActions(sel: action) {
  13. return self.validatePDFReaderProMenuItem(menuItem)
  14. } else if self.isFileMenuActions(sel: action) {
  15. return self.validateFileMenuItem(menuItem)
  16. } else if self.isEditMenuActions(sel: action) {
  17. return self.validateEditMenuItem(menuItem)
  18. } else if self.isViewMenuActions(sel: action) {
  19. return self.validateViewMenuItem(menuItem)
  20. } else if self.isGoMenuActions(sel: action) {
  21. return self.validateGoMenuItem(menuItem)
  22. } else if self.isWindowMenuActions(sel: action) {
  23. return self.validateWindowMenuItem(menuItem)
  24. } else if self.isHelpMenuActions(sel: action) {
  25. return self.validateHelpMenuItem(menuItem)
  26. }
  27. // if (action == #selector(sharePageItemAction)) {
  28. // guard let _windowC = NSApp.mainWindow?.windowController as? KMBrowserWindowController else {
  29. // return false
  30. // }
  31. //
  32. // let isHome = _windowC.browser?.activeTabContents()?.isHome ?? false
  33. // return !isHome
  34. // }
  35. // if action == #selector(menuItemAction_closeDocument) {
  36. // guard let _windowC = NSApp.mainWindow?.windowController as? KMBrowserWindowController else {
  37. // if NSApp.mainWindow?.windowController != nil {
  38. // return true
  39. // }
  40. // return false
  41. // }
  42. // let isNewTab = _windowC.browser?.activeTabContents()?.isNewTab ?? false
  43. // if isNewTab {
  44. // return true
  45. // }
  46. // }
  47. return false
  48. }
  49. func updateLoginMenuItem() {
  50. let firstItem = NSApp.mainMenu?.item(at: 0)?.submenu
  51. if firstItem != nil {
  52. let item1 = firstItem?.item(withTag: 11)
  53. let item2 = firstItem?.item(withTag: 12)
  54. let item3 = firstItem?.item(withTag: 13)
  55. let item4 = firstItem?.item(withTag: 14)
  56. let item6 = firstItem?.item(withTag: kKMMainMenuAccountRefreshItemTag)
  57. item1?.isHidden = true
  58. item2?.isHidden = true
  59. item3?.isHidden = true
  60. item4?.isHidden = true
  61. item6?.isHidden = true
  62. }
  63. }
  64. @objc func clickOutline(menuItem: NSMenuItem) {
  65. KMPrint("更新菜单栏")
  66. }
  67. func menu(_ menu: NSMenu, update item: NSMenuItem, at index: Int, shouldCancel: Bool) -> Bool {
  68. return true
  69. }
  70. // MARK: - update Menu
  71. func initMainMenu() {
  72. // 处理菜单栏多语
  73. let mainMenu = NSApp.mainMenu
  74. if (mainMenu == nil) {
  75. return
  76. }
  77. for menu in mainMenu!.items {
  78. let subMenu = menu.submenu
  79. for item in subMenu!.items {
  80. item.title = NSLocalizedString(item.title, comment: "")
  81. let itemSubMenu = item.submenu
  82. if (itemSubMenu == nil) {
  83. continue
  84. }
  85. for item in itemSubMenu!.items {
  86. item.title = NSLocalizedString(item.title, comment: "")
  87. let itemSubMenu = item.submenu
  88. if (itemSubMenu == nil) {
  89. continue
  90. }
  91. for item in itemSubMenu!.items {
  92. item.title = NSLocalizedString(item.title, comment: "")
  93. }
  94. }
  95. }
  96. }
  97. // let PDFOfficeMenu = mainMenu?.item(at: 0)?.submenu
  98. //#if VERSION_DMG
  99. // _ = PDFOfficeMenu?.insertItem(withTitle: NSLocalizedString("Check for Updates", comment: ""), action: #selector(checkForUpdates), target: self, at: 3)
  100. // _ = PDFOfficeMenu?.insertItem(withTitle: NSLocalizedString("Enter License", comment: ""), action: #selector(enterLicense), target: self, at: 4)
  101. // if VerificationManager.default().needUpgradeLicense {
  102. // _ = PDFOfficeMenu?.insertItem(withTitle: NSLocalizedString("PDF to Office Pack", comment: ""), action: #selector(pdftoOfficeMenuItemAction), target: self, at: 5)
  103. // }
  104. //
  105. // let accountRefreshItem = PDFOfficeMenu?.insertItem(withTitle: NSLocalizedString("Account Refresh", comment: ""), action: #selector(accountRefreshAction), target: self, at: 8)
  106. // accountRefreshItem?.tag = kKMMainMenuAccountRefreshItemTag
  107. //#endif
  108. //#if !VERSION_DMG
  109. // _ = PDFOfficeMenu?.insertItem(withTitle: NSLocalizedString("Restore Previous Purchase", comment: ""), action: #selector(restoreSubscriptions), target: self, at: 1)
  110. //#endif
  111. // if let items = PDFOfficeMenu?.items {
  112. // for menu in items {
  113. //
  114. // }
  115. // }
  116. // if let item = PDFOfficeMenu?.item(withTitle: NSLocalizedString("Volume Discount", comment: "")) {
  117. // item.isHidden = true
  118. // }
  119. // if let item = PDFOfficeMenu?.item(withTitle: NSLocalizedString("One License for Mac and Windows", comment: "")) {
  120. // item.isHidden = true
  121. // }
  122. // if let item = PDFOfficeMenu?.item(withTitle: NSLocalizedString("Education Discount", comment: "")) {
  123. // item.isHidden = true
  124. // }
  125. //
  126. let fileMenu = mainMenu?.item(at: 1)?.submenu
  127. for item in fileMenu?.items ?? [] {
  128. if item.action == NSSelectorFromString("menuItemAction_showInFinder:") {
  129. let shareItem: NSMenuItem? = NSMenuItem(title: KMLocalizedString("Share"), action: nil, target: nil)
  130. fileMenu?.insertItem(shareItem!, at: item.index)
  131. shareItem?.submenu = NSSharingServicePicker.menu(forSharingItems: [""], subjectContext: "", withTarget: self, selector: #selector(sharePageItemAction), serviceDelegate: nil)
  132. }
  133. }
  134. }
  135. @objc func sharePageItemAction(sender: NSMenuItem) {
  136. if ((NSApp.mainWindow?.windowController is KMBrowserWindowController) == false) {
  137. return
  138. }
  139. let windowControler = NSApp.mainWindow?.windowController as! KMBrowserWindowController
  140. let model = windowControler.browser?.tabStripModel
  141. if let cnt = model?.count(), cnt <= 0 {
  142. return
  143. }
  144. if let data = model?.activeTabContents()?.isHome, data {
  145. return
  146. }
  147. let document: KMMainDocument = model?.activeTabContents() as! KMMainDocument
  148. if let data = document.mainViewController?.saveWatermarkFlag, !data {
  149. let represent : NSSharingService = sender.representedObject as! NSSharingService
  150. represent.perform(withItems: [document.fileURL as Any])
  151. return
  152. }
  153. let represent : NSSharingService = sender.representedObject as! NSSharingService
  154. represent.perform(withItems: [document.fileURL as Any])
  155. }
  156. @objc func accountRefreshAction() {
  157. }
  158. }
  159. // MARK: - PDF Reader Pro Menu
  160. extension AppDelegate {
  161. func isPDFReaderProMenuActions(sel: Selector?) -> Bool {
  162. guard let selector = sel else {
  163. return false
  164. }
  165. let selectors = [NSSelectorFromString("menuItemAction_openPreferenceWindow:"),
  166. NSSelectorFromString("menuItemAction_loginMenuItemAction:"),
  167. NSSelectorFromString("menuItemAction_logoutMenuItemAction:"),
  168. NSSelectorFromString("menuItemAction_buyNowItemAction:"),
  169. NSSelectorFromString("menuItemAction_restoreMenuItemAction:"),
  170. NSSelectorFromString("menuItemAction_EducationDiscountAction:"),
  171. NSSelectorFromString("menuItemAction_volumeDiscount:")]
  172. if selectors.contains(selector) {
  173. return true
  174. }
  175. return false
  176. }
  177. func validatePDFReaderProMenuItem(_ menuItem: NSMenuItem) -> Bool {
  178. return true
  179. }
  180. //MARK: -IBAction
  181. @IBAction func menuItemAction_openPreferenceWindow(_ sender: Any) {
  182. SettingsWindowController.shared.showWindow(self)
  183. }
  184. @IBAction func menuItemAction_loginMenuItemAction(_ sender: Any) {
  185. }
  186. @IBAction func menuItemAction_logoutMenuItemAction(_ sender: Any) {
  187. }
  188. @IBAction func menuItemAction_buyNowItemAction(_ sender: Any) {
  189. }
  190. @IBAction func menuItemAction_restoreMenuItemAction(_ sender: Any) {
  191. }
  192. @IBAction func menuItemAction_EducationDiscountAction(_ sender: NSMenuItem) {
  193. KMTools.openEducateWebSite()
  194. }
  195. @IBAction func menuItemAction_volumeDiscount(_ sender: NSMenuItem) {
  196. KMTools.openVPPWebSite()
  197. }
  198. }
  199. //MARK: - File Menu
  200. extension AppDelegate {
  201. func isFileMenuActions(sel: Selector?) -> Bool {
  202. guard let selector = sel else {
  203. return false
  204. }
  205. let selectors = [NSSelectorFromString("menuItemAction_NewFromFile:"),
  206. NSSelectorFromString("menuItemAction_NewFromWeb:"),
  207. NSSelectorFromString("menuItemAction_NewFromClipboard:"),
  208. NSSelectorFromString("menuItemAction_NewFromScanner:"),
  209. NSSelectorFromString("menuItemAction_NewFromBlankPage:"),
  210. NSSelectorFromString("menuItemAction_NewFromWindow:"),
  211. NSSelectorFromString("menuItemAction_MergePDFFiles:"),
  212. NSSelectorFromString("menuItemAction_closeDocument:"),
  213. NSSelectorFromString("menuItemAction_closeWindow:"),
  214. NSSelectorFromString("menuItemAction_closeAllWindows:"),
  215. NSSelectorFromString("menuItemClick_saveAsFlattenedPDF:"),
  216. NSSelectorFromString("menuItemClick_Compress:"),
  217. NSSelectorFromString("menuItemAction_ConvertTo:"),
  218. NSSelectorFromString("menuItemAction_addPassword:"),
  219. NSSelectorFromString("menuItemAction_removePassword:"),
  220. NSSelectorFromString("menuItemAction_unlockFunction:"),
  221. NSSelectorFromString("menuItemAction_searchPDF:"),
  222. NSSelectorFromString("menuItemAction_performFindPanelAction:"),
  223. NSSelectorFromString("menuItemAction_showInFinder:"),
  224. NSSelectorFromString("menuItemAction_property:"),
  225. NSSelectorFromString("menuItemAction_print:"),
  226. NSSelectorFromString("menuItemAction_customPrint:")]
  227. if selectors.contains(selector) {
  228. return true
  229. }
  230. return false
  231. }
  232. func validateFileMenuItem(_ menuItem: NSMenuItem) -> Bool {
  233. let action = menuItem.action
  234. if action == NSSelectorFromString("menuItemAction_NewFromFile:") {
  235. return true
  236. } else if action == NSSelectorFromString("menuItemAction_NewFromWeb:") {
  237. return true
  238. } else if action == NSSelectorFromString("menuItemAction_NewFromClipboard:") {
  239. return true
  240. } else if action == NSSelectorFromString("menuItemAction_NewFromScanner:") {
  241. return true
  242. } else if action == NSSelectorFromString("menuItemAction_NewFromBlankPage:") {
  243. return true
  244. } else if action == NSSelectorFromString("menuItemAction_NewFromWindow:") {
  245. return true
  246. } else if action == NSSelectorFromString("menuItemAction_MergePDFFiles:") {
  247. return true
  248. } else if action == NSSelectorFromString("menuItemAction_closeDocument:") {
  249. return true
  250. } else if action == NSSelectorFromString("menuItemAction_closeWindow:") {
  251. return true
  252. } else if action == NSSelectorFromString("menuItemAction_closeAllWindows:") {
  253. return true
  254. }
  255. if let mainVC = self.mainViewController() {
  256. if action == NSSelectorFromString("menuItemClick_saveAsFlattenedPDF:") {
  257. } else if action == NSSelectorFromString("menuItemClick_Compress:") {
  258. } else if action == NSSelectorFromString("menuItemAction_ConvertTo:") {
  259. } else if action == NSSelectorFromString("menuItemAction_addPassword:") {
  260. } else if action == NSSelectorFromString("menuItemAction_removePassword:") {
  261. } else if action == NSSelectorFromString("menuItemAction_unlockFunction:") {
  262. } else if action == NSSelectorFromString("menuItemAction_searchPDF:") {
  263. } else if action == NSSelectorFromString("menuItemAction_performFindPanelAction:") {
  264. } else if action == NSSelectorFromString("menuItemAction_showInFinder:") {
  265. } else if action == NSSelectorFromString("menuItemAction_property:") {
  266. } else if action == NSSelectorFromString("menuItemAction_print:") {
  267. } else if action == NSSelectorFromString("menuItemAction_customPrint:") {
  268. }
  269. return true
  270. }
  271. return false
  272. }
  273. //MARK: -IBAction
  274. @IBAction func menuItemAction_NewFromFile(_ sender: NSMenuItem) -> Void {
  275. }
  276. @IBAction func menuItemAction_NewFromWeb(_ sender: NSMenuItem) -> Void {
  277. }
  278. @IBAction func menuItemAction_NewFromClipboard(_ sender: NSMenuItem) -> Void {
  279. }
  280. @IBAction func menuItemAction_NewFromScanner(_ sender: NSMenuItem) -> Void {
  281. }
  282. @IBAction func menuItemAction_NewFromBlankPage(_ sender: NSMenuItem) -> Void {
  283. }
  284. @IBAction func menuItemAction_NewFromWindow(_ sender: NSMenuItem) -> Void {
  285. }
  286. @IBAction func menuItemAction_MergePDFFiles(_ sender: NSMenuItem) -> Void {
  287. }
  288. @IBAction func menuItemAction_closeDocument(_ sender: Any) {
  289. if ((NSApp.mainWindow?.windowController is KMBrowserWindowController) == false) {
  290. guard let windowControler = NSApp.mainWindow?.windowController else {
  291. return
  292. }
  293. windowControler.window?.performClose(nil)
  294. return
  295. }
  296. let windowControler = NSApp.mainWindow?.windowController as? KMBrowserWindowController
  297. if let data = windowControler?.browser, data.tabCount() >= 2 { // 有两个以上的标签
  298. if data.activeTabIndex() == 0 { // 主页不允许关闭,暂时处理为无反应
  299. return
  300. }
  301. }
  302. if let browser = windowControler?.browser {
  303. if browser.tabCount() == 1 {
  304. windowControler?.window?.close()
  305. } else {
  306. if let _ = windowControler?.window?.attachedSheet {
  307. NSSound.beep()
  308. return
  309. }
  310. browser.closeTab()
  311. }
  312. } else {
  313. windowControler?.window?.close()
  314. }
  315. }
  316. @IBAction func menuItemAction_closeWindow(_ sender: Any) {
  317. NSApp.mainWindow?.close()
  318. }
  319. @IBAction func menuItemAction_closeAllWindows(_ sender: Any) {
  320. for window in NSApp.windows {
  321. window.close()
  322. }
  323. }
  324. @IBAction func menuItemClick_saveAsFlattenedPDF(_ sender: Any) {
  325. if let mainVC = self.mainViewController() {
  326. mainVC.saveAsFlattenedPDFAction()
  327. }
  328. }
  329. @IBAction func menuItemClick_Compress(_ sender: Any) {
  330. if let mainVC = self.mainViewController() {
  331. mainVC.showCompressController(mainVC.listView.document.documentURL)
  332. }
  333. }
  334. @IBAction func menuItemAction_ConvertTo(_ sender: NSMenuItem) {
  335. if let mainVC = self.mainViewController() {
  336. var convertType: KMPDFConvertType = .word
  337. if sender.tag == 0 {
  338. } else if sender.tag == 1 {
  339. convertType = .excel
  340. } else if sender.tag == 2 {
  341. convertType = .ppt
  342. } else if sender.tag == 3 {
  343. if sender.tag == 30 {
  344. convertType = .jpeg
  345. } else if sender.tag == 31 {
  346. convertType = .jpg
  347. } else if sender.tag == 32 {
  348. convertType = .png
  349. } else if sender.tag == 33 {
  350. convertType = .gif
  351. } else if sender.tag == 34 {
  352. convertType = .tiff
  353. } else if sender.tag == 35 {
  354. convertType = .tga
  355. } else if sender.tag == 36 {
  356. convertType = .bmp
  357. } else if sender.tag == 37 {
  358. convertType = .jp2
  359. }
  360. } else if sender.tag == 4 {
  361. convertType = .rtf
  362. } else if sender.tag == 5 {
  363. convertType = .csv
  364. } else if sender.tag == 6 {
  365. convertType = .html
  366. } else if sender.tag == 7 {
  367. convertType = .text
  368. } else if sender.tag == 8 {
  369. convertType = .json
  370. }
  371. mainVC.showConvertWindow(convertType)
  372. }
  373. }
  374. @IBAction func menuItemAction_addPassword(_ sender: Any) {
  375. if let mainVC = self.mainViewController() {
  376. mainVC.showSecureWindow()
  377. }
  378. }
  379. @IBAction func menuItemAction_removePassword(_ sender: Any) {
  380. if let mainVC = self.mainViewController() {
  381. mainVC.showRemoveSecureWindow()
  382. }
  383. }
  384. @IBAction func menuItemAction_unlockFunction(_ sender: Any) {
  385. if let mainVC = self.mainViewController() {
  386. mainVC.unlockPDFDocument()
  387. }
  388. }
  389. @IBAction func menuItemAction_searchPDF(_ sender: Any?) {
  390. }
  391. @IBAction func menuItemAction_performFindPanelAction(_ sender: NSMenuItem) {
  392. var forward = true
  393. var findString: String?
  394. }
  395. @IBAction func menuItemAction_showInFinder(_ sender: Any) {
  396. if let mainVC = self.mainViewController() {
  397. mainVC.showInFinder()
  398. }
  399. }
  400. @IBAction func menuItemAction_property(_ sender: Any) {
  401. if let mainVC = self.mainViewController() {
  402. KMInfoWindowController.shared.showWindow(sender)
  403. }
  404. }
  405. @IBAction func menuItemAction_print(_ sender: Any) {
  406. if let mainVC = self.mainViewController() {
  407. mainVC.showPrintWindow()
  408. }
  409. }
  410. @IBAction func menuItemAction_customPrint(_ sender: NSMenuItem) {
  411. if let mainVC = self.mainViewController() {
  412. if sender.tag == 0 {
  413. mainVC.showPosterPrintWindow()
  414. } else if sender.tag == 1 {
  415. mainVC.showMultiplePrintWindow()
  416. } else if sender.tag == 2 {
  417. mainVC.showBookletPrintWindow()
  418. }
  419. }
  420. }
  421. }
  422. // MARK: - Edit Menu
  423. extension AppDelegate {
  424. func isEditMenuActions(sel: Selector?) -> Bool {
  425. guard let selector = sel else {
  426. return false
  427. }
  428. let selectors = [NSSelectorFromString("menuItemAction_undo:"),
  429. NSSelectorFromString("menuItemAction_redo:"),
  430. NSSelectorFromString("menuItemAction_Copy:"),
  431. NSSelectorFromString("menuItemAction_Cut:"),
  432. NSSelectorFromString("menuItemAction_Paste:"),
  433. NSSelectorFromString("menuItemAction_PasteAndMatch:"),
  434. NSSelectorFromString("menuItemAction_Delete:"),
  435. NSSelectorFromString("menuItemAction_SelectAll:"),
  436. NSSelectorFromString("menuItemAction_ShowFont:"),
  437. NSSelectorFromString("menuItemAction_FontAction:"),
  438. NSSelectorFromString("menuItemAction_CustomFont:"),
  439. NSSelectorFromString("menuItemAction_FontAlign:")]
  440. if selectors.contains(selector) {
  441. return true
  442. }
  443. return false
  444. }
  445. func validateEditMenuItem(_ menuItem: NSMenuItem) -> Bool {
  446. let action = menuItem.action
  447. if let mainVC = self.mainViewController() {
  448. if action == NSSelectorFromString("menuItemAction_undo:") {
  449. } else if action == NSSelectorFromString("menuItemAction_redo:") {
  450. } else if action == NSSelectorFromString("menuItemAction_Copy:") {
  451. } else if action == NSSelectorFromString("menuItemAction_Cut:") {
  452. } else if action == NSSelectorFromString("menuItemAction_Paste:") {
  453. } else if action == NSSelectorFromString("menuItemAction_PasteAndMatch:") {
  454. } else if action == NSSelectorFromString("menuItemAction_Delete:") {
  455. } else if action == NSSelectorFromString("menuItemAction_SelectAll:") {
  456. } else if action == NSSelectorFromString("menuItemAction_ShowFont:") {
  457. } else if action == NSSelectorFromString("menuItemAction_FontAction:") {
  458. } else if action == NSSelectorFromString("menuItemAction_CustomFont:") {
  459. } else if action == NSSelectorFromString("menuItemAction_FontAlign:") {
  460. }
  461. return true
  462. }
  463. return false
  464. }
  465. //MARK: -IBAction
  466. @IBAction func menuItemAction_undo(_ sender: NSMenuItem) {
  467. }
  468. @IBAction func menuItemAction_redo(_ sender: NSMenuItem) {
  469. }
  470. @IBAction func menuItemAction_Copy(_ sender: NSMenuItem) {
  471. }
  472. @IBAction func menuItemAction_Cut(_ sender: NSMenuItem) {
  473. }
  474. @IBAction func menuItemAction_Paste(_ sender: NSMenuItem) {
  475. }
  476. @IBAction func menuItemAction_PasteAndMatch(_ sender: NSMenuItem) {
  477. }
  478. @IBAction func menuItemAction_Delete(_ sender: NSMenuItem) {
  479. }
  480. @IBAction func menuItemAction_SelectAll(_ sender: NSMenuItem) {
  481. }
  482. @IBAction func menuItemAction_ShowFont(_ sender: NSMenuItem) {
  483. NSFontManager.shared.orderFrontFontPanel(nil)
  484. }
  485. @IBAction func menuItemAction_FontAction(_ sender: Any) {
  486. }
  487. @IBAction func menuItemAction_CustomFont(_ sender: NSMenuItem) {
  488. }
  489. @IBAction func menuItemAction_FontAlign(_ sender: NSMenuItem) {
  490. }
  491. }
  492. // MARK: - View Menu
  493. extension AppDelegate {
  494. func isViewMenuActions(sel: Selector?) -> Bool {
  495. guard let selector = sel else {
  496. return false
  497. }
  498. let selectors = [NSSelectorFromString("menuItemAction_ChangeDisplayMode:"),
  499. NSSelectorFromString("menuItemAction_ReadMode:"),
  500. NSSelectorFromString("menuItemAction_FullScreen:"),
  501. NSSelectorFromString("menuItemAction_Presentation:"),
  502. NSSelectorFromString("menuItemAction_SplitView:"),
  503. NSSelectorFromString("menuItemAction_BOTAMode:"),
  504. NSSelectorFromString("menuItemAction_Outline:"),
  505. NSSelectorFromString("menuItemAction_Notes:"),
  506. NSSelectorFromString("menuItemAction_Annotate:"),
  507. NSSelectorFromString("menuItemAction_Themes:"),
  508. NSSelectorFromString("menuItemAction_Zoom:"),
  509. NSSelectorFromString("menuItemAction_Rotate:"),
  510. NSSelectorFromString("menuItemAction_HighlightFormsField:"),
  511. NSSelectorFromString("menuItemAction_HighlightLinks:"),
  512. NSSelectorFromString("menuItemAction_ResetForm:"),
  513. NSSelectorFromString("menuItemAction_AutoScroll:")]
  514. if selectors.contains(selector) {
  515. return true
  516. }
  517. return false
  518. }
  519. func validateViewMenuItem(_ menuItem: NSMenuItem) -> Bool {
  520. let action = menuItem.action
  521. if let mainVC = self.mainViewController() {
  522. if action == NSSelectorFromString("menuItemAction_ChangeDisplayMode:") {
  523. } else if action == NSSelectorFromString("menuItemAction_ReadMode:") {
  524. } else if action == NSSelectorFromString("menuItemAction_FullScreen:") {
  525. } else if action == NSSelectorFromString("menuItemAction_Presentation:") {
  526. } else if action == NSSelectorFromString("menuItemAction_SplitView:") {
  527. } else if action == NSSelectorFromString("menuItemAction_BOTAMode:") {
  528. } else if action == NSSelectorFromString("menuItemAction_Themes:") {
  529. } else if action == NSSelectorFromString("menuItemAction_Zoom:") {
  530. } else if action == NSSelectorFromString("menuItemAction_Rotate:") {
  531. } else if action == NSSelectorFromString("menuItemAction_HighlightFormsField:") {
  532. } else if action == NSSelectorFromString("menuItemAction_HighlightLinks:") {
  533. } else if action == NSSelectorFromString("menuItemAction_ResetForm:") {
  534. } else if action == NSSelectorFromString("menuItemAction_AutoScroll:") {
  535. }
  536. return true
  537. }
  538. return false
  539. }
  540. //MARK: -IBAction
  541. @IBAction func menuItemAction_ChangeDisplayMode(_ sender: NSMenuItem) {
  542. if let mainVC = self.mainViewController() {
  543. if sender.tag == 1 {
  544. mainVC.updatePDFViewDisplayMode(viewMode: .singlePage)
  545. } else if sender.tag == 2 {
  546. mainVC.updatePDFViewDisplayMode(viewMode: .singlePageContinuous)
  547. } else if sender.tag == 3 {
  548. mainVC.updatePDFViewDisplayMode(viewMode: .twoUp)
  549. } else if sender.tag == 4 {
  550. mainVC.updatePDFViewDisplayMode(viewMode: .twoUpContinuous)
  551. } else if sender.tag == 5 {
  552. mainVC.updatePDFViewDisplayMode(isbookMode: true)
  553. }
  554. }
  555. }
  556. @IBAction func menuItemAction_ReadMode(_ sender: NSMenuItem) {
  557. if let mainVC = self.mainViewController() {
  558. mainVC.viewManager.isPDFReadMode = !mainVC.viewManager.isPDFReadMode
  559. if mainVC.viewManager.isPDFReadMode {
  560. mainVC.openPDFReadMode()
  561. } else {
  562. mainVC.exitPDFReadMode()
  563. }
  564. }
  565. }
  566. @IBAction func menuItemAction_FullScreen(_ sender: NSMenuItem) {
  567. if let mainVC = self.mainViewController() {
  568. mainVC.view.window?.toggleFullScreen(nil)
  569. }
  570. }
  571. @IBAction func menuItemAction_Presentation(_ sender: NSMenuItem) {
  572. if let mainVC = self.mainViewController() {
  573. mainVC.togglePresentation(nil)
  574. }
  575. }
  576. @IBAction func menuItemAction_SplitView(_ sender: NSMenuItem) {
  577. if let mainVC = self.mainViewController() {
  578. if sender.tag == 0 {
  579. mainVC.listView.viewSplitMode = .vertical
  580. } else if sender.tag == 1 {
  581. mainVC.listView.viewSplitMode = .horizontal
  582. } else if sender.tag == 2 {
  583. mainVC.listView.viewSplitMode = .disable
  584. }
  585. mainVC.reloadPDFSplitInfo()
  586. }
  587. }
  588. @IBAction func menuItemAction_BOTAMode(_ sender: NSMenuItem) {
  589. if let mainVC = self.mainViewController() {
  590. if sender.tag == 0 {
  591. if mainVC.viewManager.pdfSideBarType == .thumbnail {
  592. mainVC.viewManager.pdfSideBarType = .none
  593. } else {
  594. mainVC.viewManager.pdfSideBarType = .thumbnail
  595. }
  596. } else if sender.tag == 1 {
  597. if mainVC.viewManager.pdfSideBarType == .outline {
  598. mainVC.viewManager.pdfSideBarType = .none
  599. } else {
  600. mainVC.viewManager.pdfSideBarType = .outline
  601. }
  602. } else if sender.tag == 2 {
  603. if mainVC.viewManager.pdfSideBarType == .bookmark {
  604. mainVC.viewManager.pdfSideBarType = .none
  605. } else {
  606. mainVC.viewManager.pdfSideBarType = .bookmark
  607. }
  608. } else if sender.tag == 3 {
  609. if mainVC.viewManager.pdfSideBarType == .annotation {
  610. mainVC.viewManager.pdfSideBarType = .none
  611. } else {
  612. mainVC.viewManager.pdfSideBarType = .annotation
  613. }
  614. }
  615. if mainVC.viewManager.pdfSideBarType == .none {
  616. mainVC.toggleCloseLeftSide()
  617. } else {
  618. mainVC.toggleOpenLeftSide(pdfSideBarType: mainVC.viewManager.pdfSideBarType)
  619. }
  620. mainVC.reloadSideBar()
  621. }
  622. }
  623. @IBAction func menuItemAction_Themes(_ sender: NSMenuItem) {
  624. if let mainVC = self.mainViewController() {
  625. var model: KMPDFViewMode = .normal
  626. var color = NSColor.clear
  627. if sender.tag == 0 {
  628. model = .normal
  629. } else if sender.tag == 1 {
  630. model = .soft
  631. } else if sender.tag == 2 {
  632. model = .green
  633. } else if sender.tag == 3 {
  634. model = .night
  635. } else {
  636. model = .other
  637. }
  638. mainVC.listView.setPageBackgroundColorWith(color, viewMode: model)
  639. }
  640. }
  641. @IBAction func menuItemAction_Zoom(_ sender: NSMenuItem) {
  642. if let mainVC = self.mainViewController() {
  643. var type: KMPDFZoomType = .width
  644. if sender.tag == 0 {
  645. type = .width
  646. } else if sender.tag == 1 {
  647. type = .fit
  648. } else if sender.tag == 2 {
  649. type = .actualSize
  650. } else if sender.tag == 3 {
  651. type = .zoom_In
  652. } else if sender.tag == 4 {
  653. type = .zoom_Out
  654. }
  655. mainVC.selectZoom(type)
  656. }
  657. }
  658. @IBAction func menuItemAction_Rotate(_ sender: NSMenuItem) {
  659. if let mainVC = self.mainViewController() {
  660. if sender.tag == 0 {
  661. mainVC.rotateLeft(page: mainVC.listView.currentPage(), listView: mainVC.listView)
  662. } else if sender.tag == 1 {
  663. mainVC.rotateRight(page: mainVC.listView.currentPage(), listView: mainVC.listView)
  664. }
  665. }
  666. }
  667. @IBAction func menuItemAction_HighlightFormsField(_ sender: NSMenuItem) {
  668. if let mainVC = self.mainViewController() {
  669. let enabled = CPDFKitConfig.sharedInstance().enableFormFieldHighlight()
  670. CPDFKitConfig.sharedInstance().setEnableFormFieldHighlight(!enabled)
  671. mainVC.listView.setNeedsDisplayForVisiblePages()
  672. }
  673. }
  674. @IBAction func menuItemAction_HighlightLinks(_ sender: NSMenuItem) {
  675. if let mainVC = self.mainViewController() {
  676. let enabled = CPDFKitConfig.sharedInstance().enableLinkFieldHighlight()
  677. CPDFAnnotation.updateLinkFieldHighlight(mainVC.listView, linkFieldHighlight: !enabled)
  678. }
  679. }
  680. @IBAction func menuItemAction_ResetForm(_ sender: NSMenuItem) {
  681. if let mainVC = self.mainViewController() {
  682. mainVC.listView.resetFormAnnotation()
  683. }
  684. }
  685. @IBAction func menuItemAction_AutoScroll(_ sender: NSMenuItem) {
  686. if let mainVC = self.mainViewController() {
  687. mainVC.toggleAutoFlow(nil)
  688. }
  689. }
  690. }
  691. // MARK: - Go Menu
  692. extension AppDelegate {
  693. func isGoMenuActions(sel: Selector?) -> Bool {
  694. guard let selector = sel else {
  695. return false
  696. }
  697. let selectors = [NSSelectorFromString("menuItemAction_Next:"),
  698. NSSelectorFromString("menuItemAction_Previous:"),
  699. NSSelectorFromString("menuItemAction_First:"),
  700. NSSelectorFromString("menuItemAction_Last:"),
  701. NSSelectorFromString("menuItemAction_GotoPage:"),
  702. NSSelectorFromString("menuItemAction_Back:"),
  703. NSSelectorFromString("menuItemAction_Forward:")]
  704. if selectors.contains(selector) {
  705. return true
  706. }
  707. return false
  708. }
  709. func validateGoMenuItem(_ menuItem: NSMenuItem) -> Bool {
  710. let action = menuItem.action
  711. if let mainVC = self.mainViewController() {
  712. if action == NSSelectorFromString("menuItemAction_Next:") {
  713. if mainVC.listView.isEditing() && mainVC.listView.isEditable() {
  714. return false
  715. }
  716. return (mainVC.pdfViewCanHorizontalScroll() == false && mainVC.listView.canGoToNextPage())
  717. } else if action == NSSelectorFromString("menuItemAction_Previous:") {
  718. if mainVC.listView.isEditing() && mainVC.listView.isEditable() {
  719. return false
  720. }
  721. return (mainVC.pdfViewCanHorizontalScroll() == false && mainVC.listView.canGoToPreviousPage())
  722. } else if action == NSSelectorFromString("menuItemAction_First:") {
  723. return mainVC.listView.canGoToFirstPage()
  724. } else if action == NSSelectorFromString("menuItemAction_Last:") {
  725. return mainVC.listView.canGoToLastPage()
  726. } else if action == NSSelectorFromString("menuItemAction_GotoPage:") {
  727. return true
  728. } else if action == NSSelectorFromString("menuItemAction_Back:") {
  729. return mainVC.listView.km_canGoBack()
  730. } else if action == NSSelectorFromString("menuItemAction_Forward:") {
  731. return mainVC.listView.km_canGoForward()
  732. }
  733. }
  734. return false
  735. }
  736. //MARK: -IBAction
  737. @IBAction func menuItemAction_Next(_ sender: NSMenuItem) {
  738. if let mainVC = self.mainViewController() {
  739. if (mainVC.listView.canGoToNextPage()) {
  740. mainVC.listView.goToNextPage(nil)
  741. }
  742. }
  743. }
  744. @IBAction func menuItemAction_Previous(_ sender: NSMenuItem) {
  745. if let mainVC = self.mainViewController() {
  746. if (mainVC.listView.canGoToPreviousPage()) {
  747. mainVC.listView.goToPreviousPage(nil)
  748. }
  749. }
  750. }
  751. @IBAction func menuItemAction_First(_ sender: NSMenuItem) {
  752. if let mainVC = self.mainViewController() {
  753. mainVC.listView.goToFirstPage(nil)
  754. }
  755. }
  756. @IBAction func menuItemAction_Last(_ sender: NSMenuItem) {
  757. if let mainVC = self.mainViewController() {
  758. mainVC.listView.goToLastPage(nil)
  759. }
  760. }
  761. @IBAction func menuItemAction_GotoPage(_ sender: NSMenuItem) {
  762. if let mainVC = self.mainViewController() {
  763. mainVC.gotoPage(nil)
  764. }
  765. }
  766. @IBAction func menuItemAction_Back(_ sender: NSMenuItem) {
  767. if let mainVC = self.mainViewController() {
  768. if (mainVC.listView.km_canGoBack()) {
  769. mainVC.listView.km_goBack(nil)
  770. }
  771. }
  772. }
  773. @IBAction func menuItemAction_Forward(_ sender: NSMenuItem) {
  774. if let mainVC = self.mainViewController() {
  775. if (mainVC.listView.km_canGoForward()) {
  776. mainVC.listView.km_goForward(nil)
  777. }
  778. }
  779. }
  780. }
  781. // MARK: - Window Menu
  782. extension AppDelegate {
  783. func isWindowMenuActions(sel: Selector?) -> Bool {
  784. guard let selector = sel else {
  785. return false
  786. }
  787. var selectors = [NSSelectorFromString("11:"),
  788. NSSelectorFromString("11:")]
  789. if selectors.contains(selector) {
  790. return true
  791. }
  792. return false
  793. }
  794. func validateWindowMenuItem(_ menuItem: NSMenuItem) -> Bool {
  795. return true
  796. }
  797. //MARK: -IBAction
  798. }
  799. // MARK: - help Menu
  800. extension AppDelegate {
  801. func isHelpMenuActions(sel: Selector?) -> Bool {
  802. guard let selector = sel else {
  803. return false
  804. }
  805. var selectors = [NSSelectorFromString("menuItemAction_APPWebSite:"),
  806. NSSelectorFromString("menuItemAction_quickStudy:"),
  807. NSSelectorFromString("menuItemAction_OnlineHelp:"),
  808. NSSelectorFromString("menuItemAction_Feedback:"),
  809. NSSelectorFromString("menuItemAction_FiveStar:"),
  810. NSSelectorFromString("menuItemAction_SubscribeUs:"),
  811. NSSelectorFromString("menuItemAction_CheckForUpdate:"),
  812. NSSelectorFromString("menuItemAction_VPP:"),
  813. NSSelectorFromString("menuItemAction_FreeTemplate:"),
  814. NSSelectorFromString("menuItemAction_MoreProducts:"),
  815. NSSelectorFromString("menuItemAction_PowerBy:"),
  816. NSSelectorFromString("menuItemAction_privacyPolicy:"),
  817. NSSelectorFromString("menuItemAction_TermsofService:")]
  818. if selectors.contains(selector) {
  819. return true
  820. }
  821. return false
  822. }
  823. func validateHelpMenuItem(_ menuItem: NSMenuItem) -> Bool {
  824. return true
  825. }
  826. //MARK: -IBAction
  827. @IBAction func menuItemAction_APPWebSite(_ sender: NSMenuItem) -> Void {
  828. KMTools.openURL(urlString: APPMain_Link)
  829. }
  830. @IBAction func menuItemAction_quickStudy(_ sender: NSMenuItem) -> Void {
  831. KMTools.openQuickStartStudy()
  832. }
  833. @IBAction func menuItemAction_OnlineHelp(_ sender: NSMenuItem) -> Void {
  834. KMTools.openFAQWebsite()
  835. }
  836. @IBAction func menuItemAction_Feedback(_ sender: NSMenuItem) -> Void {
  837. KMTools.feekback()
  838. }
  839. @IBAction func menuItemAction_FiveStar(_ sender: NSMenuItem) -> Void {
  840. KMTools.rateUs()
  841. }
  842. @IBAction func menuItemAction_SubscribeUs(_ sender: NSMenuItem) -> Void {
  843. KMEmailSubWindowController().showWindow(nil)
  844. }
  845. @IBAction func menuItemAction_CheckForUpdate(_ sender: NSMenuItem) -> Void {
  846. #if VERSION_DMG
  847. SUUpdater.shared().checkForUpdates(sender)
  848. #endif
  849. }
  850. @IBAction func menuItemAction_VPP(_ sender: NSMenuItem) -> Void {
  851. KMTools.openVPPWebSite()
  852. }
  853. @IBAction func menuItemAction_FreeTemplate(_ sender: NSMenuItem) -> Void {
  854. KMTools.openFreePDFTemplatesWebsite()
  855. }
  856. @IBAction func menuItemAction_MoreProducts(_ sender: NSMenuItem) -> Void {
  857. KMTools.openMoreProductWebsite()
  858. }
  859. @IBAction func menuItemAction_PowerBy(_ sender: NSMenuItem) -> Void {
  860. KMTools.openComPDFKitPowerWebsite()
  861. }
  862. @IBAction func menuItemAction_privacyPolicy(_ sender: NSMenuItem) -> Void {
  863. KMTools.openPrivacyPolicyWebSite()
  864. }
  865. @IBAction func menuItemAction_TermsofService(_ sender: NSMenuItem) -> Void {
  866. KMTools.openTermOfServiceWebSite()
  867. }
  868. }