KMBookmarkSheetController.swift 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //
  2. // KMBookmarkSheetController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by lizhe on 2024/2/5.
  6. //
  7. import Cocoa
  8. typealias KMBookmarkSheetControllerDoneAction = (_ controller: KMBookmarkSheetController, _ type: KMBookmarkType, _ label: String) -> ()
  9. typealias KMBookmarkSheetControllerCancelAction = (_ controller: KMBookmarkSheetController, _ type: KMBookmarkType) -> ()
  10. class KMBookmarkSheetController: NSWindowController {
  11. @IBOutlet weak var folderPopUp: NSPopUpButton!
  12. @IBOutlet weak var bookmarkTextField: NSTextField!
  13. var doneAction: KMBookmarkSheetControllerDoneAction?
  14. var cancelAction: KMBookmarkSheetControllerCancelAction?
  15. var type: KMBookmarkType = .bookmark
  16. static func showBookmarkSheetController(type: KMBookmarkType) -> KMBookmarkSheetController {
  17. let controller = KMBookmarkSheetController.init(windowNibName: "KMBookmarkSheetController")
  18. controller.type = type
  19. NSWindow.currentWindow().beginSheet(controller.window!)
  20. return controller
  21. }
  22. func addMenuItems(forBookmarks bookmarks: [KMBookmark], level: Int, toMenu menu: NSMenu) {
  23. for bm in bookmarks {
  24. if bm.bookmarkType == .folder {
  25. let label = bm.label
  26. let item = menu.addItem(withTitle: label, action: nil, keyEquivalent: "")
  27. item.setImageAndSize(bm.icon)
  28. item.indentationLevel = level
  29. item.representedObject = bm
  30. addMenuItems(forBookmarks: bm.children, level: level + 1, toMenu: menu)
  31. }
  32. }
  33. }
  34. // MARK: Sheet Presentation
  35. func beginSheetModal(for window: NSWindow, completionHandler handler: @escaping (NSApplication.ModalResponse) -> Void) {
  36. // let bookmarkController = KMBookmarkController.sharedBookmarkController()
  37. // let root = bookmarkController.bookmarkRoot()
  38. // folderPopUp.removeAllItems()
  39. // addMenuItems(forBookmarks: [root], level: 0, toMenu: folderPopUp.menu!)
  40. // folderPopUp.selectItem(at: 0)
  41. //
  42. //
  43. // super.window?.beginSheet(window, completionHandler: { response in
  44. // handler(response)
  45. // })
  46. // super.beginSheetModal(for: window) { response in
  47. // handler(response)
  48. // }
  49. }
  50. // MARK: Accessors
  51. var selectedFolder: KMBookmark? {
  52. return folderPopUp.selectedItem?.representedObject as? KMBookmark
  53. }
  54. @IBAction func cancelButtonAction(_ sender: Any) {
  55. self.cancelAction?(self, type)
  56. self.window?.close()
  57. }
  58. @IBAction func doneButtonAction(_ sender: Any) {
  59. self.doneAction?(self, type, bookmarkTextField.stringValue)
  60. }
  61. }