// // KMBookmarkSheetView.swift // PDF Reader Pro // // Created by lizhe on 2024/2/6. // import Cocoa typealias KMBookmarkSheetViewDoneAction = (_ view: KMBookmarkSheetView, _ type: KMBookmarkType, _ label: String) -> () typealias KMBookmarkSheetViewCancelAction = (_ view: KMBookmarkSheetView, _ type: KMBookmarkType) -> () class KMBookmarkSheetView: BaseXibView { @IBOutlet weak var folderPopUp: NSPopUpButton! @IBOutlet weak var bookmarkTextField: NSTextField! @IBOutlet weak var bookmarkLabel: NSTextField! @IBOutlet weak var addToLabel: NSTextField! @IBOutlet weak var cancelButton: NSButton! @IBOutlet weak var okButton: NSButton! var type: KMBookmarkType = .bookmark var doneAction: KMBookmarkSheetViewDoneAction? var cancelAction: KMBookmarkSheetViewCancelAction? override func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) // Drawing code here. } func setup() { let root = KMBookmarkManager.manager.rootBookmark self.folderPopUp.removeAllItems() addMenuItems(forBookmarks: [root], level: 0, toMenu: self.folderPopUp.menu!) self.folderPopUp.selectItem(at: 0) self.bookmarkLabel.stringValue = NSLocalizedString("Bookmarks", comment: "") self.addToLabel.stringValue = NSLocalizedString("Add to", comment:"") self.cancelButton.title = NSLocalizedString("Cancel", comment:"") self.okButton.title = NSLocalizedString("OK", comment:"") } 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) } } } @IBAction func cancelButtonAction(_ sender: Any) { self.cancelAction?(self, type) } @IBAction func doneButtonAction(_ sender: Any) { self.doneAction?(self, type, bookmarkTextField.stringValue) } }