summaryrefslogtreecommitdiff
path: root/toolkit/nocui/common.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2023-12-15 17:18:48 -0600
committerJeff Carr <[email protected]>2023-12-15 17:18:48 -0600
commitdcce32583387be7fc4f6cd8c8dea62fd7dc42ecf (patch)
treeffbedb095816a92c69546041271acbef5870481c /toolkit/nocui/common.go
parent282119d970faed3f8a60d5105a2f26ee14681ff4 (diff)
make a common.go for the toolkitsv0.8.7
Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'toolkit/nocui/common.go')
-rw-r--r--toolkit/nocui/common.go132
1 files changed, 128 insertions, 4 deletions
diff --git a/toolkit/nocui/common.go b/toolkit/nocui/common.go
index a012138..797f86a 100644
--- a/toolkit/nocui/common.go
+++ b/toolkit/nocui/common.go
@@ -1,9 +1,68 @@
package main
+/*
+ These code should be common to all gui plugins
+
+ There are some helper functions that are probably going to be
+ the same everywhere. Mostly due to handling the binary tree structure
+ and the channel communication
+
+ For now, it's just a symlink to the 'master' version in
+ ./toolkit/nocui/common.go
+*/
+
import (
"git.wit.org/wit/gui/toolkit"
)
+// this is the channel that sends the events from the user clicking or typing
+// back to the program using this golang package
+var callback chan toolkit.Action
+
+type node struct {
+ parent *node
+ children []*node
+
+ WidgetId int // widget ID
+ WidgetType toolkit.WidgetType
+ ParentId int // parent ID
+
+ Name string
+ Text string
+
+ // This is how the values are passed back and forth
+ // values from things like checkboxes & dropdown's
+ B bool
+ I int
+ S string
+
+ A any // switch to this or deprecate this? pros/cons?
+
+ // This is used for things like a slider(0,100)
+ X int
+ Y int
+
+ // This is for the grid size & widget position
+ W int
+ H int
+ AtW int
+ AtH int
+
+ vals []string // dropdown menu items
+
+ // horizontal=true means layout widgets like books on a bookshelf
+ // horizontal=false means layout widgets like books in a stack
+ horizontal bool `default:false`
+
+ hasTabs bool // does the window have tabs?
+ currentTab bool // the visible tab
+
+ // the internal plugin toolkit structure
+ // in the gtk plugin, it has gtk things like margin & border settings
+ // in the text console one, it has text console things like colors for menus & buttons
+ tk *guiWidget
+}
+
// searches the binary tree for a WidgetId
func (n *node) findWidgetId(id int) *node {
if (n == nil) {
@@ -45,22 +104,87 @@ func addWidget(a *toolkit.Action) *node {
n.AtH = a.AtH
// store the internal toolkit information
- n.tk = new(nocuiT)
+ n.tk = new(guiWidget)
if (a.WidgetType == toolkit.Root) {
log(logInfo, "addWidget() Root")
return n
}
- if (rootNode.findWidgetId(a.WidgetId) != nil) {
+ if (me.rootNode.findWidgetId(a.WidgetId) != nil) {
log(logError, "addWidget() WidgetId already exists", a.WidgetId)
- return rootNode.findWidgetId(a.WidgetId)
+ return me.rootNode.findWidgetId(a.WidgetId)
+ }
+
+ // add this new widget on the binary tree
+ n.parent = me.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
+}
+
+func addNode(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
+
+ n.W = a.W
+ n.H = a.H
+ n.AtW = a.AtW
+ n.AtH = a.AtH
+
+ // store the internal toolkit information
+ n.tk = initWidget(n)
+ // n.tk = new(guiWidget)
+
+ if (a.WidgetType == toolkit.Root) {
+ log(logInfo, "addNode() Root")
+ return n
+ }
+
+ if (me.rootNode.findWidgetId(a.WidgetId) != nil) {
+ log(logError, "addNode() WidgetId already exists", a.WidgetId)
+ return me.rootNode.findWidgetId(a.WidgetId)
}
// add this new widget on the binary tree
- n.parent = rootNode.findWidgetId(a.ParentId)
+ n.parent = me.rootNode.findWidgetId(a.ParentId)
if n.parent != nil {
n.parent.children = append(n.parent.children, n)
+ //w := n.tk
+ //w.parent = n.parent.tk
+ //w.parent.children = append(w.parent.children, w)
}
return n
}