persist tracklist column visibility change immediately

This commit is contained in:
Drew Weymouth
2023-04-21 19:13:48 -07:00
parent 2f14a09cd8
commit 1171916449
7 changed files with 31 additions and 17 deletions
+3 -4
View File
@@ -64,6 +64,9 @@ func NewAlbumPage(
a.header = NewAlbumPageHeader(a) a.header = NewAlbumPageHeader(a)
a.tracklist = widgets.NewTracklist(nil) a.tracklist = widgets.NewTracklist(nil)
a.tracklist.SetVisibleColumns(a.cfg.TracklistColumns) a.tracklist.SetVisibleColumns(a.cfg.TracklistColumns)
a.tracklist.OnVisibleColumnsChanged = func(cols []string) {
a.cfg.TracklistColumns = cols
}
a.contr.ConnectTracklistActions(a.tracklist) a.contr.ConnectTracklistActions(a.tracklist)
a.container = container.NewBorder( a.container = container.NewBorder(
@@ -79,10 +82,6 @@ func (a *AlbumPage) CreateRenderer() fyne.WidgetRenderer {
} }
func (a *AlbumPage) Save() SavedPage { 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 s := a.albumPageState
return &s return &s
} }
+3 -7
View File
@@ -108,13 +108,6 @@ func (a *ArtistPage) Reload() {
} }
func (a *ArtistPage) Save() SavedPage { 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 s := a.artistPageState
return &s return &s
} }
@@ -192,6 +185,9 @@ func (a *ArtistPage) showTopTracks() {
tl := widgets.NewTracklist(ts) tl := widgets.NewTracklist(ts)
tl.AutoNumber = true tl.AutoNumber = true
tl.SetVisibleColumns(a.cfg.TracklistColumns) tl.SetVisibleColumns(a.cfg.TracklistColumns)
tl.OnVisibleColumnsChanged = func(cols []string) {
a.cfg.TracklistColumns = cols
}
tl.SetNowPlaying(a.nowPlayingID) tl.SetNowPlaying(a.nowPlayingID)
a.contr.ConnectTracklistActions(tl) a.contr.ConnectTracklistActions(tl)
a.tracklistCtr = container.New( a.tracklistCtr = container.New(
+3 -4
View File
@@ -167,10 +167,6 @@ func (a *FavoritesPage) Reload() {
} }
func (a *FavoritesPage) Save() SavedPage { func (a *FavoritesPage) Save() SavedPage {
if a.tracklistCtr != nil {
tl := a.tracklistCtr.Objects[0].(*widgets.Tracklist)
a.cfg.TracklistColumns = tl.VisibleColumns()
}
sf := &savedFavoritesPage{ sf := &savedFavoritesPage{
cfg: a.cfg, cfg: a.cfg,
contr: a.contr, contr: a.contr,
@@ -314,6 +310,9 @@ func (a *FavoritesPage) onShowFavoriteSongs() {
tracklist := widgets.NewTracklist(s.Song) tracklist := widgets.NewTracklist(s.Song)
tracklist.AutoNumber = true tracklist.AutoNumber = true
tracklist.SetVisibleColumns(a.cfg.TracklistColumns) tracklist.SetVisibleColumns(a.cfg.TracklistColumns)
tracklist.OnVisibleColumnsChanged = func(cols []string) {
a.cfg.TracklistColumns = cols
}
tracklist.SetNowPlaying(a.nowPlayingID) tracklist.SetNowPlaying(a.nowPlayingID)
a.contr.ConnectTracklistActions(tracklist) a.contr.ConnectTracklistActions(tracklist)
a.tracklistCtr = container.New( a.tracklistCtr = container.New(
+3 -1
View File
@@ -41,6 +41,9 @@ func NewNowPlayingPage(
a.ExtendBaseWidget(a) a.ExtendBaseWidget(a)
a.tracklist = widgets.NewTracklist(nil) a.tracklist = widgets.NewTracklist(nil)
a.tracklist.SetVisibleColumns(conf.TracklistColumns) a.tracklist.SetVisibleColumns(conf.TracklistColumns)
a.tracklist.OnVisibleColumnsChanged = func(cols []string) {
a.conf.TracklistColumns = cols
}
a.tracklist.AutoNumber = true a.tracklist.AutoNumber = true
a.tracklist.DisablePlaybackMenu = true a.tracklist.DisablePlaybackMenu = true
contr.ConnectTracklistActions(a.tracklist) contr.ConnectTracklistActions(a.tracklist)
@@ -62,7 +65,6 @@ func (a *NowPlayingPage) CreateRenderer() fyne.WidgetRenderer {
} }
func (a *NowPlayingPage) Save() SavedPage { func (a *NowPlayingPage) Save() SavedPage {
a.conf.TracklistColumns = a.tracklist.VisibleColumns()
nps := a.nowPlayingPageState nps := a.nowPlayingPageState
return &nps return &nps
} }
+3 -1
View File
@@ -51,6 +51,9 @@ func NewPlaylistPage(
a.header = NewPlaylistPageHeader(a) a.header = NewPlaylistPageHeader(a)
a.tracklist = widgets.NewTracklist(nil) a.tracklist = widgets.NewTracklist(nil)
a.tracklist.SetVisibleColumns(conf.TracklistColumns) a.tracklist.SetVisibleColumns(conf.TracklistColumns)
a.tracklist.OnVisibleColumnsChanged = func(cols []string) {
conf.TracklistColumns = cols
}
a.tracklist.AutoNumber = true a.tracklist.AutoNumber = true
a.tracklist.AuxiliaryMenuItems = []*fyne.MenuItem{ a.tracklist.AuxiliaryMenuItems = []*fyne.MenuItem{
fyne.NewMenuItem("Move to top", a.onMoveSelectedToTop), fyne.NewMenuItem("Move to top", a.onMoveSelectedToTop),
@@ -74,7 +77,6 @@ func (a *PlaylistPage) CreateRenderer() fyne.WidgetRenderer {
} }
func (a *PlaylistPage) Save() SavedPage { func (a *PlaylistPage) Save() SavedPage {
a.conf.TracklistColumns = a.tracklist.VisibleColumns()
p := a.playlistPageState p := a.playlistPageState
return &p return &p
} }
+12
View File
@@ -42,10 +42,18 @@ type tracksPageState struct {
func NewTracksPage(contr *controller.Controller, conf *backend.TracksPageConfig, lm *backend.LibraryManager) *TracksPage { func NewTracksPage(contr *controller.Controller, conf *backend.TracksPageConfig, lm *backend.LibraryManager) *TracksPage {
t := &TracksPage{tracksPageState: tracksPageState{contr: contr, conf: conf, lm: lm}} t := &TracksPage{tracksPageState: tracksPageState{contr: contr, conf: conf, lm: lm}}
t.ExtendBaseWidget(t) t.ExtendBaseWidget(t)
t.tracklist = widgets.NewTracklist(nil) t.tracklist = widgets.NewTracklist(nil)
t.tracklist.AutoNumber = true t.tracklist.AutoNumber = true
t.tracklist.SetVisibleColumns(conf.TracklistColumns) 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) contr.ConnectTracklistActions(t.tracklist)
t.title = widget.NewRichTextWithText("All Tracks") t.title = widget.NewRichTextWithText("All Tracks")
t.title.Segments[0].(*widget.TextSegment).Style.SizeName = widget.RichTextStyleHeading.SizeName t.title.Segments[0].(*widget.TextSegment).Style.SizeName = widget.RichTextStyleHeading.SizeName
t.playRandom = widget.NewButtonWithIcon("Play random", res.ResShuffleInvertSvg, t.playRandomSongs) 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.AutoNumber = true
t.searchTracklist.SetVisibleColumns(t.conf.TracklistColumns) t.searchTracklist.SetVisibleColumns(t.conf.TracklistColumns)
t.searchTracklist.SetNowPlaying(t.nowPlayingID) t.searchTracklist.SetNowPlaying(t.nowPlayingID)
t.searchTracklist.OnVisibleColumnsChanged = func(cols []string) {
t.conf.TracklistColumns = cols
t.tracklist.SetVisibleColumns(cols)
}
t.contr.ConnectTracklistActions(t.searchTracklist) t.contr.ConnectTracklistActions(t.searchTracklist)
} else { } else {
t.searchTracklist.Clear() t.searchTracklist.Clear()
+4
View File
@@ -67,6 +67,7 @@ type Tracklist struct {
OnShowAlbumPage func(albumID string) OnShowAlbumPage func(albumID string)
OnColumnVisibilityMenuShown func(*widget.PopUp) OnColumnVisibilityMenuShown func(*widget.PopUp)
OnVisibleColumnsChanged func([]string)
OnTrackShown func(tracknum int) OnTrackShown func(tracknum int)
visibleColumns []bool visibleColumns []bool
@@ -182,6 +183,9 @@ func (t *Tracklist) setColumnVisible(colNum int, vis bool) {
} }
t.visibleColumns[colNum] = vis t.visibleColumns[colNum] = vis
t.list.Refresh() t.list.Refresh()
if t.OnVisibleColumnsChanged != nil {
t.OnVisibleColumnsChanged(t.VisibleColumns())
}
} }
func (t *Tracklist) SetNowPlaying(trackID string) { func (t *Tracklist) SetNowPlaying(trackID string) {