// // KMEditPDFTextPropertyViewController.swift // PDF Reader Pro // // Created by lxy on 2022/12/27. // import Cocoa import KMComponentLibrary class KMEditPDFTextPropertyViewController: NSViewController { @IBOutlet weak var contentView: NSClipView! @IBOutlet weak var backgroundView: NSView! @IBOutlet var fontBGView: NSView! @IBOutlet var fontLabel: NSTextField! @IBOutlet var fontTitleSelect: ComponentSelect! @IBOutlet var fontTitleButton: ComponentButton! @IBOutlet var fontNameSelect: ComponentSelect! @IBOutlet var fontStyleSelect: ComponentSelect! @IBOutlet var fontSizeSelect: ComponentSelect! @IBOutlet var fontStyleGroup: ComponentCSelectorGroup! @IBOutlet var fontAlignmentGroup: ComponentCSelectorGroup! @IBOutlet var colorBGView: NSView! @IBOutlet var colorLabel: NSTextField! @IBOutlet var colorGroup: ComponentCColorGroup! @IBOutlet var colorSlider: ComponentSlider! @IBOutlet var colorOpacitySelect: ComponentSelect! private var familyNames = CPDFFont.familyNames var pdfView: CPDFListView? var currentArea: CPDFEditTextArea? override func viewDidAppear() { super.viewDidAppear() colorSlider.reloadData() } override func viewDidLoad() { super.viewDidLoad() setupProperty() } func setupProperty() { //Font fontLabel.stringValue = KMLocalizedString("Font") fontLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2") fontLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium") fontTitleSelect.properties = ComponentSelectProperties(size: .s, state: .normal, text: "") if true { var menuItemArr: [ComponentMenuitemProperty] = [] for string in KMEditPDFTextFontTypeWrapper.allValues() { let item = ComponentMenuitemProperty(type: .normal, text: string, identifier: string) menuItemArr.append(item) } fontTitleSelect.updateMenuItemsArr(menuItemArr) } fontTitleSelect.delegate = self fontTitleButton.properties = ComponentButtonProperty(type: .text_gray, size: .s, onlyIcon: true, icon: NSImage(named: "toolbar_more")) fontTitleButton.setTarget(self, action: #selector(buttonClicked(_:))) fontNameSelect.properties = ComponentSelectProperties(size: .s, state: .normal, text: "") if true { var menuItemArr: [ComponentMenuitemProperty] = [] for string in familyNames { let item = ComponentMenuitemProperty(type: .normal, text: string, identifier: string) menuItemArr.append(item) } fontNameSelect.updateMenuItemsArr(menuItemArr) } fontNameSelect.delegate = self fontStyleSelect.properties = ComponentSelectProperties(size: .s, state: .normal, text: "") fontStyleSelect.delegate = self fontSizeSelect.properties = ComponentSelectProperties(size: .s, state: .normal, creatable: true, text: "12 pt", textUnit: " pt", regexString: "0123456789") if true { var sizeItemArr: [ComponentMenuitemProperty] = [] for string in KMHeaderFooterManager.getFontSize() { let item = ComponentMenuitemProperty(type: .normal, text: string, identifier: string) sizeItemArr.append(item) } fontSizeSelect.updateMenuItemsArr(sizeItemArr) } fontSizeSelect.delegate = self if true { var itemArr: [ComponentCSelectorProperty] = [] for string in ["fontAlign_left", "fontAlign_center", "fontAlign_right", "fontAlign_justify"] { let propertyItem: ComponentCSelectorProperty = ComponentCSelectorProperty.init(size: .m, state: .normal, iconImage: NSImage(named: string)) itemArr.append(propertyItem) } fontAlignmentGroup.updateItemProperty(itemArr) } //Color colorLabel.stringValue = KMLocalizedString("Font") colorLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2") colorLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium") let colorAProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMPDFWatermarkData.watermarkDefaultColors()[0]) let colorBProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMPDFWatermarkData.watermarkDefaultColors()[1]) let colorCProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMPDFWatermarkData.watermarkDefaultColors()[2]) let colorDProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMPDFWatermarkData.watermarkDefaultColors()[3]) let colorEProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: true, color: KMPDFWatermarkData.watermarkDefaultColors()[4]) colorGroup.setUpWithColorPropertys([colorAProperty, colorBProperty, colorCProperty, colorDProperty], customItemProperty: colorEProperty) colorGroup.delegate = self colorSlider.properties = ComponentSliderProperty(size: .m, percent: 1) colorSlider.delegate = self colorOpacitySelect.properties = ComponentSelectProperties(size: .s, state: .normal, creatable: true, text: "100%", regexString: "0123456789%") if true { var opacityItems: [ComponentMenuitemProperty] = [] for string in ["25%", "50%", "75%", "100%"] { let item = ComponentMenuitemProperty(type: .normal, text: string) opacityItems.append(item) } colorOpacitySelect.updateMenuItemsArr(opacityItems) } colorOpacitySelect.delegate = self } func reloadData() { let areas = pdfView?.km_editingTextAreas() ?? [] if areas.count == 0 { currentArea = nil } else if areas.count == 1 { currentArea = areas.first } else if areas.count == 2 { currentArea = nil } if let area = currentArea { if let fontNames = pdfView?.km_editTextAreasFontNames([area]) { if let fontName = fontNames.first { fontNameSelect.properties.text = fontName fontNameSelect.reloadData() } } if let fontStyles = pdfView?.km_editTextAreasFontStyles([area]) { var styles: [String] = [] if let fontStyle = fontStyles.first, fontStyle.isEmpty == false { styles = fontStyles fontStyleSelect.properties.text = fontStyle } else { if let name = fontNameSelect.properties.text { styles = CPDFFont.fontNames(forFamilyName: name) if styles.isEmpty == true { styles.append("Regular") fontStyleSelect.properties.text = "Regular" } } } fontStyleSelect.reloadData() var menuItemArr: [ComponentMenuitemProperty] = [] for string in styles { let item = ComponentMenuitemProperty(type: .normal, text: string, identifier: string) menuItemArr.append(item) } fontStyleSelect.updateMenuItemsArr(menuItemArr) } if let fontSizes = pdfView?.km_editTextAreasFontSizes([area]) { if let fontSize = fontSizes.first { } } if let bolds = pdfView?.km_editTextAreasFontBolds([area]) { if let bold = bolds.first { } } if let italitys = pdfView?.km_editTextAreasFontItalics([area]) { if let itality = italitys.first { } } if let alignments = pdfView?.km_editTextAreasTextAlignments([area]) { if let alignment = alignments.first { } } if let colors = pdfView?.km_editTextAreasFontColors([area]) { if let color = colors.first { colorGroup.currentColor = color } else { colorGroup.currentColor = NSColor.clear } colorGroup.refreshUI() } if let opacitys = pdfView?.km_editAreasOpacitys([area]) { if var opacity = opacitys.first { opacity = min(1, opacity) opacity = max(0, opacity) colorOpacitySelect.properties.text = String(format: "%.0f%@", opacity*100, "%") colorOpacitySelect.reloadData() colorSlider.properties.percent = opacity colorSlider.reloadData() } } } } //MARK: - Action @objc func buttonClicked(_ sender: ComponentButton) { } } //MARK: - ComponentSelectDelegate extension KMEditPDFTextPropertyViewController: ComponentSelectDelegate { func componentSelectDidSelect(view: ComponentSelect?, menuItemProperty: ComponentMenuitemProperty?) { if view == fontTitleSelect { } else if view == fontNameSelect { if let fontName = menuItemProperty?.text { var cFont = CPDFFont.mappingFont(withFontString: fontName) var styles = CPDFFont.fontNames(forFamilyName: fontName) if styles.isEmpty == false, let style = styles.first { cFont = CPDFFont.init(familyName: fontName, fontStyle: style) } if let cFont = cFont { pdfView?.setEditingTextarea_font(font: cFont) } } } else if view == fontStyleSelect { } else if view == fontSizeSelect { if let text = menuItemProperty?.text { let result = text.stringByDeleteCharString(" pt") let fontSize = result.stringToCGFloat() pdfView?.setEditingTextarea_FontSize(size: fontSize) } } reloadData() } func componentSelectTextDidEndEditing(_ view: ComponentSelect) { if view == fontSizeSelect { if let string = view.properties.text { let result = string.stringByDeleteCharString(" pt") let size = result.stringToCGFloat() let fontSize = max(size, 100) pdfView?.setEditingTextarea_FontSize(size: fontSize) } } reloadData() } } //MARK: - ComponentCColorDelegate extension KMEditPDFTextPropertyViewController: ComponentCColorDelegate { func componentCColorDidChooseColor(_ view: NSView, _ color: NSColor?) { if view == colorGroup { pdfView?.changeEditingTextarea_Color(color: color) } } } //MARK: - ComponentSliderDelegate extension KMEditPDFTextPropertyViewController: ComponentSliderDelegate { func componentSliderDidUpdate(_ view: ComponentSlider) { let percent = view.properties.percent self.pdfView?.setEditingAreasOpacity(percent) reloadData() } }