new-gui/debug.go

188 lines
4.4 KiB
Go
Raw Normal View History

package gui
// Lots of debugging things:
// A function dump out the binary tree
import (
"strconv"
"git.wit.org/wit/gui/toolkit"
)
// various debugging flags
var debugGui bool = false
var debugDump bool = false
var debugNode bool = false
var debugTabs bool = false
var debugChange bool = false // shows user events like mouse and keyboard
var debugPlugin bool = false
var debugToolkit bool = false
// func GetDebug () bool {
// return debugGui
// }
func SetDebug (s bool) {
debugGui = s
debugChange = s
debugDump = s
debugTabs = s
debugPlugin = s
debugNode = s
debugToolkit = s
SetDebugChange(s)
SetDebugToolkit(s)
}
/*
func GetDebugToolkit () bool {
return debugToolkit
}
*/
// This passes the debugToolkit flag to the toolkit plugin
func SetDebugToolkit (s bool) {
debugToolkit = s
for _, aplug := range allPlugins {
log(debugPlugin, "gui.SetDebugToolkit() aplug =", aplug.name)
if (aplug.SetDebugToolkit == nil) {
log(debugPlugin, "\tgui.SetDebugToolkit() = nil", aplug.name)
continue
}
aplug.SetDebugToolkit(s)
return
}
log(debugPlugin, "\tgui.SetDebugToolkit() = nil in all plugins")
}
// This passes the debugChange flag to the toolkit plugin
func SetDebugChange (s bool) {
// debugToolkit = s
for _, aplug := range allPlugins {
log(debugPlugin, "gui.SetDebugChange() aplug =", aplug.name)
if (aplug.SetDebugChange == nil) {
log(debugPlugin, "\tgui.SetDebugChange() = nil", aplug.name)
continue
}
aplug.SetDebugChange(s)
return
}
log(debugPlugin, "\tgui.SetDebugChange() = nil in all plugins")
}
func ShowDebugValues() {
// The order here should match the order in the GUI
// TODO: get the order from the node binary tree
log(true, "Debug =", debugGui)
log(true, "DebugChange =", debugChange)
log(true, "DebugDump =", debugDump)
log(true, "DebugTabs =", debugTabs)
log(true, "DebugPlugin =", debugPlugin)
log(true, "DebugNode =", debugNode)
log(true, "DebugToolkit =", debugToolkit)
// dump out the debugging flags for the plugins
for _, aplug := range allPlugins {
log(debugPlugin, "gui.ShowDebug() aplug =", aplug.name)
if (aplug.ShowDebug == nil) {
log(debugPlugin, "\tgui.ShowDebug() = nil", aplug.name)
continue
}
aplug.ShowDebug()
return
}
}
func (n *Node) Dump() {
if ! debugDump {
return
}
Indent("NODE DUMP START")
Indent("id = ", n.id)
Indent("Name = ", n.Name)
Indent("Width = ", n.Width)
Indent("Height = ", n.Height)
if (n.parent == nil) {
Indent("parent = nil")
} else {
Indent("parent.id =", n.parent.id)
}
if (n.children != nil) {
Indent("children = ", n.children)
}
if (n.Custom != nil) {
Indent("Custom = ", n.Custom)
}
Indent("NODE DUMP END")
}
var listChildrenParent *Node
var listChildrenDepth int = 0
var defaultPadding = " "
func Indent(a ...interface{}) {
logindent(listChildrenDepth, defaultPadding, a...)
}
func (n *Node) dumpWidget() {
var info string
info = n.widget.Type.String()
info += ", " + n.widget.Name
if (n.Name != n.widget.Name) {
info += " NAME MISMATCH"
}
if (n.widget.Type == toolkit.Checkbox) {
info += " = " + strconv.FormatBool(n.widget.B)
}
logindent(listChildrenDepth, defaultPadding, n.id, info)
}
func (n *Node) ListChildren(dump bool) {
n.dumpWidget()
if (dump == true) {
n.Dump()
}
if len(n.children) == 0 {
if (n.parent == nil) {
} else {
log(debugNode, "\t\t\tparent =",n.parent.id)
if (listChildrenParent != nil) {
log(debugNode, "\t\t\tlistChildrenParent =",listChildrenParent.id)
if (listChildrenParent.id != n.parent.id) {
// log("parent.child does not match child.parent")
exit("parent.child does not match child.parent")
}
}
}
log(debugNode, "\t\t", n.id, "has no children")
return
}
for _, child := range n.children {
if (child.parent != nil) {
log(debugNode, "\t\t\tparent =",child.parent.id)
} else {
log(debugGui, "\t\t\tno parent")
// memory corruption? non-threadsafe access?
// can all binary tree changes to Node.parent & Node.child be forced into a singular goroutine?
panic("something is wrong with the wit golang gui logic and the binary tree is broken. child has no parent")
}
if (dump == true) {
child.Dump()
}
if (child.children == nil) {
log(debugNode, "\t\t", child.id, "has no children")
} else {
log(debugNode, "\t\t\tHas children:", child.children)
}
listChildrenParent = n
listChildrenDepth += 1
child.ListChildren(dump)
listChildrenDepth -= 1
}
return
}