add context menu to tracklist

This commit is contained in:
Drew Weymouth
2023-02-08 16:49:01 -08:00
parent 6963a5de8e
commit edea337e7f
5 changed files with 113 additions and 31 deletions
+18 -2
View File
@@ -21,6 +21,7 @@ type AlbumPage struct {
albumID string
sm *backend.ServerManager
pm *backend.PlaybackManager
im *backend.ImageManager
lm *backend.LibraryManager
nav func(Route)
@@ -36,19 +37,28 @@ type AlbumPage struct {
func NewAlbumPage(
albumID string,
sm *backend.ServerManager,
pm *backend.PlaybackManager,
lm *backend.LibraryManager,
im *backend.ImageManager,
popUpProvider util.PopUpProvider,
nav func(Route),
) *AlbumPage {
a := &AlbumPage{albumID: albumID, sm: sm, lm: lm, im: im, nav: nav, popUpProvider: popUpProvider}
a := &AlbumPage{albumID: albumID, sm: sm, pm: pm, lm: lm, im: im, nav: nav, popUpProvider: popUpProvider}
a.ExtendBaseWidget(a)
a.header = NewAlbumPageHeader(a)
a.tracklist = widgets.NewTracklist(nil)
// connect tracklist actions
a.tracklist.OnPlayTrackAt = a.onPlayTrackAt
a.tracklist.OnAddToQueue = func(tracks []*subsonic.Child) { a.pm.LoadTracks(tracks, true) }
a.tracklist.OnPlaySelection = func(tracks []*subsonic.Child) {
a.pm.LoadTracks(tracks, false)
a.pm.PlayFromBeginning()
}
a.container = container.NewBorder(
container.New(&layouts.MaxPadLayout{PadLeft: 15, PadRight: 15, PadTop: 15, PadBottom: 10}, a.header),
nil, nil, nil, container.New(&layouts.MaxPadLayout{PadLeft: 15, PadRight: 15, PadBottom: 15}, a.tracklist))
a.loadAsync()
return a
}
@@ -65,6 +75,7 @@ func (a *AlbumPage) Save() SavedPage {
return &savedAlbumPage{
albumID: a.albumID,
lm: a.lm,
pm: a.pm,
im: a.im,
nav: a.nav,
popUpProvider: a.popUpProvider,
@@ -88,6 +99,10 @@ func (a *AlbumPage) Reload() {
a.loadAsync()
}
func (a *AlbumPage) Tapped(*fyne.PointEvent) {
a.tracklist.UnselectAll()
}
func (a *AlbumPage) onPlayTrackAt(tracknum int) {
if a.OnPlayAlbum != nil {
a.OnPlayAlbum(a.albumID, tracknum)
@@ -227,6 +242,7 @@ func formatMiscLabelStr(a *subsonic.AlbumID3) string {
type savedAlbumPage struct {
albumID string
lm *backend.LibraryManager
pm *backend.PlaybackManager
im *backend.ImageManager
sm *backend.ServerManager
popUpProvider util.PopUpProvider
@@ -234,5 +250,5 @@ type savedAlbumPage struct {
}
func (s *savedAlbumPage) Restore() Page {
return NewAlbumPage(s.albumID, s.sm, s.lm, s.im, s.popUpProvider, s.nav)
return NewAlbumPage(s.albumID, s.sm, s.pm, s.lm, s.im, s.popUpProvider, s.nav)
}
+11
View File
@@ -42,7 +42,14 @@ func NewPlaylistPage(
a.header = NewPlaylistPageHeader(a)
a.tracklist = widgets.NewTracklist(nil)
a.tracklist.AutoNumber = true
// connect tracklist actions
a.tracklist.OnPlayTrackAt = a.onPlayTrackAt
a.tracklist.OnAddToQueue = func(tracks []*subsonic.Child) { a.pm.LoadTracks(tracks, true) }
a.tracklist.OnPlaySelection = func(tracks []*subsonic.Child) {
a.pm.LoadTracks(tracks, false)
a.pm.PlayFromBeginning()
}
a.container = container.NewBorder(
container.New(&layouts.MaxPadLayout{PadLeft: 15, PadRight: 15, PadTop: 15, PadBottom: 10}, a.header),
nil, nil, nil, container.New(&layouts.MaxPadLayout{PadLeft: 15, PadRight: 15, PadBottom: 15}, a.tracklist))
@@ -81,6 +88,10 @@ func (a *PlaylistPage) Reload() {
a.loadAsync()
}
func (a *PlaylistPage) Tapped(*fyne.PointEvent) {
a.tracklist.UnselectAll()
}
func (a *PlaylistPage) onPlayTrackAt(tracknum int) {
a.pm.PlayPlaylist(a.playlistID, tracknum)
}
+1 -1
View File
@@ -100,7 +100,7 @@ func (p *popUpProvider) WindowSize() fyne.Size {
func (r Router) CreatePage(rte Route) Page {
switch rte.Page {
case Album:
return NewAlbumPage(rte.Arg, r.App.ServerManager, r.App.LibraryManager, r.App.ImageManager, r.pop, r.OpenRoute)
return NewAlbumPage(rte.Arg, r.App.ServerManager, r.App.PlaybackManager, r.App.LibraryManager, r.App.ImageManager, r.pop, r.OpenRoute)
case Albums:
return NewAlbumsPage("Albums", rte.Arg, r.App.LibraryManager, r.App.ImageManager, r.OpenRoute)
case Artist: