8 "github.com/layeh/barnard/uiterm"
9 "github.com/layeh/gumble/gumble"
10 "github.com/kennygrant/sanitize"
16 uiViewStatus = "status"
18 uiViewInputStatus = "inputstatus"
19 uiViewOutput = "output"
23 func esc(str string) string {
24 return sanitize.HTML(str)
27 func (b *Barnard) UpdateInputStatus(status string) {
28 b.UiInputStatus.Text = status
33 func (b *Barnard) AddOutputLine(line string) {
35 b.UiOutput.AddLine(fmt.Sprintf("[%02d:%02d:%02d] %s", now.Hour(), now.Minute(), now.Second(), line))
39 func (b *Barnard) AddOutputMessage(sender *gumble.User, message string) {
41 b.AddOutputLine(message)
43 b.AddOutputLine(fmt.Sprintf("%s: %s", sender.Name(), strings.TrimSpace(esc(message))))
47 func (b *Barnard) OnVoiceToggle(ui *uiterm.Ui, key uiterm.Key) {
48 if b.UiStatus.Text == " Tx " {
49 b.UiStatus.Text = " Idle "
50 b.UiStatus.Fg = uiterm.ColorBlack
51 b.UiStatus.Bg = uiterm.ColorWhite
54 b.UiStatus.Fg = uiterm.ColorWhite | uiterm.AttrBold
55 b.UiStatus.Bg = uiterm.ColorRed
56 b.UiStatus.Text = " Tx "
57 b.Stream.StartSource()
62 func (b *Barnard) OnQuitPress(ui *uiterm.Ui, key uiterm.Key) {
67 func (b *Barnard) OnClearPress(ui *uiterm.Ui, key uiterm.Key) {
72 func (b *Barnard) OnScrollOutputUp(ui *uiterm.Ui, key uiterm.Key) {
77 func (b *Barnard) OnScrollOutputDown(ui *uiterm.Ui, key uiterm.Key) {
78 b.UiOutput.ScrollDown()
82 func (b *Barnard) OnScrollOutputTop(ui *uiterm.Ui, key uiterm.Key) {
83 b.UiOutput.ScrollTop()
87 func (b *Barnard) OnScrollOutputBottom(ui *uiterm.Ui, key uiterm.Key) {
88 b.UiOutput.ScrollBottom()
92 func (b *Barnard) OnFocusPress(ui *uiterm.Ui, key uiterm.Key) {
93 active := b.Ui.Active()
94 if active == &b.UiInput {
95 b.Ui.SetActive(uiViewTree)
96 } else if active == &b.UiTree {
97 b.Ui.SetActive(uiViewInput)
101 func (b *Barnard) OnTextInput(ui *uiterm.Ui, textbox *uiterm.Textbox, text string) {
105 if b.Client != nil && b.Client.Self() != nil {
106 b.Client.Self().Channel().Send(text, false)
107 b.AddOutputMessage(b.Client.Self(), text)
111 func (b *Barnard) OnUiInitialize(ui *uiterm.Ui) {
112 ui.Add(uiViewLogo, &uiterm.Label{
114 Fg: uiterm.ColorWhite | uiterm.AttrBold,
115 Bg: uiterm.ColorMagenta,
118 ui.Add(uiViewTop, &uiterm.Label{
119 Fg: uiterm.ColorWhite,
120 Bg: uiterm.ColorBlue,
123 b.UiStatus = uiterm.Label{
125 Fg: uiterm.ColorBlack,
126 Bg: uiterm.ColorWhite,
128 ui.Add(uiViewStatus, &b.UiStatus)
130 b.UiInput = uiterm.Textbox{
131 Fg: uiterm.ColorWhite,
132 Bg: uiterm.ColorBlack,
133 Input: b.OnTextInput,
135 ui.Add(uiViewInput, &b.UiInput)
137 b.UiInputStatus = uiterm.Label{
138 Fg: uiterm.ColorBlack,
139 Bg: uiterm.ColorWhite,
141 ui.Add(uiViewInputStatus, &b.UiInputStatus)
143 b.UiOutput = uiterm.Textview{
144 Fg: uiterm.ColorWhite,
145 Bg: uiterm.ColorBlack,
147 ui.Add(uiViewOutput, &b.UiOutput)
149 b.UiTree = uiterm.Tree{
150 Generator: b.TreeItem,
151 Listener: b.TreeItemSelect,
152 Fg: uiterm.ColorWhite,
153 Bg: uiterm.ColorBlack,
155 ui.Add(uiViewTree, &b.UiTree)
157 b.Ui.AddKeyListener(b.OnFocusPress, uiterm.KeyTab)
158 b.Ui.AddKeyListener(b.OnVoiceToggle, uiterm.KeyF1)
159 b.Ui.AddKeyListener(b.OnQuitPress, uiterm.KeyF10)
160 b.Ui.AddKeyListener(b.OnClearPress, uiterm.KeyCtrlL)
161 b.Ui.AddKeyListener(b.OnScrollOutputUp, uiterm.KeyPgup)
162 b.Ui.AddKeyListener(b.OnScrollOutputDown, uiterm.KeyPgdn)
163 b.Ui.AddKeyListener(b.OnScrollOutputTop, uiterm.KeyHome)
164 b.Ui.AddKeyListener(b.OnScrollOutputBottom, uiterm.KeyEnd)
167 func (b *Barnard) OnUiResize(ui *uiterm.Ui, width, height int) {
168 ui.SetBounds(uiViewLogo, 0, 0, 9, 1)
169 ui.SetBounds(uiViewTop, 9, 0, width-6, 1)
170 ui.SetBounds(uiViewStatus, width-6, 0, width, 1)
171 ui.SetBounds(uiViewInput, 0, height-1, width, height)
172 ui.SetBounds(uiViewInputStatus, 0, height-2, width, height-1)
173 ui.SetBounds(uiViewOutput, 0, 1, width-20, height-2)
174 ui.SetBounds(uiViewTree, width-20, 1, width, height-2)