save only page state in history and reconstruct page UI

This commit is contained in:
Drew Weymouth
2023-01-09 20:24:15 -08:00
parent 1d27b70a6f
commit 78862f6bf0
8 changed files with 215 additions and 29 deletions
+48
View File
@@ -51,6 +51,12 @@ 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()
return g
}
func (g *GenrePage) createContainer() {
searchVbox := container.NewVBox(layout.NewSpacer(), g.searcher.Entry, layout.NewSpacer())
g.container = container.NewBorder(
container.NewHBox(widgets.NewHSpace(9), g.titleDisp, layout.NewSpacer(), searchVbox, widgets.NewHSpace(15)),
@@ -59,6 +65,26 @@ func NewGenrePage(genre string, lm *backend.LibraryManager, im *backend.ImageMan
nil,
g.grid,
)
}
func restoreGenrePage(saved *savedGenrePage) *GenrePage {
g := &GenrePage{
genre: saved.genre,
lm: saved.lm,
im: saved.im,
nav: saved.nav,
}
g.ExtendBaseWidget(g)
g.titleDisp = widget.NewRichTextWithText(g.genre)
g.titleDisp.Segments[0].(*widget.TextSegment).Style = widget.RichTextStyle{
SizeName: theme.SizeNameHeadingText,
}
g.grid = widgets.NewAlbumGridFromState(saved.gridState)
g.searcher = widgets.NewSearcher()
g.searcher.OnSearched = g.OnSearched
g.createContainer()
return g
}
@@ -83,6 +109,16 @@ 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(),
}
}
func (a *GenrePage) onPlayAlbum(albumID string) {
if a.OnPlayAlbum != nil {
a.OnPlayAlbum(albumID, 0)
@@ -125,3 +161,15 @@ func (g *GenrePage) doSearch(query string) {
g.container.Objects[0] = g.searchGrid
g.Refresh()
}
type savedGenrePage struct {
genre string
lm *backend.LibraryManager
im *backend.ImageManager
nav func(Route)
gridState widgets.AlbumGridState
}
func (s *savedGenrePage) Restore() Page {
return restoreGenrePage(s)
}