73 lines
2.5 KiB
Go
73 lines
2.5 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
|
|
// Wir erstellen einen Container, der die Bildschirme verwaltet (ähnlich einem Stack)
|
|
contentContainer := container.NewMax()
|
|
|
|
// Die Bildschirme erstellen und dem Container hinzufügen
|
|
homeScreen := ui.MakeHomeScreen(trainingService, contentContainer, mainWindow)
|
|
trainingScreen := ui.MakeTrainingScreen(trainingService, settingsService, mainWindow)
|
|
historyScreen := ui.MakeHistoryScreen(dbService, mainWindow)
|
|
settingsScreen := ui.MakeSettingsScreen(settingsService, mainWindow)
|
|
|
|
contentContainer.Add(homeScreen)
|
|
contentContainer.Add(trainingScreen)
|
|
contentContainer.Add(historyScreen)
|
|
contentContainer.Add(settingsScreen)
|
|
|
|
// Initial nur den Home-Bildschirm anzeigen
|
|
homeScreen.Show()
|
|
trainingScreen.Hide()
|
|
historyScreen.Hide()
|
|
settingsScreen.Hide()
|
|
|
|
// 4. Benutzerdefinierte Navigationsleiste erstellen
|
|
navBar := ui.MakeNavBar(map[string]fyne.CanvasObject{
|
|
"home": homeScreen,
|
|
"training": trainingScreen,
|
|
"history": historyScreen,
|
|
"settings": settingsScreen,
|
|
}, contentContainer)
|
|
|
|
// 5. Hauptlayout mit Border-Layout erstellen
|
|
// Der Inhalt ist im Zentrum, die Navigationsleiste am unteren Rand.
|
|
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()
|
|
}
|