Files
MujicaUI/examples/gallery/pages_projects_time_demos.go
T

88 lines
3.1 KiB
Go

package main
import (
"fmt"
"time"
"github.com/egoist/mygo/ui"
"git.zacharyzhang.com/ZacharyZhang-NY/MujicaUI/core"
"git.zacharyzhang.com/ZacharyZhang-NY/MujicaUI/input"
"git.zacharyzhang.com/ZacharyZhang-NY/MujicaUI/project"
)
func projectsDemoMilestoneProgress(c *ui.Context, log func(string)) {
done := ui.Local(c.Root(), "377", func() float64 { return 3 })
if input.NumberInput(c, done, input.NumberInputOptions{Min: 0, Max: 8, Step: 1, Label: "Completed tasks"}).Changed() {
log(fmt.Sprintf("completed = %g", *done))
}
project.MilestoneProgress(c, project.Milestone{Title: "Release", Due: core.Date{Year: 2026, Month: 10, Day: 14}, Done: int(*done), Total: 8}, project.MilestoneProgressOptions{})
}
func projectsDemoWorkloadView(c *ui.Context, log func(string)) {
s := ui.Local(c.Root(), "378", func() struct {
assigned float64
loads []project.Workload
version int
} {
return struct {
assigned float64
loads []project.Workload
version int
}{assigned: 46, loads: []project.Workload{{Member: projectsMembers[0], Assigned: 32, Capacity: 40}, {Member: projectsMembers[1], Assigned: 46, Capacity: 40}, {Member: projectsMembers[2], Assigned: 12, Capacity: 20}}}
})
if input.NumberInput(c, &s.assigned, input.NumberInputOptions{Min: 0, Max: 80, Step: 1, Label: "Ben assigned hours"}).Changed() {
s.loads[1].Assigned = s.assigned
s.version++
log(fmt.Sprintf("assigned = %g", s.assigned))
}
ui.Box(c).Height(240).FillWidth().Children(func() { project.WorkloadView(c, s.loads, project.WorkloadViewOptions{Version: s.version}) })
}
func projectsDemoTimeTracker(c *ui.Context, log func(string)) {
s := ui.Local(c.Root(), "379", func() struct {
timer project.TimeTrackerState
disabled bool
} {
return struct {
timer project.TimeTrackerState
disabled bool
}{}
})
projectsCheck(c, log, &s.disabled, "Disabled")
ui.ScrollHorizontal(c).Height(120).FillWidth().Children(func() {
if project.TimeTracker(c, &s.timer, project.TimeTrackerOptions{Disabled: s.disabled}).Changed() {
log("tracked " + s.timer.Total(c.Now()).String())
}
})
}
func projectsDemoPomodoroTimer(c *ui.Context, log func(string)) {
s := ui.Local(c.Root(), "380", func() struct {
timer project.PomodoroState
disabled, hidden bool
seconds float64
} {
return struct {
timer project.PomodoroState
disabled, hidden bool
seconds float64
}{seconds: 10}
})
projectsCheck(c, log, &s.disabled, "Disabled")
projectsCheck(c, log, &s.hidden, "Hidden")
if input.NumberInput(c, &s.seconds, input.NumberInputOptions{Min: 1, Max: 1500, Step: 1, Label: "Focus seconds", Disabled: s.timer.Running()}).Changed() {
log(fmt.Sprintf("focus = %g seconds", s.seconds))
}
if s.hidden {
return
}
r := project.PomodoroTimer(c, &s.timer, project.PomodoroTimerOptions{Focus: time.Duration(s.seconds) * time.Second, Break: 5 * time.Second, LongBreak: 10 * time.Second, LongEvery: 2, Disabled: s.disabled})
if r.Changed() {
log(fmt.Sprintf("timer phase = %d, running = %v", s.timer.Phase(), s.timer.Running()))
}
if phase, ok := r.Finished(); ok {
log(fmt.Sprintf("finished phase %d", phase))
}
}