122 lines
2.5 KiB
Go
122 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/app"
|
|
"fyne.io/fyne/v2/canvas"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/layout"
|
|
"fyne.io/fyne/v2/theme"
|
|
"fyne.io/fyne/v2/widget"
|
|
)
|
|
|
|
type Project struct {
|
|
Path string `json:"path"`
|
|
Version float64 `json:"version"`
|
|
}
|
|
|
|
const jsonFilePath = "projects.json"
|
|
|
|
func loadProjects() ([]Project, error) {
|
|
file, err := os.ReadFile(jsonFilePath)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var projects []Project
|
|
if err := json.Unmarshal(file, &projects); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return projects, nil
|
|
}
|
|
|
|
func main() {
|
|
myApp := app.New()
|
|
myWindow := myApp.NewWindow("Unreal Project Launcher")
|
|
myWindow.Resize(fyne.NewSize(800, 600))
|
|
|
|
projects, err := loadProjects()
|
|
if err != nil {
|
|
fmt.Println("Error while loading projects")
|
|
}
|
|
|
|
logText := widget.NewMultiLineEntry()
|
|
logText.SetMinRowsVisible(5)
|
|
logText.Disable()
|
|
|
|
logMessage := func(msg string) {
|
|
logText.SetText(logText.Text + msg + "\n")
|
|
}
|
|
|
|
var projectList *fyne.Container
|
|
|
|
reloadUI := func() {
|
|
projectList.RemoveAll()
|
|
|
|
for _, project := range projects {
|
|
projectName := filepath.Base(project.Path)
|
|
iconPath := projectName + ".png"
|
|
var projectIcon fyne.Resource
|
|
|
|
if _, err := os.Stat(iconPath); err == nil {
|
|
icon, err := fyne.LoadResourceFromPath(iconPath)
|
|
if err == nil {
|
|
projectIcon = icon
|
|
}
|
|
}
|
|
|
|
if projectIcon == nil {
|
|
projectIcon = theme.FileIcon()
|
|
}
|
|
|
|
icon := canvas.NewImageFromResource(projectIcon)
|
|
icon.SetMinSize(fyne.NewSize(32, 32))
|
|
|
|
nameLabel := widget.NewLabel(projectName)
|
|
nameLabel.Alignment = fyne.TextAlignLeading
|
|
|
|
generateBtn := widget.NewButton("Generate", func() {
|
|
logMessage("Generate Project: " + projectName)
|
|
})
|
|
generateBtn.Resize(fyne.NewSize(150, 40))
|
|
generateBtn.Size().Min(fyne.NewSize(150, 40))
|
|
|
|
launchBtn := widget.NewButton("Start", func() {
|
|
logMessage("Start Project " + projectName)
|
|
})
|
|
launchBtn.Size().Min(fyne.NewSize(150, 40))
|
|
|
|
deleteBtn := widget.NewButton("X", func() {
|
|
logMessage("Delete Project " + projectName)
|
|
})
|
|
|
|
row := container.NewHBox(
|
|
icon,
|
|
nameLabel,
|
|
layout.NewSpacer(),
|
|
generateBtn,
|
|
launchBtn,
|
|
deleteBtn,
|
|
)
|
|
|
|
projectList.Add(row)
|
|
|
|
}
|
|
}
|
|
|
|
projectList = container.NewVBox()
|
|
reloadUI()
|
|
|
|
scrollContainer := container.NewVScroll(projectList)
|
|
mainContainer := container.NewBorder(nil, logText, nil, nil, scrollContainer)
|
|
|
|
myWindow.SetContent(mainContainer)
|
|
myWindow.ShowAndRun()
|
|
} |