// // KMBookmarkSheetController.swift // PDF Reader Pro // // Created by lizhe on 2024/2/5. // import Cocoa typealias KMBookmarkSheetControllerDoneAction = (_ controller: KMBookmarkSheetController, _ type: KMBookmarkType, _ label: String) -> () typealias KMBookmarkSheetControllerCancelAction = (_ controller: KMBookmarkSheetController, _ type: KMBookmarkType) -> () class KMBookmarkSheetController: NSWindowController { @IBOutlet weak var folderPopUp: NSPopUpButton! @IBOutlet weak var bookmarkTextField: NSTextField! var doneAction: KMBookmarkSheetControllerDoneAction? var cancelAction: KMBookmarkSheetControllerCancelAction? var type: KMBookmarkType = .bookmark static func showBookmarkSheetController(type: KMBookmarkType) -> KMBookmarkSheetController { let controller = KMBookmarkSheetController.init(windowNibName: "KMBookmarkSheetController") controller.type = type NSWindow.currentWindow().beginSheet(controller.window!) return controller } func addMenuItems(forBookmarks bookmarks: [KMBookmark], level: Int, toMenu menu: NSMenu) { for bm in bookmarks { if bm.bookmarkType == .folder { let label = bm.label let item = menu.addItem(withTitle: label, action: nil, keyEquivalent: "") item.setImageAndSize(bm.icon) item.indentationLevel = level item.representedObject = bm addMenuItems(forBookmarks: bm.children, level: level + 1, toMenu: menu) } } } // MARK: Sheet Presentation func beginSheetModal(for window: NSWindow, completionHandler handler: @escaping (NSApplication.ModalResponse) -> Void) { // let bookmarkController = KMBookmarkController.sharedBookmarkController() // let root = bookmarkController.bookmarkRoot() // folderPopUp.removeAllItems() // addMenuItems(forBookmarks: [root], level: 0, toMenu: folderPopUp.menu!) // folderPopUp.selectItem(at: 0) // // // super.window?.beginSheet(window, completionHandler: { response in // handler(response) // }) // super.beginSheetModal(for: window) { response in // handler(response) // } } // MARK: Accessors var selectedFolder: KMBookmark? { return folderPopUp.selectedItem?.representedObject as? KMBookmark } @IBAction func cancelButtonAction(_ sender: Any) { self.cancelAction?(self, type) self.window?.close() } @IBAction func doneButtonAction(_ sender: Any) { self.doneAction?(self, type, bookmarkTextField.stringValue) } }