// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main import ( "fmt" "github.com/awesome-gocui/gocui" "go.wit.com/log" "go.wit.com/widget" ) func (w *guiWidget) dumpTree(s string) { // log.Log(ERROR, "dump w", w.node.WidgetId, w.WidgetType, w.String()) if w == nil { log.Log(ERROR, "dump w.TK == nil", w.node.WidgetId, w.node.WidgetType, w.String()) return } w.dumpWidget("dumpTree() " + s) for _, child := range w.children { child.dumpTree(s) } } func (w *guiWidget) dumpWindows(s string) { // log.Log(ERROR, "dump w", w.node.WidgetId, w.WidgetType, w.String()) if w == nil { log.Log(ERROR, "dump w.TK == nil", w.node.WidgetId, w.node.WidgetType, w.String()) return } if w.node.WidgetType == widget.Window { s += fmt.Sprintf(" F(%d,%d)", w.force.w0, w.force.h0) // can't set this here. doesn't work // w.full.w0 = w.force.w0 // w.full.h0 = w.force.h0 w.dumpWidget("dumpWindow() " + s) w.windowFrame.dumpWidget("dumpFrame() " + s) } for _, child := range w.children { child.dumpWindows(s) } } // a standard function to print out information about a widget func (tk *guiWidget) dumpWidget(s string) { var s1 string var pId int // tk.verifyRect() if tk.node.Parent == nil { log.Logf(WARN, "showWidgetPlacement() parent == nil wId=%d cuiName=%s", tk.node.WidgetId, tk.cuiName) pId = 0 } else { pId = tk.node.Parent.WidgetId } s1 = fmt.Sprintf("(wId,pId)=(%4d,%4d) ", tk.node.WidgetId, pId) sizeW, sizeH := tk.Size() hide := "S" if tk.Hidden() { hide = "H" } s1 += fmt.Sprintf("size=(%3d,%3d)%s)", sizeW, sizeH, hide) if tk.Visible() { s1 += fmt.Sprintf("gocui=(%3d,%3d,%3d,%3d)", tk.gocuiSize.w0, tk.gocuiSize.h0, tk.gocuiSize.w1, tk.gocuiSize.h1) } else { s1 += fmt.Sprintf(" %3s %3s %3s %3s ", "", "", "", "") } s1 += fmt.Sprintf(" full=(%3d,%3d,%3d,%3d)", tk.full.w0, tk.full.h0, tk.full.w1, tk.full.h1) if tk.node.Parent != nil { if tk.node.Parent.WidgetType == widget.Grid { s1 += fmt.Sprintf("At(%3d,%3d)", tk.node.State.AtW, tk.node.State.AtH) s1 += fmt.Sprintf("(%3d,%3d) ", tk.parent.widths[tk.node.State.AtW], tk.parent.heights[tk.node.State.AtH]) } else { s1 += fmt.Sprintf(" %3s %3s ", "", "") s1 += fmt.Sprintf(" %3s %3s ", "", "") } } else { s1 += fmt.Sprintf(" %3s %3s ", "", "") } var end string if tk.node.WidgetType == widget.Box { end = fmt.Sprintf("%-8s %-8s %s", tk.node.WidgetType, tk.cuiName, tk.node.State.Direction.String()) } else { curval := tk.String() if curval == "" { curval = tk.node.GetLabel() } end = fmt.Sprintf("%-8s %-8s %s", tk.node.WidgetType, tk.cuiName, tk.String()) } log.Log(GOCUI, s1, s, end) } func printWidgetTree(g *gocui.Gui, v *gocui.View) error { me.treeRoot.ListWidgets() return nil } func printWidgetPlacements(g *gocui.Gui, v *gocui.View) error { w := me.treeRoot.TK.(*guiWidget) w.dumpTree("MM") w.dumpWindows("WW") return nil }