kettlebell-tracker/cmd/main.go

73 lines
2.4 KiB
Go

package main
import (
"log"
"path/filepath"
"git.patanix.de/git/kettlebell-app/internal/data"
"git.patanix.de/git/kettlebell-app/internal/services"
"git.patanix.de/git/kettlebell-app/internal/ui"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"git.patanix.de/git/kettlebell-app/internal/ui/theme" // <-- Neuer Theme-Import
)
func main() {
// 1. App initialisieren und unser neues Theme setzen
myApp := app.NewWithID("com.patani.kettlebell-tracker")
myApp.Settings().SetTheme(&theme.KettlebellTheme{}) // <-- Setzt unser benutzerdefiniertes Theme
mainWindow := myApp.NewWindow("Kettlebell Tracker")
// 2. Services initialisieren (wie zuvor)
dbDir := myApp.Storage().RootURI().Path()
dbPath := filepath.Join(dbDir, "giant_training.db")
dbService, err := data.NewDatabaseService(dbPath)
if err != nil {
log.Fatalf("Fehler bei der Initialisierung der Datenbank: %v", err)
}
settingsService := services.NewSettingsService(myApp)
apiService := services.NewApiService(myApp.UniqueID())
trainingService := services.NewTrainingService(dbService, settingsService, apiService)
// 3. UI-Bildschirme erstellen
contentContainer := container.NewMax()
// Navigationsfunktion definieren, die wir an die Screens weitergeben können
var navigateTo func(string)
// Die Bildschirme erstellen und dem Container hinzufügen
homeScreen := ui.MakeHomeScreen(trainingService, func() { navigateTo("training") })
trainingScreen := ui.MakeTrainingScreen(trainingService, settingsService, mainWindow)
historyScreen := ui.MakeHistoryScreen(dbService, mainWindow)
settingsScreen := ui.MakeSettingsScreen(settingsService, mainWindow)
screens := map[string]fyne.CanvasObject{
"home": homeScreen,
"training": trainingScreen,
"history": historyScreen,
"settings": settingsScreen,
}
for _, s := range screens {
contentContainer.Add(s)
}
// 4. Benutzerdefinierte Navigationsleiste erstellen
navBar, navigateFunc := ui.MakeNavBar(screens, contentContainer)
navigateTo = navigateFunc // Weisen der Navigationsfunktion die Implementierung aus der Navbar zu
// Initial den Home-Bildschirm anzeigen
navigateTo("home")
// 5. Hauptlayout mit Border-Layout erstellen
mainLayout := container.NewBorder(nil, navBar, nil, nil, contentContainer)
mainWindow.SetContent(mainLayout)
mainWindow.Resize(fyne.NewSize(360, 740)) // Mobile-freundliche Größe
mainWindow.SetMaster()
mainWindow.ShowAndRun()
}