removed unwanted bar now with waveforms, major updates and enhancements
This commit is contained in:
@@ -807,7 +807,7 @@ struct ImportLogView: View {
|
||||
}.padding(12)
|
||||
}.background(Color(nsColor:.textBackgroundColor),in:RoundedRectangle(cornerRadius:8))
|
||||
.overlay(RoundedRectangle(cornerRadius:8).strokeBorder(.primary.opacity(0.06)))
|
||||
.onChange(of:lines.count) { _ in if follow,let last = lines.indices.last { reader.scrollTo(last,anchor:.bottom) } }
|
||||
.onStudioChange(of:lines.count) { _ in if follow,let last = lines.indices.last { reader.scrollTo(last,anchor:.bottom) } }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1041,9 +1041,9 @@ struct LibraryView: View {
|
||||
.disabled(model.storageProgress != nil)
|
||||
.overlay { if model.storageProgress != nil { ImportProgressDialog(model:model,storageMode:true) } }
|
||||
.onAppear { updateLibraryRows() }
|
||||
.onChange(of:model.songs) { _ in updateLibraryRows() }
|
||||
.onChange(of:model.tuningCache) { _ in updateLibraryRows() }
|
||||
.onChange(of:search) { _ in updateLibraryRows(resetPage:true) }
|
||||
.onStudioChange(of:model.songs) { _ in updateLibraryRows() }
|
||||
.onStudioChange(of:model.tuningCache) { _ in updateLibraryRows() }
|
||||
.onStudioChange(of:search) { _ in updateLibraryRows(resetPage:true) }
|
||||
.sheet(item: $model.creating) { kind in
|
||||
AddEntitySheet(model: model, kind: kind) { id in
|
||||
if kind == .singer { expandedSingers.insert(id);expandedSongLists.insert(id);singersExpanded = true;showSinger(id,section:"All Songs") } else { model.chooseVenue(id) }
|
||||
@@ -1062,13 +1062,13 @@ struct LibraryView: View {
|
||||
.confirmationDialog("Write file tags for \(tableSelection.count) songs? Original files will be backed up in TagBackups before replacement. Unsupported files are reported and left unchanged.",isPresented:$confirmWriteTags) {
|
||||
Button("Write File Tags") { model.writeFileTags(tableSelection) }
|
||||
}
|
||||
.onChange(of:tableSelection) { ids in selected = ids.sorted().first }
|
||||
.onStudioChange(of:tableSelection) { ids in selected = ids.sorted().first }
|
||||
.sheet(item:$editingSong) { song in SongMetadataSheet(model:model,song:song) }
|
||||
.sheet(item:$songPickerSinger) { singer in SingerSongsSheet(model:model,singer:singer,tonight:songPickerTonight) }
|
||||
.onChange(of:selected) { song in
|
||||
.onStudioChange(of:selected) { song in
|
||||
if source == "Singer Songs",let singer = model.selectedSinger,let song { singerSelections[singer] = song }
|
||||
}
|
||||
.onChange(of:model.selectedSinger) { singer in
|
||||
.onStudioChange(of:model.selectedSinger) { singer in
|
||||
updateLibraryRows()
|
||||
if source == "Singer Songs",presentedSinger != singer { showSinger(singer,section:nil) }
|
||||
}
|
||||
@@ -2098,3 +2098,15 @@ private struct RepeatButton: View {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Keep one change-observer API across the supported macOS versions.
|
||||
extension View {
|
||||
@ViewBuilder func onStudioChange<Value: Equatable>(of value: Value,perform action: @escaping (Value) -> Void) -> some View {
|
||||
if #available(macOS 14.0, *) { onChange(of:value) { _,newValue in action(newValue) } }
|
||||
else { legacyStudioChange(of:value,perform:action) }
|
||||
}
|
||||
@available(macOS,introduced:10.15,deprecated:14.0)
|
||||
private func legacyStudioChange<Value: Equatable>(of value: Value,perform action: @escaping (Value) -> Void) -> some View {
|
||||
onChange(of:value,perform:action)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user