package main import ( //"fmt" "log" "strconv" "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/widget" ) func tableView(w fyne.Window, category string) { items := loadCategory(category) table := widget.NewTable( func() (int, int) { items = loadCategory(category) return len(items), 5 }, func() fyne.CanvasObject { return widget.NewLabel("uhh, something went wrong") }, func(id widget.TableCellID, cell fyne.CanvasObject) { label := cell.(*widget.Label) label.Truncation = fyne.TextTruncateEllipsis switch id.Col { case 0: label.SetText(items[id.Row].name.String) case 1: label.SetText(items[id.Row].artist.String) case 2: label.SetText(strconv.FormatFloat(items[id.Row].price, 'f', 2, 64) + " " + "€") case 3: label.SetText(items[id.Row].seller.String) case 4: label.SetText(items[id.Row].purchase_date.String) } }, ) table.SetColumnWidth(0, 100) table.SetColumnWidth(1, 100) table.SetColumnWidth(2, 100) table.SetColumnWidth(3, 100) /* headers := []string{"Name", "Price", "Seller", "Purchase Date"} for i, header := range headers { fmt.Printf("i: %d\nheader: %s", i, header) table.UpdateHeader(widget.TableCellID{Row: -1, Col: i}, widget.NewLabel(header)) } */ nameEntry := widget.NewEntry() nameEntry.SetPlaceHolder("Sirens") artistEntry := widget.NewEntry() artistEntry.SetPlaceHolder("MatKat") priceEntry := widget.NewEntry() priceEntry.SetPlaceHolder("5") sellerEntry := widget.NewEntry() sellerEntry.SetPlaceHolder("Bandcamp") dateEntry := widget.NewEntry() dateEntry.SetPlaceHolder("2025-04-20") noteEntry := widget.NewEntry() noteEntry.SetPlaceHolder("got this because... uhh I forgot") editForm := &widget.Form{ Items: []*widget.FormItem{ {Text: "Release Name", Widget: nameEntry}, {Text: "Artist", Widget: artistEntry}, {Text: "Price", Widget: priceEntry}, {Text: "Seller", Widget: sellerEntry}, {Text: "Date", Widget: dateEntry}, {Text: "Note", Widget: noteEntry}, }, OnSubmit: func() { log.Println("Form submitted") price, err := strconv.ParseFloat(priceEntry.Text, 32) if err != nil { log.Fatal("dum") } newMusicItem := musicItem{ name: StringToNullString(nameEntry.Text), artist: StringToNullString(artistEntry.Text), price: price, seller: StringToNullString(sellerEntry.Text), purchase_date: StringToNullString(dateEntry.Text), note: StringToNullString(noteEntry.Text), } insertMusicEntry(newMusicItem) table.Refresh() log.Println("table should have refreshed") }, OnCancel: func() { nameEntry.SetText("") artistEntry.SetText("") priceEntry.SetText("") sellerEntry.SetText("") dateEntry.SetText("") noteEntry.SetText("") log.Println("Form cancelled") }, } split := container.NewHSplit(editForm, table) /* table.OnSelected = func(id widget.TableCellID) { editForm := widget.NewForm() for colIndex := 0; colIndex < 4; colIndex++ { entry := widget.NewEntry() entry.SetText(table.Cel) } } */ w.SetContent(split) } func mainMenu(w fyne.Window) { musicButton := widget.NewButton("Music", func() { tableView(w, "music") }) groceriesButton := widget.NewButton("Groceries", func() { tableView(w, "groceries") }) recurringButton := widget.NewButton("Recurring", func() { tableView(w, "recurring") }) otherButton := widget.NewButton("Other", func() { tableView(w, "other") }) content := container.New( layout.NewVBoxLayout(), layout.NewSpacer(), musicButton, groceriesButton, recurringButton, otherButton, layout.NewSpacer(), ) w.SetContent(container.New( layout.NewHBoxLayout(), layout.NewSpacer(), content, layout.NewSpacer(), )) } func main() { a := app.New() w := a.NewWindow("Hello World") mainMenu(w) w.ShowAndRun() }