// // KMBatchBackgroundView.swift // PDF Master // // Created by lizhe on 2023/1/16. // import Cocoa import KMComponentLibrary class KMBatchBackgroundModel: KMBatchSettingItemViewModel { var backgroundModel: KMBackgroundModel? } class KMBatchBackgroundView: KMBatchSettingItemView { @IBOutlet var saveTemplateButton: ComponentButton! @IBOutlet var applyButton: ComponentButton! @IBOutlet var applyBtnLeftConst: NSLayoutConstraint! @IBOutlet weak var itemContentView: NSView! private var propertyController: KMBackgroundPropertyController = KMBackgroundPropertyController.init() private var templatesController: KMBGTemplateController = KMBGTemplateController() private var saveTemplateMessage: ComponentMessage = ComponentMessage() private var backgroundModel: KMBackgroundModel? var data: KMBatchBackgroundModel = KMBatchBackgroundModel() var editSubType: KMPDFEditSubModeType = .none { didSet { resetUI() reloadInfoView() } } override func setup() { super.setup() propertyController.view.frame = itemContentView.bounds propertyController.view.autoresizingMask = [.width, .height] propertyController.delegate = self propertyController.view.isHidden = true propertyController.isInBatchMode = true itemContentView.addSubview(propertyController.view) templatesController.view.frame = itemContentView.bounds templatesController.view.autoresizingMask = [.width, .height] templatesController.delegate = self templatesController.view.isHidden = true itemContentView.addSubview(templatesController.view) setupProperty() reloadInfoView() } override func reloadData() { super.reloadData() var applyEnable = true if let model = backgroundModel { if model.type == .image, model.imagePath == nil { applyEnable = false } } else { applyEnable = false } saveTemplateButton.properties.isDisabled = !applyEnable saveTemplateButton.reloadData() if self.filesData.count == 0 { applyEnable = false } applyButton.properties.isDisabled = !applyEnable applyButton.reloadData() } func reloadInfoView() { if editSubType == .template { templatesController.reloadData() backgroundModel = templatesController.selectedBackground } else if editSubType == .add { propertyController.editSubType = editSubType propertyController.backgroundData = KMBackgroundManager.defaultManager.defaultModel propertyController.reloadData() backgroundModel = propertyController.backgroundData } else if editSubType == .edit { propertyController.editSubType = editSubType propertyController.reloadData() backgroundModel = propertyController.backgroundData } } func setupProperty() { saveTemplateMessage.properties = ComponentMessageProperty(messageType: .success, title: KMLocalizedString("Saved Template")) saveTemplateButton.properties = ComponentButtonProperty(type: .default_tertiary, size: .m, state: .normal, onlyIcon: true, icon: NSImage(named: "icon_wm_template_save"), keepPressState: false) saveTemplateButton.setTarget(self, action: #selector(saveTemplateAction(_:))) saveTemplateButton.reloadData() applyButton.properties = ComponentButtonProperty(type: .primary, size: .m, state: .normal, buttonText: KMLocalizedString("Apply"), keepPressState: false) applyButton.setTarget(self, action: #selector(applyButtonAction(_:))) applyButton.reloadData() } func resetUI() { propertyController.view.isHidden = true templatesController.view.isHidden = true if editSubType == .template { templatesController.view.isHidden = false applyBtnLeftConst.constant = 16 saveTemplateButton.isHidden = true } else if editSubType == .add { applyBtnLeftConst.constant = 68 saveTemplateButton.isHidden = false propertyController.view.isHidden = false propertyController.editSubType = editSubType } else if editSubType == .edit { applyBtnLeftConst.constant = 68 saveTemplateButton.isHidden = false propertyController.view.isHidden = false propertyController.editSubType = editSubType } } func getValidCPDFBackground() -> CPDFBackground? { if let data = backgroundModel { let cPDFBackground = CPDFBackground() cPDFBackground.type = data.type if cPDFBackground.type == .color { cPDFBackground.color = data.color } else if cPDFBackground.type == .image { if data.imagePath != nil { cPDFBackground.setImage(data.image()) } else { cPDFBackground.setImage(nil) } } cPDFBackground.scale = data.scale cPDFBackground.rotation = data.rotation cPDFBackground.opacity = data.opacity cPDFBackground.verticalAlignment = UInt(data.verticalMode) cPDFBackground.horizontalAlignment = UInt(data.horizontalMode) cPDFBackground.xOffset = data.horizontalSpace cPDFBackground.yOffset = data.verticalSpace cPDFBackground.isAllowsView = true cPDFBackground.pageString = "0" cPDFBackground.update() return cPDFBackground } return nil } @objc func saveTemplateAction(_ sender: NSView) { propertyController.saveButtonClicked(propertyController.saveButton) } @objc func applyButtonAction(_ sender: NSView) { self.data.backgroundModel = self.backgroundModel if self.batchExport != nil { self.batchExport!(self, self.data) } } //MARK: - mouseEvent override func mouseUp(with event: NSEvent) { super.mouseUp(with: event) } } //MARK: - KMBackgroundPropertyControllerDelegate extension KMBatchBackgroundView: KMBackgroundPropertyControllerDelegate { func backgroundPropertyControllerDidUpdate(_ controller: KMBackgroundPropertyController) { backgroundModel = controller.backgroundData reloadData() } func backgroundPropertyControllerDidChangetoTemplate(_ controller: KMBackgroundPropertyController) { editSubType = .template backgroundModel = templatesController.selectedBackground reloadData() } func backgroundPropertyControllerSaveTemplateSuccess(_ controller: KMBackgroundPropertyController, _ data: KMBackgroundModel) { saveTemplateMessage.frame = CGRectMake((CGRectGetWidth(self.frame) - saveTemplateMessage.properties.propertyInfo.viewWidth)/2, CGRectGetHeight(self.frame) - saveTemplateMessage.properties.propertyInfo.viewHeight - 8, saveTemplateMessage.properties.propertyInfo.viewWidth, saveTemplateMessage.properties.propertyInfo.viewHeight) saveTemplateMessage.reloadData() saveTemplateMessage.show(inView: self, autoHideSeconde: 2) templatesController.selectedBackground = data editSubType = .template reloadData() KMBackgroundManager.defaultManager.defaultModel = KMBackgroundModel() } func backgroundPropertyControllerCancelTemplateEdit(_ controller: KMBackgroundPropertyController) { editSubType = .template templatesController.selectedBackground = controller.backgroundData reloadData() } func backgroundPropertyControllerFinishTemplateEdit(_ controller: KMBackgroundPropertyController) { editSubType = .template templatesController.selectedBackground = controller.backgroundData reloadData() } } //MARK: - KMBGTemplateControllerDelegate extension KMBatchBackgroundView: KMBGTemplateControllerDelegate { func templateControllerDidSelectedChanged(_ controller: KMBGTemplateController) { backgroundModel = controller.selectedBackground reloadData() } func templateControllerDidAddData(_ controller: KMBGTemplateController) { editSubType = .add propertyController.backgroundData = KMBackgroundManager.defaultManager.defaultModel propertyController.reloadData() templatesController.selectedBackground = nil templatesController.reloadData() reloadData() } func templateControllerDidEditData(_ controller: KMBGTemplateController, _ data: KMBackgroundModel) { editSubType = .edit propertyController.originalDataDict = KMBackgroundManager.defaultManager.parseModelToDict(model: data) propertyController.backgroundData = data propertyController.reloadData() templatesController.selectedBackground = nil templatesController.reloadData() reloadData() } }