package gui import ( // "go.wit.com/gui/toolkit" ) // TODO: move all this shit into somewhere not global // main debugging window var bugWin *Node // if there should be new windows or just tabs var makeTabs bool = true var mapWindows map[string]*Node var checkd, checkdn, checkdt, checkdtk, lb1, lb2 *Node var myButton *Node /* Creates a window helpful for debugging this package */ func DebugWindow() { bugWin = me.rootNode.NewWindow("go.wit.com/gui debug window").DebugTab("Debug Tab") bugWin.Custom = bugWin.StandardClose // bugWin.DebugTab("Debug Tab") } func (n *Node) DebugTab(title string) *Node { var newN, gog, g1 *Node // time.Sleep(1 * time.Second) newN = n.NewTab(title) //////////////////////// main debug things ////////////////////////////////// gog = newN.NewGroup("Debugging Windows:") // generally useful debugging cb := gog.NewCheckbox("Seperate windows") cb.Custom = func() { makeTabs = cb.B log(debugGui, "Custom() n.widget =", cb.Name, cb.B) } makeTabs = false cb.Set(false) gog.NewButton("Debug Flags", func () { bugWin.DebugFlags(makeTabs) }) gog.NewButton("Debug Widgets", func () { DebugWidgetWindow(newN) }) gog.NewButton("GO Language Internals", func () { bugWin.DebugGolangWindow(makeTabs) }) gog.NewButton("GO Channels debug", func () { bugWin.DebugGoChannels(makeTabs) }) gog.NewLabel("Force Quit:") gog.NewButton("os.Exit()", func () { exit() }) //////////////////////// window debugging things ////////////////////////////////// g1 = newN.NewGroup("list things") g1.NewButton("List toolkits", func () { dropdownWindow(g1) me.rootNode.ListToolkits() }) g1.NewButton("List Windows", func () { dropdownWindow(g1) }) g1.NewButton("List Window Widgets", func () { dropdownWindowWidgets(g1) }) g2 := newN.NewGroup("more things") g2.NewButton("Node.ListChildren(true)", func () { if (activeWidget == nil) { activeWidget = me.rootNode } activeWidget.ListChildren(true) }) g2.NewButton("test conc", func () { makeConc() }) g2.NewButton("List Plugins", func () { for _, aplug := range allPlugins { log("Loaded plugin:", aplug.name, aplug.filename) } }) g2.NewButton("load toolkit 'gocui'", func () { me.rootNode.LoadToolkit("gocui") }) return newN } func dropdownWindow(p *Node) { var mapWindows map[string]*Node mapWindows = make(map[string]*Node) dd := p.NewDropdown("Window Dropdown") dd.Custom = func() { name := dd.S activeWidget = mapWindows[name] setActiveWidget(activeWidget) log(true, "The Window was set to", name) } log(debugGui, "dd =", dd) if (activeWidget == nil) { // the debug window doesn't exist yet so you can't display the change // TODO: make a fake binary tree for this(?) return } // var last = "" for _, child := range me.rootNode.children { log(logInfo, "\t\t", child.id, child.Name) dd.AddDropdownName(child.Name) // last = child.Name mapWindows[child.Name] = child if (activeWidget == nil) { activeWidget = child } } // dd.SetDropdownName(last) } func dropdownWindowWidgets(p *Node) { var mapWindows map[string]*Node mapWindows = make(map[string]*Node) dd := p.NewDropdown("Window Widgets Dropdown") dd.Custom = func() { name := dd.S activeWidget = mapWindows[name] setActiveWidget(activeWidget) } log(debugGui, "dd =", dd) // log("dumpWidget() ", b, listChildrenDepth, defaultPadding, n.id, info) var addDropdowns func (*Node) addDropdowns = func (n *Node) { s := n.dumpWidget(true) dd.AddDropdownName(s) mapWindows[s] = n for _, child := range n.children { listChildrenDepth += 1 addDropdowns(child) listChildrenDepth -= 1 } } // list everything in the binary tree addDropdowns(me.rootNode) }