From d26dcae65fa016c0c98fd293aa6d80193235e2e6 Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Fri, 6 Mar 2026 20:01:09 +0000 Subject: [PATCH] moving cdashdisplay data handling to its backend --- tui/internal/controllers/layout.go | 59 +++++++++------------ tui/internal/controllers/layout_moveTool.go | 21 ++++---- tui/internal/models/window.go | 10 ++-- tui/internal/services/cdashdisplay.go | 15 ++---- tui/internal/views/layoutTool.go | 30 +++++------ tui/internal/views/layoutTool_forms.go | 24 ++++----- 6 files changed, 72 insertions(+), 87 deletions(-) diff --git a/tui/internal/controllers/layout.go b/tui/internal/controllers/layout.go index a024916..8668e41 100644 --- a/tui/internal/controllers/layout.go +++ b/tui/internal/controllers/layout.go @@ -3,7 +3,6 @@ package controllers import ( "esdi/cdashdisplay" helper "esdi/helpers" - "esdi/tui/internal/models" "esdi/tui/internal/services" "esdi/tui/internal/views" "fmt" @@ -82,10 +81,10 @@ func (lc *LayoutController) registerHooks() { return } - nodeWinRef := nodeRef.(*models.UIWindow) - lc.Messages <- fmt.Sprintf("changing to -> %d\n", nodeWinRef.IDX) + nodeWinRef := nodeRef.(int16) + lc.Messages <- fmt.Sprintf("changing to -> %d\n", nodeWinRef) - lc.LayoutToolView.ShowWindowFormByID(nodeWinRef.IDX) + lc.LayoutToolView.ShowWindowFormByID(nodeWinRef) }) lc.LayoutToolView.LayoutTree.Tree.SetSelectedFunc(func(node *tview.TreeNode) { @@ -96,9 +95,9 @@ func (lc *LayoutController) registerHooks() { return } - nodeWinRef := nodeRef.(*models.UIWindow) + nodeWinRef := nodeRef.(int16) - lc.App.SetFocus(lc.LayoutToolView.FormQuickAccess[nodeWinRef.IDX].Form.Form) + lc.App.SetFocus(lc.LayoutToolView.FormQuickAccess[nodeWinRef].Form.Form) }) } @@ -182,29 +181,23 @@ func (lc *LayoutController) createWindow() { return } - err = lc.updateFormView( - &models.UIWindow{ - IDX: wID, - Window: *window, - }, - ) + err = lc.updateFormView(wID, window) if err != nil { - // NOTE: if we fail to append the window to the views we must delete it // altogether given we won't be able to manipulate it any further lc.Messages <- "failed to append window to views " + err.Error() } } -func (lc *LayoutController) updateFormView(win *models.UIWindow) error { +func (lc *LayoutController) updateFormView(idx int16, win *cdashdisplay.UIWindow) error { // OnSuccess we update our form to be an existing window form - err := lc.LayoutToolView.WindowCreatedSuccessfuly(win) + err := lc.LayoutToolView.WindowCreatedSuccessfuly(idx, win) if err != nil { return err } // Set the update window button behaviour - formView := lc.LayoutToolView.FormQuickAccess[win.IDX] + formView := lc.LayoutToolView.FormQuickAccess[idx] err = SetFormButtonCallback(formView.Form.Form, "Update", func() { lc.Messages <- "pressed update form button\n" window, err := lc.parseWindowFormData(*formView.Form) @@ -219,10 +212,11 @@ func (lc *LayoutController) updateFormView(win *models.UIWindow) error { return } - lc.updateWindowAction(&models.UIWindow{ - IDX: win.IDX, - Window: *window, - }) + lc.updateWindowAction(idx, win) + // lc.updateWindowAction(&models.UIWindow{ + // IDX: win.IDX, + // Window: *window, + // }) }) if err != nil { lc.Messages <- "failed to set callback for update button\n" @@ -278,8 +272,8 @@ func (lc *LayoutController) newWindowAction() { lc.App.SetFocus(newWindowForm.Form.Form) } -func (lc *LayoutController) updateWindowAction(win *models.UIWindow) { - err := lc.DevService.UpdateWindow(win.IDX, &win.Window) +func (lc *LayoutController) updateWindowAction(idx int16, win *cdashdisplay.UIWindow) { + err := lc.DevService.UpdateWindow(idx, win) lc.Messages <- fmt.Sprintf("Window: %v\n", win) @@ -291,25 +285,24 @@ func (lc *LayoutController) updateWindowAction(win *models.UIWindow) { func (lc *LayoutController) displayLoadedLayouts() { for idx, w := range lc.DevService.CDash.State.Layout.Windows { - - err := lc.updateFormView(&models.UIWindow{IDX: idx, Window: *w}) + err := lc.updateFormView(idx, w) if err != nil { lc.Messages <- "failed to add window to list" } } } -func (lc *LayoutController) getCurrentTreeNodeModel() (*tview.TreeNode, *models.UIWindow, error) { +func (lc *LayoutController) getCurrentTreeNodeModel() (*tview.TreeNode, int16, error) { // Grab the form for the currently selected window node := lc.LayoutToolView.LayoutTree.Tree.GetCurrentNode() if node == nil { - return nil, nil, fmt.Errorf("failed to grab current tree node") + return nil, -1, fmt.Errorf("failed to grab current tree node") } // From this node get its references - ref, ok := node.GetReference().(*models.UIWindow) + ref, ok := node.GetReference().(int16) if !ok { - return nil, nil, fmt.Errorf("failed to get data on currently selected window") + return nil, -1, fmt.Errorf("failed to get data on currently selected window") } return node, ref, nil @@ -345,10 +338,10 @@ func (lc *LayoutController) deleteWindow() { lc.Messages <- "couldn't get a hold of currently selected node\n" return } - win := curNode.GetReference().(*models.UIWindow) + wID := curNode.GetReference().(int16) // Delete it - err := lc.DevService.DeleteWindow(win.IDX) + err := lc.DevService.DeleteWindow(wID) if err != nil { lc.Messages <- "failed to delete window: " + err.Error() + "\n" return @@ -362,13 +355,13 @@ func (lc *LayoutController) deleteWindow() { func (lc *LayoutController) moveWindow() { lc.Messages <- "Entering move mode (ESC to exit)\n" - _, win, err := lc.getCurrentTreeNodeModel() + _, idx, err := lc.getCurrentTreeNodeModel() if err != nil { lc.Messages <- "failed to enter move mode: " + err.Error() + "\n" return } - formView := lc.LayoutToolView.FormQuickAccess[win.IDX].Form + formView := lc.LayoutToolView.FormQuickAccess[idx].Form oldCapture := formView.Form.GetInputCapture() formView.Form.SetInputCapture(func(ev *tcell.EventKey) *tcell.EventKey { @@ -392,7 +385,7 @@ func (lc *LayoutController) moveWindow() { } // Delegate the current handler input - handler := lc.MoveToolState.CurrentHandler(lc, win) + handler := lc.MoveToolState.CurrentHandler(lc, idx) if handler != nil { return handler(ev) } diff --git a/tui/internal/controllers/layout_moveTool.go b/tui/internal/controllers/layout_moveTool.go index 231e3e8..41bca62 100644 --- a/tui/internal/controllers/layout_moveTool.go +++ b/tui/internal/controllers/layout_moveTool.go @@ -2,7 +2,6 @@ package controllers import ( helper "esdi/helpers" - "esdi/tui/internal/models" "github.com/gdamore/tcell/v2" ) @@ -43,53 +42,55 @@ func keyToVector(r rune) (helper.Vector, bool) { return helper.Vector{}, false } -func (lc *LayoutController) handleMovementCapture(win *models.UIWindow, +func (lc *LayoutController) handleMovementCapture(idx int16, ev *tcell.EventKey) *tcell.EventKey { vec, ok := keyToVector(ev.Rune()) if !ok { return nil } - err := lc.DevService.MoveWindow(win, &vec) + err := lc.DevService.MoveWindow(idx, &vec) if err != nil { lc.Messages <- "failed to move window: " + err.Error() + "\n" return nil } // Success - update the form - lc.LayoutToolView.UpdateFormView(win) + window := lc.DevService.CDash.State.Layout.Windows[idx] + lc.LayoutToolView.UpdateFormView(idx, window) return nil } -func (lc *LayoutController) handleResizeCapture(win *models.UIWindow, +func (lc *LayoutController) handleResizeCapture(idx int16, ev *tcell.EventKey) *tcell.EventKey { vec, ok := keyToVector(ev.Rune()) if !ok { return nil } - err := lc.DevService.ResizeWindow(win, &vec) + err := lc.DevService.ResizeWindow(idx, &vec) if err != nil { lc.Messages <- "failed to resize window: " + err.Error() + "\n" return nil } // Success - update the form - lc.LayoutToolView.UpdateFormView(win) + window := lc.DevService.CDash.State.Layout.Windows[idx] + lc.LayoutToolView.UpdateFormView(idx, window) return nil } -func (s *windowManipState) CurrentHandler(lc *LayoutController, w *models.UIWindow) modeHandler { +func (s *windowManipState) CurrentHandler(lc *LayoutController, idx int16) modeHandler { switch s.Mode { case moveMode: return func(ev *tcell.EventKey) *tcell.EventKey { - return lc.handleMovementCapture(w, ev) + return lc.handleMovementCapture(idx, ev) } case resizeMode: return func(ev *tcell.EventKey) *tcell.EventKey { - return lc.handleResizeCapture(w, ev) + return lc.handleResizeCapture(idx, ev) } } diff --git a/tui/internal/models/window.go b/tui/internal/models/window.go index 3c0b8df..7357365 100644 --- a/tui/internal/models/window.go +++ b/tui/internal/models/window.go @@ -1,9 +1,7 @@ // Package models package models -import "esdi/cdashdisplay" - -type UIWindow struct { - IDX int16 - Window cdashdisplay.UIWindow -} +// type UIWindow struct { +// IDX int16 +// Window cdashdisplay.UIWindow +// } diff --git a/tui/internal/services/cdashdisplay.go b/tui/internal/services/cdashdisplay.go index 976164e..157ddeb 100644 --- a/tui/internal/services/cdashdisplay.go +++ b/tui/internal/services/cdashdisplay.go @@ -4,7 +4,6 @@ import ( "esdi/cdashdisplay" helper "esdi/helpers" "esdi/peripheral" - "esdi/tui/internal/models" "log/slog" ) @@ -69,26 +68,20 @@ func (cds *CDashService) DeleteWindow(idx int16) error { return cds.CDash.DestroyWindow(idx) } -func (cds *CDashService) ResizeWindow(win *models.UIWindow, vec *helper.Vector) error { - err := cds.CDash.ResizeWindow(win.IDX, vec) +func (cds *CDashService) ResizeWindow(idx int16, vec *helper.Vector) error { + err := cds.CDash.ResizeWindow(idx, vec) if err != nil { return err } - // Update the UI window data - win.Window = *cds.CDash.State.Layout.Windows[win.IDX] - return nil } -func (cds *CDashService) MoveWindow(win *models.UIWindow, vec *helper.Vector) error { - err := cds.CDash.MoveWindow(win.IDX, vec) +func (cds *CDashService) MoveWindow(idx int16, vec *helper.Vector) error { + err := cds.CDash.MoveWindow(idx, vec) if err != nil { return err } - // Update the UI window data - win.Window = *cds.CDash.State.Layout.Windows[win.IDX] - return nil } diff --git a/tui/internal/views/layoutTool.go b/tui/internal/views/layoutTool.go index 3378a72..4c2218c 100644 --- a/tui/internal/views/layoutTool.go +++ b/tui/internal/views/layoutTool.go @@ -1,7 +1,7 @@ package views import ( - "esdi/tui/internal/models" + "esdi/cdashdisplay" "fmt" "github.com/gdamore/tcell/v2" @@ -20,8 +20,8 @@ func FindNodeByID(node *tview.TreeNode, id int16) *tview.TreeNode { return nil } - if ref, ok := node.GetReference().(*models.UIWindow); ok { - if ref.IDX == id { + if ref, ok := node.GetReference().(int16); ok { + if ref == id { return node } } @@ -59,7 +59,7 @@ func NewLayoutTreeView() *LayoutTreeView { return view } -func (lt *LayoutTreeView) AddWindow(win *models.UIWindow) error { +func (lt *LayoutTreeView) AddWindow(idx int16, win *cdashdisplay.UIWindow) error { root := lt.Tree.GetRoot() if root == nil { return fmt.Errorf("unable to get root of treeview") @@ -67,8 +67,8 @@ func (lt *LayoutTreeView) AddWindow(win *models.UIWindow) error { // Create this new node newWindow := tview.NewTreeNode( - windowInfoPageTitle(win.IDX, win.Window.Title.String()), - ).SetReference(win) + windowInfoPageTitle(idx, win.Title.String()), + ).SetReference(idx) root.AddChild(newWindow) @@ -126,14 +126,14 @@ func NewLayoutToolView() *LayoutToolView { return view } -func (ltv *LayoutToolView) WindowCreatedSuccessfuly(win *models.UIWindow) error { +func (ltv *LayoutToolView) WindowCreatedSuccessfuly(idx int16, win *cdashdisplay.UIWindow) error { updateWindowForm := NewWindowFormView(win) // Update the pages ID ltv.LayoutActions.Pages.RemovePage(LayoutToolNewWindowID) AddAndShowPage( ltv.LayoutActions.Pages, - windowInfoPageID(win.IDX), + windowInfoPageID(idx), updateWindowForm.Form.Form, ) @@ -141,10 +141,10 @@ func (ltv *LayoutToolView) WindowCreatedSuccessfuly(win *models.UIWindow) error ltv.LayoutActions.CreateWindowView = nil // Add this form thing to the quick access map - ltv.FormQuickAccess[win.IDX] = updateWindowForm + ltv.FormQuickAccess[idx] = updateWindowForm // Add it to the tree view - return ltv.LayoutTree.AddWindow(win) + return ltv.LayoutTree.AddWindow(idx, win) } func (ltv *LayoutToolView) ShowCreateWindowForm() { @@ -174,13 +174,13 @@ func (ltv *LayoutToolView) DeleteWindowByNode(node *tview.TreeNode) { // We have to delete it from the map // This isn't very safe now is it? - delete(ltv.FormQuickAccess, node.GetReference().(*models.UIWindow).IDX) + delete(ltv.FormQuickAccess, node.GetReference().(int16)) // Did we delete everything ??? } -func (ltv *LayoutToolView) UpdateFormView(win *models.UIWindow) { +func (ltv *LayoutToolView) UpdateFormView(idx int16, win *cdashdisplay.UIWindow) { // Update the form view - ltv.FormQuickAccess[win.IDX].SetValues(win) + ltv.FormQuickAccess[idx].SetValues(win) // Update the treeview with the new title root := ltv.LayoutTree.Tree.GetRoot() @@ -189,10 +189,10 @@ func (ltv *LayoutToolView) UpdateFormView(win *models.UIWindow) { return } - node := FindNodeByID(root, win.IDX) + node := FindNodeByID(root, idx) if node == nil { return } - node.SetText(windowInfoPageTitle(win.IDX, win.Window.Title.String())) + node.SetText(windowInfoPageTitle(idx, win.Title.String())) } diff --git a/tui/internal/views/layoutTool_forms.go b/tui/internal/views/layoutTool_forms.go index c283fc6..b6f18cc 100644 --- a/tui/internal/views/layoutTool_forms.go +++ b/tui/internal/views/layoutTool_forms.go @@ -3,7 +3,7 @@ package views import ( "fmt" - "esdi/tui/internal/models" + "esdi/cdashdisplay" "github.com/rivo/tview" ) @@ -90,7 +90,7 @@ type WindowFormView struct { UpdateBtn *tview.Button } -func NewWindowFormView(win *models.UIWindow) *WindowFormView { +func NewWindowFormView(win *cdashdisplay.UIWindow) *WindowFormView { view := &WindowFormView{ Form: NewCDashDisplayWindowFormView(), } @@ -106,17 +106,17 @@ func NewWindowFormView(win *models.UIWindow) *WindowFormView { return view } -func (fv *WindowFormView) SetValues(win *models.UIWindow) { - fv.Form.X.SetText(fmt.Sprintf("%d", win.Window.Dims.X0)) - fv.Form.Y.SetText(fmt.Sprintf("%d", win.Window.Dims.Y0)) - fv.Form.Width.SetText(fmt.Sprintf("%d", win.Window.Dims.Width)) - fv.Form.Height.SetText(fmt.Sprintf("%d", win.Window.Dims.Height)) - fv.Form.Title.SetText(win.Window.Title.String()) - fv.Form.PreviewValue.SetText(win.Window.Opts.PreviewValue.String()) - fv.Form.ShowID.SetChecked(win.Window.Opts.ShowID == 1) +func (fv *WindowFormView) SetValues(win *cdashdisplay.UIWindow) { + fv.Form.X.SetText(fmt.Sprintf("%d", win.Dims.X0)) + fv.Form.Y.SetText(fmt.Sprintf("%d", win.Dims.Y0)) + fv.Form.Width.SetText(fmt.Sprintf("%d", win.Dims.Width)) + fv.Form.Height.SetText(fmt.Sprintf("%d", win.Dims.Height)) + fv.Form.Title.SetText(win.Title.String()) + fv.Form.PreviewValue.SetText(win.Opts.PreviewValue.String()) + fv.Form.ShowID.SetChecked(win.Opts.ShowID == 1) fv.Form.WinType.SetCurrentOption(0) // NOTE: this needs to set the correct option - fv.Form.TitleSize.SetCurrentOption(int(win.Window.Decor.TitleSize)) - fv.Form.TextSize.SetCurrentOption(int(win.Window.Decor.TextSize)) + fv.Form.TitleSize.SetCurrentOption(int(win.Decor.TitleSize)) + fv.Form.TextSize.SetCurrentOption(int(win.Decor.TextSize)) } func windowInfoPageID(idx int16) string {