diff --git a/ui/browsing/artistsgenrespage.go b/ui/browsing/artistsgenrespage.go index 436554d..f325f04 100644 --- a/ui/browsing/artistsgenrespage.go +++ b/ui/browsing/artistsgenrespage.go @@ -25,7 +25,7 @@ type ArtistsGenresPage struct { sm *backend.ServerManager titleDisp *widget.RichText container *fyne.Container - list *widgets.ArtistGenrePlaylist + list *widgets.ArtistGenreList } func NewArtistsGenresPage(isGenresPage bool, contr *controller.Controller, sm *backend.ServerManager) *ArtistsGenresPage { @@ -41,7 +41,7 @@ func NewArtistsGenresPage(isGenresPage bool, contr *controller.Controller, sm *b } a.ExtendBaseWidget(a) a.titleDisp.Segments[0].(*widget.TextSegment).Style.SizeName = theme.SizeNameHeadingText - a.list = widgets.NewArtistGenrePlaylist(nil) + a.list = widgets.NewArtistGenreList(nil) a.list.ShowAlbumCount = true a.list.ShowTrackCount = isGenresPage a.list.OnNavTo = func(id string) { @@ -103,11 +103,11 @@ func (s *savedArtistsGenresPage) Restore() Page { return NewArtistsGenresPage(s.isGenresPage, s.contr, s.sm) } -func (a *ArtistsGenresPage) buildArtistListModel(artists *subsonic.ArtistsID3) []widgets.ArtistGenrePlaylistItemModel { - model := make([]widgets.ArtistGenrePlaylistItemModel, 0) +func (a *ArtistsGenresPage) buildArtistListModel(artists *subsonic.ArtistsID3) []widgets.ArtistGenreListItemModel { + model := make([]widgets.ArtistGenreListItemModel, 0) for _, idx := range artists.Index { for _, artist := range idx.Artist { - model = append(model, widgets.ArtistGenrePlaylistItemModel{ + model = append(model, widgets.ArtistGenreListItemModel{ ID: artist.ID, Name: artist.Name, AlbumCount: artist.AlbumCount, @@ -118,10 +118,10 @@ func (a *ArtistsGenresPage) buildArtistListModel(artists *subsonic.ArtistsID3) [ return model } -func (a *ArtistsGenresPage) buildGenresListModel(genres []*subsonic.Genre) []widgets.ArtistGenrePlaylistItemModel { - model := make([]widgets.ArtistGenrePlaylistItemModel, 0) +func (a *ArtistsGenresPage) buildGenresListModel(genres []*subsonic.Genre) []widgets.ArtistGenreListItemModel { + model := make([]widgets.ArtistGenreListItemModel, 0) for _, genre := range genres { - model = append(model, widgets.ArtistGenrePlaylistItemModel{ + model = append(model, widgets.ArtistGenreListItemModel{ ID: genre.Name, Name: genre.Name, AlbumCount: genre.AlbumCount, diff --git a/ui/browsing/favoritespage.go b/ui/browsing/favoritespage.go index 818df30..f574863 100644 --- a/ui/browsing/favoritespage.go +++ b/ui/browsing/favoritespage.go @@ -155,7 +155,7 @@ func (a *FavoritesPage) Reload() { } if a.artistListCtr != nil { // refresh favorite artists view - al := a.artistListCtr.Objects[0].(*widgets.ArtistGenrePlaylist) + al := a.artistListCtr.Objects[0].(*widgets.ArtistGenreList) al.Items = buildArtistListModel(starred.Artist) if a.toggleBtns.ActivatedButtonIndex() == 1 { // favorite artists view is visible @@ -264,7 +264,7 @@ func (a *FavoritesPage) onShowFavoriteArtists() { return } model := buildArtistListModel(s.Artist) - artistList := widgets.NewArtistGenrePlaylist(model) + artistList := widgets.NewArtistGenreList(model) artistList.ShowAlbumCount = true artistList.OnNavTo = func(artistID string) { a.contr.NavigateTo(controller.ArtistRoute(artistID)) @@ -282,10 +282,10 @@ func (a *FavoritesPage) onShowFavoriteArtists() { } } -func buildArtistListModel(artists []*subsonic.ArtistID3) []widgets.ArtistGenrePlaylistItemModel { - model := make([]widgets.ArtistGenrePlaylistItemModel, 0) +func buildArtistListModel(artists []*subsonic.ArtistID3) []widgets.ArtistGenreListItemModel { + model := make([]widgets.ArtistGenreListItemModel, 0) for _, ar := range artists { - model = append(model, widgets.ArtistGenrePlaylistItemModel{ + model = append(model, widgets.ArtistGenreListItemModel{ ID: ar.ID, Name: ar.Name, AlbumCount: ar.AlbumCount, diff --git a/ui/widgets/artistgenreplaylist.go b/ui/widgets/artistgenrelist.go similarity index 71% rename from ui/widgets/artistgenreplaylist.go rename to ui/widgets/artistgenrelist.go index 127c8fa..c3dbb04 100644 --- a/ui/widgets/artistgenreplaylist.go +++ b/ui/widgets/artistgenrelist.go @@ -9,7 +9,7 @@ import ( "fyne.io/fyne/v2/widget" ) -type ArtistGenrePlaylistItemModel struct { +type ArtistGenreListItemModel struct { ID string Name string AlbumCount int @@ -17,10 +17,10 @@ type ArtistGenrePlaylistItemModel struct { Favorite bool } -type ArtistGenrePlaylist struct { +type ArtistGenreList struct { widget.BaseWidget - Items []ArtistGenrePlaylistItemModel + Items []ArtistGenreListItemModel ShowAlbumCount bool ShowTrackCount bool OnNavTo func(string) @@ -31,10 +31,10 @@ type ArtistGenrePlaylist struct { container *fyne.Container } -type ArtistGenrePlaylistRow struct { +type ArtistGenreListRow struct { widget.BaseWidget - Item ArtistGenrePlaylistItemModel + Item ArtistGenreListItemModel OnTapped func() nameLabel *widget.Label @@ -44,8 +44,8 @@ type ArtistGenrePlaylistRow struct { container *fyne.Container } -func NewArtistGenrePlaylistRow(layout *layouts.ColumnsLayout) *ArtistGenrePlaylistRow { - a := &ArtistGenrePlaylistRow{ +func NewArtistGenreListRow(layout *layouts.ColumnsLayout) *ArtistGenreListRow { + a := &ArtistGenreListRow{ nameLabel: widget.NewLabel(""), albumCountLabel: widget.NewLabel(""), trackCountLabel: widget.NewLabel(""), @@ -57,8 +57,8 @@ func NewArtistGenrePlaylistRow(layout *layouts.ColumnsLayout) *ArtistGenrePlayli return a } -func NewArtistGenrePlaylist(items []ArtistGenrePlaylistItemModel) *ArtistGenrePlaylist { - a := &ArtistGenrePlaylist{ +func NewArtistGenreList(items []ArtistGenreListItemModel) *ArtistGenreList { + a := &ArtistGenreList{ Items: items, columnsLayout: layouts.NewColumnsLayout([]float32{-1, 125, 125}), } @@ -68,12 +68,12 @@ func NewArtistGenrePlaylist(items []ArtistGenrePlaylistItemModel) *ArtistGenrePl a.list = widget.NewList( func() int { return len(a.Items) }, func() fyne.CanvasObject { - r := NewArtistGenrePlaylistRow(a.columnsLayout) + r := NewArtistGenreListRow(a.columnsLayout) r.OnTapped = func() { a.onRowDoubleTapped(r.Item) } return r }, func(id widget.ListItemID, item fyne.CanvasObject) { - row := item.(*ArtistGenrePlaylistRow) + row := item.(*ArtistGenreListRow) row.Item = a.Items[id] row.albumCountLabel.Hidden = !a.ShowAlbumCount row.trackCountLabel.Hidden = !a.ShowTrackCount @@ -87,28 +87,28 @@ func NewArtistGenrePlaylist(items []ArtistGenrePlaylistItemModel) *ArtistGenrePl return a } -func (a *ArtistGenrePlaylist) Refresh() { +func (a *ArtistGenreList) Refresh() { a.hdr.SetColumnVisible(1, a.ShowAlbumCount) a.hdr.SetColumnVisible(2, a.ShowTrackCount) a.BaseWidget.Refresh() } -func (a *ArtistGenrePlaylist) onRowDoubleTapped(item ArtistGenrePlaylistItemModel) { +func (a *ArtistGenreList) onRowDoubleTapped(item ArtistGenreListItemModel) { if a.OnNavTo != nil { a.OnNavTo(item.ID) } } -func (a *ArtistGenrePlaylistRow) Tapped(*fyne.PointEvent) { +func (a *ArtistGenreListRow) Tapped(*fyne.PointEvent) { if a.OnTapped != nil { a.OnTapped() } } -func (a *ArtistGenrePlaylist) CreateRenderer() fyne.WidgetRenderer { +func (a *ArtistGenreList) CreateRenderer() fyne.WidgetRenderer { return widget.NewSimpleRenderer(a.container) } -func (a *ArtistGenrePlaylistRow) CreateRenderer() fyne.WidgetRenderer { +func (a *ArtistGenreListRow) CreateRenderer() fyne.WidgetRenderer { return widget.NewSimpleRenderer(a.container) } diff --git a/ui/widgets/searcher.go b/ui/widgets/searcher.go index f9f64b8..0d828a4 100644 --- a/ui/widgets/searcher.go +++ b/ui/widgets/searcher.go @@ -9,6 +9,9 @@ import ( "fyne.io/fyne/v2/widget" ) +// Searcher is a search entry widget that will issue a search command +// (aka call OnSearched) when a short span of time has elapsed since +// the user typed into the widget. type Searcher struct { Entry *SearchEntry OnSearched func(string) diff --git a/ui/widgets/tracklist.go b/ui/widgets/tracklist.go index 33d9779..16096e9 100644 --- a/ui/widgets/tracklist.go +++ b/ui/widgets/tracklist.go @@ -32,10 +32,19 @@ const ( type Tracklist struct { widget.BaseWidget - Tracks []*subsonic.Child + // Tracks is the set of tracks displayed by the widget. + Tracks []*subsonic.Child + + // AutoNumber sets whether to auto-number the tracks 1..N in display order, + // or to use the number from the track's metadata AutoNumber bool + + // AuxiliaryMenuItems sets additional menu items appended to the context menu // must be set before the context menu is shown for the first time - AuxiliaryMenuItems []*fyne.MenuItem + AuxiliaryMenuItems []*fyne.MenuItem + + // DisablePlaybackMenu sets whether to disable playback options in + // the tracklist context menu. DisablePlaybackMenu bool // user action callbacks