gte/cmd/android-app/screen/tasks.go

91 lines
1.7 KiB
Go
Raw Normal View History

2022-10-18 16:58:12 +02:00
package screen
import (
2022-10-20 13:29:13 +02:00
"sort"
2022-10-18 16:58:12 +02:00
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/data/binding"
"fyne.io/fyne/v2/widget"
)
type SyncTasksRequest struct{}
2022-10-20 10:40:46 +02:00
type MarkTaskDoneRequest struct {
ID string
}
2022-10-18 16:58:12 +02:00
type Tasks struct {
2022-10-20 10:40:46 +02:00
status binding.String
tasks []Task
taskLabels binding.StringList
selectedTask string
out chan interface{}
2022-10-18 16:58:12 +02:00
}
func NewTasks(out chan interface{}) *Tasks {
return &Tasks{
2022-10-20 10:40:46 +02:00
status: binding.NewString(),
tasks: []Task{},
taskLabels: binding.NewStringList(),
out: out,
2022-10-18 16:58:12 +02:00
}
}
func (t *Tasks) Refresh(state State) {
2022-10-20 08:50:52 +02:00
t.status.Set(state.Status)
2022-10-20 10:40:46 +02:00
t.tasks = state.Tasks
tls := []string{}
for _, t := range t.tasks {
tls = append(tls, t.Action)
}
2022-10-20 13:29:13 +02:00
sort.Strings(tls)
2022-10-20 10:40:46 +02:00
t.taskLabels.Set(tls)
2022-10-18 16:58:12 +02:00
}
func (t *Tasks) Content() fyne.CanvasObject {
2022-10-20 08:50:52 +02:00
statusLabel := widget.NewLabelWithData(t.status)
2022-10-18 16:58:12 +02:00
refreshButton := widget.NewButton("refresh", func() {
t.out <- SyncTasksRequest{}
})
2022-10-20 10:40:46 +02:00
doneButton := widget.NewButton("done", func() {
t.markDone()
})
2022-10-18 16:58:12 +02:00
list := widget.NewListWithData(
2022-10-20 10:40:46 +02:00
t.taskLabels,
2022-10-18 16:58:12 +02:00
func() fyne.CanvasObject {
return widget.NewLabel("template")
},
func(i binding.DataItem, o fyne.CanvasObject) {
o.(*widget.Label).Bind(i.(binding.String))
},
)
2022-10-20 10:40:46 +02:00
list.OnSelected = t.selectItem
2022-10-18 16:58:12 +02:00
return container.NewBorder(
2022-10-20 08:50:52 +02:00
container.NewHBox(refreshButton, statusLabel),
2022-10-20 10:40:46 +02:00
doneButton,
2022-10-18 16:58:12 +02:00
nil,
nil,
list,
)
}
2022-10-20 10:40:46 +02:00
func (t *Tasks) selectItem(lid widget.ListItemID) {
id := int(lid)
if id < 0 || id >= len(t.tasks) {
return
}
t.selectedTask = t.tasks[id].ID
}
func (t *Tasks) markDone() {
if t.selectedTask == "" {
return
}
t.out <- MarkTaskDoneRequest{
ID: t.selectedTask,
}
}