diff options
Diffstat (limited to 'toolkit/nocui/common.go')
| -rw-r--r-- | toolkit/nocui/common.go | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/toolkit/nocui/common.go b/toolkit/nocui/common.go new file mode 100644 index 0000000..2e0ffdc --- /dev/null +++ b/toolkit/nocui/common.go @@ -0,0 +1,79 @@ +package main + +import ( + "git.wit.org/wit/gui/toolkit" +) + +// searches the binary tree for a WidgetId +func (n *node) findWidgetId(id int) *node { + if (n == nil) { + return nil + } + + if n.WidgetId == id { + return n + } + + for _, child := range n.children { + newN := child.findWidgetId(id) + if (newN != nil) { + return newN + } + } + return nil +} + +func addWidget(a *toolkit.Action) *node { + n := new(node) + n.WidgetType = a.WidgetType + n.WidgetId = a.WidgetId + n.ParentId = a.ParentId + + // copy the data from the action message + n.Name = a.Name + n.Text = a.Text + n.I = a.I + n.S = a.S + n.B = a.B + n.X = a.X + n.Y = a.Y + + // store the internal toolkit information + n.tk = new(nocuiT) + + if (a.WidgetType == toolkit.Root) { + log(logInfo, "addWidget() Root") + return n + } + + if (rootNode.findWidgetId(a.WidgetId) != nil) { + log(logError, "addWidget() WidgetId already exists", a.WidgetId) + return rootNode.findWidgetId(a.WidgetId) + } + + // add this new widget on the binary tree + n.parent = rootNode.findWidgetId(a.ParentId) + if n.parent != nil { + n.parent.children = append(n.parent.children, n) + } + return n +} + +func (n *node) doUserEvent() { + if (callback == nil) { + log(logError, "doUserEvent() callback == nil", n.WidgetId) + return + } + var a toolkit.Action + a.WidgetId = n.WidgetId + a.Name = n.Name + a.Text = n.Text + a.S = n.S + a.I = n.I + a.B = n.B + a.ActionType = toolkit.User + log(logInfo, "doUserEvent() START: send a user event to the callback channel") + callback <- a + log(logInfo, "doUserEvent() END: sent a user event to the callback channel") + return +} |
