add top tracks view to artist page
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
package widgets
|
||||
|
||||
import (
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/container"
|
||||
"fyne.io/fyne/v2/widget"
|
||||
)
|
||||
|
||||
type ToggleText struct {
|
||||
widget.BaseWidget
|
||||
|
||||
OnChanged func(int)
|
||||
|
||||
labels []string
|
||||
activeLabelIdx int
|
||||
container *fyne.Container
|
||||
}
|
||||
|
||||
func NewToggleText(activeLblIdx int, labels []string) *ToggleText {
|
||||
t := &ToggleText{labels: labels, activeLabelIdx: activeLblIdx}
|
||||
t.ExtendBaseWidget(t)
|
||||
t.container = container.NewHBox()
|
||||
for i, lbl := range labels {
|
||||
if i == activeLblIdx {
|
||||
t.container.Add(t.newBoldRichText(lbl))
|
||||
} else {
|
||||
hl := widget.NewHyperlink(lbl, nil)
|
||||
hl.OnTapped = t.buildOnTapped(i)
|
||||
t.container.Add(hl)
|
||||
}
|
||||
}
|
||||
return t
|
||||
}
|
||||
|
||||
func (t *ToggleText) buildOnTapped(i int) func() {
|
||||
return func() {
|
||||
t.onActivated(i)
|
||||
}
|
||||
}
|
||||
|
||||
func (t *ToggleText) newBoldRichText(text string) *widget.RichText {
|
||||
return widget.NewRichText(&widget.TextSegment{
|
||||
Text: text,
|
||||
Style: widget.RichTextStyle{TextStyle: fyne.TextStyle{Bold: true}},
|
||||
})
|
||||
}
|
||||
|
||||
func (t *ToggleText) onActivated(idx int) {
|
||||
if idx == t.activeLabelIdx {
|
||||
return
|
||||
}
|
||||
// update old label to hyperlink
|
||||
hl := widget.NewHyperlink(t.labels[t.activeLabelIdx], nil)
|
||||
hl.OnTapped = t.buildOnTapped(t.activeLabelIdx)
|
||||
t.container.Objects[t.activeLabelIdx] = hl
|
||||
// update activated label to bold text
|
||||
t.container.Objects[idx] = t.newBoldRichText(t.labels[idx])
|
||||
t.activeLabelIdx = idx
|
||||
t.Refresh()
|
||||
if t.OnChanged != nil {
|
||||
t.OnChanged(t.activeLabelIdx)
|
||||
}
|
||||
}
|
||||
|
||||
func (t *ToggleText) CreateRenderer() fyne.WidgetRenderer {
|
||||
return widget.NewSimpleRenderer(t.container)
|
||||
}
|
||||
Reference in New Issue
Block a user