KMBatchConvertPDFView.swift 11 KB

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