70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
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 (
|
|
"reflect"
|
|
"strconv"
|
|
|
|
"go.wit.com/log"
|
|
"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
|
|
}
|
|
|
|
func (n *node) doUserEvent() {
|
|
if (callback == nil) {
|
|
log.Log(ERROR, "doUserEvent() callback == nil", n.WidgetId)
|
|
return
|
|
}
|
|
var a widget.Action
|
|
a.WidgetId = n.WidgetId
|
|
a.Value = n.value
|
|
a.ActionType = widget.User
|
|
log.Log(INFO, "doUserEvent() START: send a user event to the callback channel")
|
|
callback <- a
|
|
log.Log(INFO, "doUserEvent() END: sent a user event to the callback channel")
|
|
return
|
|
}
|
|
|
|
// 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 Callback(guiCallback chan widget.Action) {
|
|
callback = guiCallback
|
|
}
|
|
|
|
func PluginChannel() chan widget.Action {
|
|
return pluginChan
|
|
}
|