diff --git a/ui/browsing/artistpage.go b/ui/browsing/artistpage.go index 328170e..feb1eb3 100644 --- a/ui/browsing/artistpage.go +++ b/ui/browsing/artistpage.go @@ -45,7 +45,7 @@ func NewArtistPage(artistID string, sm *backend.ServerManager, im *backend.Image nav: nav, } a.ExtendBaseWidget(a) - a.header = NewArtistPageHeader() + a.header = NewArtistPageHeader(nav) a.container = container.NewBorder(a.header, nil, nil, nil, layout.NewSpacer()) a.loadAsync() return a @@ -122,19 +122,21 @@ func (s *savedArtistPage) Restore() Page { type ArtistPageHeader struct { widget.BaseWidget + nav func(Route) artistID string artistImageCtr *fyne.Container titleDisp *widget.RichText biographyDisp *widget.RichText - similarArtists *widget.RichText + similarArtists *fyne.Container container *fyne.Container } -func NewArtistPageHeader() *ArtistPageHeader { +func NewArtistPageHeader(nav func(Route)) *ArtistPageHeader { a := &ArtistPageHeader{ + nav: nav, titleDisp: widget.NewRichTextWithText(""), biographyDisp: widget.NewRichTextWithText("Artist biography not available."), - similarArtists: widget.NewRichText(), + similarArtists: container.NewHBox(), } a.titleDisp.Segments[0].(*widget.TextSegment).Style = widget.RichTextStyle{ SizeName: theme.SizeNameHeadingText, @@ -169,17 +171,22 @@ func (a *ArtistPageHeader) UpdateInfo(info *subsonic.ArtistInfo2) { } } } - /** TODO: - if len(info.SimilarArtist) > 0 { - segments := make([]widget.RichTextSegment, 0) - segments = append(segments, &widget.TextSegment{Text: "Similar artists: "}) - for sim := info.SimilarArtist { - segments = append(segments, &widget.HyperlinkSegment{ - - }) + for i, art := range info.SimilarArtist { + if i == 0 { + a.similarArtists.Add(widget.NewLabel("Similar Artists:")) } + if i == 4 { + break + } + h := widgets.NewCustomHyperlink() + h.NoTruncate = true + h.SetText(art.Name) + h.OnTapped = func(id string) func() { + return func() { a.nav(ArtistRoute(id)) } + }(art.ID) + a.similarArtists.Add(h) } - */ + a.similarArtists.Refresh() if info.LargeImageUrl != "" { if res, err := fyne.LoadResourceFromURLString(info.LargeImageUrl); err == nil { im, _, err := image.Decode(bytes.NewReader(res.Content())) @@ -198,7 +205,7 @@ func (a *ArtistPageHeader) UpdateInfo(info *subsonic.ArtistInfo2) { func (a *ArtistPageHeader) createContainer() { a.container = container.NewBorder(nil, nil, a.artistImageCtr, nil, - container.NewBorder(a.titleDisp, a.similarArtists, nil, nil, a.biographyDisp)) + container.NewBorder(a.titleDisp, nil, nil, nil, container.NewVBox(a.biographyDisp, a.similarArtists))) } func (a *ArtistPageHeader) CreateRenderer() fyne.WidgetRenderer { diff --git a/ui/widgets/customhyperlink.go b/ui/widgets/customhyperlink.go index 45cd692..a9045c1 100644 --- a/ui/widgets/customhyperlink.go +++ b/ui/widgets/customhyperlink.go @@ -48,7 +48,8 @@ type CustomHyperlink struct { widget.BaseWidget h *hyperlinkWrapper - OnTapped func() + OnTapped func() + NoTruncate bool container *fyne.Container minSize fyne.Size @@ -64,6 +65,7 @@ func NewCustomHyperlink() *CustomHyperlink { } } c.ExtendBaseWidget(c) + c.minSize = c.h.MinSize() c.container = container.NewHBox(c.h, layout.NewSpacer()) return c } @@ -71,7 +73,11 @@ func NewCustomHyperlink() *CustomHyperlink { func (c *CustomHyperlink) SetText(text string) { s := widget.NewLabel(text).MinSize() c.h.SetText(text) - c.minSize = fyne.NewSize(fyne.Min(c.Size().Width, s.Width), s.Height) + if c.NoTruncate { + c.minSize = s + } else { + c.minSize = fyne.NewSize(fyne.Min(c.Size().Width, s.Width), s.Height) + } c.Refresh() } @@ -84,6 +90,10 @@ func (c *CustomHyperlink) Refresh() { c.container.Refresh() } +func (c *CustomHyperlink) MinSize() fyne.Size { + return c.minSize +} + func (c *CustomHyperlink) CreateRenderer() fyne.WidgetRenderer { return widget.NewSimpleRenderer(c.container) }