From 4abb3843a25f6169c27652b66d8bd9581409e237 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Wed, 8 Mar 2023 20:51:56 -0800 Subject: [PATCH] save active artist page view in history --- ui/browsing/artistpage.go | 37 +++++++++++++++++++++++++------------ ui/widgets/toggletext.go | 29 +++++++++++++++++------------ 2 files changed, 42 insertions(+), 24 deletions(-) diff --git a/ui/browsing/artistpage.go b/ui/browsing/artistpage.go index 7bca923..0d26213 100644 --- a/ui/browsing/artistpage.go +++ b/ui/browsing/artistpage.go @@ -24,11 +24,13 @@ import ( var _ fyne.Widget = (*ArtistPage)(nil) type artistPageState struct { - artistID string - pm *backend.PlaybackManager - sm *backend.ServerManager - im *backend.ImageManager - contr *controller.Controller + artistID string + activeView int + + pm *backend.PlaybackManager + sm *backend.ServerManager + im *backend.ImageManager + contr *controller.Controller } type ArtistPage struct { @@ -46,16 +48,22 @@ type ArtistPage struct { } func NewArtistPage(artistID string, pm *backend.PlaybackManager, sm *backend.ServerManager, im *backend.ImageManager, contr *controller.Controller) *ArtistPage { + return newArtistPage(artistID, pm, sm, im, contr, 0) +} + +func newArtistPage(artistID string, pm *backend.PlaybackManager, sm *backend.ServerManager, im *backend.ImageManager, contr *controller.Controller, activeView int) *ArtistPage { a := &ArtistPage{artistPageState: artistPageState{ - artistID: artistID, - pm: pm, - sm: sm, - im: im, - contr: contr, + artistID: artistID, + pm: pm, + sm: sm, + im: im, + contr: contr, + activeView: activeView, }} a.ExtendBaseWidget(a) a.header = NewArtistPageHeader(a) viewToggle := widgets.NewToggleText(0, []string{"Discography", "Top Tracks"}) + viewToggle.SetActivatedLabel(a.activeView) viewToggle.OnChanged = a.onViewChange //line := canvas.NewLine(theme.TextColor()) viewToggleRow := container.NewBorder(nil, nil, @@ -120,7 +128,11 @@ func (a *ArtistPage) load() { } a.artistInfo = artist a.header.Update(artist) - a.showAlbumGrid() + if a.activeView == 0 { + a.showAlbumGrid() + } else { + a.showTopTracks() + } info, err := a.sm.Server.GetArtistInfo2(a.artistID, nil) if err != nil { log.Printf("Failed to get artist info: %s", err.Error()) @@ -166,6 +178,7 @@ func (a *ArtistPage) onViewChange(num int) { // so call it asynchronously go a.showTopTracks() } + a.activeView = num } func (a *ArtistPage) CreateRenderer() fyne.WidgetRenderer { @@ -174,7 +187,7 @@ func (a *ArtistPage) CreateRenderer() fyne.WidgetRenderer { } func (s *artistPageState) Restore() Page { - return NewArtistPage(s.artistID, s.pm, s.sm, s.im, s.contr) + return newArtistPage(s.artistID, s.pm, s.sm, s.im, s.contr, s.activeView) } type ArtistPageHeader struct { diff --git a/ui/widgets/toggletext.go b/ui/widgets/toggletext.go index 999c6c1..95d46e2 100644 --- a/ui/widgets/toggletext.go +++ b/ui/widgets/toggletext.go @@ -32,6 +32,20 @@ func NewToggleText(activeLblIdx int, labels []string) *ToggleText { return t } +func (t *ToggleText) SetActivatedLabel(idx int) { + changed := t.activeLabelIdx != idx + // update old label to hyperlink + hl := widget.NewHyperlink(t.labels[t.activeLabelIdx], nil) + hl.OnTapped = t.buildOnTapped(t.activeLabelIdx) + t.container.Objects[t.activeLabelIdx] = hl + // update activated label to bold text + t.container.Objects[idx] = t.newBoldRichText(t.labels[idx]) + t.activeLabelIdx = idx + if changed { + t.Refresh() + } +} + func (t *ToggleText) buildOnTapped(i int) func() { return func() { t.onActivated(i) @@ -46,18 +60,9 @@ func (t *ToggleText) newBoldRichText(text string) *widget.RichText { } func (t *ToggleText) onActivated(idx int) { - if idx == t.activeLabelIdx { - return - } - // update old label to hyperlink - hl := widget.NewHyperlink(t.labels[t.activeLabelIdx], nil) - hl.OnTapped = t.buildOnTapped(t.activeLabelIdx) - t.container.Objects[t.activeLabelIdx] = hl - // update activated label to bold text - t.container.Objects[idx] = t.newBoldRichText(t.labels[idx]) - t.activeLabelIdx = idx - t.Refresh() - if t.OnChanged != nil { + changed := t.activeLabelIdx != idx + t.SetActivatedLabel(idx) + if changed && t.OnChanged != nil { t.OnChanged(t.activeLabelIdx) } }