package ui import ( "cli-mon/yabl" "github.com/gdamore/tcell/v2" "github.com/rivo/tview" "os" ) const ( connectors_page = "Connectors" ) type page struct { left string right string primitive tview.Primitive } func InitCliApp(events <-chan *yabl.Event) { var app = tview.NewApplication() pages := tview.NewPages() var active page var layout map[string]page connectors := newConnectorsGrid() page2 := tview.NewBox().SetBorder(true).SetTitle("Bbbbbb") layout = map[string]page{ connectors_page: { left: "Page2", right: "Page2", primitive: connectors, }, "Page2": { left: connectors_page, right: connectors_page, primitive: page2, }, } for k, p := range layout { pages.AddPage(k, p.primitive, true, true) } active = layout["Page1"] pages.SwitchToPage("Page1") app.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { switch event.Key() { case tcell.KeyRight: pages.SwitchToPage(active.right) active = layout[active.right] return nil case tcell.KeyLeft: pages.SwitchToPage(active.left) active = layout[active.left] return nil case tcell.KeyCtrlC: app.Stop() } return event }) go func() { if err := app.SetRoot(pages, true).EnableMouse(true).Run(); err != nil { panic(err) } os.Exit(0) }() for event := range events { switch obj := event.Object.(type) { case *yabl.PuPresentEnergy: connectors.updatePU(event.UnitId, event.Field, event.Value) case *yabl.PuPeriphery: connectors.updatePU(event.UnitId, event.Field, event.Value) case *yabl.PuDebug: connectors.updatePU(event.UnitId, event.Field, event.Value) case *yabl.PuErrors: connectors.updatePuErrors(obj) } app.Draw() } }