69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
package gui
|
|
|
|
/*
|
|
This is where the communication to the toolkit plugin happens.
|
|
|
|
We copy the current values from the widget node of the binary tree
|
|
and send an "action" to the toolkit over a channel.
|
|
|
|
TODO: use protobuf
|
|
*/
|
|
|
|
import (
|
|
"go.wit.com/log"
|
|
"go.wit.com/gui/widget"
|
|
)
|
|
|
|
// 2024/01/11 finally moving to type any. simplify to just 'value'
|
|
// 2023/05/09 pretty clean
|
|
// 2023/04/06 Queue() is also being used and channels are being used.
|
|
func sendAction(n *Node, atype widget.ActionType) {
|
|
if n == nil {
|
|
return
|
|
}
|
|
if n.hidden {
|
|
return
|
|
}
|
|
|
|
var a widget.Action
|
|
a.ActionType = atype
|
|
|
|
// These should be "stable" at this point (2024/01/13)
|
|
a.WidgetId = n.id
|
|
a.ProgName = n.progname
|
|
a.Value = n.value
|
|
a.Direction = n.direction
|
|
a.Strings = n.strings
|
|
|
|
// These should be improved/deprecated based on the gui/widget docs
|
|
a.Expand = n.expand
|
|
|
|
a.X = n.X
|
|
a.Y = n.Y
|
|
|
|
a.AtW = n.AtW
|
|
a.AtH = n.AtH
|
|
|
|
if (n.parent != nil) {
|
|
a.ParentId = n.parent.id
|
|
}
|
|
a.WidgetType = n.WidgetType
|
|
sendActionToPlugin(&a)
|
|
}
|
|
|
|
// sends the action/event to each toolkit via a golang plugin channel
|
|
func sendActionToPlugin(a *widget.Action) {
|
|
for _, aplug := range allPlugins {
|
|
log.Log(PLUG, "Action() aplug =", aplug.name, "Action type=", a.ActionType)
|
|
if (aplug.pluginChan == nil) {
|
|
log.Info("Action() retrieving the aplug.PluginChannel()", aplug.name)
|
|
aplug.pluginChan = aplug.PluginChannel()
|
|
log.Info("Action() retrieved", aplug.pluginChan)
|
|
}
|
|
log.Info("Action() SEND to pluginChan", aplug.name, a.ActionType, a.WidgetType, a.WidgetId, a.ProgName)
|
|
aplug.pluginChan <- *a
|
|
// added during debugging. might be a good idea in general for a tactile experience
|
|
log.Sleep(.02) // this delay makes it so SetText() works on initial widget creation
|
|
}
|
|
}
|