KMCompareView.swift 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712
  1. //
  2. // KMCompareView.swift
  3. // PDF Master
  4. //
  5. // Created by lizhe on 2023/11/14.
  6. //
  7. import Cocoa
  8. typealias KMCompareViewCancelAction = (_ view: KMCompareView) -> Void
  9. typealias KMCompareViewDoneAction = (_ view: KMCompareView, _ config: KMCompareFilesConfig) -> Void
  10. enum KMCompareFilesType {
  11. case content
  12. case coverting
  13. }
  14. let CPDFOldFileQKSelectedPathsKey = "CPDFOldFileQKSelectedPathsKey"
  15. let CPDFNewFileQKSelectedPathsKey = "CPDFNewFileQKSelectedPathsKey"
  16. let CPDFMaxQKSelectedPathsCount = 5
  17. class KMCompareView: KMBaseXibView {
  18. @IBOutlet weak var cancelButton: NSButton!
  19. @IBOutlet weak var doneButton: NSButton!
  20. @IBOutlet weak var compareTypeSegment: NSSegmentedControl!
  21. @IBOutlet weak var typeSegWidthConst: NSLayoutConstraint!
  22. @IBOutlet weak var comparePreviewBox: NSBox!
  23. @IBOutlet weak var oldDocumentsTitle: NSTextField!
  24. @IBOutlet weak var compareOldPreviewView: KMCompareFilesView!
  25. @IBOutlet weak var oldFileQKSelectedBox: NSComboBox!
  26. @IBOutlet weak var oldFileSelectBtn: NSButton!
  27. @IBOutlet weak var oldPDFView: PDFView!
  28. @IBOutlet weak var currentOldPageLabel: NSTextField!
  29. @IBOutlet weak var totalPaOldgeLabel: NSTextField!
  30. @IBOutlet weak var compareNewPreviewView: KMCompareFilesView!
  31. @IBOutlet weak var documentsNewTitle: NSTextField!
  32. @IBOutlet weak var fileQKNewSelectedBox: NSComboBox!
  33. @IBOutlet weak var fileSelectNewBtn: NSButton!
  34. @IBOutlet weak var pdfNewView: PDFView!
  35. @IBOutlet weak var addFileContentView: KMCompareFilesView!
  36. @IBOutlet weak var addFileImageView: NSImageView!
  37. @IBOutlet weak var addFileAddImageFramView: KMCompareFilesView!
  38. @IBOutlet weak var currentNewPageLabel: NSTextField!
  39. @IBOutlet weak var totalPaNewgeLabel: NSTextField!
  40. @IBOutlet weak var addFileTitle: NSTextField!
  41. @IBOutlet weak var addFileMag: NSTextField!
  42. @IBOutlet weak var pageRangeField: NSTextField!
  43. @IBOutlet weak var oldFileRangeField: NSTextField!
  44. @IBOutlet weak var pageRangeOldComboBox: NSComboBox!
  45. @IBOutlet weak var fileNewRangeField: NSTextField!
  46. @IBOutlet weak var pageRangeNewComboBox: NSComboBox!
  47. @IBOutlet weak var compareTextTypeBtn: NSButton!
  48. @IBOutlet weak var compareImageTypeBtn: NSButton!
  49. @IBOutlet weak var compareSettingsBtn: NSButton!
  50. @IBOutlet weak var settingBtnTopLayout: NSLayoutConstraint!
  51. var contentSettingWindowController: KMCompareContentSettingWindowController?
  52. var coveringSettingWindowController: KMCompareCoveringSettingWindowController?
  53. var pdfCompareContent: CPDFCompareContent?
  54. var filePath: String? {
  55. didSet {
  56. if filePath?.count != 0 {
  57. self.addFilePath(filePath: filePath!)
  58. }
  59. }
  60. }
  61. private var pdfOldDocument: PDFDocument?
  62. var oldFileQKSelectedPaths: [String] = []
  63. var oldFilePaths: [String] = []
  64. private var pdfNewDocument: PDFDocument?
  65. var fileQKNewSelectedPaths: [String] = []
  66. var newFilePaths: [String] = []
  67. var fileType: KMCompareFilesType = .content {
  68. didSet {
  69. self.updateFileCompareType(fileType: fileType)
  70. }
  71. }
  72. var cancelAction: KMCompareViewCancelAction?
  73. var doneAction: KMCompareViewDoneAction?
  74. convenience init(pdfDocument: PDFDocument) {
  75. self.init()
  76. self.pdfOldDocument = pdfDocument
  77. let document: PDFDocument = PDFDocument.init(url: pdfDocument.documentURL!)!
  78. let cDocument: CPDFDocument = CPDFDocument.init(url: pdfDocument.documentURL!)
  79. let file: KMFileAttribute = KMFileAttribute()
  80. file.pdfDocument = cDocument
  81. let config: KMCompareFilesConfig = KMCompareFilesConfig.init()
  82. config.fileOldAttribute = file
  83. }
  84. convenience init(filePath: String, password: String) {
  85. self.init()
  86. self.pdfOldDocument = PDFDocument.init(url: NSURL(fileURLWithPath: filePath) as URL)
  87. let pdfDocument = PDFDocument.init(url: NSURL(fileURLWithPath: filePath) as URL)
  88. let cDocument = CPDFDocument.init(url: NSURL(fileURLWithPath: filePath) as URL)
  89. if pdfDocument!.isLocked {
  90. pdfDocument!.unlock(withPassword: password)
  91. }
  92. if self.pdfOldDocument!.isLocked {
  93. self.pdfOldDocument!.unlock(withPassword: password)
  94. }
  95. let file: KMFileAttribute = KMFileAttribute()
  96. file.pdfDocument = cDocument
  97. let config = KMCompareFilesConfig.defaultConfig
  98. config.fileOldAttribute = file
  99. config.fileOldAttribute.password = password
  100. }
  101. override func setup() {
  102. fileQKNewSelectedBox.delegate = self
  103. oldFileQKSelectedBox.delegate = self
  104. compareTypeSegment.action = #selector(segmentedControlClicked)
  105. compareTypeSegment.target = self
  106. compareTypeSegment.wantsLayer = true
  107. addFileContentView.wantsLayer = true
  108. addFileImageView.ignoresMultiClick = true
  109. fileQKNewSelectedBox.isEnabled = false
  110. oldFileQKSelectedBox.isEnabled = false
  111. fileQKNewSelectedBox.cell!.isEnabled = false
  112. oldFileQKSelectedBox.cell!.isEnabled = false
  113. currentOldPageLabel.delegate = self
  114. currentNewPageLabel.delegate = self
  115. oldPDFView.wantsLayer = true
  116. pdfNewView.wantsLayer = true
  117. // vsMaskView.wantsLayer = true;
  118. oldPDFView.layer?.backgroundColor = NSColor.clear.cgColor
  119. pdfNewView.layer?.backgroundColor = NSColor.clear.cgColor
  120. // vsMaskView.layer.backgroundColor = NSColor.clear.CGColor
  121. compareTypeSegment.wantsLayer = true
  122. compareTypeSegment.layer?.cornerRadius = 5.0
  123. compareTypeSegment.layer?.masksToBounds = true
  124. compareTypeSegment.layer?.backgroundColor = NSColor.clear.cgColor
  125. addFileAddImageFramView.wantsLayer = true
  126. addFileAddImageFramView.layer?.backgroundColor = NSColor.clear.cgColor
  127. self.compareOldPreviewView.dragSuccessBlock = { [unowned self] filePath in
  128. self.updateDocument(filePath: filePath) { fileAttitude in
  129. }
  130. }
  131. self.compareNewPreviewView.dragSuccessBlock = { [unowned self] filePath in
  132. self.updateDocument(filePath: filePath, isNew: true) { fileAttitude in
  133. }
  134. }
  135. self.addFileContentView.dragSuccessBlock = { [unowned self] filePath in
  136. self.updateDocument(filePath: filePath, isNew: true) { fileAttitude in
  137. }
  138. }
  139. self.addFileAddImageFramView.dragSuccessBlock = { [unowned self] filePath in
  140. self.updateDocument(filePath: filePath, isNew: true) { fileAttitude in
  141. }
  142. }
  143. self.addFileContentView.mouseUpBack = { [unowned self] view in
  144. self.chooseFileAction(isNew: true)
  145. }
  146. }
  147. override func updateLanguage() {
  148. compareTypeSegment.setLabel(NSLocalizedString("Side-by-Side View", comment: ""), forSegment: 0)
  149. compareTypeSegment.setLabel(NSLocalizedString("Compare by File Overlay", comment: ""), forSegment: 1)
  150. compareTypeSegment.setToolTip(NSLocalizedString("Side-by-Side View", comment: ""), forSegment: 0)
  151. compareTypeSegment.setToolTip(NSLocalizedString("Compare by File Overlay", comment: ""), forSegment: 1)
  152. oldDocumentsTitle.stringValue = NSLocalizedString("Old File", comment: "")
  153. documentsNewTitle.stringValue = NSLocalizedString("New File", comment: "")
  154. oldFileSelectBtn.title = NSLocalizedString("Choose...", comment: "")
  155. fileSelectNewBtn.title = NSLocalizedString("Choose...", comment: "")
  156. oldFileSelectBtn.toolTip = NSLocalizedString("Choose...", comment: "")
  157. fileSelectNewBtn.toolTip = NSLocalizedString("Choose...", comment: "")
  158. addFileTitle.stringValue = NSLocalizedString("Select File", comment: "")
  159. addFileMag.stringValue = NSLocalizedString("Click to add", comment: "")
  160. oldFileRangeField.stringValue = NSLocalizedString("Old File:", comment: "")
  161. fileNewRangeField.stringValue = NSLocalizedString("New File:", comment: "")
  162. pageRangeField.stringValue = NSLocalizedString("Page Range", comment: "")
  163. pageRangeOldComboBox.removeAllItems()
  164. pageRangeOldComboBox.addItems(withObjectValues: [NSLocalizedString("All Pages", comment: ""),
  165. NSLocalizedString("Odd Pages Only", comment: ""),
  166. NSLocalizedString("Even Pages Only",comment: ""),
  167. NSLocalizedString("e.g. 1,3-5,10",comment: "")])
  168. pageRangeOldComboBox.placeholderString = NSLocalizedString("e.g. 1,3-5,10", comment: "")
  169. pageRangeNewComboBox.addItems(withObjectValues: [NSLocalizedString("All Pages", comment: ""),
  170. NSLocalizedString("Odd Pages Only", comment: ""),
  171. NSLocalizedString("Even Pages Only",comment: ""),
  172. NSLocalizedString("e.g. 1,3-5,10",comment: "")])
  173. self.pageRangeNewComboBox.placeholderString = NSLocalizedString("e.g. 1,3-5,10", comment: "")
  174. self.compareTextTypeBtn.title = NSLocalizedString("Compare text", comment: "")
  175. self.compareImageTypeBtn.title = NSLocalizedString("Compare image", comment: "")
  176. let settingsString = " " + NSLocalizedString("Settings", comment: "")
  177. compareSettingsBtn.title = settingsString
  178. compareSettingsBtn.state = .off
  179. compareSettingsBtn.setTitleColor(KMAppearance.Layout.h1Color())
  180. cancelButton.title = NSLocalizedString("Cancel", comment: "")
  181. doneButton.title = NSLocalizedString("Compare", comment: "")
  182. }
  183. override func updateUI() {
  184. if KMAppearance.isDarkMode() {
  185. self.compareTypeSegment.layer?.backgroundColor = NSColor(red: 50.0/255.0, green: 53.0/255.0, blue: 54.0/255.0, alpha: 1).cgColor
  186. self.addFileContentView.layer?.backgroundColor = NSColor.black.cgColor
  187. } else {
  188. self.compareTypeSegment.layer?.backgroundColor = NSColor(red: 247.0/255.0, green: 247.0/255.0, blue: 247.0/255.0, alpha: 1).cgColor
  189. self.addFileContentView.layer?.backgroundColor = NSColor.white.cgColor
  190. }
  191. }
  192. override func reloadData() {
  193. if(pageRangeOldComboBox.indexOfSelectedItem == 3) {
  194. self.window?.makeFirstResponder(pageRangeOldComboBox)
  195. pageRangeOldComboBox.stringValue = ""
  196. pageRangeOldComboBox.isSelectable = true
  197. }
  198. self.updatePageRangeData(view: pageRangeNewComboBox, file: KMCompareFilesConfig.defaultConfig.fileNewAttribute, isNew: true)
  199. self.updatePageRangeData(view: pageRangeOldComboBox, file: KMCompareFilesConfig.defaultConfig.fileOldAttribute)
  200. if (KMCompareFilesConfig.defaultConfig.isCompareText)() {
  201. self.compareTextTypeBtn.state = .on;
  202. } else {
  203. self.compareTextTypeBtn.state = .off;
  204. }
  205. if (KMCompareFilesConfig.defaultConfig.isCompareImage)() {
  206. self.compareImageTypeBtn.state = .on;
  207. } else {
  208. self.compareImageTypeBtn.state = .off;
  209. }
  210. self.updateSelectBoxData()
  211. self.updatePageState()
  212. self.updatePageState(isNew: true)
  213. }
  214. }
  215. extension KMCompareView {
  216. func addFilePath(filePath: String, isNew: Bool = false) {
  217. DispatchQueue.main.async {
  218. let document: PDFDocument = PDFDocument.init(url: NSURL(fileURLWithPath: filePath) as URL) ?? PDFDocument()
  219. let cDocument: CPDFDocument = CPDFDocument.init(url: NSURL(fileURLWithPath: filePath) as URL)!
  220. let file: KMFileAttribute = KMFileAttribute()
  221. file.pdfDocument = cDocument
  222. if isNew {
  223. KMCompareFilesConfig.defaultConfig.fileNewAttribute = file
  224. self.pdfNewDocument = document
  225. self.pdfNewView.document = document
  226. self.pdfNewView.autoScales = true
  227. self.pdfNewView.delegate = self
  228. } else {
  229. KMCompareFilesConfig.defaultConfig.fileOldAttribute = file
  230. self.pdfOldDocument = document
  231. self.oldPDFView.document = document
  232. self.oldPDFView.autoScales = true
  233. self.oldPDFView.delegate = self
  234. }
  235. self.addFileQKSelectPath(filePath: filePath, isNew: isNew)
  236. self.reloadData()
  237. }
  238. }
  239. func addFileQKSelectPath(filePath: String, isNew: Bool = false) {
  240. let pdfdocument = PDFDocument(url: NSURL(fileURLWithPath: filePath) as URL)
  241. guard let pdfdocument = pdfdocument else { return }
  242. var key = ""
  243. if isNew {
  244. key = CPDFNewFileQKSelectedPathsKey
  245. } else {
  246. key = CPDFOldFileQKSelectedPathsKey
  247. }
  248. //取出
  249. var filePaths: [String] = UserDefaults.standard.object(forKey: key) as? [String] ?? []
  250. if filePaths.count > CPDFMaxQKSelectedPathsCount {
  251. filePaths.removeLast()
  252. }
  253. if !filePaths.contains(filePath) {
  254. filePaths.insert(filePath, at: 0)
  255. }
  256. //存储
  257. UserDefaults.standard.setValue(filePaths, forKey: key)
  258. UserDefaults.standard.synchronize()
  259. let fileName = filePath.lastPathComponent
  260. self.updateSelectBoxData()
  261. if isNew {
  262. self.fileQKNewSelectedBox.selectItem(withObjectValue: fileName)
  263. self.fileQKNewSelectedBox.toolTip = fileName
  264. } else {
  265. self.oldFileQKSelectedBox.selectItem(withObjectValue: fileName)
  266. self.oldFileQKSelectedBox.toolTip = fileName
  267. }
  268. }
  269. func updateSelectBoxData() {
  270. self.oldFileQKSelectedPaths = self.updateSelectBoxItemData()
  271. self.oldFileQKSelectedBox.removeAllItems()
  272. self.oldFileQKSelectedBox.addItems(withObjectValues: self.oldFileQKSelectedPaths)
  273. self.fileQKNewSelectedPaths = self.updateSelectBoxItemData(isNew: true)
  274. self.fileQKNewSelectedBox.removeAllItems()
  275. self.fileQKNewSelectedBox.addItems(withObjectValues: self.fileQKNewSelectedPaths)
  276. if self.fileQKNewSelectedPaths.count > 0 {
  277. self.fileQKNewSelectedBox.isEnabled = true
  278. } else {
  279. self.fileQKNewSelectedBox.isEnabled = false
  280. }
  281. if self.oldFileQKSelectedPaths.count > 0 {
  282. self.oldFileQKSelectedBox.isEnabled = true
  283. } else {
  284. self.oldFileQKSelectedBox.isEnabled = false
  285. }
  286. }
  287. func updateSelectBoxItemData(isNew: Bool = false) -> [String] {
  288. let defaults = UserDefaults.standard
  289. var fileSelectedCachePaths: [String] = []
  290. if isNew {
  291. fileSelectedCachePaths = defaults.value(forKey: CPDFNewFileQKSelectedPathsKey) as? [String] ?? []
  292. self.newFilePaths = fileSelectedCachePaths
  293. } else {
  294. fileSelectedCachePaths = defaults.value(forKey: CPDFOldFileQKSelectedPathsKey) as? [String] ?? []
  295. self.oldFilePaths = fileSelectedCachePaths
  296. }
  297. var fileSelectedPaths: [String] = []
  298. var filePaths: [String] = []
  299. let fileManager = FileManager.default
  300. for path in fileSelectedCachePaths {
  301. if fileManager.fileExists(atPath: path) {
  302. // #if VERSION_DMG
  303. fileSelectedPaths.append(path.lastPathComponent)
  304. filePaths.append(path)
  305. // #else
  306. // let url = URL(fileURLWithPath: path)
  307. //
  308. // if let bookmarkData = try? url.bookmarkData(options: .withSecurityScope, includingResourceValuesForKeys: nil) {
  309. // AppSandboxFileAccess.fileAccess().bookmarkPersistanceDelegate.setBookmarkData(bookmarkData, forURL: url)
  310. // AppSandboxFileAccess.fileAccess().bookmarkPersistanceDelegate.setBookmarkData(bookmarkData, forURL: URL(fileURLWithPath: url.path ?? url.absoluteString))
  311. //
  312. // fileOldSelectedPaths.append(path)
  313. // } else {
  314. // AppSandboxFileAccess.fileAccess().accessFileURL(url, persistPermission: yearMask) {
  315. // if let bookmarkData = try? url.bookmarkData(options: .withSecurityScope, includingResourceValuesForKeys: nil) {
  316. // fileOldSelectedPaths.append(path)
  317. // }
  318. // }
  319. // }
  320. // #endif
  321. }
  322. }
  323. if isNew {
  324. self.newFilePaths = filePaths
  325. } else {
  326. self.oldFilePaths = filePaths
  327. }
  328. return fileSelectedPaths
  329. }
  330. func updatePageState(isNew: Bool = false) {
  331. var pageDocument = PDFDocument()
  332. var pdfView = PDFView()
  333. var currentPageLabel = NSTextField()
  334. var totalPageLabel = NSTextField()
  335. if isNew {
  336. addFileContentView.isHidden = false
  337. guard let document = KMCompareFilesConfig.defaultConfig.fileNewAttribute.pdfDocument else { return }
  338. pdfView = pdfNewView
  339. pageDocument = pdfView.document ?? PDFDocument()
  340. currentPageLabel = currentNewPageLabel
  341. totalPageLabel = totalPaNewgeLabel
  342. addFileContentView.isHidden = true
  343. } else {
  344. guard let document = KMCompareFilesConfig.defaultConfig.fileOldAttribute.pdfDocument else { return }
  345. pdfView = oldPDFView
  346. pageDocument = pdfView.document ?? PDFDocument()
  347. currentPageLabel = currentOldPageLabel
  348. totalPageLabel = totalPaOldgeLabel
  349. }
  350. // 隐藏PDFView滑动条
  351. pdfView.documentView?.enclosingScrollView?.hasVerticalScroller = false
  352. pdfView.documentView?.enclosingScrollView?.hasHorizontalScroller = false
  353. let pageCount = pageDocument.pageCount
  354. var currentPageIndex = 0
  355. if(pdfView.currentPage != nil) {
  356. currentPageIndex = Int(pageDocument.index(for: pdfView.currentPage!))
  357. }
  358. if(pageCount > 0) {
  359. currentPageLabel.stringValue = "\(currentPageIndex + 1)"
  360. } else {
  361. currentPageLabel.stringValue = "\(currentPageIndex)"
  362. }
  363. totalPageLabel.stringValue = "/ \(pageCount)"
  364. }
  365. func updateDocument(filePath: String, isNew: Bool = false, completion: @escaping (_ fileAttitude: KMFileAttribute?) -> Void) {
  366. var pdfDocument = CPDFDocument()
  367. if isNew {
  368. pdfDocument = KMCompareFilesConfig.defaultConfig.fileNewAttribute.pdfDocument
  369. } else {
  370. pdfDocument = KMCompareFilesConfig.defaultConfig.fileOldAttribute.pdfDocument
  371. }
  372. guard let pdfDocument = pdfDocument else {
  373. completion(nil)
  374. return
  375. }
  376. if (pdfDocument.documentURL.path == filePath) {
  377. let alert = NSAlert()
  378. alert.alertStyle = NSAlert.Style.critical
  379. alert.messageText = NSLocalizedString("There is no difference between the two documents.", comment: "")
  380. alert.runModal()
  381. completion(nil)
  382. return
  383. } else {
  384. KMBaseWindowController.checkPassword(url: NSURL(fileURLWithPath: filePath) as URL) { success, resultPassword in
  385. if success {
  386. let file = KMFileAttribute()
  387. file.pdfDocument = pdfDocument
  388. file.password = resultPassword
  389. completion(file)
  390. } else {
  391. completion(nil)
  392. }
  393. }
  394. }
  395. }
  396. func updatePageRangeData(view: NSComboBox, file: KMFileAttribute, isNew: Bool = false) {
  397. switch (file.pagesType) {
  398. case .all:
  399. view.selectItem(at: 0)
  400. view.isEditable = false
  401. view.delegate = nil
  402. break;
  403. case .odd:
  404. view.selectItem(at: 1)
  405. view.isEditable = false
  406. view.delegate = nil
  407. break;
  408. case .even:
  409. view.selectItem(at: 2)
  410. view.isEditable = false
  411. view.delegate = nil
  412. break;
  413. case .custom:
  414. view.delegate = self
  415. view.stringValue = file.pagesString
  416. view.isEditable = true
  417. break;
  418. default: break
  419. }
  420. }
  421. func updateFileCompareType(fileType: KMCompareFilesType) {
  422. if fileType == .content {
  423. compareTypeSegment.selectedSegment = 0
  424. compareTextTypeBtn.isHidden = false
  425. compareImageTypeBtn.isHidden = false
  426. settingBtnTopLayout.constant = 81
  427. } else {
  428. compareTypeSegment.selectedSegment = 1
  429. compareTextTypeBtn.isHidden = true
  430. compareImageTypeBtn.isHidden = true
  431. settingBtnTopLayout.constant = 20
  432. }
  433. }
  434. func updatePageRange(view: NSComboBox, isNew: Bool = false) {
  435. let config = KMCompareFilesConfig.defaultConfig
  436. let index = pageRangeOldComboBox.indexOfSelectedItem
  437. var file = config.fileOldAttribute
  438. if isNew {
  439. file = config.fileNewAttribute
  440. }
  441. switch index {
  442. case 0:
  443. file.bAllPage = true
  444. file.pagesType = .all
  445. view.delegate = nil
  446. view.isEditable = false
  447. case 1:
  448. file.bAllPage = false
  449. file.pagesType = .odd
  450. view.delegate = nil
  451. view.isEditable = false
  452. case 2:
  453. file.bAllPage = false
  454. file.pagesType = .even
  455. view.delegate = nil
  456. view.isEditable = false
  457. case 3:
  458. file.bAllPage = false
  459. file.pagesType = .all
  460. view.delegate = self
  461. view.stringValue = ""
  462. view.isEditable = true
  463. view.isSelectable = true
  464. self.window?.makeFirstResponder(view)
  465. default:
  466. break
  467. }
  468. }
  469. }
  470. extension KMCompareView {
  471. @IBAction func cancelButtonAction(_ sender: Any) {
  472. guard let callBack = cancelAction else { return }
  473. callBack(self)
  474. }
  475. @IBAction func convertButtonAction(_ sender: Any) {
  476. guard let callBack = doneAction else { return }
  477. callBack(self, KMCompareFilesConfig.defaultConfig)
  478. }
  479. @IBAction func oldFilesSelectBoxAction(_ sender: Any) {
  480. let selectIndex = self.oldFileQKSelectedBox.indexOfSelectedItem
  481. let selectItem = self.oldFileQKSelectedBox.itemObjectValue(at: selectIndex)
  482. self.updateDocument(filePath: selectItem as! String) { fileAttitude in
  483. self.addFilePath(filePath: self.oldFilePaths[selectIndex] , isNew: false)
  484. }
  485. }
  486. @IBAction func newFilesSelectBoxAction(_ sender: Any) {
  487. let selectIndex = self.fileQKNewSelectedBox.indexOfSelectedItem
  488. let selectItem = self.fileQKNewSelectedBox.itemObjectValue(at: selectIndex)
  489. self.updateDocument(filePath: selectItem as! String) { fileAttitude in
  490. self.addFilePath(filePath: self.newFilePaths[selectIndex] , isNew: true)
  491. }
  492. }
  493. @IBAction func oldChooseButtonAction(_ sender: Any) {
  494. self.chooseFileAction()
  495. }
  496. @IBAction func newChooseButtonAction(_ sender: Any) {
  497. self.chooseFileAction(isNew: true)
  498. }
  499. @IBAction func oldNextButtonAction(_ sender: Any) {
  500. self.oldPDFView.goToNextPage(nil)
  501. self.updatePageState()
  502. }
  503. @IBAction func oldPreviousButtonAction(_ sender: Any) {
  504. self.oldPDFView.goToPreviousPage(nil)
  505. self.updatePageState()
  506. }
  507. @IBAction func newNextButtonAction(_ sender: Any) {
  508. self.pdfNewView.goToNextPage(nil)
  509. self.updatePageState(isNew: true)
  510. }
  511. @IBAction func newPreviousButtonAction(_ sender: Any) {
  512. self.pdfNewView.goToPreviousPage(nil)
  513. self.updatePageState(isNew: true)
  514. }
  515. @IBAction func oldPageRangeBoxAction(_ sender: Any) {
  516. self.updatePageRange(view: self.pageRangeOldComboBox)
  517. }
  518. @IBAction func newPageRangeBoxAction(_ sender: Any) {
  519. self.updatePageRange(view: self.pageRangeOldComboBox, isNew: true)
  520. }
  521. @IBAction func compareTextButtonAction(_ sender: NSButton) {
  522. let isCompareText = sender.state == .on ?true:false
  523. KMCompareFilesConfig.defaultConfig.setIsCompareText(isCompareText)
  524. }
  525. @IBAction func compareImageButtonAction(_ sender: NSButton) {
  526. let isCompareImage = sender.state == .on ?true:false
  527. KMCompareFilesConfig.defaultConfig.setIsCompareImage(isCompareImage)
  528. }
  529. @IBAction func settingButtonAction(_ sender: Any) {
  530. if fileType == .content {
  531. if contentSettingWindowController == nil {
  532. let controller = KMCompareContentSettingWindowController(windowNibName: "KMCompareContentSettingWindowController")
  533. contentSettingWindowController = controller
  534. }
  535. NSWindow.currentWindow().addChildWindow(contentSettingWindowController!.window!, ordered: .above)
  536. contentSettingWindowController!.window?.center()
  537. } else {
  538. if coveringSettingWindowController == nil {
  539. let controller = KMCompareCoveringSettingWindowController(windowNibName: "KMCompareCoveringSettingWindowController")
  540. coveringSettingWindowController = controller
  541. }
  542. NSWindow.currentWindow().addChildWindow(coveringSettingWindowController!.window!, ordered: .above)
  543. coveringSettingWindowController!.window?.center()
  544. }
  545. }
  546. @objc func segmentedControlClicked(sender: NSSegmentedControl) {
  547. let selectedType = self.compareTypeSegment.selectedSegment
  548. var type: KMCompareFilesType = .content
  549. if (selectedType == 0) {
  550. type = .content;
  551. } else {
  552. type = .coverting;
  553. }
  554. self.fileType = type
  555. }
  556. func chooseFileAction(isNew: Bool = false) {
  557. // fileQKNewSelectedBox.resignFirstResponder()
  558. // self.window?.makeFirstResponder(nil)
  559. let openPanel = NSOpenPanel()
  560. openPanel.allowedFileTypes = ["pdf"]
  561. openPanel.allowsMultipleSelection = false
  562. openPanel.beginSheetModal(for: self.window!) { (result) in
  563. if result == NSApplication.ModalResponse.OK {
  564. #if VERSION_DMG
  565. // Add code for VERSION_DMG
  566. #else
  567. // if let url = openPanel.url {
  568. // do {
  569. // let bookmarkData = try url.bookmarkData(options: .withSecurityScope, includingResourceValuesForKeys: nil)
  570. // AppSandboxFileAccess.fileAccess().bookmarkPersistanceDelegate.setBookmarkData(bookmarkData, forURL: url)
  571. // AppSandboxFileAccess.fileAccess().bookmarkPersistanceDelegate.setBookmarkData(bookmarkData, forURL: URL(fileURLWithPath: url.path ?? url.absoluteString))
  572. // } catch {
  573. // // Handle error
  574. // print("Error creating bookmark data: \(error)")
  575. // }
  576. // }
  577. #endif
  578. if let filePath = openPanel.url?.path {
  579. self.updateDocument(filePath: filePath, isNew: isNew) { [unowned self] file in
  580. self.addFilePath(filePath: filePath, isNew: isNew)
  581. }
  582. }
  583. }
  584. }
  585. }
  586. }
  587. extension KMCompareView: NSComboBoxDelegate {
  588. }
  589. extension KMCompareView: PDFViewDelegate {
  590. }