// // KMWatermarkCollectionViewItem.swift // PDF Reader Pro // // Created by tangchao on 2023/11/3. // import Cocoa class KMWatermarkCollectionViewItem: NSCollectionViewItem { var waterMarkOprateCallback: ((KMWatermarkOperateType, KMWatermarkModel?) -> Void)? var backgroundOperateCallback: ((KMBackgroundOperateType, KMBackgroundModel?) -> Void)? @IBOutlet var topBaseView: NSView! @IBOutlet var optionView: NSView! @IBOutlet var editButton: KMCoverButton! @IBOutlet var deleteButton: KMCoverButton! @IBOutlet var watermarkNameLabel: NSTextField! @IBOutlet var watermarkImageView: NSImageView! @IBOutlet var labelContainerView: NSView! private var _waterMark: KMWatermarkModel? private var _background: KMBackgroundModel? deinit { KMPrint("KMWatermarkCollectionViewItem deinit.") } override func viewDidLoad() { super.viewDidLoad() // Do view setup here. self._configuUI() self._addTrackingArea() } override var isSelected: Bool { didSet { if (self.isSelected) { self.imageView?.layer?.borderColor = KMAppearance.Interactive.a0Color().cgColor self.labelContainerView.layer?.backgroundColor = KMAppearance.Interactive.a0Color().cgColor self.watermarkNameLabel.textColor = KMAppearance.Layout.w0Color() self.topBaseView.layer?.borderColor = KMAppearance.Interactive.a0Color().cgColor } else { self.imageView?.layer?.borderColor = KMAppearance.Layout.h2Color().cgColor self.labelContainerView.layer?.backgroundColor = .clear self.watermarkNameLabel.textColor = KMAppearance.Layout.h0Color() self.topBaseView.layer?.borderColor = KMAppearance.Layout.h2Color().cgColor } } } func updateInterface(_ waterMark: KMWatermarkModel) { self._waterMark = waterMark; if waterMark.isFront { self.watermarkImageView.image = NSImage(named: "KMImageNameUXIconVipWatermarkImg") self.imageView!.image = KMWatermarkModel.drawImageAtpageRect(rect: self.watermarkImageView.bounds, data: waterMark) // KMWatermarkManager.drawImageAtpageRect:self.watermarkImageView.bounds watermarkDatas:waterMark]; } else { self.imageView?.image = NSImage(named: "KMImageNameUXIconVipWatermarkImg") self.watermarkImageView.image = KMWatermarkModel.drawImageAtpageRect(rect: self.watermarkImageView.bounds, data: waterMark)//[KMPDFWatermarkObject drawImageAtpageRect:self.watermarkImageView.bounds watermarkDatas:waterMark]; } self.watermarkNameLabel.stringValue = waterMark.watermarkID } func updateBackgroundInterface(_ background: KMBackgroundModel) { self._background = background if (background.type == .color) { self.watermarkImageView.image = nil self.imageView?.image = nil self.watermarkImageView.wantsLayer = true self.watermarkImageView.layer?.backgroundColor = background.color?.cgColor } else { self.watermarkImageView.image = background.image self.watermarkImageView.layer?.backgroundColor = NSColor.clear.cgColor } self.watermarkNameLabel.stringValue = background.backgroundID } //编辑水印 @IBAction @objc func buttonClicked_EditWatermark(_ sender: AnyObject?) { if (self.waterMarkOprateCallback != nil) { self.waterMarkOprateCallback!(.Edit, self._waterMark) } if (self.backgroundOperateCallback != nil) { self.backgroundOperateCallback!(.Edit, self._background) } } //删除水印 @IBAction @objc func buttonClicked_DeleteWatermark(_ sender: AnyObject?) { if (self.waterMarkOprateCallback != nil) { self.waterMarkOprateCallback!(.Delete, self._waterMark) } if (self.backgroundOperateCallback != nil) { self.backgroundOperateCallback!(.Delete, self._background) } } override func mouseEntered(with event: NSEvent) { if let data = self.view.window?.isKeyWindow, data { self.optionView.isHidden = false self.topBaseView.layer?.borderColor = KMAppearance.Interactive.a0Color().cgColor } } override func mouseExited(with event: NSEvent) { if let data = self.view.window?.isKeyWindow, data { self.optionView.isHidden = true if(self.isSelected) { self.topBaseView.layer?.borderColor = KMAppearance.Interactive.a0Color().cgColor } else { self.topBaseView.layer?.borderColor = KMAppearance.Layout.h2Color().cgColor } } } } // MARK: - Private Methods extension KMWatermarkCollectionViewItem { private func _configuUI() { self.imageView?.wantsLayer = true self.imageView?.layer?.borderWidth = 1.0 self.topBaseView.wantsLayer = true self.topBaseView.layer?.borderWidth = 1.0 self.topBaseView.layer?.borderColor = KMAppearance.Layout.h2Color().cgColor self.optionView.wantsLayer = true // self.optionView.layer.backgroundColor = [KMAppearance KMColor_Layout_L_1].CGColor; self.optionView.isHidden = true self.labelContainerView.wantsLayer = true self.labelContainerView.layer?.cornerRadius = 1.0 self.imageView?.layer?.borderColor = KMAppearance.Layout.h2Color().cgColor self.editButton.coverAction = { [weak self] cbutton, cation in if (cation == .enter) { self?.editButton.image = NSImage(named: KMImageNameUXIconBtnEditHov) } else { self?.editButton.image = NSImage(named: KMImageNameUXIconBtnEditNor) } } self.deleteButton.coverAction = { [weak self] cbutton, cation in if (cation == .enter) { self?.deleteButton.image = NSImage(named: KMImageNameUXIconBtnCloseHov) } else { self?.deleteButton.image = NSImage(named: KMImageNameUXIconBtnCloseNor) } }; } private func _addTrackingArea() { let trackingArea = NSTrackingArea(rect: self.view.bounds, options: [.mouseEnteredAndExited, .inVisibleRect, .activeAlways, .mouseMoved], owner: self) self.view.addTrackingArea(trackingArea) } }