KMConvertOCRSettingItemView.swift 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  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._languageVC?.selectItem(at: newValue)
  99. self.languageView_.selectItemAtIndex(newValue)
  100. }
  101. }
  102. var lanugageDidSelected: KMValueDidChangeBlock?
  103. var reachabilityAlert: NSAlert?
  104. override func awakeFromNib() {
  105. super.awakeFromNib()
  106. self._checkAction()
  107. }
  108. override func initSubViews() {
  109. super.initSubViews()
  110. // self._checkVC = KMDesignButton(withType: .CheckBox)
  111. // self.checkBox.contentView = self._checkVC!.view
  112. self.checkBox.contentView = self.checkView_
  113. self._languageVC = KMDesignSelect(withType: .Combox)
  114. self.languageBox.contentView = self._languageVC?.view
  115. }
  116. override func initDefaultVlaue() {
  117. super.initDefaultVlaue()
  118. self.titleLabel.stringValue = NSLocalizedString("OCR Settings", comment: "")
  119. self.titleLabel.textColor = NSColor.km_init(hex: "#616469")
  120. self.titleLabel.font = .SFProTextRegularFont(12)
  121. self.checkBox.fillColor = .clear
  122. // self._checkVC?.target = self
  123. // self._checkVC?.action = #selector(checkBoxAction)
  124. // self._checkVC?.stringValue = NSLocalizedString("Recognize text if needed", comment: "")
  125. // self._checkVC?.checkbox_radio()
  126. // self._checkVC?.state = .Custom
  127. self.checkView_.setTarget(self, action: #selector(checkBoxAction))
  128. self.languageBox.fillColor = .clear
  129. // self._languageVC?.delete = self
  130. // self._languageVC?.isScrollPop = true
  131. // self._languageVC?.removeAllItems()
  132. // self._languageVC?.addItems(withObjectValues: KMPDFConvertManager.defaultManager.languages_asc_strings)
  133. // self._languageVC?.addItems(withObjectValues: self.languages_)
  134. // if (self.languageIndex < self._languageVC!.numberOfItems) {
  135. // self._languageVC?.selectItem(at: self.languageIndex)
  136. // } else {
  137. // self._languageVC?.selectItem(at: 2)
  138. // }
  139. self.languageBox.contentView = self.languageView_
  140. var menuItemArr: [ComponentMenuitemProperty] = []
  141. for language in languages_ {
  142. let itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
  143. itemSelected: false,
  144. isDisabled: false,
  145. keyEquivalent: nil,
  146. text: language)
  147. menuItemArr.append(itemProperty)
  148. }
  149. languageView_.updateMenuItemsArr(menuItemArr)
  150. languageView_.selectItemAtIndex(0)
  151. languageView_.properties.creatable = false
  152. languageView_.properties.text = ""
  153. // KMNTools.parseIndexPathsSet(indexSets: selectionIndexPaths)
  154. languageView_.reloadData()
  155. }
  156. @objc func checkBoxAction(sender: NSButton) {
  157. #if VERSION_DMG
  158. // let isExist = KMResourceDownloadManager.manager.documentAIBundleExists()
  159. // if isExist || self._checkVC?.state == .Checked {
  160. // if let state = self._checkVC?.state {
  161. // self._checkVC?.state = state == .Checked ? .Norm : .Checked
  162. // }
  163. self._checkAction()
  164. // } else {
  165. // let alert = NSAlert()
  166. // alert.messageText = NSLocalizedString("Download OCR", comment: "")
  167. // alert.informativeText = NSLocalizedString("Using OCR requires downloading additional resource pack. Do you want to continue?", comment: "")
  168. // alert.addButton(withTitle: NSLocalizedString("Yes", comment: ""))
  169. // alert.addButton(withTitle: NSLocalizedString("No", comment: ""))
  170. // alert.beginSheetModal(for: self.window!) { [weak self] result in
  171. // if (result == .alertFirstButtonReturn) { /// 取消
  172. // self?.downLoad()
  173. // } else if result == .alertSecondButtonReturn {
  174. // return
  175. // }
  176. // }
  177. // }
  178. #else
  179. if let state = self._checkVC?.state {
  180. self._checkVC?.state = state == .Checked ? .Norm : .Checked
  181. }
  182. self._checkAction()
  183. #endif
  184. }
  185. #if VERSION_DMG
  186. func downLoad() {
  187. DispatchQueue.main.async {
  188. self.showProgressWindow()
  189. self.progressController?.maxValue = Double(100)
  190. }
  191. KMResourceDownloadManager.manager.downloadFramework(progress: { progress in
  192. self.progressController?.doubleValue = Double(progress*100)
  193. }, result: { result, downloadState in
  194. if result {
  195. if let state = self._checkVC?.state {
  196. self._checkVC?.state = state == .Checked ? .Norm : .Checked
  197. }
  198. self._checkAction()
  199. if let state = self._checkVC?.state {
  200. self._checkVC?.state = state == .Checked ? .Norm : .Checked
  201. }
  202. self._checkAction()
  203. self.hiddenProgressWindow()
  204. } else if downloadState == .retry {
  205. DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.2, execute: { [weak self] in
  206. self?.downLoad()
  207. })
  208. } else {
  209. self.hiddenProgressWindow()
  210. }
  211. })
  212. }
  213. #endif
  214. public func checkAction() {
  215. self._checkAction()
  216. }
  217. private func _checkAction() {
  218. // guard let state = self._checkVC?.state else {
  219. // return
  220. // }
  221. //
  222. // self._languageVC?.enabled = state == .Checked
  223. let state = self.checkView_.properties.checkboxType
  224. languageView_.properties.isDisabled = state != .selected
  225. languageView_.reloadData()
  226. }
  227. func showProgressWindow() {
  228. let progress = SKProgressController()
  229. progress.window?.backgroundColor = NSColor.km_init(hex: "#36383B")
  230. progress.window?.contentView?.wantsLayer = true
  231. progress.window?.contentView?.layer?.backgroundColor = NSColor.km_init(hex: "#36383B").cgColor
  232. progress.progressField.textColor = NSColor.white
  233. progress.message = NSLocalizedString("Download...", comment: "")
  234. progress.closeBlock = { [weak self] in
  235. #if VERSION_DMG
  236. KMResourceDownloadManager.manager.cancelDownload()
  237. #endif
  238. }
  239. self.progressController = progress
  240. self.window?.beginSheet(progress.window!)
  241. }
  242. func hiddenProgressWindow() {
  243. DispatchQueue.main.async {
  244. self.progressController?.doubleValue = 100.0
  245. if (self.progressController != nil) {
  246. self.window?.endSheet((self.progressController?.window)!)
  247. self.progressController = nil
  248. }
  249. }
  250. }
  251. }
  252. extension KMConvertOCRSettingItemView: KMSelectPopButtonDelegate {
  253. func km_comboBoxSelectionDidChange(_ obj: KMDesignSelect) {
  254. if (obj.isEqual(to: self._languageVC)) {
  255. guard let index = self._languageVC?.indexOfSelectedItem, index >= 0 else {
  256. return
  257. }
  258. self._languageIndex = index
  259. guard let callback = self.lanugageDidSelected else {
  260. return
  261. }
  262. callback(index, nil)
  263. }
  264. }
  265. }
  266. extension KMConvertOCRSettingItemView: ComponentSelectDelegate {
  267. func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
  268. guard let index = view?.indexOfSelect(), index >= 0 else {
  269. return
  270. }
  271. self._languageIndex = index
  272. guard let callback = self.lanugageDidSelected else {
  273. return
  274. }
  275. callback(index, nil)
  276. }
  277. }