KMConvertOCRSettingItemView.swift 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  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. #if VERSION_DMG
  148. func downLoad() {
  149. DispatchQueue.main.async {
  150. self.showProgressWindow()
  151. self.progressController?.maxValue = Double(100)
  152. }
  153. KMResourceDownloadManager.manager.downloadFramework(progress: { progress in
  154. self.progressController?.doubleValue = Double(progress*100)
  155. }, result: { result, downloadState in
  156. if result {
  157. if let state = self._checkVC?.state {
  158. self._checkVC?.state = state == .Checked ? .Norm : .Checked
  159. }
  160. self._checkAction()
  161. if let state = self._checkVC?.state {
  162. self._checkVC?.state = state == .Checked ? .Norm : .Checked
  163. }
  164. self._checkAction()
  165. self.hiddenProgressWindow()
  166. } else if downloadState == .retry {
  167. DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.2, execute: { [weak self] in
  168. self?.downLoad()
  169. })
  170. } else {
  171. self.hiddenProgressWindow()
  172. }
  173. })
  174. }
  175. #endif
  176. public func checkAction() {
  177. self._checkAction()
  178. }
  179. private func _checkAction() {
  180. let state = self.checkView_.properties.checkboxType
  181. languageView_.properties.isDisabled = state != .selected
  182. languageView_.reloadData()
  183. needOCRAction?(!languageView_.properties.isDisabled)
  184. }
  185. func showProgressWindow() {
  186. let progress = SKProgressController()
  187. progress.window?.backgroundColor = NSColor.km_init(hex: "#36383B")
  188. progress.window?.contentView?.wantsLayer = true
  189. progress.window?.contentView?.layer?.backgroundColor = NSColor.km_init(hex: "#36383B").cgColor
  190. progress.progressField.textColor = NSColor.white
  191. progress.message = NSLocalizedString("Download...", comment: "")
  192. progress.closeBlock = { [weak self] in
  193. #if VERSION_DMG
  194. KMResourceDownloadManager.manager.cancelDownload()
  195. #endif
  196. }
  197. self.progressController = progress
  198. self.window?.beginSheet(progress.window!)
  199. }
  200. func hiddenProgressWindow() {
  201. DispatchQueue.main.async {
  202. self.progressController?.doubleValue = 100.0
  203. if (self.progressController != nil) {
  204. self.window?.endSheet((self.progressController?.window)!)
  205. self.progressController = nil
  206. }
  207. }
  208. }
  209. func reloadData() {
  210. self.checkView_.properties.isDisabled = self.isDisable
  211. self.checkView_.reloadData()
  212. self.languageView_.properties.isDisabled = self.isDisable
  213. self.languageView_.reloadData()
  214. }
  215. }
  216. extension KMConvertOCRSettingItemView: KMSelectPopButtonDelegate {
  217. func km_comboBoxSelectionDidChange(_ obj: KMDesignSelect) {
  218. if (obj.isEqual(to: self._languageVC)) {
  219. guard let index = self._languageVC?.indexOfSelectedItem, index >= 0 else {
  220. return
  221. }
  222. self._languageIndex = index
  223. guard let callback = self.lanugageDidSelected else {
  224. return
  225. }
  226. callback(index, nil)
  227. }
  228. }
  229. }
  230. extension KMConvertOCRSettingItemView: ComponentSelectDelegate {
  231. func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
  232. guard let index = view?.indexOfSelect(), index >= 0 else {
  233. return
  234. }
  235. self._languageIndex = index
  236. guard let callback = self.lanugageDidSelected else {
  237. return
  238. }
  239. callback(index, nil)
  240. }
  241. }