jws/internal/gui/dependency_screen.go

92 lines
2.1 KiB
Go

package gui
import (
"jws/internal/dependency"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/dialog"
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
)
// ShowDependencyScreen displays the dependency check screen
func ShowDependencyScreen() {
title := widget.NewLabel("check dependencies")
title.TextStyle = fyne.TextStyle{Bold: true}
title.Alignment = fyne.TextAlignCenter
description := widget.NewLabel("dependencies needed for dev-environment:")
description.Wrapping = fyne.TextWrapWord
dependencyContainer := container.NewVBox()
allInstalled := true
for i, dep := range dependencies {
statusIcon := theme.CancelIcon()
statusText := "not installed"
if dep.Installed {
statusIcon = theme.ConfirmIcon()
statusText = "installed"
} else {
allInstalled = false
}
depBox := container.NewHBox(
widget.NewIcon(dep.Icon),
widget.NewLabel(dep.Name),
layout.NewSpacer(),
widget.NewIcon(statusIcon),
widget.NewLabel(statusText),
)
dependencyContainer.Add(depBox)
if !dep.Installed {
installBtn := widget.NewButton("install", func(i int) func() {
return func() {
ShowPasswordDialog(i)
}
}(i))
depBox = container.NewStack(
layout.NewSpacer(),
installBtn,
)
dependencyContainer.Add(depBox)
}
}
nextBtn := widget.NewButton("go to projects", func() {
if allInstalled {
ShowProjectScreen()
} else {
dialog.ShowInformation("dependencies missing",
"Please install all required dependencies before proceeding.", mainWindow)
}
})
nextBtn.Importance = widget.HighImportance
recheckBtn := widget.NewButton("check again", func() {
dependency.CheckDependencies(dependencies)
ShowDependencyScreen()
})
buttonContainer := container.New(layout.NewGridLayout(2), recheckBtn, nextBtn)
paddedButtonContainer := container.NewPadded(buttonContainer)
description.Alignment = fyne.TextAlignCenter
header := container.NewVBox(title, description)
content := container.NewBorder(header,
paddedButtonContainer,
nil,
nil,
dependencyContainer,
)
mainWindow.SetContent(content)
}