Files
esdi/tui/internal/views/stream.go
T

78 lines
1.5 KiB
Go

package views
import (
"esdi/tui/internal/dom"
"esdi/tui/internal/events"
"esdi/tui/internal/ui"
"os"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
)
// Car data lengths
const (
SpeedLen = 5
GearLen = 3
RpmLen = 6
BrakeBiasLen = 6
)
const (
streamingBoxID = "streaming-box"
)
func streamingWindow(bus *events.Bus, doc *dom.DOM) {
bus.Emit(ui.LogEv{Log: "creating streaming window"})
// Get the ActionPages parent
box := tview.NewTextView()
box.SetBorder(true).SetTitle("STREAMING")
box.SetInputCapture(func(ev *tcell.EventKey) *tcell.EventKey {
switch ev.Key() {
case tcell.KeyEsc:
// well, I really need to design the UI (as if lmao) better
os.Exit(0)
}
return ev
})
var err error
var boxNode *dom.UINode
// delete the currently existing streaming-box
actionPages := doc.GetElemByID(LayoutToolActionPagesID).(*tview.Pages)
actionPages.RemovePage(streamingBoxID)
// Get the currently exisiting streaming box in the dom so we can delete it
boxNode = doc.GetNodeByID(streamingBoxID)
if boxNode != nil {
doc.DeleteElem(boxNode)
}
// Register this streaming box as an UINode
boxNode, err = doc.NewUINode(
streamingBoxID,
doc.GetElemByID(LayoutToolActionPagesID),
box,
)
if err != nil {
return
}
// Add it to the action pages and view it
// AddAndShowPage(actionPages, boxNode, true)
bus.Emit(ui.StartStreamingReqEv{})
bus.On(ui.StreamDataEv{}, func(e any) {
bus.Emit(ui.RedrawEv{
Fn: func() {
sd := e.(ui.StreamDataEv)
box.SetText(sd.Str)
},
})
})
}