@@ -75,21 +75,35 @@ public extension NSTableViewDiffableDataSource {
75
75
}
76
76
77
77
/// The cell provider of the datasource.
78
- private var cellProvider : ( ( NSTableView , NSTableColumn , Int , ItemIdentifierType ) -> ( Any ) ) {
79
- guard let cellProvider: ( ( NSTableView , NSTableColumn , Int , ItemIdentifierType ) -> ( NSView ? ) ) = getIvarValue ( for: " cellProvider " ) else { return { _, _, _, _ in return NSTableCellView ( ) } }
78
+ public var cellProvider : ( ( NSTableView , NSTableColumn , Int , ItemIdentifierType ) -> ( NSView ) ) {
79
+ typealias CellProviderBlock = @convention ( block) ( _ tableView: NSTableView , _ tableColumn: NSTableColumn , _ row: Int , _ identifier: Any ) -> NSView
80
+ guard let cellProvider: CellProviderBlock = getIvarValue ( for: " _cellProvider " ) else { return { _, _, _, _ in return NSTableCellView ( ) } }
80
81
return cellProvider
81
82
}
82
83
83
- private func previewImage( for item: ItemIdentifierType , tableView: NSTableView ) -> NSImage ? {
84
+ /// Creates a new table cell view for the specified item using the cell provider.
85
+ public func createCellView( for item: ItemIdentifierType , tableColumn: NSTableColumn ? = nil , tableView: NSTableView ) -> NSView ? {
86
+ guard let tableColumn = tableColumn ?? tableView. tableColumns. first, tableView. tableColumns. contains ( tableColumn) else { return nil }
87
+ return cellProvider ( tableView, tableColumn, 0 , item)
88
+ }
89
+
90
+ /// Returns a preview image of the table cell for the specified item and table column.
91
+ public func previewImage( for item: ItemIdentifierType , tableView: NSTableView ) -> NSImage ? {
84
92
let columns = tableView. tableColumns
85
93
guard !columns. isEmpty else { return nil }
86
94
return NSImage ( combineHorizontal: columns. compactMap ( { _previewImage ( for: item, tableColumn: $0, tableView: tableView, useColumnWidth: $0 !== columns. last!) } ) , alignment: . top)
87
95
}
88
96
89
- private func previewImage( for item: ItemIdentifierType , tableColumn: NSTableColumn , tableView: NSTableView ) -> NSImage ? {
97
+ /// Returns a preview image of the table row for the specified item.
98
+ public func previewImage( for item: ItemIdentifierType , tableColumn: NSTableColumn , tableView: NSTableView ) -> NSImage ? {
90
99
_previewImage ( for: item, tableColumn: tableColumn, tableView: tableView)
91
100
}
92
101
102
+ /// Returns a preview image of the table rows for the specified items.
103
+ public func previewImage( for items: [ ItemIdentifierType ] , tableView: NSTableView ) -> NSImage ? {
104
+ return NSImage ( combineVertical: items. compactMap ( { previewImage ( for: $0, tableView: tableView) } ) . reversed ( ) , alignment: . left)
105
+ }
106
+
93
107
private func _previewImage( for item: ItemIdentifierType , tableColumn: NSTableColumn , tableView: NSTableView , useColumnWidth: Bool = true ) -> NSImage ? {
94
108
guard let index = tableView. tableColumns. firstIndex ( of: tableColumn) else { return nil }
95
109
let view : NSView
0 commit comments