-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathui.go
executable file
·113 lines (95 loc) · 1.83 KB
/
ui.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package main
import (
"log"
"r_txt/xreader"
"time"
ui "github.com/gizak/termui/v3"
"github.com/gizak/termui/v3/widgets"
)
const (
fakeShell = "(base) ➜ ~"
menuText = "[↑]:j [↓]:k [b]:Boss Key [c]:下一章 [q]:exit [g]:Show/Hide Grid, [q]:Quit"
fixedWidth = 80
interval = 3500
)
var (
p *widgets.Paragraph
r xreader.XReader
ticker *time.Ticker
showBorder = false
showHelp = false
showProgress = false
bossKey = false
timer = false
rowNumber = ""
color = 0
)
func setTimer() {
timer = !timer
if timer {
ticker = time.NewTicker(interval * time.Millisecond)
go func() {
for range ticker.C {
p.Text = r.Next()
ui.Render(p)
}
}()
} else {
ticker.Stop()
}
}
func updateParagraph(key string) {
p.Text = key
}
func switchColor() {
p.TextStyle.Fg = ui.Color(color % 8)
}
func displayHelp(current string) {
showHelp = !showHelp
if showHelp {
p.Text = menuText
} else {
p.Text = current
}
}
func displayBorder() {
showBorder = !showBorder
p.Border = showBorder
}
func displayProgress(current, progress string) {
showProgress = !showProgress
if showProgress {
p.Text = progress
} else {
p.Text = current
}
}
func displayBossKey(current string) {
bossKey = !bossKey
if bossKey {
p.Border = false
p.Text = fakeShell
} else {
p.Text = current
}
}
// Init ui & components
func Init(gr xreader.XReader) {
r = gr
if err := ui.Init(); err != nil {
log.Fatalf("failed to initialize the termui: %v", err)
}
//_, height := ui.TerminalDimensions()
width := fixedWidth
p = widgets.NewParagraph()
p.Border = true
p.BorderStyle.Fg=ui.ColorMagenta
p.BorderStyle.Bg=ui.ColorYellow
p.Text = r.Current()
p.SetRect(0, 0, width, 3)
p.TextStyle.Fg = ui.ColorWhite
p.BorderStyle.Fg = ui.ColorCyan
p.Border = showBorder
ui.Render(p)
handleEvents()
}