// // KMHomeRightView.swift // PDF Reader Pro // // Created by Niehaoyu on 2024/10/10. // import Cocoa class KMHomeRightView: BaseXibView { @IBOutlet var rightScrollView: NSScrollView! @IBOutlet var rightCollectionView: NSCollectionView! var filesHeaderView: KMHomeFilesHeaderView = KMHomeFilesHeaderView() //MARK: - func override func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) // Drawing code here. } public required init?(coder decoder: NSCoder) { super.init(coder: decoder) } override init(frame frameRect: NSRect) { super.init(frame: frameRect) } public override func awakeFromNib() { super.awakeFromNib() self.configUI() } override func layout() { super.layout() rightCollectionView.reloadData() } func configUI() { rightScrollView.scrollerStyle = .overlay rightCollectionView.backgroundColors = [NSColor.clear] rightCollectionView.wantsLayer = true rightCollectionView.layer?.backgroundColor = NSColor.clear.cgColor rightCollectionView.delegate = self rightCollectionView.dataSource = self rightCollectionView.allowsEmptySelection = true rightCollectionView.register(KMHistoryFileThumbItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHistoryFileThumbItem")) rightCollectionView.register(KMHistoryFileListItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHistoryFileListItem")) rightCollectionView.register(KMHomeQuickToolsView.self, forSupplementaryViewOfKind: NSCollectionView.elementKindSectionHeader, withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "kmHomeQuickToolsView")) rightCollectionView.register(KMHomeFilesHeaderView.self, forSupplementaryViewOfKind: NSCollectionView.elementKindSectionHeader, withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "kmHomeFilesHeaderView")) rightCollectionView.register(KMHomeFilesEmptyHeaderView.self, forSupplementaryViewOfKind: NSCollectionView.elementKindSectionHeader, withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHomeFilesEmptyHeaderView")) rightCollectionView.register(KMHomeFilesEmptyHeaderView.self, forSupplementaryViewOfKind: NSCollectionView.elementKindSectionFooter, withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHomeFilesEmptyHeaderView")) } func reloadData() { self.rightCollectionView.reloadData() } private func collectionViewSelectedChanged() { let indexs = rightCollectionView.selectionIndexPaths HistoryFilesManager.manager.selectFiles.removeAll() if indexs.count >= 0 { for index in indexs { let url = HistoryFilesManager.manager.files[index.item] HistoryFilesManager.manager.selectFiles.append(url) } } filesHeaderView.updateDeleteButtonState() } } //MARK: - NSCollectionViewDelegate, NSCollectionViewDataSource extension KMHomeRightView: NSCollectionViewDelegate, NSCollectionViewDataSource, NSCollectionViewDelegateFlowLayout { func numberOfSections(in collectionView: NSCollectionView) -> Int { return 2 } func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int { if section == 0 { return 0 } return HistoryFilesManager.manager.files.count } func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem { if indexPath.item >= HistoryFilesManager.manager.files.count { return NSCollectionViewItem() } if HistoryFilesManager.manager.showMode == .Thumbnail { let item: KMHistoryFileThumbItem = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHistoryFileThumbItem"), for: indexPath) as! KMHistoryFileThumbItem return item } else if HistoryFilesManager.manager.showMode == .List { let item: KMHistoryFileListItem = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "KMHistoryFileListItem"), for: indexPath) as! KMHistoryFileListItem item.fileURL = HistoryFilesManager.manager.files[indexPath.item] item.reloadData() return item } return NSCollectionViewItem() } func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> NSSize { if HistoryFilesManager.manager.showMode == .Thumbnail { return CGSize(width: 226, height: 248) } else if HistoryFilesManager.manager.showMode == .List { let width = collectionView.frame.size.width - 80 return CGSize(width: width, height: 80) } return CGSize(width: 0.01, height: 0.01) } func collectionView(_ collectionView: NSCollectionView, viewForSupplementaryElementOfKind kind: NSCollectionView.SupplementaryElementKind, at indexPath: IndexPath) -> NSView { if kind == NSCollectionView.elementKindSectionHeader { if indexPath.section == 0 { //quick tools let view = collectionView.makeSupplementaryView(ofKind: kind, withIdentifier: NSUserInterfaceItemIdentifier("kmHomeQuickToolsView"), for: indexPath) as! KMHomeQuickToolsView return view } else if indexPath.section == 1 { //Recently filesHeaderView = collectionView.makeSupplementaryView(ofKind: kind, withIdentifier: NSUserInterfaceItemIdentifier("kmHomeFilesHeaderView"), for: indexPath) as! KMHomeFilesHeaderView filesHeaderView.delegate = self return filesHeaderView } } else if kind == NSCollectionView.elementKindSectionFooter { let view = collectionView.makeSupplementaryView(ofKind: kind, withIdentifier: NSUserInterfaceItemIdentifier("KMHomeFilesEmptyHeaderView"), for: indexPath) as! KMHomeFilesEmptyHeaderView return view } return NSView() } func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { return 8 } func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { return 0.01 } public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> NSSize { if section == 0 { return NSSize(width: collectionView.frame.size.width, height: 232) } else if section == 1 { return NSSize(width: collectionView.frame.size.width, height: 28) } return NSSize(width: 0, height: 0.01) } public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, referenceSizeForFooterInSection section: Int) -> NSSize { if section == 0 { return NSSize(width: 0, height: 40) } return NSSize(width: 0, height: 0.01) } public func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, insetForSectionAt section: Int) -> NSEdgeInsets { return NSEdgeInsetsMake(12, 40, 0, 40) } func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set) { self.collectionViewSelectedChanged() } func collectionView(_ collectionView: NSCollectionView, didDeselectItemsAt indexPaths: Set) { self.collectionViewSelectedChanged() } } extension KMHomeRightView: KMHomeFilesHeaderViewDelegate { func homeFilesShowModeDidUpdate(_ view: KMHomeFilesHeaderView) { self.reloadData() } func homeFilesHeaderViewDeleteButtonClicked(_ view: KMHomeFilesHeaderView) { } }