-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfront.go
More file actions
136 lines (109 loc) · 2.71 KB
/
front.go
File metadata and controls
136 lines (109 loc) · 2.71 KB
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package main
import (
"context"
"fmt"
"strings"
"time"
"github.com/mum4k/termdash/widgets/textinput"
"github.com/mum4k/termdash/widgets/text"
"github.com/mum4k/termdash/linestyle"
"github.com/mum4k/termdash/terminal/terminalapi"
"github.com/mum4k/termdash"
"github.com/mum4k/termdash/container"
"github.com/mum4k/termdash/terminal/termbox"
)
// We only need to redraw the screen when input changes happens right?
// i.e when we input characters in the search and so on..
// Create header (Search bar, date and time, session info)
// How to add widgets??
// Make make custom colors
// Create segment display
// call go func(ctx, obj) and then its works??
func clock(ctx context.Context, t *text.Text) {
ticker := time.NewTicker(time.Second) // Channel to time every second
defer ticker.Stop()
for {
select {
case <-ticker.C:
now := time.Now() // New tick
nowStr := now.Format("15 04")
parts := strings.Split(nowStr, " ")
spacer := ":"
if now.Second()%2 == 0 {
spacer = " "
}
date := now.Format("Jan 2 Mon")
t.Reset() // First delete text buffer
if err := t.Write(parts[0] + spacer + parts[1] + " - " + date); err != nil {
panic(err)
}
case <-ctx.Done():
return
}
}
}
func pullData(query string) {
fmt.Println("Searching for: " + query)
}
const reDraw = 250 * time.Millisecond
func main() {
t, err := termbox.New()
if err != nil {
fmt.Errorf("termbox.New => %v", err)
}
defer t.Close()
ctx, cancel := context.WithCancel(context.Background())
clockW, err := text.New()
if err != nil {
panic(err)
}
//field := make(chan string)
searchW, err := textinput.New(
textinput.Label(""),
textinput.Border(linestyle.None),
textinput.PlaceHolder("SEARCH"),
textinput.OnSubmit(func(text string) error {
//field <- text
pullData(text)
return nil
}),
textinput.ClearOnSubmit(),
)
if err != nil {
panic(err)
}
go clock(ctx, clockW)
c, err := container.New(
t,
container.SplitHorizontal(
container.Top(
container.SplitVertical(
container.Left( // search
container.Border(linestyle.Light),
container.PlaceWidget(searchW),
),
container.Right( // time and date
container.Border(linestyle.Light),
container.PlaceWidget(clockW),
),
container.SplitPercent(80),
),
),
container.Bottom(
container.Border(linestyle.Light),
),
container.SplitPercent(10),
),
)
if err != nil {
fmt.Errorf("termbox.New => %v", err)
}
quitter := func(k *terminalapi.Keyboard) {
if k.Key == 'q' || k.Key == 'Q' {
cancel()
}
}
if err := termdash.Run(ctx, t, c, termdash.RedrawInterval(reDraw), termdash.KeyboardSubscriber(quitter)); err != nil {
fmt.Errorf("termbox.New => %v", err)
}
}