diff --git a/ui/browsing/genrepage.go b/ui/browsing/genrepage.go index 4307238..68c90f6 100644 --- a/ui/browsing/genrepage.go +++ b/ui/browsing/genrepage.go @@ -19,19 +19,20 @@ import ( type GenrePage struct { widget.BaseWidget - genre string - contr *controller.Controller - im *backend.ImageManager - pm *backend.PlaybackManager - mp mediaprovider.MediaProvider - grid *widgets.GridView - searchGrid *widgets.GridView - searcher *widgets.SearchEntry - searchText string - filter mediaprovider.AlbumFilter - filterBtn *widgets.AlbumFilterButton - titleDisp *widget.RichText - playRandom *widget.Button + genre string + contr *controller.Controller + im *backend.ImageManager + pm *backend.PlaybackManager + mp mediaprovider.MediaProvider + grid *widgets.GridView + gridState *widgets.GridViewState + searchGridState *widgets.GridViewState + searcher *widgets.SearchEntry + searchText string + filter mediaprovider.AlbumFilter + filterBtn *widgets.AlbumFilterButton + titleDisp *widget.RichText + playRandom *widget.Button container *fyne.Container } @@ -56,7 +57,7 @@ func NewGenrePage(genre string, contr *controller.Controller, pm *backend.Playba g.grid = widgets.NewGridView(widgets.NewGridViewAlbumIterator(iter), g.im, myTheme.AlbumIcon) g.contr.ConnectAlbumGridActions(g.grid) g.createSearchAndFilter() - g.createContainer(false) + g.createContainer() return g } @@ -71,29 +72,27 @@ func (g *GenrePage) createSearchAndFilter() { g.filterBtn.OnChanged = g.Reload } -func (g *GenrePage) createContainer(searchGrid bool) { +func (g *GenrePage) createContainer() { searchVbox := container.NewVBox(layout.NewSpacer(), g.searcher, layout.NewSpacer()) - gr := g.grid - if searchGrid { - gr = g.searchGrid - } playRandomVbox := container.NewVBox(layout.NewSpacer(), g.playRandom, layout.NewSpacer()) g.container = container.NewBorder( container.NewHBox(util.NewHSpace(6), g.titleDisp, playRandomVbox, layout.NewSpacer(), container.NewCenter(g.filterBtn), searchVbox, util.NewHSpace(15)), - nil, nil, nil, gr, + nil, nil, nil, g.grid, ) } func restoreGenrePage(saved *savedGenrePage) *GenrePage { g := &GenrePage{ - genre: saved.genre, - contr: saved.contr, - pm: saved.pm, - mp: saved.mp, - im: saved.im, - searchText: saved.searchText, - filter: saved.filter, + genre: saved.genre, + contr: saved.contr, + pm: saved.pm, + mp: saved.mp, + im: saved.im, + gridState: saved.gridState, + searchGridState: saved.searchGridState, + searchText: saved.searchText, + filter: saved.filter, } g.ExtendBaseWidget(g) @@ -102,12 +101,13 @@ func restoreGenrePage(saved *savedGenrePage) *GenrePage { SizeName: theme.SizeNameHeadingText, } g.playRandom = widget.NewButtonWithIcon(" Play random", myTheme.ShuffleIcon, g.playRandomSongs) - g.grid = widgets.NewGridViewFromState(saved.gridState) - g.createSearchAndFilter() if g.searchText != "" { - g.searchGrid = widgets.NewGridViewFromState(saved.searchGridState) + g.grid = widgets.NewGridViewFromState(saved.searchGridState) + } else { + g.grid = widgets.NewGridViewFromState(saved.gridState) } - g.createContainer(saved.searchText != "") + g.createSearchAndFilter() + g.createContainer() return g } @@ -131,17 +131,20 @@ func (g *GenrePage) Reload() { func (g *GenrePage) Save() SavedPage { sg := &savedGenrePage{ - genre: g.genre, - filter: g.filter, - searchText: g.searchText, - contr: g.contr, - pm: g.pm, - mp: g.mp, - im: g.im, - gridState: g.grid.SaveToState(), + genre: g.genre, + filter: g.filter, + searchText: g.searchText, + contr: g.contr, + pm: g.pm, + mp: g.mp, + im: g.im, + gridState: g.gridState, + searchGridState: g.searchGridState, } - if g.searchGrid != nil { - sg.searchGridState = g.searchGrid.SaveToState() + if g.searchText != "" { + sg.searchGridState = g.grid.SaveToState() + } else { + sg.gridState = g.grid.SaveToState() } return sg } @@ -153,28 +156,20 @@ func (g *GenrePage) SearchWidget() fyne.Focusable { } func (g *GenrePage) OnSearched(query string) { - g.searchText = query if query == "" { - g.container.Objects[0] = g.grid - if g.searchGrid != nil { - g.searchGrid.Clear() - } - g.Refresh() - return + g.grid.ResetFromState(g.gridState) + } else { + g.doSearch(query) } - g.doSearch(query) + g.searchText = query } func (g *GenrePage) doSearch(query string) { - iter := g.mp.SearchAlbums(query, g.filter) - if g.searchGrid == nil { - g.searchGrid = widgets.NewGridView(widgets.NewGridViewAlbumIterator(iter), g.im, myTheme.AlbumIcon) - g.contr.ConnectAlbumGridActions(g.searchGrid) - } else { - g.searchGrid.Reset(widgets.NewGridViewAlbumIterator(iter)) + if g.searchText == "" { + g.gridState = g.grid.SaveToState() } - g.container.Objects[0] = g.searchGrid - g.Refresh() + iter := g.mp.SearchAlbums(query, g.filter) + g.grid.Reset(widgets.NewGridViewAlbumIterator(iter)) } func (g *GenrePage) playRandomSongs() {