need proper locking

This commit is contained in:
Jeff Carr 2025-03-04 20:29:27 -06:00
parent 5e1ec700fd
commit 860908c82f
3 changed files with 43 additions and 16 deletions

View File

@ -134,7 +134,7 @@ func (me *TreeInfo) doAction(a widget.Action) {
me.Hide(n) me.Hide(n)
} }
log.Info("tree: todo: remove child from parent") log.Info("tree: todo: remove child from parent")
n.DeleteNode() me.DeleteNode(n)
// now remove the child from the parent // now remove the child from the parent
default: default:
log.Log(TREEWARN, "tree.Action() unknown action", a.ActionType, "on wId", a.WidgetId) log.Log(TREEWARN, "tree.Action() unknown action", a.ActionType, "on wId", a.WidgetId)

View File

@ -6,6 +6,8 @@ import (
) )
func (me *TreeInfo) AddNode(a *widget.Action) *Node { func (me *TreeInfo) AddNode(a *widget.Action) *Node {
// me.Lock()
// defer me.Unlock()
return AddNode(a) return AddNode(a)
} }
@ -54,7 +56,9 @@ func AddNode(a *widget.Action) *Node {
return n return n
} }
func (n *Node) DeleteNode() { func (me *TreeInfo) DeleteNode(n *Node) {
me.Lock()
defer me.Unlock()
p := n.Parent p := n.Parent
for i, child := range p.children { for i, child := range p.children {
log.Log(TREE, "parent has child:", i, child.WidgetId, child.GetProgName()) log.Log(TREE, "parent has child:", i, child.WidgetId, child.GetProgName())

View File

@ -47,12 +47,29 @@ func (me *TreeInfo) doTable(a widget.Action) {
// log.Info("TREE already has UUID", i, ot.Uuid) // log.Info("TREE already has UUID", i, ot.Uuid)
if t.Uuid == ot.Uuid { if t.Uuid == ot.Uuid {
log.Info("TREE found UUID! update table here", i, ot.Uuid) log.Info("TREE found UUID! update table here", i, ot.Uuid)
if ot.Grid == nil {
log.Info("TREE found UUID! ot.grid.Id = nil. need to find grid id here")
return
} else {
log.Info("TREE found UUID! grid.Id =", ot.Grid.Id)
t.Grid = ot.Grid
}
if t.Grid == nil {
log.Info("TREE found UUID! grid.Id = nil. need to find grid id here")
return
}
log.Info("TREE found UUID! update table here", i, ot.Uuid, "grid.Id =", t.Grid.Id)
me.updateTable(t) me.updateTable(t)
return return
} }
} }
me.currentTables = append(me.currentTables, t) me.currentTables = append(me.currentTables, t)
if t.Grid == nil {
log.Info("NEW TREE ERROR: grid.Id = nil need to set grid id here")
} else {
log.Info("NEW TREE: grid.Id =", t.Grid.Id)
}
me.makeTable(t) me.makeTable(t)
} }
} }
@ -73,9 +90,27 @@ func (grid *Node) makeGridLabel(pb *guipb.Widget, w int, h int) *Node {
} }
func (me *TreeInfo) updateTable(t *guipb.Table) { func (me *TreeInfo) updateTable(t *guipb.Table) {
// log.Info("todo: compare table here...") grid := FindWidgetId(int(t.Grid.Id))
if grid == nil {
log.Info("tree: updateTable() failed to make grid")
return
}
// delete the existing table
me.DeleteNode(grid)
// remake the table
me.Add(grid)
var h int = 0
var w int = 0
for _, name := range t.Order { for _, name := range t.Order {
me.updateRow(t, name) // log.Info("got order:", t.Title, name)
if me.addTableRow(t, grid, name, w) {
// log.Info("tree:row() COLUMN GOOD", t.Title, name, w, h)
} else {
log.Info("tree:row() COLOMN FAIL", t.Title, name, w, h)
}
w += 1
} }
} }
@ -169,18 +204,6 @@ func (me *TreeInfo) makeTable(t *guipb.Table) {
w += 1 w += 1
} }
/*
for i, r := range t.StringRows {
log.Info("got string row:", t.Title, i, r.Header, r.Vals)
for _, v := range r.Widgets {
log.Info("tree: add to grid here", v.Id, v.Name)
lab := grid.makeGridLabel(v, w, h)
me.Add(lab)
h += 1
}
}
*/
} }
func (me *TreeInfo) addTableRow(t *guipb.Table, grid *Node, name string, w int) bool { func (me *TreeInfo) addTableRow(t *guipb.Table, grid *Node, name string, w int) bool {