KMConvertOCRSettingItemView.swift 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  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. private var _checkVC: KMDesignButton?
  13. var checkVC: KMDesignButton? {
  14. get {
  15. return self._checkVC
  16. }
  17. }
  18. private lazy var checkView_: ComponentCheckBox = {
  19. let view = ComponentCheckBox()
  20. view.properties = ComponentCheckBoxProperty(size: .s,
  21. state: .normal,
  22. isDisabled: false,
  23. showhelp: false,
  24. text: NSLocalizedString("Recognize text if needed", comment: ""),
  25. checkboxType: .normal)
  26. return view
  27. }()
  28. var checkView: ComponentCheckBox {
  29. get {
  30. return checkView_
  31. }
  32. }
  33. private var _languageVC: KMDesignSelect?
  34. var progressController: SKProgressController?
  35. private lazy var languageView_: ComponentSelect = {
  36. let view = ComponentSelect()
  37. view.properties = ComponentSelectProperties(size: .s,
  38. state: .normal,
  39. isDisabled: false,
  40. isError: false,
  41. leftIcon: false,
  42. placeholder: nil,
  43. errorText: nil,
  44. creatable: false,
  45. text: KMLocalizedString("Odd Pages Only", comment: ""))
  46. view.delegate = self
  47. return view
  48. }()
  49. private lazy var languages_: [String] = {
  50. return ["Chinese", "Chinese Traditional", "English", "Japanese",
  51. "Kroean",
  52. "Serbian",
  53. "Occitan",
  54. "Danish",
  55. "German",
  56. "French",
  57. "Italian",
  58. "Spanish",
  59. "Portuguese",
  60. "Maori",
  61. "Malay",
  62. "Maltese",
  63. "Dutch",
  64. "Norwegian",
  65. "Polish",
  66. "Romanian",
  67. "Slovak",
  68. "Slovenian",
  69. "Albanian",
  70. "Swedish",
  71. "Swahili",
  72. "Tagalog",
  73. "Turish",
  74. "Uzbek",
  75. "Vietnamese",
  76. "Afrikaans",
  77. "Azerbaijani",
  78. "Bosnian",
  79. "Czech",
  80. "Welsh",
  81. "Estonian",
  82. "Irish",
  83. "Croatian",
  84. "Hungarian",
  85. "Indonesian",
  86. "Icelandic",
  87. "Kurdish",
  88. "Lithuanian",
  89. "Latvian"]
  90. }()
  91. private var _languageIndex: Int = 0
  92. var languageIndex: Int {
  93. get {
  94. return self._languageIndex
  95. }
  96. set {
  97. self._languageIndex = newValue
  98. self.languageView_.selectItemAtIndex(newValue)
  99. }
  100. }
  101. var lanugageDidSelected: KMValueDidChangeBlock?
  102. var reachabilityAlert: NSAlert?
  103. override func awakeFromNib() {
  104. super.awakeFromNib()
  105. self._checkAction()
  106. }
  107. override func initSubViews() {
  108. super.initSubViews()
  109. self.checkBox.contentView = self.checkView_
  110. self._languageVC = KMDesignSelect(withType: .Combox)
  111. self.languageBox.contentView = self._languageVC?.view
  112. }
  113. override func initDefaultVlaue() {
  114. super.initDefaultVlaue()
  115. self.titleLabel.stringValue = NSLocalizedString("OCR Settings", comment: "")
  116. self.titleLabel.textColor = NSColor.km_init(hex: "#616469")
  117. self.titleLabel.font = .SFProTextRegularFont(12)
  118. self.checkBox.fillColor = .clear
  119. self.checkView_.setTarget(self, action: #selector(checkBoxAction))
  120. self.languageBox.fillColor = .clear
  121. self.languageBox.contentView = self.languageView_
  122. var menuItemArr: [ComponentMenuitemProperty] = []
  123. for language in languages_ {
  124. let itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
  125. itemSelected: false,
  126. isDisabled: false,
  127. keyEquivalent: nil,
  128. text: language)
  129. menuItemArr.append(itemProperty)
  130. }
  131. languageView_.updateMenuItemsArr(menuItemArr)
  132. languageView_.selectItemAtIndex(0)
  133. languageView_.properties.creatable = false
  134. languageView_.properties.text = ""
  135. // KMNTools.parseIndexPathsSet(indexSets: selectionIndexPaths)
  136. languageView_.reloadData()
  137. }
  138. @objc func checkBoxAction(sender: NSButton) {
  139. #if VERSION_DMG
  140. // let isExist = KMResourceDownloadManager.manager.documentAIBundleExists()
  141. // if isExist || self._checkVC?.state == .Checked {
  142. // if let state = self._checkVC?.state {
  143. // self._checkVC?.state = state == .Checked ? .Norm : .Checked
  144. // }
  145. self._checkAction()
  146. // } else {
  147. // let alert = NSAlert()
  148. // alert.messageText = NSLocalizedString("Download OCR", comment: "")
  149. // alert.informativeText = NSLocalizedString("Using OCR requires downloading additional resource pack. Do you want to continue?", comment: "")
  150. // alert.addButton(withTitle: NSLocalizedString("Yes", comment: ""))
  151. // alert.addButton(withTitle: NSLocalizedString("No", comment: ""))
  152. // alert.beginSheetModal(for: self.window!) { [weak self] result in
  153. // if (result == .alertFirstButtonReturn) { /// 取消
  154. // self?.downLoad()
  155. // } else if result == .alertSecondButtonReturn {
  156. // return
  157. // }
  158. // }
  159. // }
  160. #else
  161. if let state = self._checkVC?.state {
  162. self._checkVC?.state = state == .Checked ? .Norm : .Checked
  163. }
  164. self._checkAction()
  165. #endif
  166. }
  167. #if VERSION_DMG
  168. func downLoad() {
  169. DispatchQueue.main.async {
  170. self.showProgressWindow()
  171. self.progressController?.maxValue = Double(100)
  172. }
  173. KMResourceDownloadManager.manager.downloadFramework(progress: { progress in
  174. self.progressController?.doubleValue = Double(progress*100)
  175. }, result: { result, downloadState in
  176. if result {
  177. if let state = self._checkVC?.state {
  178. self._checkVC?.state = state == .Checked ? .Norm : .Checked
  179. }
  180. self._checkAction()
  181. if let state = self._checkVC?.state {
  182. self._checkVC?.state = state == .Checked ? .Norm : .Checked
  183. }
  184. self._checkAction()
  185. self.hiddenProgressWindow()
  186. } else if downloadState == .retry {
  187. DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.2, execute: { [weak self] in
  188. self?.downLoad()
  189. })
  190. } else {
  191. self.hiddenProgressWindow()
  192. }
  193. })
  194. }
  195. #endif
  196. public func checkAction() {
  197. self._checkAction()
  198. }
  199. private func _checkAction() {
  200. // guard let state = self._checkVC?.state else {
  201. // return
  202. // }
  203. //
  204. // self._languageVC?.enabled = state == .Checked
  205. let state = self.checkView_.properties.checkboxType
  206. languageView_.properties.isDisabled = state != .selected
  207. languageView_.reloadData()
  208. }
  209. func showProgressWindow() {
  210. let progress = SKProgressController()
  211. progress.window?.backgroundColor = NSColor.km_init(hex: "#36383B")
  212. progress.window?.contentView?.wantsLayer = true
  213. progress.window?.contentView?.layer?.backgroundColor = NSColor.km_init(hex: "#36383B").cgColor
  214. progress.progressField.textColor = NSColor.white
  215. progress.message = NSLocalizedString("Download...", comment: "")
  216. progress.closeBlock = { [weak self] in
  217. #if VERSION_DMG
  218. KMResourceDownloadManager.manager.cancelDownload()
  219. #endif
  220. }
  221. self.progressController = progress
  222. self.window?.beginSheet(progress.window!)
  223. }
  224. func hiddenProgressWindow() {
  225. DispatchQueue.main.async {
  226. self.progressController?.doubleValue = 100.0
  227. if (self.progressController != nil) {
  228. self.window?.endSheet((self.progressController?.window)!)
  229. self.progressController = nil
  230. }
  231. }
  232. }
  233. }
  234. extension KMConvertOCRSettingItemView: KMSelectPopButtonDelegate {
  235. func km_comboBoxSelectionDidChange(_ obj: KMDesignSelect) {
  236. if (obj.isEqual(to: self._languageVC)) {
  237. guard let index = self._languageVC?.indexOfSelectedItem, index >= 0 else {
  238. return
  239. }
  240. self._languageIndex = index
  241. guard let callback = self.lanugageDidSelected else {
  242. return
  243. }
  244. callback(index, nil)
  245. }
  246. }
  247. }
  248. extension KMConvertOCRSettingItemView: ComponentSelectDelegate {
  249. func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
  250. guard let index = view?.indexOfSelect(), index >= 0 else {
  251. return
  252. }
  253. self._languageIndex = index
  254. guard let callback = self.lanugageDidSelected else {
  255. return
  256. }
  257. callback(index, nil)
  258. }
  259. }