summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2023-05-09 17:48:21 -0500
committerJeff Carr <[email protected]>2023-05-09 17:48:21 -0500
commit706bcef867ff2a26ab62a1e3d668ac441575df62 (patch)
treef9655cbf3596de25d7f857a38e983634f2474a4b
parente45e4212da86283e2f9592f11c08d798dfd39860 (diff)
start correctly handling grid placement
Signed-off-by: Jeff Carr <[email protected]>
-rw-r--r--README-goreadme.md2
-rw-r--r--common.go13
-rw-r--r--debug.go2
-rw-r--r--debugWidget.go8
-rw-r--r--grid.go55
-rw-r--r--structs.go12
6 files changed, 63 insertions, 29 deletions
diff --git a/README-goreadme.md b/README-goreadme.md
index 5d7ec42..e9b318c 100644
--- a/README-goreadme.md
+++ b/README-goreadme.md
@@ -164,7 +164,7 @@ This goroutine can be used like a watchdog timer
This struct can be used with the go-arg package
-### type [Node](/structs.go#L55)
+### type [Node](/structs.go#L57)
`type Node struct { ... }`
diff --git a/common.go b/common.go
index 36fd17a..a5997fe 100644
--- a/common.go
+++ b/common.go
@@ -67,15 +67,10 @@ func (n *Node) SetText(text string) *Node{
return n
}
-func (n *Node) SetNext(x int, y int) {
- n.NextX = x
- n.NextY = y
- 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)
- log(debugError, "SetNext() x,y =", n.NextX, n.NextY)
+func (n *Node) SetNext(w int, h int) {
+ n.NextW = w
+ n.NextH = h
+ log(debugNow, "SetNext() w,h =", n.NextW, n.NextH)
}
func (n *Node) Set(val any) {
diff --git a/debug.go b/debug.go
index 6d05ab8..2df06cc 100644
--- a/debug.go
+++ b/debug.go
@@ -103,7 +103,7 @@ func (n *Node) Dump() {
Indent(b, "id = ", n.id)
Indent(b, "Name = ", n.Name)
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) {
Indent(b, "parent = nil")
diff --git a/debugWidget.go b/debugWidget.go
index de34376..cb801a8 100644
--- a/debugWidget.go
+++ b/debugWidget.go
@@ -250,7 +250,7 @@ func (n *Node) debugAddWidgetButton() {
newB := activeLabelNewB.B
if (newY == -1) {
- name = name + " (" + strconv.Itoa(activeWidget.NextX) + "," + strconv.Itoa(activeWidget.NextY) + ")"
+ name = name + " (" + strconv.Itoa(activeWidget.NextW) + "," + strconv.Itoa(activeWidget.NextH) + ")"
} else {
activeWidget.SetNext(newX, newY)
name = name + " (" + strconv.Itoa(newX) + "," + strconv.Itoa(newY) + ")"
@@ -259,9 +259,9 @@ func (n *Node) debugAddWidgetButton() {
log("New Type =", activeLabelNewType.S)
log("New X =", newX)
log("New Y =", newY)
- log("activeWidget.NextX =", activeWidget.NextX)
- log("activeWidget.NextY =", activeWidget.NextY)
- log(debugNow, "Add() size (X,Y)", activeWidget.X, activeWidget.Y, "put next thing at (X,Y) =", activeWidget.NextX, activeWidget.NextY)
+ log("activeWidget.NextW =", activeWidget.NextW)
+ log("activeWidget.NextH =", activeWidget.NextH)
+ log(debugNow, "Add() size (X,Y)", activeWidget.X, activeWidget.Y, "put next thing at (W,H) =", activeWidget.NextW, activeWidget.NextH)
activeWidget.Dump()
// activeWidget.X = newX
diff --git a/grid.go b/grid.go
index 4131afd..b773b8b 100644
--- a/grid.go
+++ b/grid.go
@@ -33,23 +33,58 @@ func (n *Node) NewGrid(name string, w int, h int) *Node {
a.Y = h
newNode.X = w
newNode.Y = h
- newNode.NextX = 1
- newNode.NextY = 1
+ newNode.NextW = 1
+ newNode.NextH = 1
sendAction(a, newNode, n)
return newNode
}
-// increments where the next element in the grid should go
+// true if the grid already have a child at W,H
+func (n *Node) gridCollision(w int, h int) bool {
+ for _, child := range n.children {
+ if ((child.AtW == w) && (child.AtH == h)) {
+ return true
+ }
+ }
+ 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
+ }
+
+ n.NextW = w
+ n.NextH = h
+
+ // 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.NextY += 1
- if (where.NextY > where.Y) {
- where.NextX += 1
- where.NextY = 1
+ where.NextH += 1
+ if (where.NextH > where.Y) {
+ where.NextW += 1
+ where.NextH = 1
}
- a.X = where.NextX
- a.Y = where.NextY
- log(logNow, "placeGrid() (X,Y)", where.X, where.Y, " next(X,Y) =", where.NextX, where.NextY)
+ a.X = where.NextW
+ a.Y = where.NextH
+ log(logNow, "placeGrid() (X,Y)", where.X, where.Y, " next(X,Y) =", where.NextW, where.NextH)
}
diff --git a/structs.go b/structs.go
index 83a309d..27632aa 100644
--- a/structs.go
+++ b/structs.go
@@ -31,6 +31,8 @@ type GuiArgs struct {
}
type guiConfig struct {
+ initOnce sync.Once
+
// This is the master node. The Binary Tree starts here
rootNode *Node
@@ -54,7 +56,6 @@ type guiConfig struct {
// simply the name and the size of whatever GUI element exists
type Node struct {
id int
- initOnce sync.Once
WidgetType toolkit.WidgetType
@@ -69,9 +70,12 @@ type Node struct {
X int
Y int
- // used for grids and tables
- NextX int
- NextY int
+ // the position of the widget in a grid
+ AtW int
+ AtH int
+ // where the next widget should be put in a grid
+ NextW int
+ NextH int
// used for values
I int