// // KMBatchBatesNumberView.swift // PDF Master // // Created by lizhe on 2023/1/16. // import Cocoa import KMComponentLibrary class KMBatchBatesNumberView: KMBatchSettingItemView { @IBOutlet weak var itemContentView: NSView! @IBOutlet var saveTemplateButton: ComponentButton! @IBOutlet var applyButton: ComponentButton! @IBOutlet var applyBtnLeftConst: NSLayoutConstraint! var propertyController: KMBatesPropertyController = KMBatesPropertyController.init() var templatesController: KMBatesTemplateController = KMBatesTemplateController() var saveTemplateMessage: ComponentMessage = ComponentMessage() var totalPDFCount: Int = 1 var batesModel: KMBatesModel? { get { if editSubType == .template { return templatesController.selectedDataModel } else if editSubType == .add || editSubType == .edit { return propertyController.batesModel } return nil } } var editSubType: KMPDFEditSubModeType = .template { didSet { resetUI() } } //MARK: - func override func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) // Drawing code here. } 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 = self.batesModel { if model.topLeftString.count == 0 && model.topCenterString.count == 0 && model.topRightString.count == 0 && model.bottomLeftString.count == 0 && model.bottomCenterString.count == 0 && model.bottomRightString.count == 0 { applyEnable = false } } else { applyEnable = false } saveTemplateButton.properties.isDisabled = !applyEnable saveTemplateButton.reloadData() if self.filesData.count == 0 { applyEnable = false } applyButton.properties.isDisabled = !applyEnable applyButton.reloadData() propertyController.totalPDFCount = totalPDFCount } func reloadInfoView() { if editSubType == .template { templatesController.reloadData() } else if editSubType == .add { propertyController.editSubType = editSubType propertyController.reloadData() } else if editSubType == .edit { propertyController.editSubType = editSubType propertyController.reloadData() } } 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(saveTemplateButtonAction(_:))) 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 { propertyController.view.isHidden = false propertyController.editSubType = editSubType applyBtnLeftConst.constant = 68 saveTemplateButton.isHidden = false } else if editSubType == .edit { propertyController.view.isHidden = false propertyController.editSubType = editSubType applyBtnLeftConst.constant = 68 saveTemplateButton.isHidden = false } saveTemplateButton.reloadData() } func getValidCPDFBates() -> CPDFBates? { if let data = batesModel { let cPDFBates = CPDFBates() cPDFBates.pageString = "0" let fontSize = data.fontsize let fontName: String = data.fontName let font = NSFont.boldSystemFont(ofSize:fontSize) let style = NSMutableParagraphStyle() style.alignment = .center style.lineBreakMode = .byCharWrapping let size: NSSize = "text".boundingRect(with: NSSize(width: 1000, height: 1000), options: NSString.DrawingOptions(rawValue: 3), attributes: [NSAttributedString.Key.font : font, NSAttributedString.Key.paragraphStyle : style]).size cPDFBates.margin = NSEdgeInsetsMake(max(CGFloat(data.topMargin)-size.height, 0), CGFloat(data.leftMargin), max(CGFloat(data.bottomMargin)-size.height, 0), CGFloat(data.rightMargin)) let strings = KMBatesManager.parseModel(model: data, UInt(totalPDFCount)) var count: Int = 0 let color = data.color for text in strings { cPDFBates.setText(text, at: UInt(count)) cPDFBates.setTextColor(color, at: UInt(count)) cPDFBates.setFontSize(fontSize, at: UInt(count)) cPDFBates.setFontName(fontName, at: UInt(count)) count += 1 } return cPDFBates } return nil } @objc func saveTemplateButtonAction(_ sender: NSButton) { propertyController.saveAction() } @objc func applyButtonAction(_ sender: NSButton) { } } //MARK: - KMHeaderPropertyControllerDelegate extension KMBatchBatesNumberView: KMBatesPropertyControllerDelegate { func batesPropertyControllerDidUpdate(_ controller: KMBatesPropertyController) { reloadData() } func batesPropertyControllerDidChangetoTemplate(_ controller: KMBatesPropertyController) { editSubType = .template templatesController.selectedDataModel = nil templatesController.reloadData() reloadData() } func batesPropertyControllerSaveTemplateSuccess(_ controller: KMBatesPropertyController, _ data: KMBatesModel) { 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) editSubType = .template templatesController.selectedDataModel = data templatesController.reloadData() KMBatesManager.defaultManager.defaultModel = KMBatesModel() } func batesPropertyControllerCancelTemplateEdit(_ controller: KMBatesPropertyController) { editSubType = .template templatesController.selectedDataModel = controller.batesModel templatesController.reloadData() } func batesPropertyControllerFinishTemplateEdit(_ controller: KMBatesPropertyController) { editSubType = .template templatesController.selectedDataModel = controller.batesModel templatesController.reloadData() } } //MARK: - KMHFTemplateControllerDelegate extension KMBatchBatesNumberView: KMBatesTemplateControllerDelegate { func templateControllerDidSelectedChanged(_ controller: KMBatesTemplateController) { reloadData() } func templateControllerDidAddData(_ controller: KMBatesTemplateController) { editSubType = .add propertyController.clearData() propertyController.batesModel = KMBatesManager.defaultManager.defaultModel propertyController.reloadData() templatesController.selectedDataModel = nil templatesController.reloadData() } func templateControllerDidEditData(_ controller: KMBatesTemplateController, _ data: KMBatesModel) { editSubType = .edit if data.bottomLeftString.count > 0 { propertyController.positionSelRow = 0 propertyController.positionSelColumn = 0 } else if data.bottomCenterString.count > 0 { propertyController.positionSelRow = 0 propertyController.positionSelColumn = 1 } else if data.bottomRightString.count > 0 { propertyController.positionSelRow = 0 propertyController.positionSelColumn = 2 } else if data.topLeftString.count > 0 { propertyController.positionSelRow = 1 propertyController.positionSelColumn = 0 } else if data.topCenterString.count > 0 { propertyController.positionSelRow = 1 propertyController.positionSelColumn = 1 } else if data.topRightString.count > 0 { propertyController.positionSelRow = 1 propertyController.positionSelColumn = 2 } propertyController.batesModel = data propertyController.originalDataDict = KMBatesManager.defaultManager.parseModel(model: data) propertyController.reloadData() templatesController.selectedDataModel = nil templatesController.reloadData() } }