// // KMBatchConvertPDFView.swift // PDF Master // // Created by lizhe on 2023/1/16. // import Cocoa class KMBatchConvertPDFView: KMBatchSettingItemView { @IBOutlet weak var titleLabel: NSTextField! @IBOutlet weak var itemContentView: NSView! @IBOutlet weak var formatLabel: NSTextField! @IBOutlet weak var convertButton: NSButton! @IBOutlet weak var convertTitleLabel: NSTextField! @IBOutlet weak var convertIconImage: NSImageView! @IBOutlet weak var convertActionButton: NSButton! var itemViewArray: [KMBatchConvertPDFItemView] = [] var currentView: KMBatchConvertPDFItemView = KMBatchConvertPDFItemView() var data: KMBatchConvertPDFViewModel = KMBatchConvertPDFViewModel() var presenter: KMBatchConvertPDFViewPresenter = KMBatchConvertPDFViewPresenter() override var subType: Any? { didSet { self.data.convertPDFType = (subType as? KMBatchConvertPDFType) ?? .word self.reloadData() } } override func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) // Drawing code here. } override func setup() { super.setup() self.presenter.initPresenter(view: self) self.titleLabel.textColor = NSColor.km_init(hex: "#252629") self.titleLabel.stringValue = NSLocalizedString("Settings", comment: "") self.titleLabel.font = NSFont.SFProTextRegularFont(16.0) self.formatLabel.textColor = NSColor.km_init(hex: "#616469") self.formatLabel.stringValue = NSLocalizedString("Format", comment: "") self.formatLabel.font = NSFont.SFProTextRegularFont(12.0) self.convertActionButton.wantsLayer = true self.convertActionButton.layer?.cornerRadius = 4 self.convertActionButton.contentTintColor = NSColor.km_init(hex: "#FFFFFF") self.convertActionButton.stringValue = NSLocalizedString("Convert", comment: "") self.convertActionButton.font = NSFont.SFProTextRegularFont(14.0) self.convertActionButton.layer?.backgroundColor = NSColor.km_init(hex: "#BDDFFD").cgColor self.convertTitleLabel.textColor = NSColor.km_init(hex: "#252629") self.convertTitleLabel.stringValue = NSLocalizedString("Word", comment: "") self.convertTitleLabel.font = NSFont.SFProTextRegularFont(14.0) } 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() self.itemContentView.addSubview(view) self.currentView = view } if (self.filesData.count != 0) { self.convertActionButton.layer?.backgroundColor = NSColor.km_init(hex: "#1770F4").cgColor self.convertActionButton.isEnabled = true } else { self.convertActionButton.layer?.backgroundColor = NSColor.km_init(hex: "#BDDFFD").cgColor self.convertActionButton.isEnabled = false } self.currentView.data = self.data self.currentView.reloadData() self.convertTitleLabel.stringValue = self.data.convertPDFType.rawValue } 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 = KMBatchConverPDFPPTView.init(frame: self.itemContentView.bounds) break case .rtf: view = KMBatchConverPDFPPTView.init(frame: self.itemContentView.bounds) break default: KMPrint("找不到") break } view.type = type view.presenter = self.presenter view.data = self.data self.itemViewArray.append(view) } return view } } protocol KMBatchConvertPDFViewAction {} extension KMBatchConvertPDFView: KMBatchConvertPDFViewAction { @IBAction func convertPDFTypeAction(_ sender: NSButton) { let menu = NSMenu() menu.minimumWidth = sender.frame.size.width for string in KMBatchConvertPDFType.allValues() { menu.addItem(withTitle: NSLocalizedString(string, comment: ""), action: #selector(self.convertPDFTypeClick), target: self) } menu.popUp(positioning: menu.item(at: 0), at: CGPoint(x: 0, y: (sender ).fittingSize.height), in: sender ) } @objc func convertPDFTypeClick(item: NSMenuItem) { self.presenter.convertPDFTypeAction(string: item.title) } @IBAction func convertAction(_ sender: Any) { if (self.export != nil) { self.export!(self, self.data) } } } extension KMBatchConvertPDFView: KMBatchConvertPDFViewPresenterDelegate { func showData(presenter: KMBatchConvertPDFViewPresenter, data: KMBatchConvertPDFViewModel) { self.data = data self.reloadData() self.currentView.reloadData() } }