// // KMMergeCollectionPageViewItem.swift // PDF Reader Pro // // Created by tangchao on 2022/11/25. // import Cocoa import PDFKit typealias KMMergeCollectionPageViewItemFoldClick = (_ viewItem: AnyObject)->() typealias KMMergeCollectionPageViewItemSelectedClick = (_ viewItem: AnyObject)->() class KMMergeCollectionPageViewItem: NSCollectionViewItem { lazy var iconImageView = NSImageView() lazy var backgroundView = NSView() lazy var pageView = KMPDFThumbnialPageView() lazy var nameLabel = NSTextField(labelWithString: "") var flodClick: KMMergeCollectionPageViewItemFoldClick! var selectedClick: KMMergeCollectionPageViewItemSelectedClick! private var flodButton = NSButton() private var selectCheckBox = NSButton(checkboxWithTitle: "", target: nil, action: nil) private var myModel: KMMergePageModel! var model: KMMergePageModel { get { myModel } set { myModel = newValue pageView.page = newValue.page; if newValue.pageID == 0 { flodButton.isHidden = false } else { flodButton.isHidden = true } if model.pageID == 0 { nameLabel.stringValue = fileModel.documentURL.lastPathComponent.components(separatedBy: ".").first! } else { nameLabel.stringValue = String(model.pageID+1) } if model.selected { selectCheckBox.state = NSControl.StateValue.on } else { selectCheckBox.state = NSControl.StateValue.off } } } private var myFileModel: KMMergeFileModel! var fileModel: KMMergeFileModel { get { myFileModel } set { myFileModel = newValue } } override func viewDidLoad() { super.viewDidLoad() view.addSubview(backgroundView) view.addSubview(pageView) view.addSubview(flodButton) view.addSubview(selectCheckBox) view.addSubview(nameLabel) nameLabel.alignment = .center nameLabel.lineBreakMode = .byTruncatingTail flodButton.wantsLayer = true flodButton.isBordered = false; flodButton.title = NSLocalizedString("折叠", comment: "") flodButton.layer?.backgroundColor = NSColor.white.cgColor; flodButton.target = self flodButton.action = #selector(flodButtonAction) // let clickGestureRecongnizer = NSClickGestureRecognizer() // clickGestureRecongnizer.numberOfClicksRequired = 2 // view.addGestureRecognizer(clickGestureRecongnizer) // clickGestureRecongnizer.target = self // clickGestureRecongnizer.action = #selector(clickGestureRecongnizerAction) } override func viewDidLayout() { super.viewDidLayout() let width = NSWidth(view.bounds) let height = NSHeight(view.bounds) iconImageView.frame = view.bounds backgroundView.frame = view.bounds let selectCheckBoxSize: CGFloat = 18 selectCheckBox.frame = NSMakeRect(width-selectCheckBoxSize-5, height-selectCheckBoxSize-5, selectCheckBoxSize, selectCheckBoxSize) let flodSize: CGFloat = 28 flodButton.frame = NSMakeRect(width-flodSize-10, height-flodSize-30, flodSize, flodSize) nameLabel.frame = NSMakeRect(0, 0, width, 20) let border: CGFloat = 10 var bounds: NSRect = NSZeroRect if (myModel != nil) { bounds = myModel.page.bounds } if (bounds.size.width == 0) { return } if (bounds.size.height == 0) { return } let pageSelectionSize = CGSize(width: self.view.frame.size.width-30, height: self.view.frame.size.height-40) var size = NSMakeSize(pageSelectionSize.width - 2 * border, pageSelectionSize.height - 2 * border) let minScale = min(size.width/bounds.size.width, size.height/bounds.size.height) size.width = bounds.size.width * minScale size.height = bounds.size.height * minScale let pageViewX = (pageSelectionSize.width-size.width) * 0.5 + 15 let pageViewY = (pageSelectionSize.height-size.height) * 0.5 + 10 pageView.frame = NSMakeRect(pageViewX, pageViewY, size.width, size.height) } override var isSelected: Bool { get { super.isSelected } set { super.isSelected = newValue backgroundView.wantsLayer = true if newValue { backgroundView.layer?.backgroundColor = NSColor.blue.cgColor } else { backgroundView.layer?.backgroundColor = NSColor.clear.cgColor } } } override func mouseUp(with event: NSEvent) { guard let callback = selectedClick else { return } callback(self) } @objc func flodButtonAction() { guard let callback = flodClick else { return } callback(self) } }