diff --git a/ui/browsing/albumpage.go b/ui/browsing/albumpage.go index 0cd8f46..9df1f43 100644 --- a/ui/browsing/albumpage.go +++ b/ui/browsing/albumpage.go @@ -64,6 +64,9 @@ func NewAlbumPage( a.header = NewAlbumPageHeader(a) a.tracklist = widgets.NewTracklist(nil) a.tracklist.SetVisibleColumns(a.cfg.TracklistColumns) + a.tracklist.OnVisibleColumnsChanged = func(cols []string) { + a.cfg.TracklistColumns = cols + } a.contr.ConnectTracklistActions(a.tracklist) a.container = container.NewBorder( @@ -79,10 +82,6 @@ func (a *AlbumPage) CreateRenderer() fyne.WidgetRenderer { } func (a *AlbumPage) Save() SavedPage { - // TODO: find a better place to update the tracklist columns preference - // If user changes columns but doesn't navigate to another page, - // we won't be persisting the change - a.cfg.TracklistColumns = a.tracklist.VisibleColumns() s := a.albumPageState return &s } diff --git a/ui/browsing/artistpage.go b/ui/browsing/artistpage.go index 51e1929..1bffd04 100644 --- a/ui/browsing/artistpage.go +++ b/ui/browsing/artistpage.go @@ -108,13 +108,6 @@ func (a *ArtistPage) Reload() { } func (a *ArtistPage) Save() SavedPage { - // TODO: find a better place to update the tracklist columns preference - // If user changes columns but doesn't navigate to another page, - // we won't be persisting the change - if a.tracklistCtr != nil { - tl := a.tracklistCtr.Objects[0].(*widgets.Tracklist) - a.cfg.TracklistColumns = tl.VisibleColumns() - } s := a.artistPageState return &s } @@ -192,6 +185,9 @@ func (a *ArtistPage) showTopTracks() { tl := widgets.NewTracklist(ts) tl.AutoNumber = true tl.SetVisibleColumns(a.cfg.TracklistColumns) + tl.OnVisibleColumnsChanged = func(cols []string) { + a.cfg.TracklistColumns = cols + } tl.SetNowPlaying(a.nowPlayingID) a.contr.ConnectTracklistActions(tl) a.tracklistCtr = container.New( diff --git a/ui/browsing/favoritespage.go b/ui/browsing/favoritespage.go index f574863..49c4533 100644 --- a/ui/browsing/favoritespage.go +++ b/ui/browsing/favoritespage.go @@ -167,10 +167,6 @@ func (a *FavoritesPage) Reload() { } func (a *FavoritesPage) Save() SavedPage { - if a.tracklistCtr != nil { - tl := a.tracklistCtr.Objects[0].(*widgets.Tracklist) - a.cfg.TracklistColumns = tl.VisibleColumns() - } sf := &savedFavoritesPage{ cfg: a.cfg, contr: a.contr, @@ -314,6 +310,9 @@ func (a *FavoritesPage) onShowFavoriteSongs() { tracklist := widgets.NewTracklist(s.Song) tracklist.AutoNumber = true tracklist.SetVisibleColumns(a.cfg.TracklistColumns) + tracklist.OnVisibleColumnsChanged = func(cols []string) { + a.cfg.TracklistColumns = cols + } tracklist.SetNowPlaying(a.nowPlayingID) a.contr.ConnectTracklistActions(tracklist) a.tracklistCtr = container.New( diff --git a/ui/browsing/nowplayingpage.go b/ui/browsing/nowplayingpage.go index f100ae2..9c200c3 100644 --- a/ui/browsing/nowplayingpage.go +++ b/ui/browsing/nowplayingpage.go @@ -41,6 +41,9 @@ func NewNowPlayingPage( a.ExtendBaseWidget(a) a.tracklist = widgets.NewTracklist(nil) a.tracklist.SetVisibleColumns(conf.TracklistColumns) + a.tracklist.OnVisibleColumnsChanged = func(cols []string) { + a.conf.TracklistColumns = cols + } a.tracklist.AutoNumber = true a.tracklist.DisablePlaybackMenu = true contr.ConnectTracklistActions(a.tracklist) @@ -62,7 +65,6 @@ func (a *NowPlayingPage) CreateRenderer() fyne.WidgetRenderer { } func (a *NowPlayingPage) Save() SavedPage { - a.conf.TracklistColumns = a.tracklist.VisibleColumns() nps := a.nowPlayingPageState return &nps } diff --git a/ui/browsing/playlistpage.go b/ui/browsing/playlistpage.go index ba9ff3c..bcc4af5 100644 --- a/ui/browsing/playlistpage.go +++ b/ui/browsing/playlistpage.go @@ -51,6 +51,9 @@ func NewPlaylistPage( a.header = NewPlaylistPageHeader(a) a.tracklist = widgets.NewTracklist(nil) a.tracklist.SetVisibleColumns(conf.TracklistColumns) + a.tracklist.OnVisibleColumnsChanged = func(cols []string) { + conf.TracklistColumns = cols + } a.tracklist.AutoNumber = true a.tracklist.AuxiliaryMenuItems = []*fyne.MenuItem{ fyne.NewMenuItem("Move to top", a.onMoveSelectedToTop), @@ -74,7 +77,6 @@ func (a *PlaylistPage) CreateRenderer() fyne.WidgetRenderer { } func (a *PlaylistPage) Save() SavedPage { - a.conf.TracklistColumns = a.tracklist.VisibleColumns() p := a.playlistPageState return &p } diff --git a/ui/browsing/trackspage.go b/ui/browsing/trackspage.go index 86ff873..99f8b75 100644 --- a/ui/browsing/trackspage.go +++ b/ui/browsing/trackspage.go @@ -42,10 +42,18 @@ type tracksPageState struct { func NewTracksPage(contr *controller.Controller, conf *backend.TracksPageConfig, lm *backend.LibraryManager) *TracksPage { t := &TracksPage{tracksPageState: tracksPageState{contr: contr, conf: conf, lm: lm}} t.ExtendBaseWidget(t) + t.tracklist = widgets.NewTracklist(nil) t.tracklist.AutoNumber = true t.tracklist.SetVisibleColumns(conf.TracklistColumns) + t.tracklist.OnVisibleColumnsChanged = func(cols []string) { + t.conf.TracklistColumns = cols + if t.searchTracklist != nil { + t.searchTracklist.SetVisibleColumns(cols) + } + } contr.ConnectTracklistActions(t.tracklist) + t.title = widget.NewRichTextWithText("All Tracks") t.title.Segments[0].(*widget.TextSegment).Style.SizeName = widget.RichTextStyleHeading.SizeName t.playRandom = widget.NewButtonWithIcon("Play random", res.ResShuffleInvertSvg, t.playRandomSongs) @@ -113,6 +121,10 @@ func (t *TracksPage) doSearch(query string) { t.searchTracklist.AutoNumber = true t.searchTracklist.SetVisibleColumns(t.conf.TracklistColumns) t.searchTracklist.SetNowPlaying(t.nowPlayingID) + t.searchTracklist.OnVisibleColumnsChanged = func(cols []string) { + t.conf.TracklistColumns = cols + t.tracklist.SetVisibleColumns(cols) + } t.contr.ConnectTracklistActions(t.searchTracklist) } else { t.searchTracklist.Clear() diff --git a/ui/widgets/tracklist.go b/ui/widgets/tracklist.go index 1bc2e34..faf74fb 100644 --- a/ui/widgets/tracklist.go +++ b/ui/widgets/tracklist.go @@ -67,6 +67,7 @@ type Tracklist struct { OnShowAlbumPage func(albumID string) OnColumnVisibilityMenuShown func(*widget.PopUp) + OnVisibleColumnsChanged func([]string) OnTrackShown func(tracknum int) visibleColumns []bool @@ -182,6 +183,9 @@ func (t *Tracklist) setColumnVisible(colNum int, vis bool) { } t.visibleColumns[colNum] = vis t.list.Refresh() + if t.OnVisibleColumnsChanged != nil { + t.OnVisibleColumnsChanged(t.VisibleColumns()) + } } func (t *Tracklist) SetNowPlaying(trackID string) {