Files
supersonic/ui/dialogs/albumfilterdialog.go
T
2023-05-11 08:55:11 -07:00

77 lines
1.8 KiB
Go

package dialogs
import (
"strconv"
"unicode"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
"github.com/dweymouth/supersonic/backend"
"github.com/dweymouth/supersonic/ui/widgets"
)
type AlbumFilterDialog struct {
widget.BaseWidget
OnDismissed func()
filter *backend.AlbumFilter
container *fyne.Container
}
func NewAlbumFilterDialog(filter *backend.AlbumFilter) *AlbumFilterDialog {
a := &AlbumFilterDialog{filter: filter}
a.ExtendBaseWidget(a)
// setup min and max year filters
yearValidator := func(curText string, r rune) bool {
return unicode.IsDigit(r) && len(curText) <= 3
}
minYear := widgets.NewTextRestrictedEntry(yearValidator)
minYear.OnChanged = func(yearStr string) {
if i, err := strconv.Atoi(yearStr); err == nil {
a.filter.MinYear = i
}
}
if filter.MinYear > 0 {
minYear.Text = strconv.Itoa(filter.MinYear)
}
maxYear := widgets.NewTextRestrictedEntry(yearValidator)
maxYear.OnChanged = func(yearStr string) {
if i, err := strconv.Atoi(yearStr); err == nil {
a.filter.MaxYear = i
}
}
if filter.MaxYear > 0 {
maxYear.Text = strconv.Itoa(filter.MaxYear)
}
var isNotFavorite *widget.Check
// setup is favorite/not favorite filters
isFavorite := widget.NewCheck("Is favorite", func(fav bool) {
if fav {
isNotFavorite.SetChecked(false)
}
a.filter.ExcludeUnfavorited = fav
})
isNotFavorite = widget.NewCheck("Is not favorite", func(fav bool) {
if fav {
isFavorite.SetChecked(false)
}
a.filter.ExcludeFavorited = fav
})
a.container = container.NewVBox(
container.NewHBox(widget.NewLabel("Year from"), minYear, widget.NewLabel("to"), maxYear),
isFavorite,
isNotFavorite,
)
return a
}
func (a *AlbumFilterDialog) CreateRenderer() fyne.WidgetRenderer {
return widget.NewSimpleRenderer(a.container)
}