use radio icon for image placeholder for radio stations

This commit is contained in:
Drew Weymouth
2024-06-01 17:42:40 -07:00
parent 61f8dd00ff
commit b7af1e716c
11 changed files with 40 additions and 49 deletions
+1 -1
View File
@@ -321,7 +321,7 @@ func (g *GridView) doUpdateItemCard(itemIdx int, card *GridViewItem) {
}
card.ItemIndex = itemIdx
g.itemForIndex[itemIdx] = card
card.Cover.Im.CenterIcon = g.Placeholder
card.Cover.Im.PlaceholderIcon = g.Placeholder
if !card.NeedsUpdate(item) && card.ItemIndex == itemIdx {
// nothing to do
g.stateMutex.Unlock()
+4 -4
View File
@@ -15,8 +15,8 @@ import (
// a placeholder with a rectangular border frame
// and an icon positioned in the center of the frame.
type ImagePlaceholder struct {
ScaleMode canvas.ImageScale
CenterIcon fyne.Resource
ScaleMode canvas.ImageScale
PlaceholderIcon fyne.Resource
widget.BaseWidget
content *fyne.Container
@@ -31,7 +31,7 @@ type ImagePlaceholder struct {
}
func NewImagePlaceholder(centerIcon fyne.Resource, minSize float32) *ImagePlaceholder {
i := &ImagePlaceholder{minSize: minSize, CenterIcon: centerIcon}
i := &ImagePlaceholder{minSize: minSize, PlaceholderIcon: centerIcon}
i.ExtendBaseWidget(i)
i.iconImage = canvas.NewImageFromResource(centerIcon)
i.iconImage.FillMode = canvas.ImageFillContain
@@ -94,7 +94,7 @@ func (i *ImagePlaceholder) MinSize() fyne.Size {
func (i *ImagePlaceholder) Refresh() {
i.border.Hidden = i.HaveImage()
i.iconImage.Resource = i.CenterIcon
i.iconImage.Resource = i.PlaceholderIcon
i.iconImage.Hidden = i.HaveImage()
i.imageDisp.Hidden = !i.HaveImage()
i.imageDisp.ScaleMode = i.ScaleMode
+2
View File
@@ -125,9 +125,11 @@ func (n *LargeNowPlayingCard) Update(item mediaprovider.MediaItem) {
if tr, ok := item.(*mediaprovider.Track); ok {
n.rating.Rating = tr.Rating
n.favorite.Favorite = tr.Favorite
n.cover.PlaceholderIcon = myTheme.TracksIcon
} else {
n.rating.Rating = 0
n.favorite.Favorite = false
n.cover.PlaceholderIcon = myTheme.RadioIcon
}
n.Refresh()
+14 -10
View File
@@ -25,7 +25,7 @@ type NowPlayingCard struct {
trackName *widget.Hyperlink
artistName *MultiHyperlink
albumName *widget.Hyperlink
cover *TappableImage
cover *ImagePlaceholder
menu *widget.PopUpMenu
ratingMenu *fyne.MenuItem
@@ -45,17 +45,16 @@ func NewNowPlayingCard() *NowPlayingCard {
albumName: widget.NewHyperlink("", nil),
}
n.ExtendBaseWidget(n)
n.cover = NewTappableImage(n.onShowCoverImage)
n.cover = NewImagePlaceholder(myTheme.TracksIcon, 85)
n.cover.OnTapped = n.onShowCoverImage
n.cover.OnTappedSecondary = n.showMenu
n.cover.ScaleMode = canvas.ImageScaleFastest
n.cover.Hidden = true
n.trackName.Hidden = true
n.albumName.Hidden = true
n.albumName.Truncation = fyne.TextTruncateEllipsis
n.trackName.Truncation = fyne.TextTruncateEllipsis
n.trackName.TextStyle.Bold = true
n.cover.SetMinSize(fyne.NewSquareSize(85))
n.cover.FillMode = canvas.ImageFillContain
n.cover.ScaleMode = canvas.ImageScaleFastest
n.cover.Hidden = true
n.albumName.OnTapped = n.onAlbumNameTapped
n.artistName.OnTapped = n.onArtistNameTapped
n.trackName.OnTapped = n.onTrackNameTapped
@@ -119,30 +118,35 @@ func (n *NowPlayingCard) CreateRenderer() fyne.WidgetRenderer {
return widget.NewSimpleRenderer(c)
}
func (n *NowPlayingCard) Update(track mediaprovider.MediaItem, cover image.Image) {
func (n *NowPlayingCard) Update(track mediaprovider.MediaItem) {
if track == nil {
n.trackName.SetText("")
n.artistName.BuildSegments([]string{}, []string{})
n.albumName.SetText("")
n.cover.Hidden = true
} else {
n.cover.Hidden = false
n.trackName.SetText(track.Metadata().Name)
if tr, ok := track.(*mediaprovider.Track); ok {
n.artistName.BuildSegments(tr.ArtistNames, tr.ArtistIDs)
n.albumName.SetText(tr.Album)
n.cover.PlaceholderIcon = myTheme.TracksIcon
} else {
n.artistName.BuildSegments([]string{}, []string{})
n.albumName.SetText("")
n.cover.PlaceholderIcon = myTheme.RadioIcon
}
}
n.trackName.Hidden = n.trackName.Text == ""
n.artistName.Hidden = len(n.artistName.Segments) == 0
n.albumName.Hidden = n.albumName.Text == ""
n.cover.Image.Image = cover
n.cover.Hidden = cover == nil
n.Refresh()
}
func (n *NowPlayingCard) SetImage(cover image.Image) {
n.cover.SetImage(cover, true)
}
func (n *NowPlayingCard) showMenu(e *fyne.PointEvent) {
if n.menu == nil {
n.ratingMenu = util.NewRatingSubmenu(n.onSetRating)
+5
View File
@@ -372,6 +372,11 @@ func (p *PlayQueueListRow) Update(tm *util.TrackListModel, rowNum int) {
// a new track (*mediaprovider.Track)
meta := tm.Item.Metadata()
if meta.ID != p.trackID {
if meta.Type == mediaprovider.MediaItemTypeRadioStation {
p.cover.PlaceholderIcon = myTheme.RadioIcon
} else {
p.cover.PlaceholderIcon = myTheme.TracksIcon
}
p.imageLoader.Load(meta.CoverArtID)
p.EnsureUnfocused()
p.trackID = meta.ID