add focus traversal to genre list in album filter panel

This commit is contained in:
Drew Weymouth
2024-02-17 08:43:50 -08:00
parent a46b9559bf
commit fb7f51d3ef
+16 -9
View File
@@ -241,7 +241,11 @@ func NewGenreFilterSubsection(onChanged func([]string), initialSelectedGenres []
return len(g.genreListViewModel) return len(g.genreListViewModel)
}, },
func() fyne.CanvasObject { func() fyne.CanvasObject {
return newGenreListViewRow(g.onGenreSelected) row := newGenreListViewRow(g.onGenreSelected)
row.OnFocusNeighbor = func(up bool) {
g.genreListView.FocusNeighbor(row.ItemID(), up)
}
return row
}, },
func(id widget.ListItemID, obj fyne.CanvasObject) { func(id widget.ListItemID, obj fyne.CanvasObject) {
g.listModelMutex.RLock() g.listModelMutex.RLock()
@@ -251,9 +255,10 @@ func NewGenreFilterSubsection(onChanged func([]string), initialSelectedGenres []
_, selected := g.selectedGenres[genre] _, selected := g.selectedGenres[genre]
g.selectedGenresMutex.RUnlock() g.selectedGenresMutex.RUnlock()
row := obj.(*genreListViewRow) row := obj.(*genreListViewRow)
row.ID = id g.genreListView.SetItemForID(id, row)
row.Text = genre row.ListItemID = id
row.Checked = selected row.Content.(*widget.Check).Text = genre
row.Content.(*widget.Check).Checked = selected
row.Refresh() row.Refresh()
}, },
) )
@@ -361,16 +366,18 @@ func (g *GenreFilterSubsection) CreateRenderer() fyne.WidgetRenderer {
} }
type genreListViewRow struct { type genreListViewRow struct {
widget.Check FocusListRowBase
ID widget.ListItemID
} }
func newGenreListViewRow(onChanged func(widget.ListItemID, bool)) *genreListViewRow { func newGenreListViewRow(onChanged func(widget.ListItemID, bool)) *genreListViewRow {
g := &genreListViewRow{} g := &genreListViewRow{}
g.ExtendBaseWidget(g) g.ExtendBaseWidget(g)
g.OnChanged = func(b bool) { g.Content = widget.NewCheck("", func(b bool) {
onChanged(g.ID, b) onChanged(g.ItemID(), b)
})
g.OnTapped = func() {
chk := g.Content.(*widget.Check)
chk.SetChecked(!chk.Checked)
} }
return g return g
} }