diff options
| author | Jeff Carr <[email protected]> | 2023-12-15 17:18:48 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2023-12-15 17:18:48 -0600 |
| commit | dcce32583387be7fc4f6cd8c8dea62fd7dc42ecf (patch) | |
| tree | ffbedb095816a92c69546041271acbef5870481c /toolkit/nocui/common.go | |
| parent | 282119d970faed3f8a60d5105a2f26ee14681ff4 (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.go | 132 |
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 } |
