KMBatchConvertPDFView.swift 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. //
  2. // KMBatchConvertPDFView.swift
  3. // PDF Master
  4. //
  5. // Created by lizhe on 2023/1/16.
  6. //
  7. import Cocoa
  8. import KMComponentLibrary
  9. class KMBatchConvertPDFView: KMBatchSettingItemView {
  10. @IBOutlet weak var titleLabel: NSTextField!
  11. @IBOutlet weak var titleContentView: NSView!
  12. @IBOutlet weak var formatLabel: NSTextField!
  13. @IBOutlet weak var itemContentView: NSView!
  14. @IBOutlet weak var formatSelectButton: ComponentSelect!
  15. @IBOutlet weak var convertButton: ComponentButton!
  16. @IBOutlet weak var convertBackgroundView: NSView!
  17. @IBOutlet weak var cancelButton: ComponentButton!
  18. var itemViewArray: [KMBatchConvertPDFItemView] = []
  19. var currentView: KMBatchConvertPDFItemView = KMBatchConvertPDFItemView()
  20. var data: KMBatchConvertPDFViewModel = KMBatchConvertPDFViewModel()
  21. var presenter: KMBatchConvertPDFViewPresenter = KMBatchConvertPDFViewPresenter()
  22. override var subType: Any? {
  23. didSet {
  24. var convertType: KMBatchConvertPDFType = .word
  25. let value = (subType as? Int)
  26. switch value {
  27. case 0:
  28. convertType = .word
  29. case 1:
  30. convertType = .excel
  31. case 2:
  32. convertType = .ppt
  33. case 3:
  34. convertType = .rtf
  35. case 4:
  36. convertType = .csv
  37. case 5:
  38. convertType = .html
  39. case 6:
  40. convertType = .text
  41. case 7:
  42. convertType = .jpeg
  43. case 8:
  44. convertType = .jpg
  45. case 9:
  46. convertType = .png
  47. case 10:
  48. convertType = .gif
  49. case 11:
  50. convertType = .tiff
  51. case 12:
  52. convertType = .tga
  53. case 13:
  54. convertType = .bmp
  55. case 14:
  56. convertType = .jpeg2000
  57. case 15:
  58. convertType = .json
  59. default:
  60. convertType = .word
  61. }
  62. self.data.convertPDFType = convertType
  63. self.reloadData()
  64. }
  65. }
  66. override func draw(_ dirtyRect: NSRect) {
  67. super.draw(dirtyRect)
  68. // Drawing code here.
  69. }
  70. override func setup() {
  71. super.setup()
  72. self.presenter.initPresenter(view: self)
  73. self.titleContentView.border(ComponentLibrary.shared.getComponentColorFromKey("colorBorder/divider"), 0.5, 0)
  74. self.convertBackgroundView.border(ComponentLibrary.shared.getComponentColorFromKey("colorBorder/divider"), 0.5, 0)
  75. self.titleLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
  76. self.titleLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-m-bold")
  77. self.formatLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
  78. self.formatLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium")
  79. var menuItemArr: [ComponentMenuitemProperty] = []
  80. let languages: [String] = KMBatchConvertPDFType.allValues()
  81. for language in languages {
  82. let itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false,
  83. itemSelected: false,
  84. isDisabled: false,
  85. keyEquivalent: nil,
  86. text: language, identifier: "1")
  87. menuItemArr.append(itemProperty)
  88. }
  89. formatSelectButton.updateMenuItemsArr(menuItemArr)
  90. formatSelectButton.delegate = self
  91. formatSelectButton.properties = ComponentSelectProperties(size: .s,
  92. state: .normal,
  93. isDisabled: false,
  94. isError: false,
  95. leftIcon: false,
  96. placeholder: nil,
  97. errorText: nil,
  98. creatable: false,
  99. text: NSLocalizedString("", comment: ""))
  100. formatSelectButton.selectItemAtIndex(0)
  101. self.convertButton.properties = ComponentButtonProperty(type: .primary,
  102. size: .m,
  103. state: .normal,
  104. buttonText: KMLocalizedString("Apply"),
  105. keepPressState: false)
  106. self.convertButton.setTarget(self, action: #selector(convertAction(_:)))
  107. self.convertButton.reloadData()
  108. self.cancelButton.properties = ComponentButtonProperty(type: .primary,
  109. size: .m,
  110. state: .normal,
  111. buttonText: KMLocalizedString("Cancel"),
  112. keepPressState: false)
  113. self.cancelButton.setTarget(self, action: #selector(cancelButtonAction))
  114. self.cancelButton.reloadData()
  115. self.cancelButton.isHidden = true
  116. }
  117. override func updateUILanguage() {
  118. self.titleLabel.stringValue = KMLocalizedString("Convert")
  119. self.formatLabel.stringValue = KMLocalizedString("Format")
  120. }
  121. override func reloadData() {
  122. if self.data.convertPDFType != self.currentView.type ||
  123. self.itemViewArray.count == 0 {
  124. let view = self.fetchCurrentView(type: self.data.convertPDFType)
  125. self.currentView.removeFromSuperview()
  126. view.autoresizingMask = [.width, .height]
  127. self.itemContentView.addSubview(view)
  128. self.currentView = view
  129. }
  130. if (self.filesData.count != 0) {
  131. self.convertButton.properties.isDisabled = false
  132. } else {
  133. self.convertButton.properties.isDisabled = true
  134. }
  135. self.convertButton.reloadData()
  136. //选择选项 如果没找到 则是图片
  137. self.formatSelectButton.selectItemAtIndex(KMBatchConvertPDFType.allValues().firstIndex(of: self.data.convertPDFType.rawValue) ?? 7)
  138. self.currentView.data = self.data
  139. self.currentView.reloadData()
  140. self.formatSelectButton.properties.isDisabled = self.isDisable
  141. self.formatSelectButton.reloadData()
  142. }
  143. func fetchCurrentView(type: KMBatchConvertPDFType) -> KMBatchConvertPDFItemView {
  144. var view: KMBatchConvertPDFItemView = KMBatchConvertPDFItemView.init()
  145. var isExist = false
  146. for item in self.itemViewArray {
  147. if item.type == type {
  148. isExist = true
  149. view = item
  150. }
  151. }
  152. if !isExist {
  153. switch type {
  154. case .word:
  155. view = KMBatchConverPDFWordView.init(frame: self.itemContentView.bounds)
  156. break
  157. case .excel:
  158. view = KMBatchConverPDFExcelView.init(frame: self.itemContentView.bounds)
  159. break
  160. case .ppt:
  161. view = KMBatchConverPDFPPTView.init(frame: self.itemContentView.bounds)
  162. break
  163. case .image:
  164. view = KMBatchConverPDFImageView.init(frame: self.itemContentView.bounds)
  165. break
  166. case .csv:
  167. view = KMBatchConverPDFCSVView.init(frame: self.itemContentView.bounds)
  168. break
  169. case .html:
  170. view = KMBatchHtmlView.init(frame: self.itemContentView.bounds)
  171. break
  172. case .rtf:
  173. view = KMBatchConverPDFPPTView.init(frame: self.itemContentView.bounds)
  174. break
  175. case .json:
  176. view = KMBatchJsonView.init(frame: self.itemContentView.bounds)
  177. break
  178. case .text:
  179. view = KMBatchConverPDFPPTView.init(frame: self.itemContentView.bounds)
  180. break
  181. default:
  182. KMPrint("找不到")
  183. break
  184. }
  185. view.presenter = self.presenter
  186. view.data = self.data
  187. self.itemViewArray.append(view)
  188. }
  189. view.isDisable = self.isDisable
  190. view.settingView?.isBatch = true
  191. view.type = type
  192. return view
  193. }
  194. override func bacthProcessingNotification() {
  195. self.formatSelectButton.properties.isDisabled = self.isDisable
  196. self.formatSelectButton.reloadData()
  197. self.currentView.isDisable = self.isDisable
  198. self.convertButton.properties.isDisabled = self.isDisable
  199. self.convertButton.reloadData()
  200. self.updateCancelButtonState()
  201. }
  202. func updateCancelButtonState() {
  203. if self.isDisable {
  204. self.convertButton.isHidden = true
  205. self.cancelButton.isHidden = false
  206. } else {
  207. self.convertButton.isHidden = false
  208. self.cancelButton.isHidden = true
  209. }
  210. }
  211. }
  212. protocol KMBatchConvertPDFViewAction {}
  213. extension KMBatchConvertPDFView: KMBatchConvertPDFViewAction {
  214. @objc func convertAction(_ sender: Any) {
  215. self.batchExport?(self, self.data)
  216. }
  217. @objc func cancelButtonAction() {
  218. self.cancelAction?(self)
  219. self.updateCancelButtonState()
  220. }
  221. }
  222. extension KMBatchConvertPDFView: KMBatchConvertPDFViewPresenterDelegate {
  223. func showData(presenter: KMBatchConvertPDFViewPresenter, data: KMBatchConvertPDFViewModel) {
  224. self.data = data
  225. self.reloadData()
  226. self.currentView.reloadData()
  227. }
  228. }
  229. extension KMBatchConvertPDFView: ComponentSelectDelegate {
  230. func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) {
  231. if (view == formatSelectButton) {
  232. self.presenter.convertPDFTypeAction(string: menuItemProperty!.text)
  233. }
  234. }
  235. }