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
+34 -7
View File
@@ -22,7 +22,12 @@ type AlbumIterator interface {
type AlbumGrid struct {
widget.BaseWidget
grid *widget.GridWrapList
AlbumGridState
grid *widget.GridWrapList
}
type AlbumGridState struct {
albums []*subsonic.AlbumID3
iter AlbumIterator
fetching bool
@@ -33,16 +38,20 @@ type AlbumGrid struct {
OnPlayAlbum func(string)
OnShowAlbumPage func(string)
OnShowArtistPage func(string)
scrollPos float32
}
var _ fyne.Widget = (*AlbumGrid)(nil)
func NewFixedAlbumGrid(albums []*subsonic.AlbumID3, fetch ImageFetcher, showYear bool) *AlbumGrid {
ag := &AlbumGrid{
albums: albums,
done: true,
imageFetcher: fetch,
showYear: showYear,
AlbumGridState: AlbumGridState{
albums: albums,
done: true,
imageFetcher: fetch,
showYear: showYear,
},
}
ag.ExtendBaseWidget(ag)
ag.createGridWrapList()
@@ -51,8 +60,10 @@ func NewFixedAlbumGrid(albums []*subsonic.AlbumID3, fetch ImageFetcher, showYear
func NewAlbumGrid(iter AlbumIterator, fetch ImageFetcher, showYear bool) *AlbumGrid {
ag := &AlbumGrid{
iter: iter,
imageFetcher: fetch,
AlbumGridState: AlbumGridState{
iter: iter,
imageFetcher: fetch,
},
}
ag.ExtendBaseWidget(ag)
@@ -63,6 +74,22 @@ func NewAlbumGrid(iter AlbumIterator, fetch ImageFetcher, showYear bool) *AlbumG
return ag
}
func (ag *AlbumGrid) SaveToState() AlbumGridState {
s := ag.AlbumGridState
s.scrollPos = ag.grid.GetScrollOffset()
return s
}
func NewAlbumGridFromState(state AlbumGridState) *AlbumGrid {
log.Printf("restoring album grid from state: %+v", state)
ag := &AlbumGrid{AlbumGridState: state}
ag.ExtendBaseWidget(ag)
ag.createGridWrapList()
ag.Refresh()
ag.grid.ScrollToOffset(state.scrollPos)
return ag
}
func (ag *AlbumGrid) Clear() {
ag.albums = nil
ag.done = true