KMConvertOCRSettingItemView.swift 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  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. self._checkAction()
  146. }
  147. public func checkAction() {
  148. self._checkAction()
  149. }
  150. private func _checkAction() {
  151. let state = self.checkView_.properties.checkboxType
  152. languageView_.properties.isDisabled = state != .selected
  153. languageView_.reloadData()
  154. needOCRAction?(!languageView_.properties.isDisabled)
  155. }
  156. func reloadData() {
  157. self.checkView_.properties.isDisabled = self.isDisable
  158. self.checkView_.reloadData()
  159. self.languageView_.properties.isDisabled = self.isDisable
  160. self.languageView_.reloadData()
  161. }
  162. }
  163. extension KMConvertOCRSettingItemView: KMSelectPopButtonDelegate {
  164. func km_comboBoxSelectionDidChange(_ obj: KMDesignSelect) {
  165. if (obj.isEqual(to: self._languageVC)) {
  166. guard let index = self._languageVC?.indexOfSelectedItem, index >= 0 else {
  167. return
  168. }
  169. self._languageIndex = index
  170. guard let callback = self.lanugageDidSelected else {
  171. return
  172. }
  173. callback(index, nil)
  174. }
  175. }
  176. }
  177. extension KMConvertOCRSettingItemView: ComponentSelectDelegate {
  178. func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
  179. guard let index = view?.indexOfSelect(), index >= 0 else {
  180. return
  181. }
  182. self._languageIndex = index
  183. guard let callback = self.lanugageDidSelected else {
  184. return
  185. }
  186. callback(index, nil)
  187. }
  188. }