80 lines
2.5 KiB
Go
80 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"path/filepath"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/app"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/theme"
|
|
|
|
"git.patanix.de/git/kettlebell-app/internal/data"
|
|
"git.patanix.de/git/kettlebell-app/internal/services"
|
|
"git.patanix.de/git/kettlebell-app/internal/ui"
|
|
)
|
|
|
|
func main() {
|
|
myApp := app.NewWithID("com.example.kettlebell-tracker")
|
|
mainWindow := myApp.NewWindow("Kettlebell Programm Tracker")
|
|
|
|
dbDir := myApp.Storage().RootURI().Path()
|
|
dbPath := filepath.Join(dbDir, "kb_training.db")
|
|
log.Println("Datenbankpfad:", dbPath)
|
|
|
|
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)
|
|
// Dark Mode nach Systemeinstellung
|
|
if fyne.CurrentDevice().IsMobile() {
|
|
myApp.Settings().SetTheme(theme.DarkTheme())
|
|
}
|
|
|
|
// mainWindow := myApp.NewWindow("Kettlebell Tracker")
|
|
mainWindow.SetMaster()
|
|
|
|
// Responsive Layout
|
|
content := container.NewMax()
|
|
nav := buildNavigation(content, mainWindow, dbService, settingsService, apiService, trainingService) // Eigene Nav-Komponente
|
|
|
|
mainWindow.SetContent(container.NewBorder(nav, nil, nil, nil, content))
|
|
mainWindow.Resize(fyne.NewSize(400, 600))
|
|
mainWindow.ShowAndRun()
|
|
}
|
|
|
|
func buildNavigation(content *fyne.Container, mainWindow fyne.Window, dbService *data.DatabaseService, settingsService *services.SettingsService, apiService *services.ApiService, trainingService *services.TrainingService) fyne.CanvasObject {
|
|
navItems := []struct {
|
|
icon fyne.Resource
|
|
title string
|
|
view func() fyne.CanvasObject
|
|
}{
|
|
{theme.HomeIcon(), "Home", ui.MakeHomeScreen},
|
|
{theme.MediaPlayIcon(), "Training", func() fyne.CanvasObject {
|
|
return ui.MakeTrainingScreen(trainingService, settingsService, mainWindow)
|
|
}},
|
|
{theme.HistoryIcon(), "Historie", func() fyne.CanvasObject {
|
|
return ui.MakeHistoryScreen(dbService, mainWindow)
|
|
}},
|
|
{theme.SettingsIcon(), "Einstellungen", func() fyne.CanvasObject {
|
|
return ui.MakeSettingsScreen(settingsService, mainWindow)
|
|
}},
|
|
}
|
|
|
|
nav := container.NewAppTabs()
|
|
for _, item := range navItems {
|
|
nav.Append(container.NewTabItemWithIcon(item.title, item.icon, item.view()))
|
|
}
|
|
nav.SetTabLocation(container.TabLocationBottom)
|
|
nav.OnSelected = func(t *container.TabItem) {
|
|
content.Objects = []fyne.CanvasObject{t.Content}
|
|
content.Refresh()
|
|
}
|
|
|
|
return nav
|
|
}
|