KMConvertOCRSettingItemView.swift 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. //
  2. // KMConvertOCRSettingItemView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by tangchao on 2022/12/6.
  6. //
  7. import KMComponentLibrary
  8. class KMConvertOCRSettingItemView: KMConvertBaseView {
  9. @IBOutlet weak var titleLabel: NSTextField!
  10. @IBOutlet weak var checkBox: NSBox!
  11. @IBOutlet weak var languageBox: NSBox!
  12. var isDisable: Bool = false {
  13. didSet {
  14. self.reloadData()
  15. }
  16. }
  17. private var _checkVC: KMDesignButton?
  18. var checkVC: KMDesignButton? {
  19. get {
  20. return self._checkVC
  21. }
  22. }
  23. private lazy var checkView_: ComponentCheckBox = {
  24. let view = ComponentCheckBox()
  25. view.properties = ComponentCheckBoxProperty(size: .s,
  26. state: .normal,
  27. isDisabled: false,
  28. showhelp: false,
  29. text: NSLocalizedString("Recognize text if needed", comment: ""),
  30. checkboxType: .normal)
  31. return view
  32. }()
  33. var checkView: ComponentCheckBox {
  34. get {
  35. return checkView_
  36. }
  37. }
  38. private var _languageVC: KMDesignSelect?
  39. var progressController: SKProgressController?
  40. private lazy var languageView_: ComponentSelect = {
  41. let view = ComponentSelect()
  42. view.properties = ComponentSelectProperties(size: .s,
  43. state: .normal,
  44. isDisabled: false,
  45. isError: false,
  46. leftIcon: false,
  47. placeholder: nil,
  48. errorText: nil,
  49. creatable: false,
  50. text: KMLocalizedString("Odd Pages Only", comment: ""))
  51. view.delegate = self
  52. return view
  53. }()
  54. private lazy var languages_: [String] = {
  55. return ["Chinese", "Chinese Traditional", "English", "Japanese",
  56. "Kroean",
  57. "Serbian",
  58. "Occitan",
  59. "Danish",
  60. "German",
  61. "French",
  62. "Italian",
  63. "Spanish",
  64. "Portuguese",
  65. "Maori",
  66. "Malay",
  67. "Maltese",
  68. "Dutch",
  69. "Norwegian",
  70. "Polish",
  71. "Romanian",
  72. "Slovak",
  73. "Slovenian",
  74. "Albanian",
  75. "Swedish",
  76. "Swahili",
  77. "Tagalog",
  78. "Turish",
  79. "Uzbek",
  80. "Vietnamese",
  81. "Afrikaans",
  82. "Azerbaijani",
  83. "Bosnian",
  84. "Czech",
  85. "Welsh",
  86. "Estonian",
  87. "Irish",
  88. "Croatian",
  89. "Hungarian",
  90. "Indonesian",
  91. "Icelandic",
  92. "Kurdish",
  93. "Lithuanian",
  94. "Latvian"]
  95. }()
  96. private var _languageIndex: Int = 0
  97. var languageIndex: Int {
  98. get {
  99. return self._languageIndex
  100. }
  101. set {
  102. self._languageIndex = newValue
  103. self.languageView_.properties.text = self.languages_.safe_element(for: newValue) as? String ?? ""
  104. self.languageView_.selectItemAtIndex(newValue)
  105. }
  106. }
  107. var lanugageDidSelected: KMValueDidChangeBlock?
  108. var needOCRAction: ((_ needOCR: Bool) -> Void)?
  109. var reachabilityAlert: NSAlert?
  110. override func awakeFromNib() {
  111. super.awakeFromNib()
  112. self._checkAction()
  113. }
  114. override func initSubViews() {
  115. super.initSubViews()
  116. self.checkBox.contentView = self.checkView_
  117. self._languageVC = KMDesignSelect(withType: .Combox)
  118. self.languageBox.contentView = self._languageVC?.view
  119. }
  120. override func initDefaultVlaue() {
  121. super.initDefaultVlaue()
  122. self.titleLabel.stringValue = NSLocalizedString("Text Recognition Settings", comment: "")
  123. self.titleLabel.textColor = NSColor.km_init(hex: "#616469")
  124. self.titleLabel.font = .SFProTextRegularFont(12)
  125. self.checkBox.fillColor = .clear
  126. self.checkView_.setTarget(self, action: #selector(checkBoxAction))
  127. self.languageBox.fillColor = .clear
  128. self.languageBox.contentView = self.languageView_
  129. var menuItemArr: [ComponentMenuitemProperty] = []
  130. for language in languages_ {
  131. let itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
  132. itemSelected: false,
  133. isDisabled: false,
  134. keyEquivalent: nil,
  135. text: language)
  136. menuItemArr.append(itemProperty)
  137. }
  138. languageView_.updateMenuItemsArr(menuItemArr)
  139. languageView_.selectItemAtIndex(0)
  140. languageView_.properties.creatable = false
  141. languageView_.properties.text = ""
  142. languageView_.reloadData()
  143. }
  144. @objc func checkBoxAction(sender: NSButton) {
  145. #if VERSION_DMG
  146. KMResourceDownloadManager.manager.needDownloadOCRResource(complete: { [weak self] result in
  147. if result {
  148. self?.checkView_.properties.checkboxType = .normal
  149. self?.checkView_.reloadData()
  150. KMResourceDownloadManager.manager.downLoadOCRResource(window: self?.window ?? NSWindow.currentWindow())
  151. } else {
  152. self?._checkAction()
  153. }
  154. })
  155. #else
  156. self._checkAction()
  157. #endif
  158. }
  159. public func checkAction() {
  160. self._checkAction()
  161. }
  162. private func _checkAction() {
  163. let state = self.checkView_.properties.checkboxType
  164. languageView_.properties.isDisabled = state != .selected
  165. languageView_.reloadData()
  166. needOCRAction?(!languageView_.properties.isDisabled)
  167. }
  168. func reloadData() {
  169. self.checkView_.properties.isDisabled = self.isDisable
  170. self.checkView_.reloadData()
  171. self.languageView_.properties.isDisabled = self.isDisable
  172. self.languageView_.reloadData()
  173. }
  174. }
  175. extension KMConvertOCRSettingItemView: KMSelectPopButtonDelegate {
  176. func km_comboBoxSelectionDidChange(_ obj: KMDesignSelect) {
  177. if (obj.isEqual(to: self._languageVC)) {
  178. guard let index = self._languageVC?.indexOfSelectedItem, index >= 0 else {
  179. return
  180. }
  181. self._languageIndex = index
  182. guard let callback = self.lanugageDidSelected else {
  183. return
  184. }
  185. callback(index, nil)
  186. }
  187. }
  188. }
  189. extension KMConvertOCRSettingItemView: ComponentSelectDelegate {
  190. func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
  191. guard let index = view?.indexOfSelect(), index >= 0 else {
  192. return
  193. }
  194. self._languageIndex = index
  195. guard let callback = self.lanugageDidSelected else {
  196. return
  197. }
  198. callback(index, nil)
  199. }
  200. }