kettlebell-tracker/internal/ui/settings.go

82 lines
2.5 KiB
Go

package ui
import (
"fmt"
"strconv"
"git.patanix.de/git/kettlebell-app/internal/services"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func MakeSettingsScreen(settingsService *services.SettingsService, parent fyne.Window) fyne.CanvasObject {
var timeEntry, setsEntry, weightLeftEntry, weightRightEntry *widget.Entry
loadData := func() {
currentSettings := settingsService.LoadSettings()
timeEntry.SetText(fmt.Sprintf("%d", currentSettings.TrainingTimeMinutes))
setsEntry.SetText(fmt.Sprintf("%d", currentSettings.GoalSets))
weightLeftEntry.SetText(fmt.Sprintf("%.1f", currentSettings.WeightLeft))
weightRightEntry.SetText(fmt.Sprintf("%.1f", currentSettings.WeightRight))
}
timeEntry = widget.NewEntry()
timeEntry.Validator = func(s string) error {
if _, err := strconv.Atoi(s); err != nil {
return fmt.Errorf("muss eine Zahl sein")
}
return nil
}
setsEntry = widget.NewEntry()
setsEntry.Validator = timeEntry.Validator
weightLeftEntry = widget.NewEntry()
weightLeftEntry.Validator = func(s string) error {
if _, err := strconv.ParseFloat(s, 64); err != nil {
return fmt.Errorf("muss eine Zahl sein")
}
return nil
}
weightRightEntry = widget.NewEntry()
weightRightEntry.Validator = weightLeftEntry.Validator
form := &widget.Form{
Items: []*widget.FormItem{
{Text: "Trainingszeit (Minuten)", Widget: timeEntry},
{Text: "Ziel-Sätze", Widget: setsEntry},
{Text: "Links (kg)", Widget: weightLeftEntry},
{Text: "Rechts (kg)", Widget: weightRightEntry},
},
OnSubmit: func() {
timeMin, _ := strconv.Atoi(timeEntry.Text)
goal, _ := strconv.Atoi(setsEntry.Text)
weightL, _ := strconv.ParseFloat(weightLeftEntry.Text, 64)
weightR, _ := strconv.ParseFloat(weightRightEntry.Text, 64)
newSettings := &services.Settings{
TrainingTimeMinutes: timeMin,
GoalSets: goal,
WeightLeft: weightL,
WeightRight: weightR,
InitialProgram: settingsService.LoadSettings().InitialProgram,
}
settingsService.SaveSettings(newSettings)
fyne.CurrentApp().SendNotification(&fyne.Notification{
Title: "Gespeichert",
Content: "Die Einstellungen wurden erfolgreich aktualisiert.",
})
},
}
title := widget.NewLabelWithStyle("Einstellungen", fyne.TextAlignLeading, fyne.TextStyle{Bold: true})
layout := container.NewVBox(title, widget.NewSeparator(), form)
paddedLayout := container.NewPadded(layout)
if paddedLayout.Visible() {
loadData()
}
return paddedLayout
}