reflect window updates in the tree view

This commit is contained in:
2026-03-03 14:12:36 +00:00
parent de59665c78
commit 4cb14dd40f
3 changed files with 37 additions and 147 deletions
+32 -84
View File
@@ -1,10 +1,7 @@
package views
import (
"esdi/tui/internal/dom"
"esdi/tui/internal/events"
"esdi/tui/internal/models"
"esdi/tui/internal/ui"
"fmt"
"github.com/gdamore/tcell/v2"
@@ -18,32 +15,29 @@ const (
LayoutToolNewWindowID = "new-window-action-form"
)
type windowReference struct {
ID int16
Form *dom.UINode
}
// type windowReference struct {
// ID int16
// Form *dom.UINode
// }
func getWindowRefFromNode(node *tview.TreeNode) *windowReference {
ref := node.GetReference()
wRef, ok := ref.(*windowReference)
// func getWindowRefFromNode(node *tview.TreeNode) *windowReference {
// ref := node.GetReference()
// wRef, ok := ref.(*windowReference)
//
// if !ok {
// return nil
// }
//
// return wRef
// }
if !ok {
return nil
}
return wRef
}
func FindNodeByID(
node *tview.TreeNode,
id int16,
) *tview.TreeNode {
func FindNodeByID(node *tview.TreeNode, id int16) *tview.TreeNode {
if node == nil {
return nil
}
if ref, ok := node.GetReference().(*windowReference); ok {
if ref.ID == id {
if ref, ok := node.GetReference().(*models.UIWindow); ok {
if ref.IDX == id {
return node
}
}
@@ -57,67 +51,6 @@ func FindNodeByID(
return nil
}
func BindWindowEvents(
bus *events.Bus,
doc *dom.DOM,
tree *tview.TreeView,
) {
bus.On(ui.WindowDestroyedEv{}, func(e any) {
root := tree.GetRoot()
if root == nil {
bus.Emit(ui.LogEv{Log: "unable to get current tree node"})
}
node := FindNodeByID(root, e.(ui.WindowDestroyedEv).ID)
if node != nil {
root.RemoveChild(node)
}
// NODE: add a log here in case it fails so we know whats going on
bus.Emit(ui.ForceRedraw{})
})
bus.On(ui.ErrorCreateWindowEv{}, func(e any) {
go func() {
bus.Emit(ui.LogEv{
Log: fmt.Sprintf(
"Error performing action: %s\n", e.(ui.ErrorCreateWindowEv).Error.Error(),
)})
}()
})
}
func getCurNodeRef(tree *tview.TreeView) (*windowReference, error) {
curNode := tree.GetCurrentNode()
if curNode == nil {
return nil, fmt.Errorf("unable to get current tree node")
}
winRef := getWindowRefFromNode(curNode)
if winRef == nil {
return nil, fmt.Errorf("unable to get window reference from tree node")
}
return winRef, nil
}
func layoutToolTreeViewOnSelect(bus *events.Bus) func(node *tview.TreeNode) {
return func(node *tview.TreeNode) {
// Get the window reference which will have the ID for the form
bus.Emit(ui.LogEv{Log: "PRESSED ENTER\n"})
ref := node.GetReference()
if ref == nil {
bus.Emit(ui.LogEv{Log: "Couldn't find reference for node\n"})
return
}
nodeWinRef := ref.(*windowReference)
bus.Emit(ui.ChangeFocusEv{Target: nodeWinRef.Form.Self})
}
}
type LayoutTreeView struct {
Tree *tview.TreeView
InputCapture func(*tcell.EventKey) *tcell.EventKey
@@ -266,5 +199,20 @@ func (ltv *LayoutToolView) DeleteWindowByNode(node *tview.TreeNode) {
}
func (ltv *LayoutToolView) UpdateFormView(win *models.UIWindow) {
// Update the form view
ltv.FormQuickAccess[win.IDX].SetValues(win)
// Update the treeview with the new title
root := ltv.LayoutTree.Tree.GetRoot()
if root == nil {
// NOTE: excuse me!?
return
}
node := FindNodeByID(root, win.IDX)
if node == nil {
return
}
node.SetText(windowInfoPageTitle(win.IDX, win.Window.Title.String()))
}