diff --git a/ui/browsing/albumspage.go b/ui/browsing/albumspage.go index d5c9a92..3368d00 100644 --- a/ui/browsing/albumspage.go +++ b/ui/browsing/albumspage.go @@ -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 { diff --git a/ui/browsing/genrepage.go b/ui/browsing/genrepage.go index 38e019d..c860e1c 100644 --- a/ui/browsing/genrepage.go +++ b/ui/browsing/genrepage.go @@ -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 { diff --git a/ui/widgets/searchentry.go b/ui/widgets/searchentry.go index 4e0c54b..81ac28b 100644 --- a/ui/widgets/searchentry.go +++ b/ui/widgets/searchentry.go @@ -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) } diff --git a/ui/widgets/searcher.go b/ui/widgets/searcher.go index 323b25b..49aa1b0 100644 --- a/ui/widgets/searcher.go +++ b/ui/widgets/searcher.go @@ -18,7 +18,7 @@ func NewSearcher() *Searcher { s := &Searcher{ Entry: NewSearchEntry(), } - s.Entry.OnTextChanged = s.onSearchTextChanged + s.Entry.OnChanged = s.onSearchTextChanged return s }