KMBookmarkSheetView.swift 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. //
  2. // KMBookmarkSheetView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by lizhe on 2024/2/6.
  6. //
  7. import Cocoa
  8. typealias KMBookmarkSheetViewDoneAction = (_ view: KMBookmarkSheetView, _ type: KMBookmarkType, _ label: String) -> ()
  9. typealias KMBookmarkSheetViewCancelAction = (_ view: KMBookmarkSheetView, _ type: KMBookmarkType) -> ()
  10. class KMBookmarkSheetView: KMBaseXibView {
  11. @IBOutlet weak var folderPopUp: NSPopUpButton!
  12. @IBOutlet weak var bookmarkTextField: NSTextField!
  13. var type: KMBookmarkType = .bookmark
  14. var doneAction: KMBookmarkSheetViewDoneAction?
  15. var cancelAction: KMBookmarkSheetViewCancelAction?
  16. override func draw(_ dirtyRect: NSRect) {
  17. super.draw(dirtyRect)
  18. // Drawing code here.
  19. }
  20. override func setup() {
  21. let root = KMBookmarkManager.manager.rootBookmark
  22. self.folderPopUp.removeAllItems()
  23. addMenuItems(forBookmarks: [root], level: 0, toMenu: self.folderPopUp.menu!)
  24. self.folderPopUp.selectItem(at: 0)
  25. }
  26. func addMenuItems(forBookmarks bookmarks: [KMBookmark], level: Int, toMenu menu: NSMenu) {
  27. for bm in bookmarks {
  28. if bm.bookmarkType == .folder {
  29. let label = bm.label
  30. let item = menu.addItem(withTitle: label, action: nil, keyEquivalent: "")
  31. item.setImageAndSize(bm.icon)
  32. item.indentationLevel = level
  33. item.representedObject = bm
  34. addMenuItems(forBookmarks: bm.children, level: level + 1, toMenu: menu)
  35. }
  36. }
  37. }
  38. @IBAction func cancelButtonAction(_ sender: Any) {
  39. self.cancelAction?(self, type)
  40. }
  41. @IBAction func doneButtonAction(_ sender: Any) {
  42. self.doneAction?(self, type, bookmarkTextField.stringValue)
  43. }
  44. }