|
@@ -7,12 +7,14 @@
|
|
|
|
|
|
import Cocoa
|
|
|
|
|
|
+private let kLabelIdentifier = NSUserInterfaceItemIdentifier("Label")
|
|
|
+private let kFileIdentifier = NSUserInterfaceItemIdentifier("File")
|
|
|
+private let kPageIdentifier = NSUserInterfaceItemIdentifier("Page")
|
|
|
+
|
|
|
class KMBookmarkOutlineView: KMBaseXibView {
|
|
|
@IBOutlet weak var outlineView: NSOutlineView!
|
|
|
|
|
|
-
|
|
|
-
|
|
|
- var data: [[String: Any]] = [] {
|
|
|
+ var data: KMRootBookmark? {
|
|
|
didSet {
|
|
|
self.reloadData()
|
|
|
}
|
|
@@ -24,39 +26,44 @@ class KMBookmarkOutlineView: KMBaseXibView {
|
|
|
// Drawing code here.
|
|
|
}
|
|
|
|
|
|
+ override func setup() {
|
|
|
+ outlineView.delegate = self
|
|
|
+ outlineView.dataSource = self
|
|
|
+ outlineView.registerForDraggedTypes([kPasteboardTypeBookmarkRows, .fileURL, .string])
|
|
|
+ outlineView.doubleAction = #selector(doubleClickBookmark)
|
|
|
+ }
|
|
|
+
|
|
|
override func reloadData() {
|
|
|
+ guard let data = data else { return }
|
|
|
|
|
|
+ self.outlineView.reloadData()
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
+//MARK: Action
|
|
|
+extension KMBookmarkOutlineView {
|
|
|
+ @objc func doubleClickBookmark() {
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
// MARK: - NSOutlineViewDataSource
|
|
|
extension KMBookmarkOutlineView: NSOutlineViewDataSource {
|
|
|
func outlineView(_ outlineView: NSOutlineView, numberOfChildrenOfItem item: Any?) -> Int {
|
|
|
- if item == nil {
|
|
|
- return data.count
|
|
|
- }
|
|
|
-// if let key = item as? String, let children = data[key] {
|
|
|
-// return children.count
|
|
|
-// }
|
|
|
- return 0
|
|
|
+ let bookmark = item as? KMBookmark ?? data
|
|
|
+ guard let bookmark = bookmark else { return 0}
|
|
|
+ return bookmark.bookmarkType == .folder ? bookmark.children.count : 0
|
|
|
}
|
|
|
|
|
|
func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool {
|
|
|
-// if let key = item as? String {
|
|
|
-// return data[key] != nil
|
|
|
-// }
|
|
|
- return false
|
|
|
+ let bookmark = item as! KMBookmark
|
|
|
+ return bookmark.bookmarkType == .folder
|
|
|
}
|
|
|
|
|
|
func outlineView(_ outlineView: NSOutlineView, child index: Int, ofItem item: Any?) -> Any {
|
|
|
-// if item == nil {
|
|
|
-// return Array(data.keys)[index]
|
|
|
-// }
|
|
|
-// if let key = item as? String, let children = data[key] {
|
|
|
-// return children[index]
|
|
|
-// }
|
|
|
- return ""
|
|
|
+ let bookmark = (item as? KMBookmark) ?? data
|
|
|
+ return bookmark?.objectOfChidren(index: index) as Any
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -64,15 +71,26 @@ extension KMBookmarkOutlineView: NSOutlineViewDelegate {
|
|
|
// MARK: - NSOutlineViewDelegate
|
|
|
|
|
|
func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {
|
|
|
- if let key = item as? String {
|
|
|
- let view = outlineView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "HeaderCell"), owner: self) as? NSTableCellView
|
|
|
- view?.textField?.stringValue = key
|
|
|
- return view
|
|
|
- } else if let value = item as? String {
|
|
|
- let view = outlineView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "DataCell"), owner: self) as? NSTableCellView
|
|
|
- view?.textField?.stringValue = value
|
|
|
- return view
|
|
|
+ guard let column = tableColumn else { return nil }
|
|
|
+ guard let item = item as? KMBookmark else { return nil }
|
|
|
+ let identifier = column.identifier
|
|
|
+
|
|
|
+ var cell: NSTableCellView = NSTableCellView()
|
|
|
+ switch identifier {
|
|
|
+ case kLabelIdentifier: do {
|
|
|
+ cell = KMBookmarkOutlineTitleCellView()
|
|
|
+ }
|
|
|
+ case kPageIdentifier: do {
|
|
|
+ cell = KMBookmarkOutlinePageCellView()
|
|
|
}
|
|
|
- return nil
|
|
|
+ case kFileIdentifier: do {
|
|
|
+ cell = KMBookmarkOutlineFileCellView()
|
|
|
+ }
|
|
|
+
|
|
|
+ default:
|
|
|
+ break
|
|
|
+ }
|
|
|
+
|
|
|
+ return cell
|
|
|
}
|
|
|
}
|