diff options
Diffstat (limited to 'widget.go')
| -rw-r--r-- | widget.go | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/widget.go b/widget.go new file mode 100644 index 0000000..ff8df1b --- /dev/null +++ b/widget.go @@ -0,0 +1,139 @@ +package main + +import ( + "go.wit.com/lib/widget" + "go.wit.com/log" +) + +func initWidget(n *node) *guiWidget { + var w *guiWidget + w = new(guiWidget) + // Set(w, "default") + + w.frame = true + + // set the name used by gocui to the id + w.cuiName = string(n.WidgetId) + + if n.WidgetType == widget.Root { + log.Log(INFO, "setupWidget() FOUND ROOT w.id =", n.WidgetId) + n.WidgetId = 0 + me.rootNode = n + return w + } + + if n.WidgetType == widget.Grid { + w.widths = make(map[int]int) // how tall each row in the grid is + w.heights = make(map[int]int) // how wide each column in the grid is + } + + return w +} + +func setupCtrlDownWidget() { + a := new(widget.Action) + a.ProgName = "ctrlDown" + a.WidgetType = widget.Dialog + a.WidgetId = -1 + a.ParentId = 0 + n := addNode(a) + + me.ctrlDown = n +} + +func (n *node) deleteView() { + w := n.tk + if w.v != nil { + w.v.Visible = false + return + } + // make sure the view isn't really there + me.baseGui.DeleteView(w.cuiName) + w.v = nil +} + +// searches the binary tree for a WidgetId +func (n *node) findWidgetName(name string) *node { + if n == nil { + return nil + } + + if n.tk.cuiName == name { + return n + } + + for _, child := range n.children { + newN := child.findWidgetName(name) + if newN != nil { + return newN + } + } + return nil +} + +func (n *node) IsCurrent() bool { + w := n.tk + if n.WidgetType == widget.Tab { + return w.isCurrent + } + if n.WidgetType == widget.Window { + return w.isCurrent + } + if n.WidgetType == widget.Root { + return false + } + return n.parent.IsCurrent() +} + +func (n *node) Visible() bool { + if n == nil { + return false + } + if n.tk == nil { + return false + } + if n.tk.v == nil { + return false + } + return n.tk.v.Visible +} + +func (n *node) SetVisible(b bool) { + if n == nil { + return + } + if n.tk == nil { + return + } + if n.tk.v == nil { + return + } + n.tk.v.Visible = b +} + +func addDropdown() *node { + n := new(node) + n.WidgetType = widget.Flag + n.WidgetId = -2 + n.ParentId = 0 + + // copy the data from the action message + n.progname = "DropBox" + n.tk.label = "DropBox text" + + // store the internal toolkit information + n.tk = new(guiWidget) + n.tk.frame = true + + // set the name used by gocui to the id + n.tk.cuiName = "-1 dropbox" + + n.tk.color = &colorFlag + + // add this new widget on the binary tree + n.parent = me.rootNode + if n.parent != nil { + n.parent.children = append(n.parent.children, n) + } + return n +} |
