87 lines
2.6 KiB
Go
87 lines
2.6 KiB
Go
package ui
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"git.patanix.de/git/kettlebell-app/internal/data"
|
|
"git.patanix.de/git/kettlebell-app/internal/ui/utils"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/dialog"
|
|
"fyne.io/fyne/v2/theme"
|
|
"fyne.io/fyne/v2/widget"
|
|
)
|
|
|
|
func MakeHistoryScreen(db *data.DatabaseService, parent fyne.Window) fyne.CanvasObject {
|
|
var history []data.TrainingSession
|
|
|
|
placeholder := widget.NewLabel("Noch keine Trainingsdaten vorhanden.")
|
|
list := widget.NewList(
|
|
func() int {
|
|
return len(history)
|
|
},
|
|
func() fyne.CanvasObject {
|
|
return widget.NewCard("", "", container.NewVBox(
|
|
widget.NewLabel(""),
|
|
widget.NewSeparator(),
|
|
container.NewGridWithColumns(3,
|
|
container.NewVBox(widget.NewLabel("Sätze"), widget.NewLabelWithStyle("", fyne.TextAlignCenter, fyne.TextStyle{Bold: true})),
|
|
container.NewVBox(widget.NewLabel("Dauer"), widget.NewLabelWithStyle("", fyne.TextAlignCenter, fyne.TextStyle{Bold: true})),
|
|
container.NewVBox(widget.NewLabel("Reps/Satz"), widget.NewLabelWithStyle("", fyne.TextAlignCenter, fyne.TextStyle{Bold: true})),
|
|
),
|
|
))
|
|
},
|
|
func(i widget.ListItemID, o fyne.CanvasObject) {
|
|
session := history[i]
|
|
card := o.(*widget.Card)
|
|
card.SetTitle(session.Date.Format("02.01.2006 15:04"))
|
|
|
|
content := card.Content.(*fyne.Container)
|
|
programLabel := content.Objects[0].(*widget.Label)
|
|
statsGrid := content.Objects[2].(*fyne.Container)
|
|
|
|
programLabel.SetText(fmt.Sprintf("%s - Tag %d", session.Program, session.BlockDay))
|
|
|
|
statsGrid.Objects[0].(*fyne.Container).Objects[1].(*widget.Label).SetText(fmt.Sprintf("%d", session.Sets))
|
|
statsGrid.Objects[1].(*fyne.Container).Objects[1].(*widget.Label).SetText(utils.FormatDuration(session.Duration))
|
|
statsGrid.Objects[2].(*fyne.Container).Objects[1].(*widget.Label).SetText(fmt.Sprintf("%d", session.RepsPerSet))
|
|
},
|
|
)
|
|
|
|
refreshData := func() {
|
|
var err error
|
|
history, err = db.GetHistory()
|
|
if err != nil {
|
|
log.Printf("Fehler beim Laden der Historie: %v", err)
|
|
dialog.ShowError(err, parent)
|
|
}
|
|
if len(history) == 0 {
|
|
list.Hide()
|
|
placeholder.Show()
|
|
} else {
|
|
list.Show()
|
|
placeholder.Hide()
|
|
}
|
|
list.Refresh()
|
|
}
|
|
|
|
list.OnSelected = func(id widget.ListItemID) {
|
|
list.Unselect(id)
|
|
}
|
|
|
|
toolbar := widget.NewToolbar(
|
|
widget.NewToolbarAction(theme.ViewRefreshIcon(), refreshData),
|
|
)
|
|
|
|
layout := container.NewBorder(toolbar, nil, nil, nil, container.NewStack(list, container.NewCenter(placeholder)))
|
|
|
|
wrapper := container.NewMax(layout)
|
|
if wrapper.Visible() {
|
|
refreshData()
|
|
}
|
|
// wrapper.OnVisible = refreshData
|
|
|
|
return wrapper
|
|
}
|