From 87b4762ae1a522960d99351146c4743fb81b62d5 Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Sat, 31 Dec 2022 16:30:38 -0800 Subject: [PATCH] add custom hyperlink --- ui/widgets/customhyperlink.go | 73 +++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 ui/widgets/customhyperlink.go diff --git a/ui/widgets/customhyperlink.go b/ui/widgets/customhyperlink.go new file mode 100644 index 0000000..6ec42d0 --- /dev/null +++ b/ui/widgets/customhyperlink.go @@ -0,0 +1,73 @@ +package widgets + +import ( + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/layout" + "fyne.io/fyne/v2/widget" +) + +type hyperlinkWrapper struct { + widget.BaseWidget + + h *widget.Hyperlink + l *widget.Label + maxWidth float32 +} + +func newHyperlinkWrapper(maxWidth float32) *hyperlinkWrapper { + h := &hyperlinkWrapper{ + h: widget.NewHyperlink("", nil), + l: widget.NewLabel(""), + maxWidth: maxWidth, + } + h.h.Wrapping = fyne.TextTruncate + h.ExtendBaseWidget(h) + return h +} + +func (h *hyperlinkWrapper) MinSize() fyne.Size { + w := fyne.Min(h.maxWidth, h.l.MinSize().Width) + return fyne.NewSize(w, h.h.MinSize().Height) +} + +func (h *hyperlinkWrapper) SetText(text string) { + h.h.SetText(text) + h.l.SetText(text) +} + +func (h *hyperlinkWrapper) CreateRenderer() fyne.WidgetRenderer { + return widget.NewSimpleRenderer(h.h) +} + +type CustomHyperlink struct { + widget.BaseWidget + h *hyperlinkWrapper + + container *fyne.Container + minSize fyne.Size +} + +func NewCustomHyperlink() *CustomHyperlink { + c := &CustomHyperlink{ + h: newHyperlinkWrapper(200), + } + c.ExtendBaseWidget(c) + c.container = container.NewHBox(c.h, layout.NewSpacer()) + return c +} + +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) + c.Refresh() +} + +func (c *CustomHyperlink) Refresh() { + c.container.Refresh() +} + +func (c *CustomHyperlink) CreateRenderer() fyne.WidgetRenderer { + return widget.NewSimpleRenderer(c.container) +}