82 lines
2.4 KiB
Go
82 lines
2.4 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 {
|
|
currentSettings := settingsService.LoadSettings()
|
|
|
|
timeEntry := widget.NewEntry()
|
|
timeEntry.SetText(fmt.Sprintf("%d", currentSettings.TrainingTimeMinutes))
|
|
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.SetText(fmt.Sprintf("%d", currentSettings.GoalSets))
|
|
setsEntry.Validator = timeEntry.Validator // Gleicher Validator
|
|
|
|
weightLeftEntry := widget.NewEntry()
|
|
weightLeftEntry.SetText(fmt.Sprintf("%.1f", currentSettings.WeightLeft))
|
|
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.SetText(fmt.Sprintf("%.1f", currentSettings.WeightRight))
|
|
weightRightEntry.Validator = weightLeftEntry.Validator // Gleicher 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: currentSettings.InitialProgram, // Beibehalten
|
|
}
|
|
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})
|
|
title.TextStyle.Monospace = true // Workaround to force refresh on size change
|
|
|
|
layout := container.NewVBox(
|
|
title,
|
|
widget.NewSeparator(),
|
|
form,
|
|
)
|
|
|
|
return container.NewPadded(layout)
|
|
}
|