add context menu to cover thumbnail in bottom panel

This commit is contained in:
Drew Weymouth
2023-05-08 09:10:43 -07:00
parent f7b31e1514
commit 3e448ed995
6 changed files with 96 additions and 34 deletions
+37
View File
@@ -4,6 +4,7 @@ import (
"image"
"github.com/dweymouth/supersonic/ui/layouts"
"github.com/dweymouth/supersonic/ui/util"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/canvas"
@@ -20,8 +21,12 @@ type NowPlayingCard struct {
artistName *CustomHyperlink
albumName *CustomHyperlink
cover *TappableImage
menu *widget.PopUpMenu
OnShowCoverImage func()
OnSetRating func(rating int)
OnSetFavorite func(favorite bool)
OnAddToPlaylist func()
c fyne.CanvasObject
}
@@ -34,6 +39,7 @@ func NewNowPlayingCard() *NowPlayingCard {
}
n.ExtendBaseWidget(n)
n.cover = NewTappableImage(n.onShowCoverImage)
n.cover.OnTappedSecondary = n.showMenu
n.trackName.Hidden = true
n.artistName.Hidden = true
n.albumName.Hidden = true
@@ -55,6 +61,24 @@ func (n *NowPlayingCard) onShowCoverImage() {
}
}
func (n *NowPlayingCard) onSetFavorite(fav bool) {
if n.OnSetFavorite != nil {
n.OnSetFavorite(fav)
}
}
func (n *NowPlayingCard) onSetRating(rating int) {
if n.OnSetRating != nil {
n.OnSetRating(rating)
}
}
func (n *NowPlayingCard) onAddToPlaylist() {
if n.OnAddToPlaylist != nil {
n.OnAddToPlaylist()
}
}
func (n *NowPlayingCard) CreateRenderer() fyne.WidgetRenderer {
return widget.NewSimpleRenderer(n.c)
}
@@ -82,3 +106,16 @@ func (n *NowPlayingCard) OnAlbumNameTapped(f func()) {
func (n *NowPlayingCard) OnTrackNameTapped(f func()) {
n.trackName.OnTapped = f
}
func (n *NowPlayingCard) showMenu(pos fyne.Position) {
if n.menu == nil {
ratingMenu := util.NewRatingSubmenu(n.onSetRating)
m := fyne.NewMenu("",
fyne.NewMenuItem("Set favorite", func() { n.onSetFavorite(true) }),
fyne.NewMenuItem("Unset favorite", func() { n.onSetFavorite(false) }),
ratingMenu,
fyne.NewMenuItem("Add to playlist...", func() { n.onAddToPlaylist() }))
n.menu = widget.NewPopUpMenu(m, fyne.CurrentApp().Driver().CanvasForObject(n))
}
n.menu.ShowAtPosition(pos)
}