start correctly handling grid placement
Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
parent
579d75d856
commit
d861dade77
|
@ -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 { ... }`
|
||||||
|
|
||||||
|
|
13
common.go
13
common.go
|
@ -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) {
|
||||||
|
|
2
debug.go
2
debug.go
|
@ -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")
|
||||||
|
|
|
@ -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
57
grid.go
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
12
structs.go
12
structs.go
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue