From 137e0334e0ce7148561ebfd387ea1196c06552af Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Sun, 21 May 2023 20:54:39 -0700 Subject: [PATCH] add disabling of sorting where appropriate --- ui/browsing/playlistspage.go | 1 + ui/browsing/trackspage.go | 1 + ui/widgets/artistgenrelist.go | 1 + ui/widgets/listheader.go | 16 +++++++++++----- ui/widgets/tracklist.go | 10 +++++++++- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/ui/browsing/playlistspage.go b/ui/browsing/playlistspage.go index ba9eb07..e211c97 100644 --- a/ui/browsing/playlistspage.go +++ b/ui/browsing/playlistspage.go @@ -290,6 +290,7 @@ func (p *PlaylistList) buildHeader() { {"Description", false, false}, {"Owner", false, false}, {"Track Count", true, false}}, p.columnsLayout) + p.header.DisableSorting = true } diff --git a/ui/browsing/trackspage.go b/ui/browsing/trackspage.go index d8a94bc..2c21197 100644 --- a/ui/browsing/trackspage.go +++ b/ui/browsing/trackspage.go @@ -44,6 +44,7 @@ func NewTracksPage(contr *controller.Controller, conf *backend.TracksPageConfig, t.ExtendBaseWidget(t) t.tracklist = widgets.NewTracklist(nil) + t.tracklist.DisableSorting = true t.tracklist.AutoNumber = true t.tracklist.SetVisibleColumns(conf.TracklistColumns) t.tracklist.OnVisibleColumnsChanged = func(cols []string) { diff --git a/ui/widgets/artistgenrelist.go b/ui/widgets/artistgenrelist.go index 08a60bf..a032ab9 100644 --- a/ui/widgets/artistgenrelist.go +++ b/ui/widgets/artistgenrelist.go @@ -66,6 +66,7 @@ func NewArtistGenreList(items []ArtistGenreListItemModel) *ArtistGenreList { a.ExtendBaseWidget(a) a.hdr = NewListHeader([]ListColumn{ {"Name", false, false}, {"Album Count", true, false}, {"Track Count", true, false}}, a.columnsLayout) + a.hdr.DisableSorting = true a.list = widget.NewList( func() int { return len(a.Items) }, func() fyne.CanvasObject { diff --git a/ui/widgets/listheader.go b/ui/widgets/listheader.go index a464fd5..f26f6da 100644 --- a/ui/widgets/listheader.go +++ b/ui/widgets/listheader.go @@ -32,6 +32,8 @@ type ListColumn struct { type ListHeader struct { widget.BaseWidget + DisableSorting bool + OnColumnSortChanged func(int, ColumnSort) OnColumnVisibilityChanged func(int, bool) OnColumnVisibilityMenuShown func(*widget.PopUp) @@ -77,7 +79,7 @@ func (l *ListHeader) SetColumnVisible(colNum int, visible bool) { func (l *ListHeader) buildColumns() { for i, c := range l.columns { - hdr := newColHeader(c) + hdr := newColHeader(c, &l.DisableSorting) hdr.OnSortChanged = func(i int) func(ColumnSort) { return func(sort ColumnSort) { l.onSortChanged(i, sort) } }(i) @@ -158,7 +160,8 @@ type colHeader struct { OnSortChanged func(ColumnSort) OnTappedSecondary func(*fyne.PointEvent) - columnCfg ListColumn + sortDisabled *bool + columnCfg ListColumn label *widget.RichText sortIcon *widget.Icon @@ -166,8 +169,8 @@ type colHeader struct { container *fyne.Container } -func newColHeader(columnCfg ListColumn) *colHeader { - c := &colHeader{columnCfg: columnCfg} +func newColHeader(columnCfg ListColumn, sortDisabled *bool) *colHeader { + c := &colHeader{columnCfg: columnCfg, sortDisabled: sortDisabled} c.ExtendBaseWidget(c) c.label = widget.NewRichTextWithText(columnCfg.Text) @@ -186,6 +189,9 @@ func newColHeader(columnCfg ListColumn) *colHeader { } func (c *colHeader) Tapped(*fyne.PointEvent) { + if *c.sortDisabled { + return + } switch c.Sort { case SortNone: c.Sort = SortAscending @@ -218,7 +224,7 @@ func (c *colHeader) Refresh() { if c.Sort > 0 && c.sortIcon.Hidden { c.sortIcon.Show() c.container.Add(c.sortIconNegSpacer) - } else if c.Sort == SortNone && !c.sortIcon.Hidden { + } else if (c.Sort == SortNone || *c.sortDisabled) && !c.sortIcon.Hidden { c.sortIcon.Hide() c.container.Remove(c.sortIconNegSpacer) } diff --git a/ui/widgets/tracklist.go b/ui/widgets/tracklist.go index 44af417..603fdde 100644 --- a/ui/widgets/tracklist.go +++ b/ui/widgets/tracklist.go @@ -61,6 +61,9 @@ type Tracklist struct { // the tracklist context menu. DisablePlaybackMenu bool + // Disables sorting the tracklist by clicking individual columns. + DisableSorting bool + // user action callbacks OnPlayTrackAt func(int) OnPlaySelection func(tracks []*mediaprovider.Track, shuffle bool) @@ -92,7 +95,7 @@ type Tracklist struct { } func NewTracklist(tracks []*mediaprovider.Track) *Tracklist { - t := &Tracklist{tracks: tracks, visibleColumns: make([]bool, 12)} + t := &Tracklist{tracks: tracks, tracksOrigOrder: tracks, visibleColumns: make([]bool, 12)} t.ExtendBaseWidget(t) t.selectionMgr = util.NewListSelectionManager(t.lenTracks) @@ -348,6 +351,11 @@ func (t *Tracklist) CreateRenderer() fyne.WidgetRenderer { return widget.NewSimpleRenderer(t.container) } +func (t *Tracklist) Refresh() { + t.hdr.DisableSorting = t.DisableSorting + t.BaseWidget.Refresh() +} + func (t *Tracklist) onPlayTrackAt(idx int) { if t.OnPlayTrackAt != nil { t.OnPlayTrackAt(idx)