KMConvertOCRSettingItemView.swift 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  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. #if VERSION_DMG
  114. KMResourceDownloadManager.manager.downLoadOCRResource(window: self.window ?? NSWindow.currentWindow())
  115. #endif
  116. }
  117. override func initSubViews() {
  118. super.initSubViews()
  119. self.checkBox.contentView = self.checkView_
  120. self._languageVC = KMDesignSelect(withType: .Combox)
  121. self.languageBox.contentView = self._languageVC?.view
  122. }
  123. override func initDefaultVlaue() {
  124. super.initDefaultVlaue()
  125. self.titleLabel.stringValue = NSLocalizedString("Text Recognition Settings", comment: "")
  126. self.titleLabel.textColor = NSColor.km_init(hex: "#616469")
  127. self.titleLabel.font = .SFProTextRegularFont(12)
  128. self.checkBox.fillColor = .clear
  129. self.checkView_.setTarget(self, action: #selector(checkBoxAction))
  130. self.languageBox.fillColor = .clear
  131. self.languageBox.contentView = self.languageView_
  132. var menuItemArr: [ComponentMenuitemProperty] = []
  133. for language in languages_ {
  134. let itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
  135. itemSelected: false,
  136. isDisabled: false,
  137. keyEquivalent: nil,
  138. text: language)
  139. menuItemArr.append(itemProperty)
  140. }
  141. languageView_.updateMenuItemsArr(menuItemArr)
  142. languageView_.selectItemAtIndex(0)
  143. languageView_.properties.creatable = false
  144. languageView_.properties.text = ""
  145. languageView_.reloadData()
  146. }
  147. @objc func checkBoxAction(sender: NSButton) {
  148. self._checkAction()
  149. }
  150. public func checkAction() {
  151. self._checkAction()
  152. }
  153. private func _checkAction() {
  154. let state = self.checkView_.properties.checkboxType
  155. languageView_.properties.isDisabled = state != .selected
  156. languageView_.reloadData()
  157. needOCRAction?(!languageView_.properties.isDisabled)
  158. }
  159. func reloadData() {
  160. self.checkView_.properties.isDisabled = self.isDisable
  161. self.checkView_.reloadData()
  162. self.languageView_.properties.isDisabled = self.isDisable
  163. self.languageView_.reloadData()
  164. }
  165. }
  166. extension KMConvertOCRSettingItemView: KMSelectPopButtonDelegate {
  167. func km_comboBoxSelectionDidChange(_ obj: KMDesignSelect) {
  168. if (obj.isEqual(to: self._languageVC)) {
  169. guard let index = self._languageVC?.indexOfSelectedItem, index >= 0 else {
  170. return
  171. }
  172. self._languageIndex = index
  173. guard let callback = self.lanugageDidSelected else {
  174. return
  175. }
  176. callback(index, nil)
  177. }
  178. }
  179. }
  180. extension KMConvertOCRSettingItemView: ComponentSelectDelegate {
  181. func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
  182. guard let index = view?.indexOfSelect(), index >= 0 else {
  183. return
  184. }
  185. self._languageIndex = index
  186. guard let callback = self.lanugageDidSelected else {
  187. return
  188. }
  189. callback(index, nil)
  190. }
  191. }