kettlebell-tracker/internal/ui/settings.go

64 lines
1.9 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/dialog"
"fyne.io/fyne/v2/widget"
)
func MakeSettingsScreen(settingsService *services.SettingsService, parent fyne.Window) fyne.CanvasObject {
currentSettings := settingsService.LoadSettings()
trainingTimeEntry := widget.NewEntry()
trainingTimeEntry.SetText(fmt.Sprintf("%d", currentSettings.TrainingTimeMinutes))
weightLeftEntry := widget.NewEntry()
weightLeftEntry.SetText(fmt.Sprintf("%.1f", currentSettings.WeightLeft))
weightRightEntry := widget.NewEntry()
weightRightEntry.SetText(fmt.Sprintf("%.1f", currentSettings.WeightRight))
goalSetsEntry := widget.NewEntry()
goalSetsEntry.SetText(fmt.Sprintf("%d", currentSettings.GoalSets))
form := &widget.Form{
Items: []*widget.FormItem{
{Text: "Trainingszeit (Minuten)", Widget: trainingTimeEntry},
{Text: "Linke Kettlebell (kg)", Widget: weightLeftEntry},
{Text: "Rechte Kettlebell (kg)", Widget: weightRightEntry},
{Text: "Ziel-Sätze", Widget: goalSetsEntry},
},
OnSubmit: func() {
timeMin, err1 := strconv.Atoi(trainingTimeEntry.Text)
weightL, err2 := strconv.ParseFloat(weightLeftEntry.Text, 64)
weightR, err3 := strconv.ParseFloat(weightRightEntry.Text, 64)
goal, err4 := strconv.Atoi(goalSetsEntry.Text)
if err1 != nil || err2 != nil || err3 != nil || err4 != nil {
dialog.ShowError(fmt.Errorf("Bitte gib gültige Zahlen ein"), parent)
return
}
newSettings := &services.Settings{
TrainingTimeMinutes: timeMin,
WeightLeft: weightL,
WeightRight: weightR,
GoalSets: goal,
}
settingsService.SaveSettings(newSettings)
fyne.CurrentApp().SendNotification(&fyne.Notification{
Title: "Gespeichert",
Content: "Die Einstellungen wurden erfolgreich aktualisiert.",
})
},
}
return container.NewPadded(form)
}