// // KMBatchSelectedFilesView.swift // PDF Master // // Created by lizhe on 2023/1/29. // import Cocoa import KMComponentLibrary typealias KMBatchSelectedFilesViewCompletion = (_ data: [URL]) -> () typealias KMBatchSelectedFilesViewAddFilesAction = (_ sender: Any) -> () class KMBatchSelectedFilesView: BaseXibView { @IBOutlet weak var imageButton: NSButton! @IBOutlet weak var titleLabel: NSTextField! @IBOutlet weak var subtitleLabel: NSTextField! @IBOutlet weak var box: KMBox! var inputType: KMBatchCollectionViewType? var data: [URL] = [] var dragEnd: KMBatchSelectedFilesViewCompletion? var addAction: KMBatchSelectedFilesViewAddFilesAction? override func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) // Drawing code here. } override func setup() { super.setup() self.registerForDraggedTypes([NSPasteboard.PasteboardType.string, NSPasteboard.PasteboardType.fileURL]) //支持拖拽 self.titleLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorPicture/empty-textDefault") self.titleLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-m-medium") self.subtitleLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorPicture/empty-textSecondary") self.subtitleLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-s-regular") self.titleLabel.stringValue = KMLocalizedString("Select Files", comment: "") self.subtitleLabel.stringValue = KMLocalizedString("Drop files here or Click “+”. Drag files to reorder as you need.\nYou can also add files or folders via the lower left button.", comment: "") let title = NSLocalizedString("Drop files here or Click “+”. Drag files to reorder as you need.\nYou can also add files or folders via the lower left button.", comment: "") let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.lineHeightMultiple = 1.32 paragraphStyle.alignment = .center self.subtitleLabel.attributedStringValue = NSMutableAttributedString(string: title, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle, .foregroundColor : NSColor.km_init(hex: "#94989C"), NSAttributedString.Key.font: NSFont.SFProTextRegularFont(12)]) self.box.moveCallback = { [unowned self] mouseEntered, mouseBox in if mouseEntered { self.imageButton.image = NSImage(named: "icon_empty_add_hov") } else { self.imageButton.image = NSImage(named: "icon_empty_add_norm") } } } } protocol KMBatchSelectedFilesViewAction {} extension KMBatchSelectedFilesView: KMBatchSelectedFilesViewAction { @IBAction func selectFilse(_ sender: NSButton) { if (self.addAction != nil) { self.addAction!(sender) } } } protocol KMBatchSelectedFilesViewDrag {} extension KMBatchSelectedFilesView: KMBatchSelectedFilesViewDrag { override func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation { KMPrint("draggingEntered") if self.allowAccept(sender) { return .copy } else { return .move } } override func draggingUpdated(_ sender: NSDraggingInfo) -> NSDragOperation { if self.allowAccept(sender) { return .copy } else { return .move } } override func prepareForDragOperation(_ sender: NSDraggingInfo) -> Bool { return self.allowAccept(sender) } override func performDragOperation(_ sender: NSDraggingInfo) -> Bool { if self.allowAccept(sender) { self.endDrag(sender: sender, info: [:]) return true } else { return false } } override func draggingExited(_ sender: NSDraggingInfo?) { KMPrint("draggingExited") } func endDrag(sender: NSDraggingInfo, info: NSDictionary) { // CGPoint point = sender.draggedImageLocation; // point.y = sender.draggingLocation.y; // // point = [self convertPoint:point fromView:nil]; KMPrint("endDrag") if (self.dragEnd != nil) { self.dragEnd!(self.data) } } func allowAccept(_ sender: NSDraggingInfo) -> Bool { var allow = false let pasteboard = sender.draggingPasteboard if (pasteboard.types?.contains(.fileURL) == true) { var array: [URL] = [] for item in pasteboard.pasteboardItems! { let string = item.string(forType: NSPasteboard.PasteboardType.fileURL)! let url = NSURL(string: string) switch self.inputType { case .OCR: if (url?.pathExtension?.lowercased() == "pdf") { array.append(url! as URL) } case .imageToPDF: if (KMBatchProcessingTableViewModel.supportedImageTypes().contains((url?.pathExtension?.lowercased())!)) { array.append(url! as URL) } default: if (url?.pathExtension?.lowercased() == "pdf") { array.append(url! as URL) } KMPrint("无数据") } } if array.count != 0 { allow = true self.data = array } } return allow } }