Jellyfin does not support 5-star ratings - make it disableable
This commit is contained in:
@@ -15,15 +15,19 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
themedResStarFilled = theme.NewThemedResource(res.ResStarFilledSvg)
|
||||
themedResStarOutline = theme.NewThemedResource(res.ResStarOutlineSvg)
|
||||
themedResStarFilled = theme.NewThemedResource(res.ResStarFilledSvg)
|
||||
themedResStarOutline = theme.NewThemedResource(res.ResStarOutlineSvg)
|
||||
themedDisabledStarOutline = theme.NewDisabledResource(res.ResStarOutlineSvg)
|
||||
)
|
||||
|
||||
var _ fyne.Disableable = (*StarRating)(nil)
|
||||
|
||||
type StarRating struct {
|
||||
widget.BaseWidget
|
||||
|
||||
Rating int
|
||||
StarSize float32
|
||||
IsDisabled bool
|
||||
Rating int
|
||||
StarSize float32
|
||||
|
||||
OnRatingChanged func(int)
|
||||
|
||||
@@ -44,7 +48,9 @@ func (s *StarRating) createContainer() {
|
||||
})
|
||||
var im *canvas.Image
|
||||
for i := 0; i < 5; i++ {
|
||||
if s.Rating > i {
|
||||
if s.IsDisabled {
|
||||
im = canvas.NewImageFromResource(themedDisabledStarOutline)
|
||||
} else if s.Rating > i {
|
||||
im = canvas.NewImageFromResource(themedResStarFilled)
|
||||
} else {
|
||||
im = canvas.NewImageFromResource(themedResStarOutline)
|
||||
@@ -61,6 +67,9 @@ func (s *StarRating) MouseIn(e *desktop.MouseEvent) {
|
||||
}
|
||||
|
||||
func (s *StarRating) MouseMoved(e *desktop.MouseEvent) {
|
||||
if s.IsDisabled {
|
||||
return
|
||||
}
|
||||
hoverRating := int(math.Ceil(5 * float64(e.Position.X/s.Size().Width)))
|
||||
if s.mouseHoverRating != hoverRating {
|
||||
s.holdRating = false
|
||||
@@ -69,7 +78,24 @@ func (s *StarRating) MouseMoved(e *desktop.MouseEvent) {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *StarRating) Disable() {
|
||||
s.IsDisabled = true
|
||||
s.Refresh()
|
||||
}
|
||||
|
||||
func (s *StarRating) Enable() {
|
||||
s.IsDisabled = false
|
||||
s.Refresh()
|
||||
}
|
||||
|
||||
func (s *StarRating) Disabled() bool {
|
||||
return s.IsDisabled
|
||||
}
|
||||
|
||||
func (s *StarRating) MouseOut() {
|
||||
if s.IsDisabled {
|
||||
return
|
||||
}
|
||||
s.mouseHoverRating = 0
|
||||
s.holdRating = false
|
||||
s.Refresh()
|
||||
@@ -105,7 +131,9 @@ func (s *StarRating) Refresh() {
|
||||
for i := 0; i < 5; i++ {
|
||||
im := s.container.Objects[i].(*canvas.Image)
|
||||
im.SetMinSize(fyne.NewSize(s.StarSize, s.StarSize))
|
||||
if rating > i {
|
||||
if s.IsDisabled {
|
||||
im.Resource = themedDisabledStarOutline
|
||||
} else if rating > i {
|
||||
im.Resource = themedResStarFilled
|
||||
} else {
|
||||
im.Resource = themedResStarOutline
|
||||
|
||||
@@ -66,6 +66,9 @@ type TracklistOptions struct {
|
||||
|
||||
// Disables sorting the tracklist by clicking individual columns.
|
||||
DisableSorting bool
|
||||
|
||||
// Disables the five star rating widget.
|
||||
DisableRating bool
|
||||
}
|
||||
|
||||
type Tracklist struct {
|
||||
@@ -732,6 +735,7 @@ func NewTrackRow(tracklist *Tracklist, playingIcon fyne.CanvasObject) *TrackRow
|
||||
favorite.OnTapped = t.toggleFavorited
|
||||
t.favorite = container.NewCenter(favorite)
|
||||
t.rating = NewStarRating()
|
||||
t.rating.IsDisabled = t.tracklist.Options.DisableRating
|
||||
t.rating.StarSize = 16
|
||||
t.rating.OnRatingChanged = t.setTrackRating
|
||||
t.plays = newTrailingAlignLabel()
|
||||
@@ -842,6 +846,7 @@ func (t *TrackRow) Update(tm *trackModel, rowNum int) {
|
||||
t.dur.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnTime)]
|
||||
t.year.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnYear)]
|
||||
t.favorite.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnFavorite)]
|
||||
t.rating.IsDisabled = t.tracklist.Options.DisableRating
|
||||
t.rating.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnRating)]
|
||||
t.plays.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnPlays)]
|
||||
t.bitrate.Hidden = !t.tracklist.visibleColumns[ColNumber(ColumnBitrate)]
|
||||
|
||||
Reference in New Issue
Block a user