// // KMHomeOpenView.swift // PDF Reader Pro // // Created by Niehaoyu on 2024/10/8. // import Cocoa import KMComponentLibrary class KMHomeOpenView: BaseXibView { @IBOutlet weak var contendView: NSView! @IBOutlet weak var openFileButton: ComponentButton! @IBOutlet weak var createFileDropdown: ComponentDropdown! var groupView: ComponentGroup! 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.setUpButtonProperty() } func setUpButtonProperty() { openFileButton.properties = ComponentButtonProperty(type: .primary, size: .m, state: .normal, buttonText: KMLocalizedString("Open Files", comment: "")) openFileButton.setTarget(self, action: #selector(openFileAction(_:))) createFileDropdown.properties = ComponentDropdownProperty(type: .default_defaultTertiary, size: .m, state: .normal, split: false, disabled: false, text: KMLocalizedString("Create PDF", comment: "")) createFileDropdown.componentDelegate = self } //MARK: - GroupView func showGroupView() { var viewHeight: CGFloat = 8 var menuItemArr: [ComponentMenuitemProperty] = [] for i in ["New From File", "New Blank Page", "New From Web Page", "New From Clipboard", " ", "Import From Scanner"] { if i == " " { let property: ComponentMenuitemProperty = ComponentMenuitemProperty.divider() menuItemArr.append(property) viewHeight += 8 } else { let properties_Menuitem: ComponentMenuitemProperty = ComponentMenuitemProperty(multipleSelect: false, itemSelected: false, isDisabled: false, leftIcon: false, rightIcon: false, keyEquivalent: nil, text: KMLocalizedString(i, comment: "")) menuItemArr.append(properties_Menuitem) viewHeight += 36 } } if groupView == nil { groupView = ComponentGroup.createFromNib(in: ComponentLibrary.shared.componentBundle()) } groupView.groupDelegate = self groupView?.frame = CGRectMake(310, 0, CGRectGetWidth(self.bounds), viewHeight) groupView.updateGroupInfo(menuItemArr) groupView?.showWithPoint(createFileDropdown.frame.origin, inView: self) createFileDropdown.properties.state = .pressed createFileDropdown.reloadData() } func removeGroupView() { if groupView != nil { groupView.removeFromSuperview() } createFileDropdown.properties.state = .normal createFileDropdown.reloadData() } //MARK: - Action @objc func openFileAction(_ sender: NSView) { let openPanel = NSOpenPanel() openPanel.allowedFileTypes = ["pdf", "PDF"] openPanel.allowsMultipleSelection = false openPanel.beginSheetModal(for: self.window!) { result in if result == NSApplication.ModalResponse.OK { if let url = openPanel.url { } } } } func newFromFile() { let createWC: KMCreatePDFWindowController = KMCreatePDFWindowController(windowNibName: "KMCreatePDFWindowController") self.window?.beginSheet(createWC.window!, completionHandler: { result in }) } func newBlankPage() { let panel = NSSavePanel() panel.allowedFileTypes = ["pdf"] let resp = panel.runModal() if resp != .OK { return } let saveUrl = panel.url! let pdfDocument = CPDFDocument() pdfDocument?.insertPage(CGSize(width: 595, height: 842), at: 0) pdfDocument?.write(toFile: saveUrl.path) } func newFromWebPage() { let createWC: KMCreatePDFWindowController = KMCreatePDFWindowController(windowNibName: "KMCreatePDFWindowController") self.window?.beginSheet(createWC.window!, completionHandler: { result in }) } func newFromClipboard() { } func importFromScanner() { let vc = KMDeviceBrowserWindowController.shared vc.window?.center() vc.type = .scanner vc.importScannerFileCallback = { [weak self] (url: NSURL) -> Void in } vc.showWindow(NSApp.mainWindow) } } //MARK: - ComponentDropdownDelegate extension KMHomeOpenView: ComponentDropdownDelegate { func componentDropdownDidShowMenuItem(dropdown: ComponentDropdown) { self.showGroupView() } } //MARK: - ComponentGroupDelegate extension KMHomeOpenView: ComponentGroupDelegate { func componentGroupDidDismiss(group: ComponentGroup?) { self.removeGroupView() } func componentGroupDidSelect(group: ComponentGroup?, menuItemProperty: ComponentMenuitemProperty?) { if let selItem = menuItemProperty { let index = group?.menuItemArr.firstIndex(of: selItem) if index == 0 { self.newFromFile() } else if index == 1 { self.newBlankPage() } else if index == 2 { self.newFromWebPage() } else if index == 3 { self.newFromClipboard() } else if index == 5 { self.importFromScanner() } } } }