// // KMBatchConvertPDFView.swift // PDF Master // // Created by lizhe on 2023/1/16. // import Cocoa import KMComponentLibrary class KMBatchConvertPDFView: KMBatchSettingItemView { @IBOutlet weak var titleLabel: NSTextField! @IBOutlet weak var titleContentView: NSView! @IBOutlet weak var formatLabel: NSTextField! @IBOutlet weak var itemContentView: NSView! @IBOutlet weak var formatSelectButton: ComponentSelect! @IBOutlet weak var convertButton: ComponentButton! @IBOutlet weak var convertBackgroundView: NSView! var itemViewArray: [KMBatchConvertPDFItemView] = [] var currentView: KMBatchConvertPDFItemView = KMBatchConvertPDFItemView() var data: KMBatchConvertPDFViewModel = KMBatchConvertPDFViewModel() var presenter: KMBatchConvertPDFViewPresenter = KMBatchConvertPDFViewPresenter() override var subType: Any? { didSet { var convertType: KMBatchConvertPDFType = .word let value = (subType as? Int) switch value { case 0: convertType = .word case 1: convertType = .excel case 2: convertType = .ppt case 3: convertType = .rtf case 4: convertType = .csv case 5: convertType = .html case 6: convertType = .text case 7: convertType = .jpeg case 8: convertType = .jpg case 9: convertType = .png case 10: convertType = .gif case 11: convertType = .tiff case 12: convertType = .tga case 13: convertType = .bmp case 14: convertType = .jpeg2000 case 15: convertType = .json default: convertType = .word } self.data.convertPDFType = convertType self.reloadData() } } override func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) // Drawing code here. } override func setup() { super.setup() self.presenter.initPresenter(view: self) self.titleContentView.border(ComponentLibrary.shared.getComponentColorFromKey("colorBorder/divider"), 0.5, 0) self.convertBackgroundView.border(ComponentLibrary.shared.getComponentColorFromKey("colorBorder/divider"), 0.5, 0) self.titleLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2") self.titleLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-m-bold") self.formatLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2") self.formatLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium") var menuItemArr: [ComponentMenuitemProperty] = [] let languages: [String] = KMBatchConvertPDFType.allValues() for language in languages { let itemProperty: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, keyEquivalent: nil, text: language, identifier: "1") menuItemArr.append(itemProperty) } formatSelectButton.updateMenuItemsArr(menuItemArr) formatSelectButton.delegate = self formatSelectButton.properties = ComponentSelectProperties(size: .s, state: .normal, isDisabled: false, isError: false, leftIcon: false, placeholder: nil, errorText: nil, creatable: false, text: NSLocalizedString("", comment: "")) formatSelectButton.selectItemAtIndex(0) self.convertButton.properties = ComponentButtonProperty(type: .primary, size: .m, state: .normal, buttonText: KMLocalizedString("Apply"), keepPressState: false) self.convertButton.setTarget(self, action: #selector(convertAction(_:))) self.convertButton.reloadData() } override func updateUILanguage() { self.titleLabel.stringValue = KMLocalizedString("Convert") self.formatLabel.stringValue = KMLocalizedString("Format") } override func reloadData() { if self.data.convertPDFType != self.currentView.type || self.itemViewArray.count == 0 { let view = self.fetchCurrentView(type: self.data.convertPDFType) self.currentView.removeFromSuperview() view.autoresizingMask = [.width, .height] self.itemContentView.addSubview(view) self.currentView = view } if (self.filesData.count != 0) { self.convertButton.properties.isDisabled = false } else { self.convertButton.properties.isDisabled = true } self.convertButton.reloadData() //选择选项 如果没找到 则是图片 self.formatSelectButton.selectItemAtIndex(KMBatchConvertPDFType.allValues().firstIndex(of: self.data.convertPDFType.rawValue) ?? 7) self.currentView.data = self.data self.currentView.reloadData() self.formatSelectButton.properties.isDisabled = self.isDisable self.formatSelectButton.reloadData() } func fetchCurrentView(type: KMBatchConvertPDFType) -> KMBatchConvertPDFItemView { var view: KMBatchConvertPDFItemView = KMBatchConvertPDFItemView.init() var isExist = false for item in self.itemViewArray { if item.type == type { isExist = true view = item } } if !isExist { switch type { case .word: view = KMBatchConverPDFWordView.init(frame: self.itemContentView.bounds) break case .excel: view = KMBatchConverPDFExcelView.init(frame: self.itemContentView.bounds) break case .ppt: view = KMBatchConverPDFPPTView.init(frame: self.itemContentView.bounds) break case .image: view = KMBatchConverPDFImageView.init(frame: self.itemContentView.bounds) break case .csv: view = KMBatchConverPDFCSVView.init(frame: self.itemContentView.bounds) break case .html: view = KMBatchHtmlView.init(frame: self.itemContentView.bounds) break case .rtf: view = KMBatchConverPDFPPTView.init(frame: self.itemContentView.bounds) break case .json: view = KMBatchJsonView.init(frame: self.itemContentView.bounds) break case .text: view = KMBatchConverPDFPPTView.init(frame: self.itemContentView.bounds) break default: KMPrint("找不到") break } view.presenter = self.presenter view.data = self.data self.itemViewArray.append(view) } view.isDisable = self.isDisable view.settingView?.isBatch = true view.type = type return view } override func bacthProcessingNotification() { self.currentView.isDisable = self.isDisable self.convertButton.properties.isDisabled = self.isDisable self.convertButton.reloadData() } } protocol KMBatchConvertPDFViewAction {} extension KMBatchConvertPDFView: KMBatchConvertPDFViewAction { @objc func convertAction(_ sender: Any) { if (self.batchExport != nil) { self.batchExport!(self, self.data) } } } extension KMBatchConvertPDFView: KMBatchConvertPDFViewPresenterDelegate { func showData(presenter: KMBatchConvertPDFViewPresenter, data: KMBatchConvertPDFViewModel) { self.data = data self.reloadData() self.currentView.reloadData() } } extension KMBatchConvertPDFView: ComponentSelectDelegate { func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) { if (view == formatSelectButton) { self.presenter.convertPDFTypeAction(string: menuItemProperty!.text) } } }