albums and genre pages: save/reload search context

This commit is contained in:
Drew Weymouth
2023-02-05 16:38:49 -08:00
parent 56715c5598
commit a6a4444524
4 changed files with 73 additions and 46 deletions
+20 -5
View File
@@ -74,20 +74,24 @@ func NewAlbumsPage(title string, sortOrder string, lm *backend.LibraryManager, i
a.grid.OnShowAlbumPage = a.onShowAlbumPage a.grid.OnShowAlbumPage = a.onShowAlbumPage
a.searcher = widgets.NewSearcher() a.searcher = widgets.NewSearcher()
a.searcher.OnSearched = a.OnSearched a.searcher.OnSearched = a.OnSearched
a.createContainer() a.createContainer(false)
return a return a
} }
func (a *AlbumsPage) createContainer() { func (a *AlbumsPage) createContainer(searchgrid bool) {
searchVbox := container.NewVBox(layout.NewSpacer(), a.searcher.Entry, layout.NewSpacer()) searchVbox := container.NewVBox(layout.NewSpacer(), a.searcher.Entry, layout.NewSpacer())
sortVbox := container.NewVBox(layout.NewSpacer(), a.sortOrder, layout.NewSpacer()) sortVbox := container.NewVBox(layout.NewSpacer(), a.sortOrder, layout.NewSpacer())
g := a.grid
if searchgrid {
g = a.searchGrid
}
a.container = container.NewBorder( a.container = container.NewBorder(
container.NewHBox(widgets.NewHSpace(9), a.titleDisp, sortVbox, layout.NewSpacer(), searchVbox, widgets.NewHSpace(15)), container.NewHBox(widgets.NewHSpace(9), a.titleDisp, sortVbox, layout.NewSpacer(), searchVbox, widgets.NewHSpace(15)),
nil, nil,
nil, nil,
nil, nil,
a.grid, g,
) )
} }
@@ -110,7 +114,11 @@ func restoreAlbumsPage(saved *savedAlbumsPage) *AlbumsPage {
a.grid = widgets.NewAlbumGridFromState(saved.gridState) a.grid = widgets.NewAlbumGridFromState(saved.gridState)
a.searcher = widgets.NewSearcher() a.searcher = widgets.NewSearcher()
a.searcher.OnSearched = a.OnSearched a.searcher.OnSearched = a.OnSearched
a.createContainer() a.searcher.Entry.Text = saved.searchText
if saved.searchText != "" {
a.searchGrid = widgets.NewAlbumGridFromState(saved.searchGridState)
}
a.createContainer(saved.searchText != "")
return a return a
} }
@@ -152,14 +160,19 @@ func (a *AlbumsPage) Reload() {
} }
func (a *AlbumsPage) Save() SavedPage { func (a *AlbumsPage) Save() SavedPage {
return &savedAlbumsPage{ sa := &savedAlbumsPage{
title: a.title, title: a.title,
lm: a.lm, lm: a.lm,
im: a.im, im: a.im,
nav: a.nav, nav: a.nav,
searchText: a.searchText,
sortOrder: a.sortOrder.Selected, sortOrder: a.sortOrder.Selected,
gridState: a.grid.SaveToState(), gridState: a.grid.SaveToState(),
} }
if a.searchGrid != nil {
sa.searchGridState = a.searchGrid.SaveToState()
}
return sa
} }
func (a *AlbumsPage) doSearch(query string) { func (a *AlbumsPage) doSearch(query string) {
@@ -204,11 +217,13 @@ func (a *AlbumsPage) CreateRenderer() fyne.WidgetRenderer {
type savedAlbumsPage struct { type savedAlbumsPage struct {
title string title string
searchText string
lm *backend.LibraryManager lm *backend.LibraryManager
im *backend.ImageManager im *backend.ImageManager
nav func(Route) nav func(Route)
sortOrder string sortOrder string
gridState widgets.AlbumGridState gridState widgets.AlbumGridState
searchGridState widgets.AlbumGridState
} }
func (s *savedAlbumsPage) Restore() Page { func (s *savedAlbumsPage) Restore() Page {
+20 -5
View File
@@ -51,19 +51,23 @@ func NewGenrePage(genre string, lm *backend.LibraryManager, im *backend.ImageMan
g.grid.OnShowAlbumPage = g.onShowAlbumPage g.grid.OnShowAlbumPage = g.onShowAlbumPage
g.searcher = widgets.NewSearcher() g.searcher = widgets.NewSearcher()
g.searcher.OnSearched = g.OnSearched g.searcher.OnSearched = g.OnSearched
g.createContainer() g.createContainer(false)
return g return g
} }
func (g *GenrePage) createContainer() { func (g *GenrePage) createContainer(searchGrid bool) {
searchVbox := container.NewVBox(layout.NewSpacer(), g.searcher.Entry, layout.NewSpacer()) searchVbox := container.NewVBox(layout.NewSpacer(), g.searcher.Entry, layout.NewSpacer())
gr := g.grid
if searchGrid {
gr = g.searchGrid
}
g.container = container.NewBorder( g.container = container.NewBorder(
container.NewHBox(widgets.NewHSpace(9), g.titleDisp, layout.NewSpacer(), searchVbox, widgets.NewHSpace(15)), container.NewHBox(widgets.NewHSpace(9), g.titleDisp, layout.NewSpacer(), searchVbox, widgets.NewHSpace(15)),
nil, nil,
nil, nil,
nil, nil,
g.grid, gr,
) )
} }
@@ -83,7 +87,11 @@ func restoreGenrePage(saved *savedGenrePage) *GenrePage {
g.grid = widgets.NewAlbumGridFromState(saved.gridState) g.grid = widgets.NewAlbumGridFromState(saved.gridState)
g.searcher = widgets.NewSearcher() g.searcher = widgets.NewSearcher()
g.searcher.OnSearched = g.OnSearched g.searcher.OnSearched = g.OnSearched
g.createContainer() g.searcher.Entry.Text = saved.searchText
if saved.searchText != "" {
g.searchGrid = widgets.NewAlbumGridFromState(saved.searchGridState)
}
g.createContainer(saved.searchText != "")
return g return g
} }
@@ -110,13 +118,18 @@ func (g *GenrePage) Reload() {
} }
func (g *GenrePage) Save() SavedPage { func (g *GenrePage) Save() SavedPage {
return &savedGenrePage{ sg := &savedGenrePage{
genre: g.genre, genre: g.genre,
searchText: g.searchText,
lm: g.lm, lm: g.lm,
im: g.im, im: g.im,
nav: g.nav, nav: g.nav,
gridState: g.grid.SaveToState(), gridState: g.grid.SaveToState(),
} }
if g.searchGrid != nil {
sg.searchGridState = g.searchGrid.SaveToState()
}
return sg
} }
var _ Searchable = (*AlbumsPage)(nil) var _ Searchable = (*AlbumsPage)(nil)
@@ -170,10 +183,12 @@ func (g *GenrePage) doSearch(query string) {
type savedGenrePage struct { type savedGenrePage struct {
genre string genre string
searchText string
lm *backend.LibraryManager lm *backend.LibraryManager
im *backend.ImageManager im *backend.ImageManager
nav func(Route) nav func(Route)
gridState widgets.AlbumGridState gridState widgets.AlbumGridState
searchGridState widgets.AlbumGridState
} }
func (s *savedGenrePage) Restore() Page { func (s *savedGenrePage) Restore() Page {
+9 -12
View File
@@ -9,7 +9,6 @@ import (
type SearchEntry struct { type SearchEntry struct {
widget.Entry widget.Entry
height float32 height float32
OnTextChanged func(string)
} }
func NewSearchEntry() *SearchEntry { func NewSearchEntry() *SearchEntry {
@@ -23,20 +22,18 @@ func NewSearchEntry() *SearchEntry {
sf.SetText("") sf.SetText("")
} }
sf.ActionItem = c sf.ActionItem = c
sf.OnChanged = func(s string) {
if s == "" {
c.Resource = theme.SearchIcon()
} else {
c.Resource = theme.ContentClearIcon()
}
c.Refresh()
if sf.OnTextChanged != nil {
sf.OnTextChanged(s)
}
}
return sf return sf
} }
func (s *SearchEntry) Refresh() {
if s.Text == "" {
s.ActionItem.(*clearTextButton).Resource = theme.SearchIcon()
} else {
s.ActionItem.(*clearTextButton).Resource = theme.ContentClearIcon()
}
s.Entry.Refresh()
}
func (s *SearchEntry) MinSize() fyne.Size { func (s *SearchEntry) MinSize() fyne.Size {
return fyne.NewSize(200, s.height) return fyne.NewSize(200, s.height)
} }
+1 -1
View File
@@ -18,7 +18,7 @@ func NewSearcher() *Searcher {
s := &Searcher{ s := &Searcher{
Entry: NewSearchEntry(), Entry: NewSearchEntry(),
} }
s.Entry.OnTextChanged = s.onSearchTextChanged s.Entry.OnChanged = s.onSearchTextChanged
return s return s
} }