From e6f921630c7caff4613f72f634354730916f1654 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Sun, 6 Jul 2025 16:26:23 -0700 Subject: [PATCH] remember GroupedReleases section visibility in nav history --- ui/browsing/artistpage.go | 9 +++++++ ui/widgets/groupedreleases.go | 46 +++++++++++++++++++++++++++++++---- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/ui/browsing/artistpage.go b/ui/browsing/artistpage.go index d3fe1dd..f389658 100644 --- a/ui/browsing/artistpage.go +++ b/ui/browsing/artistpage.go @@ -43,6 +43,9 @@ type artistPageState struct { gridScrollPos float32 // for album grid (or grouped releases) listScrollPos float32 // for Top Tracks list + + sectionVis widgets.GroupedReleasesSectionVisibility + sectionVisNeedApply bool } type ArtistPage struct { @@ -164,6 +167,8 @@ func (a *ArtistPage) Save() SavedPage { } if a.groupedReleases != nil { s.gridScrollPos = a.groupedReleases.GetScrollOffset() + s.sectionVis = a.groupedReleases.GetSectionVisibility() + s.sectionVisNeedApply = true a.groupedReleases.Model = widgets.GroupedReleasesModel{} a.pool.Release(util.WidgetTypeGroupedReleases, a.groupedReleases) } @@ -336,6 +341,10 @@ func (a *ArtistPage) showAlbumGrid(reSort bool) { a.groupedReleases = widgets.NewGroupedReleases(model, a.im) } a.contr.ConnectGroupedReleasesActions(a.groupedReleases) + if a.sectionVisNeedApply { + a.groupedReleases.SetSectionVisibility(a.sectionVis, true) + a.sectionVisNeedApply = false + } if a.gridScrollPos != 0 { a.groupedReleases.ScrollToOffset(a.gridScrollPos) a.gridScrollPos = 0 diff --git a/ui/widgets/groupedreleases.go b/ui/widgets/groupedreleases.go index 5d786e2..9e22c9d 100644 --- a/ui/widgets/groupedreleases.go +++ b/ui/widgets/groupedreleases.go @@ -22,6 +22,13 @@ type GroupedReleasesModel struct { Singles []GridViewItemModel } +type GroupedReleasesSectionVisibility struct { + Albums bool + Compilations bool + EPs bool + Singles bool +} + type GroupedReleases struct { widget.BaseWidget @@ -88,6 +95,33 @@ func NewGroupedReleases(model GroupedReleasesModel, fetch util.ImageFetcher) *Gr return g } +func (g *GroupedReleases) GetSectionVisibility() GroupedReleasesSectionVisibility { + v := GroupedReleasesSectionVisibility{true, true, true, true} + if g.sections[0].titleRow.Collapsed { + v.Albums = false + } + if g.sections[1].titleRow.Collapsed { + v.Compilations = false + } + if g.sections[2].titleRow.Collapsed { + v.EPs = false + } + if g.sections[3].titleRow.Collapsed { + v.Singles = false + } + return v +} + +func (g *GroupedReleases) SetSectionVisibility(v GroupedReleasesSectionVisibility, refresh bool) { + for i, b := range []bool{v.Albums, v.Compilations, v.EPs, v.Singles} { + g.sections[i].titleRow.Collapsed = !b + g.sections[i].container.Hidden = !b + } + if refresh { + g.Refresh() + } +} + func (g *GroupedReleases) CreateRenderer() fyne.WidgetRenderer { return widget.NewSimpleRenderer(g.container) } @@ -146,7 +180,9 @@ func (g *GroupedReleases) Refresh() { g.sections[i].container.Hide() } else { g.sections[i].titleRow.Show() - g.sections[i].container.Show() + if !g.sections[i].titleRow.Collapsed { + g.sections[i].container.Show() + } } } g.BaseWidget.Refresh() @@ -245,7 +281,7 @@ type groupedReleasesHeader struct { onToggle func(bool) icon *widget.Icon - collapsed bool + Collapsed bool } func newGroupedReleasesHeader(title string, onToggleVisibility func(bool)) *groupedReleasesHeader { @@ -267,7 +303,7 @@ func (g *groupedReleasesHeader) CreateRenderer() fyne.WidgetRenderer { } func (g *groupedReleasesHeader) Refresh() { - if g.collapsed { + if g.Collapsed { g.icon.Resource = theme.MenuExpandIcon() } else { g.icon.Resource = theme.MenuDropDownIcon() @@ -278,7 +314,7 @@ func (g *groupedReleasesHeader) Refresh() { var _ fyne.Tappable = (*groupedReleasesHeader)(nil) func (g *groupedReleasesHeader) Tapped(*fyne.PointEvent) { - g.collapsed = !g.collapsed - g.onToggle(g.collapsed) + g.Collapsed = !g.Collapsed + g.onToggle(g.Collapsed) g.Refresh() }