Goui.go -rw-r--r-- 2.3 KiB
1package main
2
3import (
4 "fmt"
5
6 "github.com/gizak/termui"
7)
8
9func render(wheel *Wheel, status *Status) termui.GridBufferer {
10 var text string
11 switch status.State {
12 case RUNNING:
13 text = fmt.Sprintf(
14 `[%d/%d] Pomodoros completed
15
16 %s %s remaining
17
18
19 [q] - quit [p] - pause
20 `,
21 status.Count,
22 status.NPomodoros,
23 wheel,
24 status.Remaining,
25 )
26 case BREAKING:
27 text = `It is time to take a break!
28
29 Once you a ready press [enter]
30 to begin the next Pomodoro.
31
32 [q] - quit [p] - pause
33 `
34 case PAUSED:
35 text = `Pomo is suspended.
36
37 Press [p] to continue.
38
39
40 [q] - quit [p] - unpause
41 `
42 case COMPLETE:
43 text = `This session has concluded.
44
45 Press [q] to exit.
46
47
48 [q] - quit
49 `
50 }
51 par := termui.NewPar(text)
52 par.Height = 8
53 par.BorderLabel = fmt.Sprintf("Pomo - %s", status.State)
54 par.BorderLabelFg = termui.ColorWhite
55 par.BorderFg = termui.ColorRed
56 if status.State == RUNNING {
57 par.BorderFg = termui.ColorGreen
58 }
59 return par
60}
61
62func newBlk() termui.GridBufferer {
63 blk := termui.NewBlock()
64 blk.Height = termui.TermHeight() / 3
65 blk.Border = false
66 return blk
67}
68
69func centered(part termui.GridBufferer) *termui.Grid {
70 grid := termui.NewGrid(
71 termui.NewRow(
72 termui.NewCol(12, 0, newBlk()),
73 ),
74 termui.NewRow(
75 termui.NewCol(3, 0, newBlk()),
76 termui.NewCol(6, 0, part),
77 termui.NewCol(3, 0, newBlk()),
78 ),
79 termui.NewRow(
80 termui.NewCol(12, 0, newBlk()),
81 ),
82 )
83 grid.BgColor = termui.ThemeAttr("bg")
84 grid.Width = termui.TermWidth()
85 grid.Align()
86 return grid
87}
88
89func startUI(runner *TaskRunner) {
90 err := termui.Init()
91 if err != nil {
92 panic(err)
93 }
94 wheel := Wheel(0)
95
96 defer termui.Close()
97
98 termui.Render(centered(render(&wheel, runner.Status())))
99
100 termui.Handle("/timer/1s", func(termui.Event) {
101 termui.Render(centered(render(&wheel, runner.Status())))
102 })
103
104 termui.Handle("/sys/wnd/resize", func(termui.Event) {
105 termui.Render(centered(render(&wheel, runner.Status())))
106 })
107
108 termui.Handle("/sys/kbd/<enter>", func(termui.Event) {
109 runner.Toggle()
110 termui.Render(centered(render(&wheel, runner.Status())))
111 })
112
113 termui.Handle("/sys/kbd/p", func(termui.Event) {
114 runner.Pause()
115 termui.Render(centered(render(&wheel, runner.Status())))
116 })
117
118 termui.Handle("/sys/kbd/q", func(termui.Event) {
119 termui.StopLoop()
120 })
121
122 termui.Loop()
123}