1package gocui
2
3import "time"
4
5func (g *Gui) loaderTick() {
6 go func() {
7 for range time.Tick(time.Millisecond * 50) {
8 for _, view := range g.Views() {
9 if view.HasLoader {
10 g.userEvents <- userEvent{func(g *Gui) error { return nil }}
11 break
12 }
13 }
14 }
15 }()
16}
17
18func (v *View) loaderLines() [][]cell {
19 duplicate := make([][]cell, len(v.lines))
20 for i := range v.lines {
21 if i < len(v.lines)-1 {
22 duplicate[i] = make([]cell, len(v.lines[i]))
23 copy(duplicate[i], v.lines[i])
24 } else {
25 duplicate[i] = make([]cell, len(v.lines[i])+2)
26 copy(duplicate[i], v.lines[i])
27 duplicate[i][len(duplicate[i])-2] = cell{chr: ' '}
28 duplicate[i][len(duplicate[i])-1] = Loader()
29 }
30 }
31
32 return duplicate
33}
34
35// Loader can show a loading animation
36func Loader() cell {
37 characters := "|/-\\"
38 now := time.Now()
39 nanos := now.UnixNano()
40 index := nanos / 50000000 % int64(len(characters))
41 str := characters[index : index+1]
42 chr := []rune(str)[0]
43 return cell{
44 chr: chr,
45 }
46}