// // KMFastToolCollectionViewItem.swift // PDF Master // // Created by wanjun on 2022/10/20. // import Cocoa public enum DataNavigationViewButtonActionType : Int { case Batch = 0 // 批量处理 case ConvertPDF // 转换PDF case ImageToPDF // 图片转PDF case MergePDF // 合并 case Compression // 压缩 case Security // 安全 case PDFToPPT // PDF转PPT case PDFToExcel // PDF转Excel case PDFToWord // PDF转Word case PDFToImage // PDF转图片 case Watermark // 水印 case Background // 背景 case HeaderAndFooter// 页眉页脚 case BatesCode // 贝茨码 case Print // 打印 case BatchRemove // 批量移除 case Insert // 插入 case BreakUp // 拆分 case Extract // 提取 case MarkCipher // 标记密文 case PageEdit // 页面编辑 case OCR // 批量OCR case AutomaticFormRecognition //表单自动识别 case FileCompare // 文件对比 } class KMFastToolMode: NSObject { var toolImageName: String? //图片名称 var toolTitle: String? //主标题 var toolSubtitle: String? //副标题 class func toolModeData(type: DataNavigationViewButtonActionType) -> KMFastToolMode { let mode: KMFastToolMode = KMFastToolMode() switch type { case .Batch: mode.toolTitle = NSLocalizedString("Batch", comment: "") mode.toolSubtitle = NSLocalizedString("content content content content content content content content", comment: "") mode.toolImageName = "icon_pdftools_batch" break case .OCR: mode.toolTitle = NSLocalizedString("OCR", comment: "") mode.toolSubtitle = NSLocalizedString("Recognize text from image or scanned PDF with OCR", comment: "") mode.toolImageName = "icon_pdftools_ocr" break case .ConvertPDF: mode.toolTitle = NSLocalizedString("Convert PDF", comment: "") mode.toolSubtitle = NSLocalizedString("Convert PDFs to Word/HTML/TXT/JPEG/PNG files", comment: "") mode.toolImageName = "icon_pdftools_convert" break case .ImageToPDF: mode.toolTitle = NSLocalizedString("Image To PDF", comment: "") mode.toolSubtitle = NSLocalizedString("Convert JPEG/JPG/PNG/TIFF/BMP/PSD files to PDF", comment: "") mode.toolImageName = "icon_pdftools_image" break case .MergePDF: mode.toolTitle = NSLocalizedString("Merge", comment: "") mode.toolSubtitle = NSLocalizedString("Combine multiple documents into a new PDF file", comment: "") mode.toolImageName = "icon_pdftools_merge" break case .Compression: mode.toolTitle = NSLocalizedString("Compress", comment: "") mode.toolSubtitle = NSLocalizedString("Reduce files size to make sure you can easily send them by mail", comment: "") mode.toolImageName = "icon_pdftools_compress" break case .Security: mode.toolTitle = NSLocalizedString("Security", comment: "") mode.toolSubtitle = NSLocalizedString("Limit access to PDFs, restrict copying and printing permission with passwords", comment: "") mode.toolImageName = "icon_pdftools_security" break case .FileCompare: mode.toolTitle = NSLocalizedString("Compare", comment: "") mode.toolSubtitle = NSLocalizedString("content content content content content content content content", comment: "") mode.toolImageName = "icon_pdftools_compare" break case .PDFToPPT: mode.toolTitle = NSLocalizedString("PDF To PPT", comment: "") mode.toolSubtitle = NSLocalizedString("Turn your PDF into a formatted PPT file that you can edit", comment: "") mode.toolImageName = "icon_pdftools_pdfToPPT" break case .PDFToExcel: mode.toolTitle = NSLocalizedString("PDF To Excel", comment: "") mode.toolSubtitle = NSLocalizedString("Turn PDF table into a formatted Excel file", comment: "") mode.toolImageName = "icon_pdftools_pdfToExcel" break case .PDFToWord: mode.toolTitle = NSLocalizedString("PDF To Word", comment: "") mode.toolSubtitle = NSLocalizedString("Convert PDF to Word, fonts & formatting get converted", comment: "") mode.toolImageName = "icon_pdftools_pdfToWord" break case .PDFToImage: mode.toolTitle = NSLocalizedString("PDF To Image", comment: "") mode.toolSubtitle = NSLocalizedString("Convert PDF to image, such as JPEG, JPG, PNG, GIF, TIFF, TAG,BMP", comment: "") mode.toolImageName = "icon_pdftools_pdfToImage" break case .Watermark: mode.toolTitle = NSLocalizedString("Watermark", comment: "") mode.toolSubtitle = NSLocalizedString("Protect PDFs with image/text watermarks from plagiarism", comment: "") mode.toolImageName = "icon_pdftools_watermark" break case .Background: mode.toolTitle = NSLocalizedString("Background", comment: "") mode.toolSubtitle = NSLocalizedString("Customize PDFs background with colors or images", comment: "") mode.toolImageName = "icon_pdftools_background" break case .HeaderAndFooter: mode.toolTitle = NSLocalizedString("Header & Footer", comment: "") mode.toolSubtitle = NSLocalizedString("Customize PDFs header&footer or add page number", comment: "") mode.toolImageName = "icon_pdftools_headerfooter" break case .BatesCode: mode.toolTitle = NSLocalizedString("Bates Numbers", comment: "") mode.toolSubtitle = NSLocalizedString("Easily retrieval indexing legal document by Bates Numbers", comment: "") mode.toolImageName = "icon_pdftools_batesnumbers" break case .Print: mode.toolTitle = NSLocalizedString("Print", comment: "") mode.toolSubtitle = NSLocalizedString("Powerful PDF printer allows to print PDF from any computer without much hassle", comment: "") mode.toolImageName = "icon_pdftools_print" break case .BatchRemove: mode.toolTitle = NSLocalizedString("Batch Remove", comment: "") mode.toolSubtitle = NSLocalizedString("content content content content content content content content", comment: "") mode.toolImageName = "icon_pdftools_remove" break case .Insert: mode.toolTitle = NSLocalizedString("Insert", comment: "") mode.toolSubtitle = NSLocalizedString("Insert blank pages to PDF or insert a new file", comment: "") mode.toolImageName = "icon_pdftools_insert" break case .BreakUp: mode.toolTitle = NSLocalizedString("Split", comment: "") mode.toolSubtitle = NSLocalizedString("content content content content content content content content", comment: "") mode.toolImageName = "icon_pdftools_split" break case .Extract: mode.toolTitle = NSLocalizedString("Extract", comment: "") mode.toolSubtitle = NSLocalizedString("Extract selected pages to a new PDF", comment: "") mode.toolImageName = "icon_pdftools_extract" break case .MarkCipher: mode.toolTitle = NSLocalizedString("Redact", comment: "") mode.toolSubtitle = NSLocalizedString("content content content content content content content content", comment: "") mode.toolImageName = "icon_pdftools_reduct" break case .AutomaticFormRecognition: mode.toolTitle = NSLocalizedString("Form Filed Recognition", comment: "") mode.toolSubtitle = NSLocalizedString("content content content content content content content content", comment: "") mode.toolImageName = "icon_pdftools_formfiledrecognition" break case .PageEdit: mode.toolTitle = NSLocalizedString("Page Edit", comment: "") mode.toolSubtitle = NSLocalizedString("Delete/Rotate/Copy/Paste PDF pages", comment: "") mode.toolImageName = "icon_pdftools_pageEdit" break } return mode } } class KMFastToolCollectionViewItem: NSCollectionViewItem { @IBOutlet weak var fastToolItemBox: KMBox! @IBOutlet weak var fastToolItemImageView: NSImageView! @IBOutlet weak var fastToolIteTitleLabel: NSTextField! @IBOutlet weak var fastToolItemSubtitleLabel: NSTextField! @IBOutlet weak var fastToolItemBoxHeightConstraint: NSLayoutConstraint! @IBOutlet weak var padding_top: NSLayoutConstraint! @IBOutlet weak var padding_left: NSLayoutConstraint! // @IBOutlet weak var padding_down: NSLayoutConstraint! @IBOutlet weak var padding_right: NSLayoutConstraint! @IBOutlet weak var itemspacing_1: NSLayoutConstraint! @IBOutlet weak var itemspacing_2: NSLayoutConstraint! @IBOutlet weak var addBox: NSBox! @IBOutlet weak var addLabel: NSTextField! var horizontalPadding : Float = 16.0 var horizontalPadding_hov : Float = 16.0 var horizontalPadding_sel : Float = 16.0 var horizontalPadding_custom : Float = 16.0 var horizontalPadding_none : Float = 16.0 var horizontalPadding_change : Float = 16.0 var borderColor : NSColor = .clear var borderColor_hov : NSColor = .clear var borderColor_sel : NSColor = .clear var borderColor_custom : NSColor = .clear var borderColor_none : NSColor = .clear var borderColor_change : NSColor = .clear var borderRadius : Float = 8.0 var borderRadius_hov : Float = 8.0 var borderRadius_sel : Float = 8.0 var borderRadius_custom : Float = 8.0 var borderRadius_none : Float = 8.0 var borderRadius_change : Float = 8.0 var borderWidth : Float = 1.0 var borderWidth_hov : Float = 1.0 var borderWidth_sel : Float = 1.0 var borderWidth_custom : Float = 1.0 var borderWidth_none : Float = 1.0 var borderWidth_change : Float = 1.0 var itemSpacing : Float = 8.0 var itemSpacing_hov : Float = 8.0 var itemSpacing_sel : Float = 8.0 var itemSpacing_custom : Float = 8.0 var itemSpacing_none : Float = 8.0 var itemSpacing_change : Float = 8.0 var background : NSColor = .clear var background_hov : NSColor = .clear var background_sel : NSColor = .clear var background_custom : NSColor = .clear var background_none : NSColor = .clear var background_change : NSColor = .clear var textColor : NSColor = .black var textColor_hov : NSColor = .black var textColor_sel : NSColor = .black var textColor_custom: NSColor = .black var textColor_change: NSColor = .black var font : NSFont = NSFont.systemFont(ofSize: 14.0) // 默认 内容字体 var font_hov : NSFont = NSFont.systemFont(ofSize: 14.0) // 默认 内容字体 var font_sel : NSFont = NSFont.systemFont(ofSize: 14.0) // 默认 内容字体 var font_custom : NSFont = NSFont.systemFont(ofSize: 14.0) // 默认 内容字体 var font_change : NSFont = NSFont.systemFont(ofSize: 14.0) // 默认 内容字体 var lineHeight : CGFloat = 20.0 // 默认 内容行高 var lineHeight_hov : CGFloat = 20.0 // 默认 内容行高 var lineHeight_sel : CGFloat = 20.0 // 默认 内容行高 var lineHeight_custom : CGFloat = 20.0 // 默认 内容行高 var lineHeight_change : CGFloat = 20.0 // 默认 内容行高 var descTextColor : NSColor = .black var descTextColor_hov : NSColor = .black var descTextColor_sel : NSColor = .black var descTextColor_custom: NSColor = .black var descTextColor_change: NSColor = .black var descFont : NSFont = NSFont.systemFont(ofSize: 14.0) // 默认 内容字体 var descFont_hov : NSFont = NSFont.systemFont(ofSize: 14.0) // 默认 内容字体 var descFont_sel : NSFont = NSFont.systemFont(ofSize: 14.0) // 默认 内容字体 var descFont_custom : NSFont = NSFont.systemFont(ofSize: 14.0) // 默认 内容字体 var descFont_change : NSFont = NSFont.systemFont(ofSize: 14.0) // 默认 内容字体 var descLineHeight : CGFloat = 6.0 // 默认 内容行高 var descLineHeight_hov : CGFloat = 6.0 // 默认 内容行高 var descLineHeight_sel : CGFloat = 6.0 // 默认 内容行高 var descLineHeight_custom : CGFloat = 6.0 // 默认 内容行高 var descLineHeight_change : CGFloat = 6.0 // 默认 内容行高 var itemSpacing2 : Float = 8.0 var itemSpacing2_hov : Float = 8.0 var itemSpacing2_sel : Float = 8.0 var itemSpacing2_custom : Float = 8.0 var itemSpacing2_change : Float = 8.0 var state: KMDesignTokenState = .Norm var canHover: Bool = true // 是否可悬浮 var isCustomize: Bool = false // MARK: init override func viewDidLoad() { super.viewDidLoad() // Do view setup here. addBox.isHidden = true fastToolItemBox.moveCallback = { [weak self](mouseEntered: Bool, mouseBox: KMBox) -> Void in if self != nil { if mouseEntered { if self!.state != .Sel && self!.canHover { self!.state = .Hov self!.updateUI() } } else { if self!.state != .Sel && self!.canHover { self!.state = .Norm self!.updateUI() } } } } updateUI() } // MARK: private func quickToolsCollectionCellItem(type: DataNavigationViewButtonActionType) { let paragraphStyle1 = NSMutableParagraphStyle() let paragraphStyle2 = NSMutableParagraphStyle() if (state == .Norm) { paragraphStyle1.lineSpacing = lineHeight paragraphStyle2.lineSpacing = descLineHeight } else if (state == .Hov) { paragraphStyle1.lineSpacing = lineHeight_hov paragraphStyle2.lineSpacing = descLineHeight_hov } else if (state == .Sel) { paragraphStyle1.lineSpacing = lineHeight_sel paragraphStyle2.lineSpacing = descLineHeight_sel } else if (state == .Custom) { paragraphStyle1.lineSpacing = lineHeight_custom paragraphStyle2.lineSpacing = descLineHeight_custom } else if (state == .Change) { paragraphStyle1.lineSpacing = lineHeight_change paragraphStyle2.lineSpacing = descLineHeight_change } let mode: KMFastToolMode = KMFastToolMode.toolModeData(type: type) self.fastToolIteTitleLabel.attributedStringValue = NSAttributedString(string: mode.toolTitle!, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle1]) self.fastToolItemSubtitleLabel.lineBreakMode = .byTruncatingTail self.fastToolItemSubtitleLabel.cell?.truncatesLastVisibleLine = true self.fastToolItemSubtitleLabel.attributedStringValue = NSAttributedString(string: mode.toolSubtitle!, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle2]) self.fastToolItemImageView.image = NSImage(named: mode.toolImageName!) } func refreshHoverStatus(_ canHover: Bool, _ canClick: Bool) -> Void { fastToolItemBox.canHover = canHover fastToolItemBox.canClick = canClick } func refreshUIColor(_ customize: Bool) -> Void { self.isCustomize = customize if isCustomize { fastToolItemBox.isDottedLine = true fastToolItemBox.fillColor = NSColor(hex: "#F7F8FA") fastToolIteTitleLabel.textColor = NSColor(hex: "#252629") fastToolItemSubtitleLabel.textColor = NSColor(hex: "#616469") } else { fastToolItemBox.isDottedLine = false fastToolItemBox.fillColor = NSColor(hex: "#FFFFFF") fastToolIteTitleLabel.textColor = NSColor(hex: "#252629") fastToolItemSubtitleLabel.textColor = NSColor(hex: "#616469") } } func updateUI() -> Void { if (state == .Norm) { fastToolItemBox.fillColor = background fastToolItemBox.borderWidth = CGFloat(borderWidth) fastToolItemBox.borderColor = borderColor fastToolItemBox.cornerRadius = CGFloat(borderRadius) fastToolIteTitleLabel.font = font fastToolIteTitleLabel.textColor = textColor fastToolItemSubtitleLabel.font = descFont fastToolItemSubtitleLabel.textColor = descTextColor padding_top.constant = CGFloat(horizontalPadding) padding_left.constant = CGFloat(horizontalPadding) // padding_down.constant = CGFloat(horizontalPadding) padding_right.constant = CGFloat(horizontalPadding) itemspacing_1.constant = CGFloat(itemSpacing) itemspacing_2.constant = CGFloat(itemSpacing2) } else if (state == .Hov) { fastToolItemBox.fillColor = background_hov fastToolItemBox.borderWidth = CGFloat(borderWidth_hov) fastToolItemBox.borderColor = borderColor_hov fastToolItemBox.cornerRadius = CGFloat(borderRadius_hov) fastToolIteTitleLabel.font = font_hov fastToolIteTitleLabel.textColor = textColor_hov fastToolItemSubtitleLabel.font = descFont_hov fastToolItemSubtitleLabel.textColor = descTextColor_hov padding_top.constant = CGFloat(horizontalPadding_hov) padding_left.constant = CGFloat(horizontalPadding_hov) // padding_down.constant = CGFloat(horizontalPadding_hov) padding_right.constant = CGFloat(horizontalPadding_hov) itemspacing_1.constant = CGFloat(itemSpacing_hov) itemspacing_2.constant = CGFloat(itemSpacing2_hov) } else if (state == .Sel) { fastToolItemBox.fillColor = background_sel fastToolItemBox.borderWidth = CGFloat(borderWidth_sel) fastToolItemBox.borderColor = borderColor_sel fastToolItemBox.cornerRadius = CGFloat(borderRadius_sel) fastToolIteTitleLabel.font = font_sel fastToolIteTitleLabel.textColor = textColor_sel fastToolItemSubtitleLabel.font = descFont_sel fastToolItemSubtitleLabel.textColor = descTextColor_sel padding_top.constant = CGFloat(horizontalPadding_sel) padding_left.constant = CGFloat(horizontalPadding_sel) // padding_down.constant = CGFloat(horizontalPadding_sel) padding_right.constant = CGFloat(horizontalPadding_sel) itemspacing_1.constant = CGFloat(itemSpacing_sel) itemspacing_2.constant = CGFloat(itemSpacing2_sel) } else if (state == .Custom) { fastToolItemBox.fillColor = background_custom fastToolItemBox.borderWidth = CGFloat(borderWidth_custom) fastToolItemBox.borderColor = borderColor_custom fastToolItemBox.cornerRadius = CGFloat(borderRadius_custom) fastToolIteTitleLabel.font = font_custom fastToolIteTitleLabel.textColor = textColor_custom fastToolItemSubtitleLabel.font = descFont_custom fastToolItemSubtitleLabel.textColor = descTextColor_custom padding_top.constant = CGFloat(horizontalPadding_custom) padding_left.constant = CGFloat(horizontalPadding_custom) // padding_down.constant = CGFloat(horizontalPadding_custom) padding_right.constant = CGFloat(horizontalPadding_custom) itemspacing_1.constant = CGFloat(itemSpacing_custom) itemspacing_2.constant = CGFloat(itemSpacing2_custom) } else if (state == .None) { fastToolItemBox.fillColor = background_none fastToolItemBox.borderWidth = CGFloat(borderWidth_none) fastToolItemBox.borderColor = borderColor_none fastToolItemBox.cornerRadius = CGFloat(borderRadius_none) padding_top.constant = CGFloat(horizontalPadding_none) padding_left.constant = CGFloat(horizontalPadding_none) // padding_down.constant = CGFloat(horizontalPadding_none) padding_right.constant = CGFloat(horizontalPadding_none) itemspacing_1.constant = CGFloat(itemSpacing_none) } else if (state == .Change) { fastToolItemBox.fillColor = background_change fastToolItemBox.borderWidth = CGFloat(borderWidth_change) fastToolItemBox.borderColor = borderColor_change fastToolItemBox.cornerRadius = CGFloat(borderRadius_change) fastToolIteTitleLabel.font = font_change fastToolIteTitleLabel.textColor = textColor_change fastToolItemSubtitleLabel.font = descFont_change fastToolItemSubtitleLabel.textColor = descTextColor_change padding_top.constant = CGFloat(horizontalPadding_change) padding_left.constant = CGFloat(horizontalPadding_change) // 吧 padding_right.constant = CGFloat(horizontalPadding_change) itemspacing_1.constant = CGFloat(itemSpacing_change) itemspacing_2.constant = CGFloat(itemSpacing2_change) } } }