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() }