Files
supersonic/ui/albumspage.go
T

59 lines
1.3 KiB
Go

package ui
import (
"supersonic/backend"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
var _ fyne.Widget = (*AlbumsPage)(nil)
type AlbumsPage struct {
widget.BaseWidget
im *backend.ImageManager
lm *backend.LibraryManager
grid *AlbumGrid
searchGrid *AlbumGrid
gridContainer *fyne.Container
OnPlayAlbum func(string)
}
func NewAlbumsPage(title string, lm *backend.LibraryManager, im *backend.ImageManager) *AlbumsPage {
a := &AlbumsPage{
lm: lm,
im: im,
}
a.ExtendBaseWidget(a)
a.grid = NewAlbumGrid(lm.RecentlyAddedIter(), im.GetAlbumThumbnail)
a.grid.OnPlayAlbum = a.onPlayAlbum
a.gridContainer = container.NewMax(a.grid)
return a
}
func (a *AlbumsPage) OnSearched(query string) {
if query == "" {
a.gridContainer.Objects[0] = a.grid
a.searchGrid = nil
a.Refresh()
return
}
a.searchGrid = NewAlbumGrid(a.lm.SearchIter(query), a.im.GetAlbumThumbnail)
a.searchGrid.OnPlayAlbum = a.onPlayAlbum
a.gridContainer.Objects[0] = a.searchGrid
a.Refresh()
}
func (a *AlbumsPage) onPlayAlbum(albumID string) {
if a.OnPlayAlbum != nil {
a.OnPlayAlbum(albumID)
}
}
func (a *AlbumsPage) CreateRenderer() fyne.WidgetRenderer {
a.ExtendBaseWidget(a)
return widget.NewSimpleRenderer(a.gridContainer)
}