add keyboard scrolling to list views

This commit is contained in:
Drew Weymouth
2024-02-18 13:26:15 -08:00
parent 8d038ced64
commit a7309b08ca
10 changed files with 62 additions and 14 deletions
+6
View File
@@ -145,6 +145,12 @@ func (a *AlbumPage) SelectAll() {
a.tracklist.SelectAll()
}
var _ Scrollable = (*AlbumPage)(nil)
func (a *AlbumPage) Scroll(scrollAmt float32) {
a.tracklist.Scroll(scrollAmt)
}
// should be called asynchronously
func (a *AlbumPage) load() {
album, err := a.mp.GetAlbum(a.albumID)
+20 -11
View File
@@ -157,10 +157,15 @@ func (a *FavoritesPage) Scroll(amount float32) {
case 1: // artists
grid = a.artistGrid
default:
if tr := a.tracklistOrNil(); tr != nil {
tr.Scroll(amount)
}
return
}
grid.ScrollToOffset(grid.GetScrollOffset() + amount)
grid.Refresh()
if grid != nil {
grid.ScrollToOffset(grid.GetScrollOffset() + amount)
grid.Refresh()
}
}
func (a *FavoritesPage) Route() controller.Route {
@@ -168,8 +173,8 @@ func (a *FavoritesPage) Route() controller.Route {
}
func (a *FavoritesPage) Tapped(*fyne.PointEvent) {
if a.tracklistCtr != nil {
a.tracklistCtr.Objects[0].(*widgets.Tracklist).UnselectAll()
if tr := a.tracklistOrNil(); tr != nil {
tr.UnselectAll()
}
}
@@ -192,9 +197,8 @@ func (a *FavoritesPage) Reload() {
if a.disposed {
return
}
if a.tracklistCtr != nil {
if tr := a.tracklistOrNil(); tr != nil {
// refresh favorite songs view
tr := a.tracklistCtr.Objects[0].(*widgets.Tracklist)
tr.SetTracks(starred.Tracks)
if a.toggleBtns.ActivatedButtonIndex() == 2 {
// favorite songs view is visible
@@ -239,8 +243,7 @@ func (a *FavoritesPage) Save() SavedPage {
a.artistGrid.Clear()
a.pool.Release(util.WidgetTypeGridView, a.artistGrid)
}
if a.tracklistCtr != nil {
tl := a.tracklistCtr.Objects[0].(*widgets.Tracklist)
if tl := a.tracklistOrNil(); tl != nil {
sf.trackSort = tl.Sorting()
tl.Clear()
a.pool.Release(util.WidgetTypeTracklist, tl)
@@ -268,8 +271,7 @@ var _ CanShowNowPlaying = (*FavoritesPage)(nil)
func (a *FavoritesPage) OnSongChange(song, lastScrobbledIfAny *mediaprovider.Track) {
a.nowPlayingID = sharedutil.TrackIDOrEmptyStr(song)
if a.tracklistCtr != nil {
tracklist := a.tracklistCtr.Objects[0].(*widgets.Tracklist)
if tracklist := a.tracklistOrNil(); tracklist != nil {
tracklist.SetNowPlaying(a.nowPlayingID)
tracklist.IncrementPlayCount(sharedutil.TrackIDOrEmptyStr(lastScrobbledIfAny))
}
@@ -279,10 +281,17 @@ var _ CanSelectAll = (*FavoritesPage)(nil)
func (a *FavoritesPage) SelectAll() {
if a.toggleBtns.ActivatedButtonIndex() == 2 /*songs*/ && a.tracklistCtr != nil {
a.tracklistCtr.Objects[0].(*widgets.Tracklist).SelectAll()
a.tracklistOrNil().SelectAll() // can't be nil in this case
}
}
func (a *FavoritesPage) tracklistOrNil() *widgets.Tracklist {
if a.tracklistCtr != nil {
return a.tracklistCtr.Objects[0].(*widgets.Tracklist)
}
return nil
}
func (a *FavoritesPage) doSearchAlbums(query string) {
if a.searchText == "" {
a.gridState = a.albumGrid.SaveToState()
+7
View File
@@ -93,6 +93,13 @@ func (a *GenresPage) SearchWidget() fyne.Focusable {
return a.searcher
}
var _ Scrollable = (*GenresPage)(nil)
func (a *GenresPage) Scroll(amount float32) {
a.list.list.ScrollToOffset(a.list.list.GetScrollOffset() + amount)
a.list.list.Refresh()
}
func (a *GenresPage) Route() controller.Route {
return controller.GenresRoute()
}
+6
View File
@@ -201,6 +201,12 @@ func (a *NowPlayingPage) Reload() {
a.load("")
}
var _ Scrollable = (*NowPlayingPage)(nil)
func (a *NowPlayingPage) Scroll(scrollAmt float32) {
a.tracklist.Scroll(scrollAmt)
}
func (a *NowPlayingPage) onPlayTrackAt(tracknum int) {
_ = a.pm.PlayTrackAt(tracknum)
}
+6
View File
@@ -142,6 +142,12 @@ func (a *PlaylistPage) SelectAll() {
a.tracklist.SelectAll()
}
var _ Scrollable = (*PlaylistPage)(nil)
func (a *PlaylistPage) Scroll(scrollAmt float32) {
a.tracklist.Scroll(scrollAmt)
}
// should be called asynchronously
func (a *PlaylistPage) load() {
playlist, err := a.sm.Server.GetPlaylist(a.playlistID)
+3
View File
@@ -88,6 +88,9 @@ func (p *PlaylistsPage) Scroll(scrollAmt float32) {
if p.viewToggle.ActivatedButtonIndex() == 1 && p.gridView != nil {
p.gridView.ScrollToOffset(p.gridView.GetScrollOffset() + scrollAmt)
p.gridView.Refresh()
} else if p.viewToggle.ActivatedButtonIndex() == 0 && p.listView != nil {
p.listView.list.ScrollToOffset(p.listView.list.GetScrollOffset() + scrollAmt)
p.listView.list.Refresh()
}
}
+6
View File
@@ -105,6 +105,12 @@ func (t *TracksPage) OnSongChange(track, lastScrobbledIfAny *mediaprovider.Track
}
}
var _ Scrollable = (*TracksPage)(nil)
func (g *TracksPage) Scroll(scrollAmt float32) {
g.tracklist.Scroll(scrollAmt)
}
var _ Searchable = (*TracksPage)(nil)
func (t *TracksPage) SearchWidget() fyne.Focusable {