package main
import (
"fmt"
"fyne.io/fyne/v2/driver/desktop"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/data/binding"
"fyne.io/fyne/v2/widget"
)
func makeAlphabet() []string {
var alphabet []string
for ch := 'A'; ch <= 'Z'; ch++ {
alphabet = append(alphabet, string(ch))
}
return alphabet
}
type TapLabel struct {
*widget.Label // composition
// function pointers to set to get events
OnTapped func(string)
menuItem *widget.PopUpMenu
}
func (mc *TapLabel) Tapped(pe *fyne.PointEvent) {
if mc.OnTapped != nil {
mc.OnTapped(mc.Text)
}
}
func (li *TapLabel) MouseIn(event *desktop.MouseEvent) {
if li.menuItem == nil {
menuItem1 := fyne.NewMenuItem("11111111111111111111111111111111111111", nil)
menu := fyne.NewMenu("File", menuItem1)
popUpMenu := widget.NewPopUpMenu(menu, window.Canvas())
li.menuItem = popUpMenu
}
li.menuItem.ShowAtPosition(event.AbsolutePosition)
li.menuItem.Show()
fmt.Println(event.Button)
li.Refresh()
}
// MouseMoved is called when a desktop pointer hovers over the widget.
func (li *TapLabel) MouseMoved(*desktop.MouseEvent) {
}
// MouseOut is called when a desktop pointer exits the widget.
func (li *TapLabel) MouseOut() {
if li.menuItem != nil {
li.menuItem.Hide()
li.Refresh()
}
}
func NewTapLabel(text string, tappedLeft func(string)) *TapLabel {
return &TapLabel{widget.NewLabel(text), tappedLeft, nil}
}
func alphabetToBrands(letter string) {
fmt.Println(letter)
}
var window fyne.Window
func main() {
app := app.New()
window = app.NewWindow("tac_hub")
window.Resize(fyne.NewSize(200, 200))
rawData := makeAlphabet()
data := binding.BindStringList(&rawData)
list := widget.NewListWithData(
data,
func() fyne.CanvasObject {
return NewTapLabel("template", alphabetToBrands)
},
func(i binding.DataItem, o fyne.CanvasObject) {
o.(*TapLabel).Bind(i.(binding.String))
},
)
list.OnSelected = func(id widget.ListItemID) {
fmt.Println(id)
}
window.SetContent(list)
window.ShowAndRun()
}