From 2952ec70855f3d25a39256dbd2846dacd6f9c8e6 Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Wed, 14 Jan 2026 22:53:50 +0000 Subject: [PATCH] Adding the peripheralDeviceClerk to the UI --- tui/internal/controllers/mainc.go | 32 +++++++++++++++++++++----- tui/internal/tui/tui.go | 6 ----- tui/internal/ui/events.go | 8 +++++++ tui/internal/views/mainFlex.go | 38 ++++++++++++++++++++++++------- 4 files changed, 64 insertions(+), 20 deletions(-) diff --git a/tui/internal/controllers/mainc.go b/tui/internal/controllers/mainc.go index 4d33012..f08d63a 100644 --- a/tui/internal/controllers/mainc.go +++ b/tui/internal/controllers/mainc.go @@ -2,9 +2,11 @@ package controllers import ( + "esdi/peripheral" "esdi/tui/internal/dom" "esdi/tui/internal/events" "esdi/tui/internal/ui" + "fmt" "github.com/rivo/tview" ) @@ -15,16 +17,18 @@ type Ctrls struct { } type MainController struct { - App *tview.Application - Dom *dom.DOM - EvBus *events.Bus + App *tview.Application + Dom *dom.DOM + EvBus *events.Bus + DevClerk *peripheral.PeripheralDeviceClerk } func NewMainController() *MainController { mc := &MainController{ - App: tview.NewApplication(), - Dom: dom.NewDOM(), - EvBus: events.NewBus(), + App: tview.NewApplication(), + Dom: dom.NewDOM(), + EvBus: events.NewBus(), + DevClerk: peripheral.NewPeripheralDeviceClerk(), } mc.EvBus.On(ui.RedrawEv{}, func(e any) { @@ -39,5 +43,21 @@ func NewMainController() *MainController { mc.EvBus.Emit(ui.PrintLogEv{Log: e.(ui.LogEv).Log}) }) + mc.EvBus.On(ui.FindCDashDisplay{}, func(e any) { + err := mc.DevClerk.FindDevices() + if err != nil { + mc.EvBus.Emit(ui.LogEv{Log: "Error finding devices: " + err.Error() + "\n"}) + } + + if len(mc.DevClerk.Devices) == 0 { + mc.EvBus.Emit(ui.LogEv{Log: " there are no devices\n"}) + } + + for _, d := range mc.DevClerk.Devices { + msg := fmt.Sprintf(" [%2d] %s\n", d.ID, d.Name) + mc.EvBus.Emit(ui.LogEv{Log: msg}) + } + }) + return mc } diff --git a/tui/internal/tui/tui.go b/tui/internal/tui/tui.go index f4da818..0d70e01 100644 --- a/tui/internal/tui/tui.go +++ b/tui/internal/tui/tui.go @@ -26,12 +26,6 @@ func Start() error { controllers.NewLayoutController(mc.EvBus) - // Make the output window - err := views.BuildOutputWindow(mc.EvBus, mc.Dom) - if err != nil { - panic("failed to create output window") - } - // Set the main view mainUINode, err := views.BuildMainFlex(mc.EvBus, mc.Dom) if err != nil { diff --git a/tui/internal/ui/events.go b/tui/internal/ui/events.go index 12dfb90..dd91225 100644 --- a/tui/internal/ui/events.go +++ b/tui/internal/ui/events.go @@ -41,3 +41,11 @@ type ErrorCreateWindowEv struct { type ErrorFormParseEv struct { Error error } + +// Layout events -------------------------------------------------------------- + +// Device events + +type FindCDashDisplay struct{} + +// Device events -------------------------------------------------------------- diff --git a/tui/internal/views/mainFlex.go b/tui/internal/views/mainFlex.go index ce92222..0a3cbf3 100644 --- a/tui/internal/views/mainFlex.go +++ b/tui/internal/views/mainFlex.go @@ -8,6 +8,7 @@ import ( "esdi/tui/internal/events" "esdi/tui/internal/ui" + "github.com/gdamore/tcell/v2" "github.com/rivo/tview" ) @@ -59,14 +60,14 @@ func buildRightSideFlex(bus *events.Bus, doc *dom.DOM) (*dom.UINode, error) { return nil, err } - outputWin := doc.GetElemByID(outputPaneID) - if outputWin == nil { - panic("failed to attach output win to UI") - } + // outputWin := doc.GetElemByID(outputPaneID) + // if outputWin == nil { + // panic("failed to attach output win to UI") + // } flex. - AddItem(apiToolPagesNode.Self, 0, 5, false). - AddItem(outputWin, 0, 2, false) + AddItem(apiToolPagesNode.Self, 0, 5, false) + // AddItem(outputWin, 0, 2, false) return flexNode, nil } @@ -85,7 +86,14 @@ func BuildMainFlex(bus *events.Bus, doc *dom.DOM) (*tview.Flex, error) { AddItem("layout", "build a layout for CDashDisplay", 0, func() { layoutToolUIOnSelect(bus, doc) }) - deviceAPIList.SetBorder(true).SetTitle("list") + deviceAPIList.SetBorder(true).SetTitle("list"). + SetInputCapture(func(ev *tcell.EventKey) *tcell.EventKey { + switch ev.Rune() { + case 'r': + bus.Emit(ui.FindCDashDisplay{}) + } + return ev + }) apiListWindowUINode, err := doc.NewUINode(deviceAPIListID, doc.GetRootElem(), deviceAPIList) @@ -102,5 +110,19 @@ func BuildMainFlex(bus *events.Bus, doc *dom.DOM) (*tview.Flex, error) { AddItem(apiListWindowUINode.Self, 0, 1, false). AddItem(rightSideFlex.Self, 0, 4, false) - return mainFlex, nil + // Output window + err = BuildOutputWindow(bus, doc) + if err != nil { + panic("failed to create output window") + } + + // Flex with debug window + // -------------------------------------------------------------------------- + flexWithOutputWindow := tview.NewFlex().SetDirection(tview.FlexRow) + flexWithOutputWindow. + AddItem(mainFlex, 0, 5, true). + AddItem(doc.GetElemByID(outputPaneID), 0, 2, false) + // -------------------------------------------------------------------------- + + return flexWithOutputWindow, nil }