start correctly handling grid placement

Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
Jeff Carr 2023-05-09 17:48:21 -05:00
parent 579d75d856
commit d861dade77
6 changed files with 64 additions and 30 deletions

View File

@ -164,7 +164,7 @@ This goroutine can be used like a watchdog timer
This struct can be used with the go-arg package This struct can be used with the go-arg package
### type [Node](/structs.go#L55) ### type [Node](/structs.go#L57)
`type Node struct { ... }` `type Node struct { ... }`

View File

@ -67,15 +67,10 @@ func (n *Node) SetText(text string) *Node{
return n return n
} }
func (n *Node) SetNext(x int, y int) { func (n *Node) SetNext(w int, h int) {
n.NextX = x n.NextW = w
n.NextY = y n.NextH = h
log(debugError, "SetNext() x,y =", n.NextX, n.NextY) log(debugNow, "SetNext() w,h =", n.NextW, n.NextH)
log(debugError, "SetNext() x,y =", n.NextX, n.NextY)
log(debugError, "SetNext() x,y =", n.NextX, n.NextY)
log(debugError, "SetNext() x,y =", n.NextX, n.NextY)
log(debugError, "SetNext() x,y =", n.NextX, n.NextY)
log(debugError, "SetNext() x,y =", n.NextX, n.NextY)
} }
func (n *Node) Set(val any) { func (n *Node) Set(val any) {

View File

@ -103,7 +103,7 @@ func (n *Node) Dump() {
Indent(b, "id = ", n.id) Indent(b, "id = ", n.id)
Indent(b, "Name = ", n.Name) Indent(b, "Name = ", n.Name)
Indent(b, "(X,Y) = ", n.X, n.Y) Indent(b, "(X,Y) = ", n.X, n.Y)
Indent(b, "Next (X,Y) = ", n.NextX, n.NextY) Indent(b, "Next (W,H) = ", n.NextW, n.NextH)
if (n.parent == nil) { if (n.parent == nil) {
Indent(b, "parent = nil") Indent(b, "parent = nil")

View File

@ -250,7 +250,7 @@ func (n *Node) debugAddWidgetButton() {
newB := activeLabelNewB.B newB := activeLabelNewB.B
if (newY == -1) { if (newY == -1) {
name = name + " (" + strconv.Itoa(activeWidget.NextX) + "," + strconv.Itoa(activeWidget.NextY) + ")" name = name + " (" + strconv.Itoa(activeWidget.NextW) + "," + strconv.Itoa(activeWidget.NextH) + ")"
} else { } else {
activeWidget.SetNext(newX, newY) activeWidget.SetNext(newX, newY)
name = name + " (" + strconv.Itoa(newX) + "," + strconv.Itoa(newY) + ")" name = name + " (" + strconv.Itoa(newX) + "," + strconv.Itoa(newY) + ")"
@ -259,9 +259,9 @@ func (n *Node) debugAddWidgetButton() {
log("New Type =", activeLabelNewType.S) log("New Type =", activeLabelNewType.S)
log("New X =", newX) log("New X =", newX)
log("New Y =", newY) log("New Y =", newY)
log("activeWidget.NextX =", activeWidget.NextX) log("activeWidget.NextW =", activeWidget.NextW)
log("activeWidget.NextY =", activeWidget.NextY) log("activeWidget.NextH =", activeWidget.NextH)
log(debugNow, "Add() size (X,Y)", activeWidget.X, activeWidget.Y, "put next thing at (X,Y) =", activeWidget.NextX, activeWidget.NextY) log(debugNow, "Add() size (X,Y)", activeWidget.X, activeWidget.Y, "put next thing at (W,H) =", activeWidget.NextW, activeWidget.NextH)
activeWidget.Dump() activeWidget.Dump()
// activeWidget.X = newX // activeWidget.X = newX

57
grid.go
View File

@ -33,23 +33,58 @@ func (n *Node) NewGrid(name string, w int, h int) *Node {
a.Y = h a.Y = h
newNode.X = w newNode.X = w
newNode.Y = h newNode.Y = h
newNode.NextX = 1 newNode.NextW = 1
newNode.NextY = 1 newNode.NextH = 1
sendAction(a, newNode, n) sendAction(a, newNode, n)
return newNode return newNode
} }
// increments where the next element in the grid should go // true if the grid already have a child at W,H
func placeGrid(a *toolkit.Action, n *Node, where *Node) { func (n *Node) gridCollision(w int, h int) bool {
where.NextY += 1 for _, child := range n.children {
if (where.NextY > where.Y) { if ((child.AtW == w) && (child.AtH == h)) {
where.NextX += 1 return true
where.NextY = 1 }
}
return false
}
// increments NextW & NextH
func (n *Node) gridIncrement(w int, h int) bool {
for _, child := range n.children {
if ((child.AtW == w) && (child.AtH == h)) {
return true
}
}
return false
}
func (n *Node) At(w int, h int) *Node {
if (n == nil) {
return n
} }
a.X = where.NextX n.NextW = w
a.Y = where.NextY n.NextH = h
log(logNow, "placeGrid() (X,Y)", where.X, where.Y, " next(X,Y) =", where.NextX, where.NextY)
// TODO: check for a collision here
if n.gridCollision(w,h) {
// TODO: find free next w,h
}
return n
}
// finds the next place on the grid to place the new node 'n'
func placeGrid(a *toolkit.Action, n *Node, where *Node) {
where.NextH += 1
if (where.NextH > where.Y) {
where.NextW += 1
where.NextH = 1
}
a.X = where.NextW
a.Y = where.NextH
log(logNow, "placeGrid() (X,Y)", where.X, where.Y, " next(X,Y) =", where.NextW, where.NextH)
} }

View File

@ -31,6 +31,8 @@ type GuiArgs struct {
} }
type guiConfig struct { type guiConfig struct {
initOnce sync.Once
// This is the master node. The Binary Tree starts here // This is the master node. The Binary Tree starts here
rootNode *Node rootNode *Node
@ -54,7 +56,6 @@ type guiConfig struct {
// simply the name and the size of whatever GUI element exists // simply the name and the size of whatever GUI element exists
type Node struct { type Node struct {
id int id int
initOnce sync.Once
WidgetType toolkit.WidgetType WidgetType toolkit.WidgetType
@ -69,9 +70,12 @@ type Node struct {
X int X int
Y int Y int
// used for grids and tables // the position of the widget in a grid
NextX int AtW int
NextY int AtH int
// where the next widget should be put in a grid
NextW int
NextH int
// used for values // used for values
I int I int