KMConvertOCRSettingItemView.swift 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. //
  2. // KMConvertOCRSettingItemView.swift
  3. // PDF Master
  4. //
  5. // Created by tangchao on 2022/12/6.
  6. //
  7. class KMConvertOCRSettingItemView: KMConvertBaseView {
  8. @IBOutlet weak var titleLabel: NSTextField!
  9. @IBOutlet weak var checkBox: NSBox!
  10. @IBOutlet weak var languageBox: NSBox!
  11. private var _checkVC: KMDesignButton?
  12. var checkVC: KMDesignButton? {
  13. get {
  14. return self._checkVC
  15. }
  16. }
  17. private var _languageVC: KMDesignSelect?
  18. var progressController: SKProgressController?
  19. private var _languageIndex: Int = 0
  20. var languageIndex: Int {
  21. get {
  22. return self._languageIndex
  23. }
  24. set {
  25. self._languageIndex = newValue
  26. self._languageVC?.selectItem(at: newValue)
  27. }
  28. }
  29. var lanugageDidSelected: KMValueDidChangeBlock?
  30. override func awakeFromNib() {
  31. super.awakeFromNib()
  32. self._checkAction()
  33. }
  34. override func initSubViews() {
  35. super.initSubViews()
  36. self._checkVC = KMDesignButton(withType: .CheckBox)
  37. self.checkBox.contentView = self._checkVC!.view
  38. self._languageVC = KMDesignSelect(withType: .Combox)
  39. self.languageBox.contentView = self._languageVC?.view
  40. }
  41. override func initDefaultVlaue() {
  42. super.initDefaultVlaue()
  43. self.titleLabel.stringValue = NSLocalizedString("Text Recognition Settings", comment: "")
  44. self.titleLabel.textColor = NSColor.km_init(hex: "#616469")
  45. self.titleLabel.font = .SFProTextRegularFont(12)
  46. self.checkBox.fillColor = .clear
  47. self._checkVC?.target = self
  48. self._checkVC?.action = #selector(checkBoxAction)
  49. self._checkVC?.stringValue = NSLocalizedString("Recognize text if needed", comment: "")
  50. self._checkVC?.checkbox_radio()
  51. self._checkVC?.state = .Custom
  52. self.languageBox.fillColor = .clear
  53. self._languageVC?.delete = self
  54. self._languageVC?.isScrollPop = true
  55. self._languageVC?.removeAllItems()
  56. self._languageVC?.addItems(withObjectValues: KMPDFConvertManager.defaultManager.languages_asc_strings)
  57. if (self.languageIndex < self._languageVC!.numberOfItems) {
  58. self._languageVC?.selectItem(at: self.languageIndex)
  59. } else {
  60. self._languageVC?.selectItem(at: 2)
  61. }
  62. }
  63. @objc func checkBoxAction(sender: NSButton) {
  64. #if VERSION_DMG
  65. let isExist = KMResourceDownload.manager().documentAIBundleIsExist()
  66. if isExist || self._checkVC?.state == .Checked {
  67. if let state = self._checkVC?.state {
  68. self._checkVC?.state = state == .Checked ? .Norm : .Checked
  69. }
  70. self._checkAction()
  71. } else {
  72. let alert = NSAlert()
  73. alert.messageText = NSLocalizedString("Do you want to download resources?", comment: "")
  74. alert.informativeText = NSLocalizedString("Additional resource pack download is required to use OCR. Do you want to continue?", comment: "")
  75. alert.addButton(withTitle: NSLocalizedString("Yes", comment: ""))
  76. alert.addButton(withTitle: NSLocalizedString("No", comment: ""))
  77. alert.beginSheetModal(for: self.window!) { [unowned self] result in
  78. if (result == .alertFirstButtonReturn) { /// 取消
  79. DispatchQueue.main.async {
  80. self.showProgressWindow()
  81. self.progressController?.maxValue = Double(100)
  82. }
  83. KMResourceDownload.manager().downloadFrameworkProgress { progress in
  84. self.progressController?.doubleValue = Double(progress*100)
  85. } result: { result, downloadState in
  86. if result {
  87. if let state = self._checkVC?.state {
  88. self._checkVC?.state = state == .Checked ? .Norm : .Checked
  89. }
  90. self._checkAction()
  91. if let state = self._checkVC?.state {
  92. self._checkVC?.state = state == .Checked ? .Norm : .Checked
  93. }
  94. self._checkAction()
  95. }
  96. self.hiddenProgressWindow()
  97. }
  98. } else if result == .alertSecondButtonReturn {
  99. return
  100. }
  101. }
  102. }
  103. #else
  104. if let state = self._checkVC?.state {
  105. self._checkVC?.state = state == .Checked ? .Norm : .Checked
  106. }
  107. self._checkAction()
  108. #endif
  109. }
  110. public func checkAction() {
  111. self._checkAction()
  112. }
  113. private func _checkAction() {
  114. guard let state = self._checkVC?.state else {
  115. return
  116. }
  117. self._languageVC?.enabled = state == .Checked
  118. }
  119. func showProgressWindow() {
  120. let progress = SKProgressController()
  121. progress.message = NSLocalizedString("Download...", comment: "")
  122. progress.window?.backgroundColor = NSColor.km_init(hex: "#36383B")
  123. progress.window?.contentView?.wantsLayer = true
  124. progress.window?.contentView?.layer?.backgroundColor = NSColor.km_init(hex: "#36383B").cgColor
  125. progress.progressField.textColor = NSColor.white
  126. progress.closeBlock = { [unowned self] in
  127. #if VERSION_DMG
  128. KMResourceDownload.manager().cancel()
  129. #endif
  130. }
  131. self.progressController = progress
  132. self.window?.beginSheet(progress.window!)
  133. }
  134. func hiddenProgressWindow() {
  135. DispatchQueue.main.async {
  136. self.progressController?.doubleValue = 100.0
  137. if (self.progressController != nil) {
  138. self.window?.endSheet((self.progressController?.window)!)
  139. self.progressController = nil
  140. }
  141. }
  142. }
  143. }
  144. extension KMConvertOCRSettingItemView: KMSelectPopButtonDelegate {
  145. func km_comboBoxSelectionDidChange(_ obj: KMDesignSelect) {
  146. if (obj.isEqual(to: self._languageVC)) {
  147. guard let index = self._languageVC?.indexOfSelectedItem, index >= 0 else {
  148. return
  149. }
  150. self._languageIndex = index
  151. guard let callback = self.lanugageDidSelected else {
  152. return
  153. }
  154. callback(index, nil)
  155. }
  156. }
  157. }