Noah Petherbridge
b67c4b67b2
* Add a tab bar to the top of the Palette window that has two radiobuttons for "Palette" and "Doodads" * UI: add the concept of a Hidden() widget and the corresponding Hide() and Show() methods. Hidden widgets are skipped over when evaluating Frame packing, rendering, and event supervision. * The Palette Window in editor mode now displays one of two tabs: * Palette: the old color swatch palette now lives here. * Doodads: the new Doodad palette. * The Doodad Palette shows a grid of buttons (2 per row) showing the available Doodad drawings in the user's config folder. * The Doodad buttons act as radiobuttons for now and have no other effect. TODO will be making them react to drag-drop events. * UI: added a `Children()` method as the inverse of `Parent()` for container widgets (like Frame, Window and Button) to expose their children. The BaseWidget just returns an empty []Widget. * Console: added a `repl` command that keeps the dev console open and prefixes every command with `$` filled out -- for rapid JavaScript console evaluation.
24 lines
488 B
Go
24 lines
488 B
Go
package ui
|
|
|
|
import "strings"
|
|
|
|
// WidgetTree returns a string representing the tree of widgets starting
|
|
// at a given widget.
|
|
func WidgetTree(root Widget) []string {
|
|
var crawl func(int, Widget) []string
|
|
crawl = func(depth int, node Widget) []string {
|
|
var (
|
|
prefix = strings.Repeat(" ", depth)
|
|
lines = []string{prefix + node.ID()}
|
|
)
|
|
|
|
for _, child := range node.Children() {
|
|
lines = append(lines, crawl(depth+1, child)...)
|
|
}
|
|
|
|
return lines
|
|
}
|
|
|
|
return crawl(0, root)
|
|
}
|