123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804 |
- //
- // KMCompareView.swift
- // PDF Reader Pro
- //
- // Created by lizhe on 2023/11/14.
- //
- import Cocoa
- typealias KMCompareViewCancelAction = (_ view: KMCompareView) -> Void
- typealias KMCompareViewDoneAction = (_ view: KMCompareView, _ config: KMCompareFilesConfig) -> Void
- enum KMCompareFilesType {
- case content
- case coverting
- }
- let CPDFOldFileQKSelectedPathsKey = "CPDFOldFileQKSelectedPathsKey"
- let CPDFNewFileQKSelectedPathsKey = "CPDFNewFileQKSelectedPathsKey"
- let CPDFMaxQKSelectedPathsCount = 5
- class KMCompareView: KMBaseXibView {
- @IBOutlet weak var cancelButton: NSButton!
- @IBOutlet weak var doneButton: NSButton!
-
- @IBOutlet weak var compareTypeSegment: NSSegmentedControl!
- @IBOutlet weak var typeSegWidthConst: NSLayoutConstraint!
-
- @IBOutlet weak var comparePreviewBox: NSBox!
-
- @IBOutlet weak var oldDocumentsTitle: NSTextField!
-
- @IBOutlet weak var compareOldPreviewView: KMCompareFilesView!
- @IBOutlet weak var oldFileQKSelectedBox: NSComboBox!
- @IBOutlet weak var oldFileSelectBtn: NSButton!
- @IBOutlet weak var oldPDFView: PDFView!
- @IBOutlet weak var currentOldPageLabel: NSTextField!
- @IBOutlet weak var totalPaOldgeLabel: NSTextField!
-
- @IBOutlet weak var compareNewPreviewView: KMCompareFilesView!
- @IBOutlet weak var documentsNewTitle: NSTextField!
- @IBOutlet weak var fileQKNewSelectedBox: NSComboBox!
- @IBOutlet weak var fileSelectNewBtn: NSButton!
- @IBOutlet weak var pdfNewView: PDFView!
- @IBOutlet weak var addFileContentView: KMCompareFilesView!
- @IBOutlet weak var addFileImageView: NSImageView!
- @IBOutlet weak var addFileAddImageFramView: KMCompareFilesView!
- @IBOutlet weak var currentNewPageLabel: NSTextField!
- @IBOutlet weak var totalPaNewgeLabel: NSTextField!
-
- @IBOutlet weak var addFileTitle: NSTextField!
- @IBOutlet weak var addFileMag: NSTextField!
-
- @IBOutlet weak var pageRangeField: NSTextField!
- @IBOutlet weak var oldFileRangeField: NSTextField!
- @IBOutlet weak var pageRangeOldComboBox: NSComboBox!
- @IBOutlet weak var fileNewRangeField: NSTextField!
- @IBOutlet weak var pageRangeNewComboBox: NSComboBox!
-
- @IBOutlet weak var compareTextTypeBtn: NSButton!
- @IBOutlet weak var compareImageTypeBtn: NSButton!
-
- @IBOutlet weak var compareSettingsBtn: NSButton!
- @IBOutlet weak var settingBtnTopLayout: NSLayoutConstraint!
-
- var contentSettingWindowController: KMCompareContentSettingWindowController?
- var coveringSettingWindowController: KMCompareCoveringSettingWindowController?
-
- var pdfCompareContent: CPDFCompareContent?
- var password: String = "" {
- didSet {
- self.oldPDFView.document?.unlock(withPassword: password)
- }
- }
-
- var filePath: String? {
- didSet {
- if filePath?.count != 0 {
- self.addFilePath(filePath: filePath!, password: password)
- }
- }
- }
- private var pdfOldDocument: PDFDocument?
- var oldFileQKSelectedPaths: [String] = []
- var oldFilePaths: [String] = []
-
- private var pdfNewDocument: PDFDocument?
- var fileQKNewSelectedPaths: [String] = []
- var newFilePaths: [String] = []
-
- var fileType: KMCompareFilesType = .content {
- didSet {
- self.updateFileCompareType(fileType: fileType)
- }
- }
-
- var cancelAction: KMCompareViewCancelAction?
- var doneAction: KMCompareViewDoneAction?
-
- convenience init(pdfDocument: PDFDocument) {
- self.init()
- self.pdfOldDocument = pdfDocument
- let document: PDFDocument = PDFDocument.init(url: pdfDocument.documentURL!)!
- let cDocument: CPDFDocument = CPDFDocument.init(url: pdfDocument.documentURL!)
-
- let file: KMFileAttribute = KMFileAttribute()
- file.pdfDocument = cDocument
-
- let config: KMCompareFilesConfig = KMCompareFilesConfig.init()
- config.fileOldAttribute = file
- }
-
- convenience init(filePath: String, password: String) {
- self.init()
- self.pdfOldDocument = PDFDocument.init(url: NSURL(fileURLWithPath: filePath) as URL)
- let pdfDocument = PDFDocument.init(url: NSURL(fileURLWithPath: filePath) as URL)
- let cDocument = CPDFDocument.init(url: NSURL(fileURLWithPath: filePath) as URL)
- if pdfDocument!.isLocked {
- pdfDocument!.unlock(withPassword: password)
- }
-
- if self.pdfOldDocument!.isLocked {
- self.pdfOldDocument!.unlock(withPassword: password)
- }
-
- let file: KMFileAttribute = KMFileAttribute()
- file.pdfDocument = cDocument
-
- let config = KMCompareFilesConfig.defaultConfig
- config.fileOldAttribute = file
- config.fileOldAttribute.password = password
- }
-
- override func addNotification() {
- NotificationCenter.default.addObserver(self, selector: #selector(pageChangeNotification), name: NSNotification.Name.PDFViewPageChanged, object: nil)
- }
-
- override func setup() {
- fileQKNewSelectedBox.delegate = self
- oldFileQKSelectedBox.delegate = self
-
- compareTypeSegment.action = #selector(segmentedControlClicked)
- compareTypeSegment.target = self
-
- compareTypeSegment.wantsLayer = true
- addFileContentView.wantsLayer = true
-
- addFileImageView.ignoresMultiClick = true
-
- fileQKNewSelectedBox.isEnabled = false
- oldFileQKSelectedBox.isEnabled = false
- fileQKNewSelectedBox.cell!.isEnabled = false
- oldFileQKSelectedBox.cell!.isEnabled = false
-
- currentOldPageLabel.delegate = self
- currentNewPageLabel.delegate = self
-
- oldPDFView.wantsLayer = true
- pdfNewView.wantsLayer = true
- // vsMaskView.wantsLayer = true;
- oldPDFView.layer?.backgroundColor = NSColor.clear.cgColor
- pdfNewView.layer?.backgroundColor = NSColor.clear.cgColor
- // vsMaskView.layer.backgroundColor = NSColor.clear.CGColor
-
- compareTypeSegment.wantsLayer = true
- compareTypeSegment.layer?.cornerRadius = 5.0
- compareTypeSegment.layer?.masksToBounds = true
- compareTypeSegment.layer?.backgroundColor = NSColor.clear.cgColor
-
- addFileAddImageFramView.wantsLayer = true
- addFileAddImageFramView.layer?.backgroundColor = NSColor.clear.cgColor
-
- self.compareOldPreviewView.dragSuccessBlock = { [weak self] filePath in
- self?.updateDocument(filePath: filePath) { fileAttitude in
-
- }
- }
-
- self.compareNewPreviewView.dragSuccessBlock = { [weak self] filePath in
- self?.updateDocument(filePath: filePath, isNew: true) { fileAttitude in
-
- }
- }
-
- self.addFileContentView.dragSuccessBlock = { [weak self] filePath in
- self?.updateDocument(filePath: filePath, isNew: true) { fileAttitude in
-
- }
- }
-
- self.addFileAddImageFramView.dragSuccessBlock = { [weak self] filePath in
- self?.updateDocument(filePath: filePath, isNew: true) { fileAttitude in
-
- }
- }
-
- self.addFileContentView.mouseUpBack = { [weak self] view in
- self?.chooseFileAction(isNew: true)
- }
-
- KMCompareFilesConfig.defaultConfig.fileNewAttribute.pdfDocument = nil
- }
-
- override func updateLanguage() {
- compareTypeSegment.setLabel(NSLocalizedString("Side-by-Side View", comment: ""), forSegment: 0)
- compareTypeSegment.setLabel(NSLocalizedString("Compare by File Overlay", comment: ""), forSegment: 1)
-
- compareTypeSegment.setToolTip(NSLocalizedString("Side-by-Side View", comment: ""), forSegment: 0)
- compareTypeSegment.setToolTip(NSLocalizedString("Compare by File Overlay", comment: ""), forSegment: 1)
- oldDocumentsTitle.stringValue = NSLocalizedString("Old File", comment: "")
- documentsNewTitle.stringValue = NSLocalizedString("New File", comment: "")
-
- oldFileSelectBtn.title = NSLocalizedString("Choose...", comment: "")
- fileSelectNewBtn.title = NSLocalizedString("Choose...", comment: "")
-
- oldFileSelectBtn.toolTip = NSLocalizedString("Choose...", comment: "")
- fileSelectNewBtn.toolTip = NSLocalizedString("Choose...", comment: "")
-
- addFileTitle.stringValue = NSLocalizedString("Select File", comment: "")
- addFileMag.stringValue = NSLocalizedString("Click to add", comment: "")
-
- oldFileRangeField.stringValue = NSLocalizedString("Old File:", comment: "")
- fileNewRangeField.stringValue = NSLocalizedString("New File:", comment: "")
-
- pageRangeField.stringValue = NSLocalizedString("Page Range", comment: "")
-
- pageRangeOldComboBox.removeAllItems()
- pageRangeOldComboBox.addItems(withObjectValues: [NSLocalizedString("All Pages", comment: ""),
- NSLocalizedString("Odd Pages Only", comment: ""),
- NSLocalizedString("Even Pages Only",comment: ""),
- NSLocalizedString("e.g. 1,3-5,10",comment: "")])
- pageRangeOldComboBox.placeholderString = NSLocalizedString("e.g. 1,3-5,10", comment: "")
-
- pageRangeNewComboBox.addItems(withObjectValues: [NSLocalizedString("All Pages", comment: ""),
- NSLocalizedString("Odd Pages Only", comment: ""),
- NSLocalizedString("Even Pages Only",comment: ""),
- NSLocalizedString("e.g. 1,3-5,10",comment: "")])
- self.pageRangeNewComboBox.placeholderString = NSLocalizedString("e.g. 1,3-5,10", comment: "")
-
- self.compareTextTypeBtn.title = NSLocalizedString("Compare text", comment: "")
- self.compareImageTypeBtn.title = NSLocalizedString("Compare image", comment: "")
-
- let settingsString = " " + NSLocalizedString("Settings", comment: "")
- compareSettingsBtn.title = settingsString
- compareSettingsBtn.state = .off
- compareSettingsBtn.setTitleColor(KMAppearance.Layout.h1Color())
-
- cancelButton.title = NSLocalizedString("Cancel", comment: "")
- doneButton.title = NSLocalizedString("Compare", comment: "")
- }
-
- override func updateUI() {
- if KMAppearance.isDarkMode() {
- self.compareTypeSegment.layer?.backgroundColor = NSColor(red: 50.0/255.0, green: 53.0/255.0, blue: 54.0/255.0, alpha: 1).cgColor
- self.addFileContentView.layer?.backgroundColor = NSColor.black.cgColor
- } else {
- self.compareTypeSegment.layer?.backgroundColor = NSColor(red: 247.0/255.0, green: 247.0/255.0, blue: 247.0/255.0, alpha: 1).cgColor
- self.addFileContentView.layer?.backgroundColor = NSColor.white.cgColor
- }
- }
-
- override func reloadData() {
- if(pageRangeOldComboBox.indexOfSelectedItem == 3) {
- self.window?.makeFirstResponder(pageRangeOldComboBox)
- pageRangeOldComboBox.stringValue = ""
- pageRangeOldComboBox.isSelectable = true
- }
-
- self.updatePageRangeData(view: pageRangeNewComboBox, file: KMCompareFilesConfig.defaultConfig.fileNewAttribute, isNew: true)
- self.updatePageRangeData(view: pageRangeOldComboBox, file: KMCompareFilesConfig.defaultConfig.fileOldAttribute)
-
- if (KMCompareFilesConfig.defaultConfig.isCompareText)() {
- self.compareTextTypeBtn.state = .on;
- } else {
- self.compareTextTypeBtn.state = .off;
- }
- if (KMCompareFilesConfig.defaultConfig.isCompareImage)() {
- self.compareImageTypeBtn.state = .on;
- } else {
- self.compareImageTypeBtn.state = .off;
- }
-
- self.updateSelectBoxData()
-
- self.updatePageState()
- self.updatePageState(isNew: true)
- }
-
- @objc func pageChangeNotification(notification: Notification) {
- self.updatePageState()
- self.updatePageState(isNew: true)
- }
- }
- extension KMCompareView {
- func addFilePath(filePath: String, isNew: Bool = false, password: String = "") {
- DispatchQueue.main.async {
- let document: PDFDocument = PDFDocument.init(url: NSURL(fileURLWithPath: filePath) as URL) ?? PDFDocument()
- let cDocument: CPDFDocument = CPDFDocument.init(url: NSURL(fileURLWithPath: filePath) as URL)!
- let file: KMFileAttribute = KMFileAttribute()
- // file.pdfDocument = cDocument
- // file.myPDFDocument = document
- file.password = password
- file.filePath = filePath
-
- document.unlock(withPassword: password)
- cDocument.unlock(withPassword: password)
-
- if isNew {
- KMCompareFilesConfig.defaultConfig.fileNewAttribute = file
- self.pdfNewDocument = document
-
- self.pdfNewView.document = document
- self.pdfNewView.autoScales = true
- self.pdfNewView.delegate = self
- } else {
-
- KMCompareFilesConfig.defaultConfig.fileOldAttribute = file
- self.pdfOldDocument = document
-
- self.oldPDFView.document = document
- self.oldPDFView.autoScales = true
- self.oldPDFView.delegate = self
- }
-
- self.addFileQKSelectPath(filePath: filePath, isNew: isNew)
- self.reloadData()
- }
- }
-
- func addFileQKSelectPath(filePath: String, isNew: Bool = false) {
- let pdfdocument = PDFDocument(url: NSURL(fileURLWithPath: filePath) as URL)
- guard let pdfdocument = pdfdocument else { return }
-
- var key = ""
- if isNew {
- key = CPDFNewFileQKSelectedPathsKey
- } else {
- key = CPDFOldFileQKSelectedPathsKey
- }
-
- //取出
- var filePaths: [String] = UserDefaults.standard.object(forKey: key) as? [String] ?? []
- if filePaths.count > CPDFMaxQKSelectedPathsCount {
- filePaths.removeLast()
-
- }
- if !filePaths.contains(filePath) {
- filePaths.insert(filePath, at: 0)
- }
-
- //存储
- UserDefaults.standard.setValue(filePaths, forKey: key)
- UserDefaults.standard.synchronize()
-
- let fileName = filePath.lastPathComponent
-
- self.updateSelectBoxData()
- if isNew {
- self.fileQKNewSelectedBox.selectItem(withObjectValue: fileName)
- self.fileQKNewSelectedBox.toolTip = fileName
- } else {
- self.oldFileQKSelectedBox.selectItem(withObjectValue: fileName)
- self.oldFileQKSelectedBox.toolTip = fileName
- }
- }
-
- func updateSelectBoxData() {
- self.oldFileQKSelectedPaths = self.updateSelectBoxItemData()
- self.oldFileQKSelectedBox.removeAllItems()
- self.oldFileQKSelectedBox.addItems(withObjectValues: self.oldFileQKSelectedPaths)
-
- self.fileQKNewSelectedPaths = self.updateSelectBoxItemData(isNew: true)
- self.fileQKNewSelectedBox.removeAllItems()
- self.fileQKNewSelectedBox.addItems(withObjectValues: self.fileQKNewSelectedPaths)
-
- if self.fileQKNewSelectedPaths.count > 0 {
- self.fileQKNewSelectedBox.isEnabled = true
- } else {
- self.fileQKNewSelectedBox.isEnabled = false
- }
-
- if self.oldFileQKSelectedPaths.count > 0 {
- self.oldFileQKSelectedBox.isEnabled = true
- } else {
- self.oldFileQKSelectedBox.isEnabled = false
- }
-
- self.oldFileQKSelectedBox.isEditable = false
- self.fileQKNewSelectedBox.isEditable = false
- }
-
- func updateSelectBoxItemData(isNew: Bool = false) -> [String] {
- let defaults = UserDefaults.standard
- var fileSelectedCachePaths: [String] = []
- if isNew {
- fileSelectedCachePaths = defaults.value(forKey: CPDFNewFileQKSelectedPathsKey) as? [String] ?? []
- self.newFilePaths = fileSelectedCachePaths
- } else {
- fileSelectedCachePaths = defaults.value(forKey: CPDFOldFileQKSelectedPathsKey) as? [String] ?? []
- self.oldFilePaths = fileSelectedCachePaths
- }
-
- var fileSelectedPaths: [String] = []
- var filePaths: [String] = []
- let fileManager = FileManager.default
- for path in fileSelectedCachePaths {
- if fileManager.fileExists(atPath: path) {
- // #if VERSION_DMG
- fileSelectedPaths.append(path.lastPathComponent)
- filePaths.append(path)
- // #else
- // let url = URL(fileURLWithPath: path)
- //
- // if let bookmarkData = try? url.bookmarkData(options: .withSecurityScope, includingResourceValuesForKeys: nil) {
- // AppSandboxFileAccess.fileAccess().bookmarkPersistanceDelegate.setBookmarkData(bookmarkData, forURL: url)
- // AppSandboxFileAccess.fileAccess().bookmarkPersistanceDelegate.setBookmarkData(bookmarkData, forURL: URL(fileURLWithPath: url.path ?? url.absoluteString))
- //
- // fileOldSelectedPaths.append(path)
- // } else {
- // AppSandboxFileAccess.fileAccess().accessFileURL(url, persistPermission: yearMask) {
- // if let bookmarkData = try? url.bookmarkData(options: .withSecurityScope, includingResourceValuesForKeys: nil) {
- // fileOldSelectedPaths.append(path)
- // }
- // }
- // }
- // #endif
- }
- }
-
- if isNew {
- self.newFilePaths = filePaths
- } else {
- self.oldFilePaths = filePaths
- }
- return fileSelectedPaths
- }
-
- func updatePageState(isNew: Bool = false) {
- var pageDocument = PDFDocument()
- var pdfView = PDFView()
- var currentPageLabel = NSTextField()
- var totalPageLabel = NSTextField()
-
- if isNew {
- addFileContentView.isHidden = false
- guard let document = KMCompareFilesConfig.defaultConfig.fileNewAttribute.pdfDocument else { return }
- pdfView = pdfNewView
- pageDocument = pdfView.document ?? PDFDocument()
- currentPageLabel = currentNewPageLabel
- totalPageLabel = totalPaNewgeLabel
- addFileContentView.isHidden = true
- } else {
- guard let document = KMCompareFilesConfig.defaultConfig.fileOldAttribute.pdfDocument else { return }
- pdfView = oldPDFView
- pageDocument = pdfView.document ?? PDFDocument()
- currentPageLabel = currentOldPageLabel
- totalPageLabel = totalPaOldgeLabel
- }
- // 隐藏PDFView滑动条
- pdfView.documentView?.enclosingScrollView?.hasVerticalScroller = false
- pdfView.documentView?.enclosingScrollView?.hasHorizontalScroller = false
- let pageCount = pageDocument.pageCount
- var currentPageIndex = 0
- if(pdfView.currentPage != nil) {
- currentPageIndex = Int(pageDocument.index(for: pdfView.currentPage!))
- }
-
- if(pageCount > 0) {
- currentPageLabel.stringValue = "\(currentPageIndex + 1)"
- } else {
- currentPageLabel.stringValue = "\(currentPageIndex)"
- }
- totalPageLabel.stringValue = "/ \(pageCount)"
- }
-
- func updateDocument(filePath: String, isNew: Bool = false, completion: @escaping (_ fileAttitude: KMFileAttribute?) -> Void) {
- let isAccessFilePath = AppSandboxFileAccess().accessFileURL(NSURL(fileURLWithPath: filePath) as URL, persistPermission: true) {
-
- }
-
- if isAccessFilePath {
- print("有权限")
- var pdfDocument = CPDFDocument()
- if isNew {
- pdfDocument = KMCompareFilesConfig.defaultConfig.fileNewAttribute.pdfDocument
- } else {
- pdfDocument = KMCompareFilesConfig.defaultConfig.fileOldAttribute.pdfDocument
- }
-
- // guard let pdfDocument = pdfDocument else {
- // completion(nil)
- // return
- // }
- if (pdfDocument?.documentURL.path == filePath) {
- let alert = NSAlert()
- alert.alertStyle = NSAlert.Style.critical
- alert.messageText = NSLocalizedString("There is no difference between the two documents.", comment: "")
- alert.runModal()
- completion(nil)
- return
- } else {
- KMBaseWindowController.checkPassword(url: NSURL(fileURLWithPath: filePath) as URL, type: .owner) { success, resultPassword in
- if success {
- let file = KMFileAttribute()
- file.pdfDocument = pdfDocument
- file.password = resultPassword
- completion(file)
- } else {
- completion(nil)
- }
- }
- }
- } else {
- print("无权限")
- }
- }
-
- func updatePageRangeData(view: NSComboBox, file: KMFileAttribute, isNew: Bool = false) {
- switch (file.pagesType) {
- case .all:
- view.selectItem(at: 0)
- view.isEditable = false
- view.delegate = nil
- break;
- case .odd:
- view.selectItem(at: 1)
- view.isEditable = false
- view.delegate = nil
- break;
- case .even:
- view.selectItem(at: 2)
- view.isEditable = false
- view.delegate = nil
- break;
- case .custom:
- view.delegate = self
- view.stringValue = file.pagesString
- view.isEditable = true
- break;
- default: break
- }
- }
-
- func updateFileCompareType(fileType: KMCompareFilesType) {
- if fileType == .content {
- compareTypeSegment.selectedSegment = 0
- compareTextTypeBtn.isHidden = false
- compareImageTypeBtn.isHidden = false
- settingBtnTopLayout.constant = 81
- } else {
- compareTypeSegment.selectedSegment = 1
- compareTextTypeBtn.isHidden = true
- compareImageTypeBtn.isHidden = true
- settingBtnTopLayout.constant = 20
- }
- }
-
- func updatePageRange(view: NSComboBox, isNew: Bool = false) {
- let config = KMCompareFilesConfig.defaultConfig
- var index = pageRangeOldComboBox.indexOfSelectedItem
-
- var file = config.fileOldAttribute
- if isNew {
- index = pageRangeNewComboBox.indexOfSelectedItem
- file = config.fileNewAttribute
- }
- switch index {
- case 0:
- file.bAllPage = true
- file.pagesType = .all
- view.delegate = nil
- view.isEditable = false
- case 1:
- file.bAllPage = false
- file.pagesType = .odd
- view.delegate = nil
- view.isEditable = false
- case 2:
- file.bAllPage = false
- file.pagesType = .even
- view.delegate = nil
- view.isEditable = false
- case 3:
- file.bAllPage = false
- file.pagesType = .custom
- view.delegate = self
- view.stringValue = ""
- view.isEditable = true
- view.isSelectable = true
- self.window?.makeFirstResponder(view)
- default:
- break
- }
- }
- }
- extension KMCompareView {
- @IBAction func cancelButtonAction(_ sender: Any) {
- guard let callBack = cancelAction else { return }
-
- callBack(self)
- }
-
- @IBAction func convertButtonAction(_ sender: Any) {
- guard let callBack = doneAction else { return }
-
- if KMCompareFilesConfig.defaultConfig.fileOldAttribute.pagesType == .custom {
- KMCompareFilesConfig.defaultConfig.fileOldAttribute.pagesString = self.pageRangeOldComboBox.stringValue
- }
-
- if KMCompareFilesConfig.defaultConfig.fileNewAttribute.pagesType == .custom {
- KMCompareFilesConfig.defaultConfig.fileNewAttribute.pagesString = self.pageRangeNewComboBox.stringValue
- }
-
- callBack(self, KMCompareFilesConfig.defaultConfig)
- }
-
- @IBAction func oldFilesSelectBoxAction(_ sender: Any) {
- let selectIndex = self.oldFileQKSelectedBox.indexOfSelectedItem
- if selectIndex >= 0 {
- let selectItem = self.oldFileQKSelectedBox.itemObjectValue(at: selectIndex)
- let filePath = self.oldFilePaths[selectIndex]
- self.updateDocument(filePath: filePath) { fileAttitude in
- if fileAttitude != nil {
- self.addFilePath(filePath: filePath , isNew: false, password: fileAttitude?.password ?? "")
- } else {
- self.oldFileQKSelectedBox.selectItem(withObjectValue: self.oldPDFView.document?.documentURL?.path.lastPathComponent)
- }
- }
- }
- }
-
- @IBAction func newFilesSelectBoxAction(_ sender: Any) {
- let selectIndex = self.fileQKNewSelectedBox.indexOfSelectedItem
- if selectIndex >= 0 {
- let selectItem = self.fileQKNewSelectedBox.itemObjectValue(at: selectIndex)
- let filePath = self.newFilePaths[selectIndex]
- self.updateDocument(filePath: filePath) { fileAttitude in
- if fileAttitude != nil {
- self.addFilePath(filePath: filePath , isNew: true, password: fileAttitude?.password ?? "")
- } else {
- self.fileQKNewSelectedBox.selectItem(withObjectValue: self.pdfNewView.document?.documentURL?.path.lastPathComponent)
- }
- }
- }
- }
-
- @IBAction func oldChooseButtonAction(_ sender: Any) {
- self.chooseFileAction()
- }
-
- @IBAction func newChooseButtonAction(_ sender: Any) {
- self.chooseFileAction(isNew: true)
- }
-
- @IBAction func oldNextButtonAction(_ sender: Any) {
- self.oldPDFView.goToNextPage(nil)
- self.updatePageState()
- }
-
- @IBAction func oldPreviousButtonAction(_ sender: Any) {
- self.oldPDFView.goToPreviousPage(nil)
- self.updatePageState()
- }
-
- @IBAction func newNextButtonAction(_ sender: Any) {
- self.pdfNewView.goToNextPage(nil)
- self.updatePageState(isNew: true)
- }
-
- @IBAction func newPreviousButtonAction(_ sender: Any) {
- self.pdfNewView.goToPreviousPage(nil)
- self.updatePageState(isNew: true)
- }
-
- @IBAction func oldPageRangeBoxAction(_ sender: Any) {
- self.updatePageRange(view: self.pageRangeOldComboBox)
- }
-
- @IBAction func newPageRangeBoxAction(_ sender: Any) {
- self.updatePageRange(view: self.pageRangeNewComboBox, isNew: true)
- }
-
- @IBAction func compareTextButtonAction(_ sender: NSButton) {
- let isCompareText = sender.state == .on ?true:false
- KMCompareFilesConfig.defaultConfig.setIsCompareText(isCompareText)
- }
-
- @IBAction func compareImageButtonAction(_ sender: NSButton) {
- let isCompareImage = sender.state == .on ?true:false
- KMCompareFilesConfig.defaultConfig.setIsCompareImage(isCompareImage)
- }
-
- @IBAction func settingButtonAction(_ sender: Any) {
- if fileType == .content {
- if contentSettingWindowController == nil {
- let controller = KMCompareContentSettingWindowController(windowNibName: "KMCompareContentSettingWindowController")
- contentSettingWindowController = controller
- }
- NSWindow.currentWindow().addChildWindow(contentSettingWindowController!.window!, ordered: .above)
- contentSettingWindowController!.window?.center()
- } else {
- if coveringSettingWindowController == nil {
- let controller = KMCompareCoveringSettingWindowController(windowNibName: "KMCompareCoveringSettingWindowController")
- coveringSettingWindowController = controller
- }
- NSWindow.currentWindow().addChildWindow(coveringSettingWindowController!.window!, ordered: .above)
- coveringSettingWindowController!.window?.center()
- }
- }
-
- @objc func segmentedControlClicked(sender: NSSegmentedControl) {
- let selectedType = self.compareTypeSegment.selectedSegment
- var type: KMCompareFilesType = .content
- if (selectedType == 0) {
- type = .content;
- } else {
- type = .coverting;
- }
- self.fileType = type
- }
-
- func chooseFileAction(isNew: Bool = false) {
- // fileQKNewSelectedBox.resignFirstResponder()
- // self.window?.makeFirstResponder(nil)
- let openPanel = NSOpenPanel()
- openPanel.allowedFileTypes = ["pdf"]
- openPanel.allowsMultipleSelection = false
- openPanel.beginSheetModal(for: self.window!) { (result) in
- if result == NSApplication.ModalResponse.OK {
- #if VERSION_DMG
- // Add code for VERSION_DMG
- #else
- // if let url = openPanel.url {
- // do {
- // let bookmarkData = try url.bookmarkData(options: .withSecurityScope, includingResourceValuesForKeys: nil)
- // AppSandboxFileAccess.fileAccess().bookmarkPersistanceDelegate.setBookmarkData(bookmarkData, forURL: url)
- // AppSandboxFileAccess.fileAccess().bookmarkPersistanceDelegate.setBookmarkData(bookmarkData, forURL: URL(fileURLWithPath: url.path ?? url.absoluteString))
- // } catch {
- // // Handle error
- // print("Error creating bookmark data: \(error)")
- // }
- // }
- #endif
- if let filePath = openPanel.url?.path {
- let url = NSURL(fileURLWithPath: filePath)
- AppSandboxFileAccess().persistPermissionURL(url as URL)
- let bookmarkData = try?url.bookmarkData(options: NSURL.BookmarkCreationOptions.withSecurityScope, includingResourceValuesForKeys: nil, relativeTo: nil)
- if bookmarkData != nil {
- AppSandboxFileAccess().bookmarkPersistanceDelegate.setBookmarkData(bookmarkData! as Data, for: url as URL)
- AppSandboxFileAccess().bookmarkPersistanceDelegate.setBookmarkData(bookmarkData! as Data, for: NSURL(fileURLWithPath: url.path!) as URL)
- }
-
- // let isAccessFilePath = AppSandboxFileAccess().accessFileURL(url as URL, persistPermission: true) {
- //
- // }
- //
- // if (isAccessFilePath) {
- // print("获取权限成功")
- // let url = NSURL(fileURLWithPath: filePath)
- // let bookmarkData = try?url.bookmarkData(options: .withSecurityScope, includingResourceValuesForKeys: nil, relativeTo: nil)
- // if bookmarkData != nil {
- // AppSandboxFileAccess().bookmarkPersistanceDelegate.setBookmarkData(bookmarkData, for: url as URL)
- // AppSandboxFileAccess().bookmarkPersistanceDelegate.setBookmarkData(bookmarkData, for: NSURL(fileURLWithPath: url.path!) as URL)
- // }
- // } else {
- // print("获取权限失败")
- // }
-
- // NSURL *url = [NSURL fileURLWithPath:folderPath];
- // [[AppSandboxFileAccess fileAccess] persistPermissionURL:url];
- // NSData *bookmarkData = [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope includingResourceValuesForKeys:nil relativeToURL:nil error:NULL];
- // if (bookmarkData) {
- // [[AppSandboxFileAccess fileAccess].bookmarkPersistanceDelegate setBookmarkData:bookmarkData forURL:url];
- // [[AppSandboxFileAccess fileAccess].bookmarkPersistanceDelegate setBookmarkData:bookmarkData forURL:[NSURL fileURLWithPath:(url.path?:url.absoluteString)]];
- // }
-
- self.updateDocument(filePath: filePath, isNew: isNew) { [weak self] file in
- if let _ = file {
- self?.addFilePath(filePath: filePath, isNew: isNew, password: file?.password ?? "")
- }
- }
- }
- }
- }
- }
- }
- extension KMCompareView: NSComboBoxDelegate {
-
- }
- extension KMCompareView: PDFViewDelegate {
-
- }
|