both gocui and andlabs worked with buttondemo

Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
Jeff Carr 2023-04-11 21:37:36 -05:00
parent 56f8246bca
commit a235371d1a
4 changed files with 16 additions and 116 deletions

View File

@ -127,7 +127,7 @@ Creates a window helpful for debugging this package
`func Indent(b bool, a ...interface{})` `func Indent(b bool, a ...interface{})`
### func [LoadPlugin](/main.go#L172) ### func [LoadPlugin](/main.go#L114)
`func LoadPlugin(name string) bool` `func LoadPlugin(name string) bool`
@ -149,7 +149,7 @@ loads and initializes a toolkit (andlabs/ui, gocui, etc)
`func ShowDebugValues()` `func ShowDebugValues()`
### func [StandardExit](/main.go#L261) ### func [StandardExit](/main.go#L155)
`func StandardExit()` `func StandardExit()`
@ -190,7 +190,7 @@ var Config GuiConfig
The Node is a binary tree. This is how all GUI elements are stored The Node is a binary tree. This is how all GUI elements are stored
simply the name and the size of whatever GUI element exists simply the name and the size of whatever GUI element exists
#### func [New](/main.go#L190) #### func [New](/main.go#L132)
`func New() *Node` `func New() *Node`

112
main.go
View File

@ -44,64 +44,6 @@ func init() {
go watchCallback() go watchCallback()
} }
/*
func doGuiChan() {
for {
select {
case <-Config.ActionCh1:
log(true, "CHANNEL ACTION 1 !!!!!")
return
case <-Config.ActionCh2:
log(true, "CHANNEL ACTION 2 !!!!!")
return
default:
log(true, "doGuiChan() nothing")
}
log(true, "doGuiChan() for()")
}
}
*/
/*
// TODO: add logic to just load the 1st 'most common' gui toolkit
// and allow the 'go-arg' command line args to override the defaults
func InitPlugins(names []string) []string {
log(debugGui, "Starting gui.Init()")
for _, aplug := range allPlugins {
log(debugGui, "LoadToolkit() already loaded toolkit plugin =", aplug.name)
for _, name := range names {
if (name == aplug.name) {
return []string{name}
}
}
}
// try to load each plugin in the order passed to this function
for _, name := range names {
aPlug := LoadToolkit(name)
if (aPlug != nil) {
// exit because it worked!
return []string{name}
}
}
// the program didn't specify a plugin. Try to load one
// TODO: detect the OS & user preferences to load the best one
// TODO: commented out Init() on 02/26/2023 because I'm not sure how to run it correctly
andlabsPlug := LoadToolkit("andlabs")
if (andlabsPlug != nil) {
return []string{}
}
gocuiPlug := LoadToolkit("andlabs")
if (gocuiPlug != nil) {
return []string{}
}
return []string{}
}
*/
func watchCallback() { func watchCallback() {
log(logInfo, "watchCallback() START") log(logInfo, "watchCallback() START")
for { for {
@ -196,60 +138,12 @@ func New() *Node {
if (os.Getenv("DISPLAY") == "") { if (os.Getenv("DISPLAY") == "") {
return Config.rootNode return Config.rootNode
} }
// if (LoadPlugin("andlabs")) { if (LoadPlugin("andlabs")) {
// log(logError, "New() failed to load andlabs") log(logError, "New() failed to load andlabs")
// } }
return Config.rootNode return Config.rootNode
} }
/*
// This should not pass a function
func Main(f func()) {
log(debugGui, "Starting gui.Main() (using gtk via andlabs/ui)")
// TODO: this is linux only
// TODO: detect if this was run from the command line (parent == bash?)
// if DISPLAY is not set, don't even bother with loading andlabs
if (os.Getenv("DISPLAY") == "") {
InitPlugins([]string{"gocui"})
} else {
// InitPlugins([]string{"andlabs", "gocui"})
InitPlugins([]string{"gocui", "andlabs"})
}
for _, aplug := range allPlugins {
log(debugGui, "NewButton() toolkit plugin =", aplug.name)
if (aplug.MainOk) {
log(debugGui, "Main() Already Ran Main()", aplug.name)
continue
}
if (aplug.Main == nil) {
log(debugGui, "Main() Main == nil", aplug.name)
continue
}
aplug.MainOk = true
if (aplug.Callback == nil) {
// TODO: don't load the module if this failed ?
// if Callback() isn't set in the plugin, no information can be sent to it!
log(debugError, "SERIOUS ERROR: plugin Callback() == nil. nothing will work for toolkit", aplug.name)
} else {
aplug.Callback(Config.guiChan)
}
if (aplug.PluginChannel == nil) {
// TODO: don't load the module if this failed ?
// if Callback() isn't set in the plugin, no information can be sent to it!
log(debugError, "ERROR: plugin does not implement a send channel. toolkit =", aplug.name)
} else {
aplug.pluginChan = aplug.PluginChannel()
}
aplug.Main(f)
}
}
*/
// The window is destroyed but the application does not quit // The window is destroyed but the application does not quit
func (n *Node) StandardClose() { func (n *Node) StandardClose() {
log(debugGui, "wit/gui Standard Window Close. name =", n.Name) log(debugGui, "wit/gui Standard Window Close. name =", n.Name)

View File

@ -34,10 +34,10 @@ func catchActionChannel() {
log(logError,"catchActionChannel() ui.Main() START") log(logError,"catchActionChannel() ui.Main() START")
log(logError,"catchActionChannel() ui.Main() START") log(logError,"catchActionChannel() ui.Main() START")
sleep(1) sleep(1)
// ui.Main(demoUI) go ui.Main(demoUI)
ui.Main( func() { // go ui.Main( func() {
rawAction(a) // rawAction(a)
}) // })
// probably not needed, but in here for now under development // probably not needed, but in here for now under development
uiMainUndef = false uiMainUndef = false
sleep(1) sleep(1)

View File

@ -23,6 +23,12 @@ func Watchdog() {
Config.rootNode.ListChildren(true) Config.rootNode.ListChildren(true)
} }
} }
if (i == 2) {
LoadPlugin("gocui")
}
// if (i == 3) {
// LoadPlugin("andlabs")
// }
i += 1 i += 1
time.Sleep(watchtime * time.Second / 10) time.Sleep(watchtime * time.Second / 10)
} }