81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
package gui
|
|
|
|
import (
|
|
"code.ewintr.nl/emdb/desktop-client/backend"
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/app"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/data/binding"
|
|
"fyne.io/fyne/v2/layout"
|
|
"fyne.io/fyne/v2/widget"
|
|
)
|
|
|
|
type GUI struct {
|
|
a fyne.App
|
|
w fyne.Window
|
|
s *backend.State
|
|
c chan backend.Command
|
|
}
|
|
|
|
func New(c chan backend.Command, s *backend.State) *GUI {
|
|
a := app.New()
|
|
w := a.NewWindow("EMDB")
|
|
w.Resize(fyne.NewSize(800, 600))
|
|
|
|
g := &GUI{
|
|
a: a,
|
|
w: w,
|
|
s: s,
|
|
c: c,
|
|
}
|
|
|
|
g.SetContent()
|
|
|
|
return g
|
|
}
|
|
|
|
func (g *GUI) Run() {
|
|
g.w.ShowAndRun()
|
|
}
|
|
|
|
func (g *GUI) SetContent() {
|
|
label1 := widget.NewLabel("Label 1")
|
|
label2 := widget.NewLabel("Label 2")
|
|
value2 := widget.NewLabel("Something")
|
|
|
|
input := widget.NewEntry()
|
|
input.SetPlaceHolder("Enter text...")
|
|
|
|
form := container.New(layout.NewFormLayout(), label1, input, label2, value2)
|
|
|
|
button := widget.NewButton("Save", func() {
|
|
g.c <- backend.Command{
|
|
Name: backend.CommandAdd,
|
|
Args: map[string]any{
|
|
backend.ArgName: input.Text,
|
|
},
|
|
}
|
|
})
|
|
|
|
grid := container.NewBorder(nil, button, nil, nil, form)
|
|
|
|
logLines := container.NewVScroll(widget.NewLabelWithData(g.s.Log))
|
|
//logLines.ScrollToBottom()
|
|
|
|
list := widget.NewListWithData(g.s.Watched,
|
|
func() fyne.CanvasObject {
|
|
return widget.NewLabel("template")
|
|
},
|
|
func(i binding.DataItem, o fyne.CanvasObject) {
|
|
o.(*widget.Label).Bind(i.(binding.String))
|
|
})
|
|
|
|
tabs := container.NewAppTabs(
|
|
container.NewTabItem("Watched", list),
|
|
container.NewTabItem("TheMovieDB", grid),
|
|
container.NewTabItem("Log", logLines),
|
|
)
|
|
|
|
g.w.SetContent(tabs)
|
|
}
|