Skip to content

Commit 7c423de

Browse files
authored
Merge pull request #5 from tobiasjordan/bugfix/NSTableView-batch-updates
Bugfix/ns table view batch updates
2 parents 6ac520e + 4139c9e commit 7c423de

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

Sources/Extensions/AppKitExtension.swift

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,16 +86,24 @@ public extension NSTableView {
8686
removeRows(at: IndexSet(changeset.elementDeleted.map { $0.element }), withAnimation: deleteRowsAnimation())
8787
}
8888

89-
if !changeset.elementInserted.isEmpty {
90-
insertRows(at: IndexSet(changeset.elementInserted.map { $0.element }), withAnimation: insertRowsAnimation())
89+
if !changeset.elementUpdated.isEmpty {
90+
reloadData(forRowIndexes: IndexSet(changeset.elementUpdated.map { $0.element }), columnIndexes: IndexSet(0..<tableColumns.count))
9191
}
9292

93-
if !changeset.elementUpdated.isEmpty {
94-
reloadData(forRowIndexes: IndexSet(changeset.elementUpdated.map { $0.element }), columnIndexes: IndexSet(changeset.elementUpdated.map { $0.section }))
93+
if !changeset.elementMoved.isEmpty {
94+
let insertionIndices = IndexSet(changeset.elementInserted.map { $0.element })
95+
var movedSourceIndices = IndexSet()
96+
97+
for (source, target) in changeset.elementMoved {
98+
let sourceElementOffset = movedSourceIndices.count(in: source.element...)
99+
let targetElementOffset = insertionIndices.count(in: 0..<target.element)
100+
moveRow(at: source.element + sourceElementOffset, to: target.element - targetElementOffset)
101+
movedSourceIndices.insert(source.element)
102+
}
95103
}
96104

97-
for (source, target) in changeset.elementMoved {
98-
moveRow(at: source.element, to: target.element)
105+
if !changeset.elementInserted.isEmpty {
106+
insertRows(at: IndexSet(changeset.elementInserted.map { $0.element }), withAnimation: insertRowsAnimation())
99107
}
100108

101109
endUpdates()

0 commit comments

Comments
 (0)