// // KMHeaderFooterFontInfoView.swift // PDF Reader Pro // // Created by tangchao on 2022/12/27. // import Cocoa class KMHeaderFooterFontInfoView: KMHeaderFooterAdjectiveInfoBaseView { let fontSizes: Array = [8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72] var fontNameComboBox = NSComboBox() var fontSizeComboBox = NSComboBox() var colorBox = NSView() var colorView = NSView() var colorPlateButton = NSButton() override func initSubviews() { super.initSubviews() self.addSubview(self.fontNameComboBox) self.addSubview(self.fontSizeComboBox) self.addSubview(self.colorBox) self.colorBox.addSubview(self.colorView) self.colorBox.addSubview(self.colorPlateButton) self.titleLabel.stringValue = NSLocalizedString("Font", comment: "") let fonts = KMWatermarkAdjectiveTools.fetchAvailableFonts(10) self.fontNameComboBox.addItems(withObjectValues: fonts) self.fontNameComboBox.delegate = self self.fontNameComboBox.isEditable = false for i in self.fontSizes { self.fontSizeComboBox.addItem(withObjectValue: "\(i)") } self.fontSizeComboBox.delegate = self self.fontSizeComboBox.isEditable = false self.colorBox.wantsLayer = true self.colorBox.layer?.borderWidth = 1 self.colorBox.layer?.borderColor = NSColor.black.cgColor self.colorView.wantsLayer = true self.colorView.layer?.cornerRadius = 10 self.colorPlateButton.isBordered = false self.colorPlateButton.title = "" self.colorPlateButton.target = self self.colorPlateButton.action = #selector(colorPlateButtonAction) } override func layout() { super.layout() let leftMargin: CGFloat = self.contentInset.left let contentWidth = NSWidth(self.bounds)-2*leftMargin let fontSizeWidth: CGFloat = 80 self.fontNameComboBox.frame = NSMakeRect(leftMargin, self.titleLabel.frame.maxY+12, contentWidth-fontSizeWidth-10, 22) self.fontSizeComboBox.frame = NSMakeRect(self.fontNameComboBox.frame.maxX+10, self.titleLabel.frame.maxY+12, fontSizeWidth, 22) self.colorBox.frame = NSMakeRect(leftMargin, self.fontNameComboBox.frame.maxY+12, 66, 32) let colorItemSize: CGFloat = 20 self.colorView.frame = NSMakeRect(8, 6, colorItemSize, colorItemSize) self.colorPlateButton.frame = NSMakeRect(self.colorView.frame.maxX+10, 6, colorItemSize, colorItemSize) } override var model: KMHeaderFooterAdjectiveModel { get { return super.model } set { super.model = newValue switch newValue.textFont { case .font(name: let name, size: let size): let string = KMWatermarkAdjectiveTools.fontNameToAttribute(name, 10) if (string != nil) { self.fontNameComboBox.selectItem(withObjectValue: string) } else { self.fontNameComboBox.selectItem(at: 0) } self.fontSizeComboBox.stringValue = String(format: "%.0f", size) default: break } switch newValue.textColor { case .color(red: let red, green: let green, blue: let blue, alpha: let alpha): self.colorView.layer?.backgroundColor = NSColor(calibratedRed: red, green: green, blue: blue, alpha: alpha).cgColor default: break } } } @objc func colorPlateButtonAction() { guard let callback = itemClick else { return } callback(3, "") } } extension KMHeaderFooterFontInfoView: NSComboBoxDelegate { func comboBoxSelectionDidChange(_ notification: Notification) { if (self.fontNameComboBox.isEqual(to: notification.object)) { guard let callback = itemClick else { return } var index: Int = self.fontSizeComboBox.indexOfSelectedItem if (index < 0) { index = 0 } callback(1, KMWatermarkAdjectiveTools.fetchAvailableFonts(10)[index].string) } else if (self.fontSizeComboBox.isEqual(to: notification.object)) { guard let callback = itemClick else { return } var index: Int = self.fontSizeComboBox.indexOfSelectedItem if (index < 0) { index = 0 } callback(2, self.fontSizes[index]) } } }