123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- //
- // KMBaseViewController.swift
- // PDF Master
- //
- // Created by tangchao on 2023/5/5.
- //
- import Cocoa
- // 基类 [抽象类]
- class KMBaseViewController: NSViewController {
-
- // 是否需要菜单
- var needMenu = false {
- didSet {
- if (self.needMenu) {
- self.addMenu(to: self.view)
- } else {
- self.removeMenu(to: self.view)
- }
- }
- }
- override func viewDidLoad() {
- super.viewDidLoad()
-
- if (self.needMenu) {
- self.addMenu(to: self.view)
- } else {
- self.removeMenu(to: self.view)
- }
- }
-
- // MARK: - Open Password Files
-
- private var lockedFiles: [URL] = []
- func km_open_pdf_multi(type: KMPasswordInputWindowType = .open, progressBlock: ((_ index: Int, _ params: Any...)->Void)? = nil, completionBlock:@escaping ([CPDFDocument])->Void) {
- NSPanel.km_open_pdf_multi_success(self.view.window!, panel: nil) { urls in
- var results: [CPDFDocument] = []
-
- self.lockedFiles.removeAll()
- for url in urls {
- let document = CPDFDocument(url: url)
- if (document!.isLocked) {
- self.lockedFiles.append(url)
- continue
- }
-
- if let _document = document {
- results.append(_document)
- }
- }
-
- if (self.lockedFiles.count == 0) {
- completionBlock(results)
- return
- }
-
- if let _callback = progressBlock {
- _callback(0, results)
- }
- var index = 0
- self.openPasswordWindow(fileUrl: self.lockedFiles.first!, type: type) { params in
- index += 1
- if (params.count <= 2) { // 参数错误
- if let _callback = progressBlock { // 回调进度
- _callback(index)
- }
- return
- }
-
- let fileUrl = params[0] as! URL
- let result = params[1] as! KMPasswordInputWindowResult
- let password = params[2] as? String
- if (result == .cancel) {
- if let _callback = progressBlock { // 回调进度
- _callback(index, fileUrl, result)
- }
- return
- }
-
- let document = CPDFDocument(url: fileUrl)
- if let _password = password { // 将文档进行解密
- document?.unlock(withPassword: _password)
- }
- if let _callback = progressBlock { // 回调进度
- _callback(index, document as Any, fileUrl, result, password as Any)
- }
- // 将文档加入返回数据
- if let _document = document {
- results.append(_document)
- }
- } completionBlock: {
- completionBlock(results)
- }
- }
- }
-
- fileprivate func openPasswordWindow(fileUrl: URL, type: KMPasswordInputWindowType, progressBlock: ((_ params: Any...)->Void)?, completionBlock:@escaping ()->Void) {
- KMPasswordInputWindow.openWindow(window: self.view.window!, type: type, url: fileUrl) { [weak self] result, password in
- // 将结果返回
- if let _callback = progressBlock {
- _callback(fileUrl, result, password as Any)
- }
-
- // 进行下一个
- self?.lockedFiles.removeFirst()
- if let _fileUrl = self?.lockedFiles.first {
- self?.openPasswordWindow(fileUrl: _fileUrl, type: type, progressBlock: progressBlock, completionBlock: completionBlock)
- } else {
- completionBlock()
- }
- }
- }
-
- // MARK: - Menu Add & Remove
-
- public func addMenu(to view: NSView?) {
- if let menuView = view {
- self.addMenu(to: menuView)
- return
- }
- self.addMenu(to: self.view)
- }
-
- public func removeMenu(to view: NSView?) {
- if let menuView = view {
- self.removeMenu(to: menuView)
- return
- }
- self.removeMenu(to: self.view)
- }
-
- private func addMenu(to view: NSView) {
- // 先移除
- self.removeMenu(to: view)
-
- let menu = NSMenu()
- menu.delegate = self
- view.menu = menu
- }
- private func removeMenu(to view: NSView) {
- view.menu?.delegate = nil
- view.menu = nil
- }
- }
- extension KMBaseViewController: NSMenuDelegate, NSMenuItemValidation {
- func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
- return true
- }
-
- func menuNeedsUpdate(_ menu: NSMenu) {
- menu.removeAllItems()
- }
- }
|