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
+32 -17
View File
@@ -74,20 +74,24 @@ func NewAlbumsPage(title string, sortOrder string, lm *backend.LibraryManager, i
a.grid.OnShowAlbumPage = a.onShowAlbumPage
a.searcher = widgets.NewSearcher()
a.searcher.OnSearched = a.OnSearched
a.createContainer()
a.createContainer(false)
return a
}
func (a *AlbumsPage) createContainer() {
func (a *AlbumsPage) createContainer(searchgrid bool) {
searchVbox := container.NewVBox(layout.NewSpacer(), a.searcher.Entry, layout.NewSpacer())
sortVbox := container.NewVBox(layout.NewSpacer(), a.sortOrder, layout.NewSpacer())
g := a.grid
if searchgrid {
g = a.searchGrid
}
a.container = container.NewBorder(
container.NewHBox(widgets.NewHSpace(9), a.titleDisp, sortVbox, layout.NewSpacer(), searchVbox, widgets.NewHSpace(15)),
nil,
nil,
nil,
a.grid,
g,
)
}
@@ -110,7 +114,11 @@ func restoreAlbumsPage(saved *savedAlbumsPage) *AlbumsPage {
a.grid = widgets.NewAlbumGridFromState(saved.gridState)
a.searcher = widgets.NewSearcher()
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
}
@@ -152,14 +160,19 @@ func (a *AlbumsPage) Reload() {
}
func (a *AlbumsPage) Save() SavedPage {
return &savedAlbumsPage{
title: a.title,
lm: a.lm,
im: a.im,
nav: a.nav,
sortOrder: a.sortOrder.Selected,
gridState: a.grid.SaveToState(),
sa := &savedAlbumsPage{
title: a.title,
lm: a.lm,
im: a.im,
nav: a.nav,
searchText: a.searchText,
sortOrder: a.sortOrder.Selected,
gridState: a.grid.SaveToState(),
}
if a.searchGrid != nil {
sa.searchGridState = a.searchGrid.SaveToState()
}
return sa
}
func (a *AlbumsPage) doSearch(query string) {
@@ -203,12 +216,14 @@ func (a *AlbumsPage) CreateRenderer() fyne.WidgetRenderer {
}
type savedAlbumsPage struct {
title string
lm *backend.LibraryManager
im *backend.ImageManager
nav func(Route)
sortOrder string
gridState widgets.AlbumGridState
title string
searchText string
lm *backend.LibraryManager
im *backend.ImageManager
nav func(Route)
sortOrder string
gridState widgets.AlbumGridState
searchGridState widgets.AlbumGridState
}
func (s *savedAlbumsPage) Restore() Page {
+30 -15
View File
@@ -51,19 +51,23 @@ func NewGenrePage(genre string, lm *backend.LibraryManager, im *backend.ImageMan
g.grid.OnShowAlbumPage = g.onShowAlbumPage
g.searcher = widgets.NewSearcher()
g.searcher.OnSearched = g.OnSearched
g.createContainer()
g.createContainer(false)
return g
}
func (g *GenrePage) createContainer() {
func (g *GenrePage) createContainer(searchGrid bool) {
searchVbox := container.NewVBox(layout.NewSpacer(), g.searcher.Entry, layout.NewSpacer())
gr := g.grid
if searchGrid {
gr = g.searchGrid
}
g.container = container.NewBorder(
container.NewHBox(widgets.NewHSpace(9), g.titleDisp, layout.NewSpacer(), searchVbox, widgets.NewHSpace(15)),
nil,
nil,
nil,
g.grid,
gr,
)
}
@@ -83,7 +87,11 @@ func restoreGenrePage(saved *savedGenrePage) *GenrePage {
g.grid = widgets.NewAlbumGridFromState(saved.gridState)
g.searcher = widgets.NewSearcher()
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
}
@@ -110,13 +118,18 @@ func (g *GenrePage) Reload() {
}
func (g *GenrePage) Save() SavedPage {
return &savedGenrePage{
genre: g.genre,
lm: g.lm,
im: g.im,
nav: g.nav,
gridState: g.grid.SaveToState(),
sg := &savedGenrePage{
genre: g.genre,
searchText: g.searchText,
lm: g.lm,
im: g.im,
nav: g.nav,
gridState: g.grid.SaveToState(),
}
if g.searchGrid != nil {
sg.searchGridState = g.searchGrid.SaveToState()
}
return sg
}
var _ Searchable = (*AlbumsPage)(nil)
@@ -169,11 +182,13 @@ func (g *GenrePage) doSearch(query string) {
}
type savedGenrePage struct {
genre string
lm *backend.LibraryManager
im *backend.ImageManager
nav func(Route)
gridState widgets.AlbumGridState
genre string
searchText string
lm *backend.LibraryManager
im *backend.ImageManager
nav func(Route)
gridState widgets.AlbumGridState
searchGridState widgets.AlbumGridState
}
func (s *savedGenrePage) Restore() Page {
+10 -13
View File
@@ -8,8 +8,7 @@ import (
type SearchEntry struct {
widget.Entry
height float32
OnTextChanged func(string)
height float32
}
func NewSearchEntry() *SearchEntry {
@@ -23,20 +22,18 @@ func NewSearchEntry() *SearchEntry {
sf.SetText("")
}
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
}
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 {
return fyne.NewSize(200, s.height)
}
+1 -1
View File
@@ -18,7 +18,7 @@ func NewSearcher() *Searcher {
s := &Searcher{
Entry: NewSearchEntry(),
}
s.Entry.OnTextChanged = s.onSearchTextChanged
s.Entry.OnChanged = s.onSearchTextChanged
return s
}