From 841e6252c95244f0ee7faf2c01d33f69a8ab483a Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Wed, 17 Jan 2024 21:31:49 -0600 Subject: common tree package for toolkits This update provides *lots* of toolkit updates. This will allow the next step of debugging the gocui toolkit to make it work again. There are new common routines for handling the plugin channel communication Signed-off-by: Jeff Carr --- tree/plugin.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 tree/plugin.go (limited to 'tree/plugin.go') diff --git a/tree/plugin.go b/tree/plugin.go new file mode 100644 index 0000000..d7468e4 --- /dev/null +++ b/tree/plugin.go @@ -0,0 +1,50 @@ +package tree + +/* + 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 ( + "go.wit.com/gui/widget" +) + +// 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 +} + +// Other goroutines must use this to access the GUI +// +// You can not acess / process the GUI thread directly from +// other goroutines. This is due to the nature of how +// Linux, MacOS and Windows work (they all work differently. suprise. surprise.) +// +// this sets the channel to send user events back from the plugin +func (me *TreeInfo) Callback(guiCallback chan widget.Action) { + me.callback = guiCallback +} + +func (me *TreeInfo) PluginChannel() chan widget.Action { + return me.pluginChan +} -- cgit v1.2.3