summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2023-04-07 18:16:16 -0500
committerJeff Carr <[email protected]>2023-04-07 18:16:16 -0500
commit0a520c8ebc38640098e8d2c21711162b1697d38d (patch)
tree75ce11e40429502d36cadda6afcb11c213a7f7ba
parent820067cbff754cf9a5f96c425d8f31b5949d353c (diff)
andlabs kinda works with a channel
Signed-off-by: Jeff Carr <[email protected]>
-rw-r--r--redraw.go2
-rw-r--r--toolkit/andlabs/debug.go12
-rw-r--r--toolkit/andlabs/log.go6
-rw-r--r--toolkit/andlabs/main.go66
-rw-r--r--toolkit/andlabs/plugin.go18
-rw-r--r--toolkit/gocui/view.go4
-rw-r--r--watchdog.go28
7 files changed, 110 insertions, 26 deletions
diff --git a/redraw.go b/redraw.go
index a562127..95927d4 100644
--- a/redraw.go
+++ b/redraw.go
@@ -37,7 +37,7 @@ func (n *Node) Redraw(p *aplug) {
}
func (n *Node) redo(p *aplug) {
- log(logNow, "redo()", n.id, n.WidgetType, n.Name)
+ log(logNow, "redo()", p.name, n.id, n.WidgetType, n.Name)
var a *toolkit.Action
a = new(toolkit.Action)
diff --git a/toolkit/andlabs/debug.go b/toolkit/andlabs/debug.go
index 2f8126d..5ecd1fc 100644
--- a/toolkit/andlabs/debug.go
+++ b/toolkit/andlabs/debug.go
@@ -11,12 +11,12 @@ var stretchy bool // expand things like buttons to the maximum size
var padded bool // add space between things like buttons
var margin bool // add space around the frames of windows
-var debugToolkit bool
-var debugChange bool
-var debugPlugin bool
-var debugAction bool
-var debugFlags bool
-var debugGrid bool
+var debugToolkit bool = true
+var debugChange bool = true
+var debugPlugin bool = true
+var debugAction bool = true
+var debugFlags bool = true
+var debugGrid bool = true
var debugNow bool = true
var debugError bool = true
diff --git a/toolkit/andlabs/log.go b/toolkit/andlabs/log.go
index 77b10e2..1a36188 100644
--- a/toolkit/andlabs/log.go
+++ b/toolkit/andlabs/log.go
@@ -7,9 +7,9 @@ import (
// various debugging flags
var logNow bool = true // useful for active development
var logError bool = true
-var logWarn bool = false
-var logInfo bool = false
-var logVerbose bool = false
+var logWarn bool = true
+var logInfo bool = true
+var logVerbose bool = true
func log(a ...any) {
witlog.Where = "wit/gui/andlabs"
diff --git a/toolkit/andlabs/main.go b/toolkit/andlabs/main.go
index 9ca71ca..137af04 100644
--- a/toolkit/andlabs/main.go
+++ b/toolkit/andlabs/main.go
@@ -11,15 +11,43 @@ import (
//go:embed resources
var res embed.FS
+var pluginChan chan toolkit.Action
+
+func catchActionChannel() {
+ log(logNow, "makeCallback() START")
+ for {
+ log(logNow, "makeCallback() for loop")
+ select {
+ case a := <-pluginChan:
+ log(logNow, "makeCallback() SELECT widget id =", a.WidgetId, a.Name)
+ // go Action(a)
+ if (a.WidgetType == toolkit.Window) {
+ log(logNow, "makeCallback() WINDOW START")
+ go ui.Main( func() {
+ log(logNow, "ui.Main() WINDOW START")
+ rawAction(&a)
+ log(logNow, "ui.Main() WINDOW END")
+ })
+ sleep(.5)
+ log(logNow, "makeCallback() WINDOW END")
+ } else {
+ log(logNow, "makeCallback() STUFF")
+ rawAction(&a)
+ /*
+ Queue( func() {
+ rawAction(&a)
+ })
+ */
+ log(logNow, "makeCallback() STUFF END")
+ }
+ sleep(.1)
+ }
+ }
+}
func Main(f func()) {
- log(debugToolkit, "Starting gui.Main() (using gtk via andlabs/ui)")
- ui.Main( func() {
- log(debugToolkit, "Starting gui.Main() (using gtk via andlabs/ui)")
- // time.Sleep(1 * time.Second)
- // NewWindow2("helloworld2", 200, 100)
- f()
- })
+ log(debugNow, "gui.Main() START (using gtk via andlabs/ui)")
+ f() // support the old way. deprecate this
}
// this sets the channel to send user events back from the plugin
@@ -36,13 +64,14 @@ func Callback(guiCallback chan toolkit.Action) {
// For example: Queue(NewWindow())
//
func Queue(f func()) {
- log(debugToolkit, "Sending function to ui.QueueMain()")
- log(debugPlugin, "using gui.Queue() in this plugin DOES BREAK. TODO: solve this with channels")
+ log(logNow, "Sending function to ui.QueueMain()")
+ log(logNow, "using gui.Queue() in this plugin DOES BREAK. TODO: solve this with channels")
ui.QueueMain(f)
}
// This is important. This sets the defaults for the gui. Without this, there isn't correct padding, etc
func Init() {
+ log(logNow, "Init() START")
log(debugToolkit, "Init()")
// Can you pass values to a plugin init() ? Otherwise, there is no way to safely print
// log(debugToolkit, "gui/toolkit init() Setting defaultBehavior = true")
@@ -52,6 +81,25 @@ func Init() {
// mapToolkits = make(map[*toolkit.Widget]*andlabsT)
andlabs = make(map[int]*andlabsT)
+ pluginChan = make(chan toolkit.Action)
+
+ log(logNow, "Init() ui.Main() start")
+ go catchActionChannel()
+ /*
+ ui.Main( func() {
+ log(logNow, "gui.Main() IN (using gtk via andlabs/ui)")
+ var a toolkit.Action
+ a.Name = "jcarr"
+ a.Width = 640
+ a.Height = 480
+ a.WidgetId = 0
+ newWindow(&a)
+ // time.Sleep(1 * time.Second)
+ // NewWindow2("helloworld2", 200, 100)
+ log(logNow, "gui.Main() EXIT (using gtk via andlabs/ui)")
+ })
+ */
+ log(logNow, "Init() END")
}
// TODO: properly exit the plugin since Quit() doesn't do it
diff --git a/toolkit/andlabs/plugin.go b/toolkit/andlabs/plugin.go
index 2faa2ec..f7577d1 100644
--- a/toolkit/andlabs/plugin.go
+++ b/toolkit/andlabs/plugin.go
@@ -23,24 +23,28 @@ func Send(p *toolkit.Widget, c *toolkit.Widget) {
}
func Action(a *toolkit.Action) {
+ log(logNow, "Action() START")
if (a == nil) {
log(debugPlugin, "Action = nil")
return
}
+ pluginChan <- *a
+ /*
f := func() {
rawAction(a)
}
// f()
Queue(f)
+ */
+ log(logNow, "Action() END")
}
func rawAction(a *toolkit.Action) {
+ log(debugAction, "rawAction() START a.ActionType =", a.ActionType)
+ log(debugAction, "rawAction() START a.S =", a.S)
- log(debugAction, "Action() START a.ActionType =", a.ActionType)
- log(debugAction, "Action() START a.S =", a.S)
-
- log(logInfo, "Action() START a.WidgetId =", a.WidgetId, "a.ParentId =", a.ParentId)
+ log(logNow, "rawAction() START a.WidgetId =", a.WidgetId, "a.ParentId =", a.ParentId)
switch a.WidgetType {
case toolkit.Flag:
flag(a)
@@ -87,12 +91,12 @@ func rawAction(a *toolkit.Action) {
case toolkit.Delete:
uiDelete(a)
case toolkit.Move:
- log(debugNow, "attempt to move() =", a.ActionType, a.WidgetType)
+ log(debugNow, "rawAction() attempt to move() =", a.ActionType, a.WidgetType)
move(a)
default:
- log(debugError, "Action() Unknown =", a.ActionType, a.WidgetType)
+ log(debugError, "rawAction() Unknown =", a.ActionType, a.WidgetType)
}
- log(debugAction, "Action() END =", a.ActionType, a.WidgetType)
+ log(debugAction, "rawAction() END =", a.ActionType, a.WidgetType)
}
func flag(a *toolkit.Action) {
diff --git a/toolkit/gocui/view.go b/toolkit/gocui/view.go
index 2f2cf47..a6cca04 100644
--- a/toolkit/gocui/view.go
+++ b/toolkit/gocui/view.go
@@ -54,6 +54,10 @@ func (w *cuiWidget) drawView() {
}
}
+ if (me.baseGui == nil) {
+ log(logError, "drawView() ERROR: me.baseGui == nil", w)
+ return
+ }
v, _ := me.baseGui.View(w.cuiName)
if (v != nil) {
log(logError, "drawView() already defined for name", w.cuiName)
diff --git a/watchdog.go b/watchdog.go
index a9e0880..61c0247 100644
--- a/watchdog.go
+++ b/watchdog.go
@@ -27,3 +27,31 @@ func Watchdog() {
time.Sleep(watchtime * time.Second / 10)
}
}
+// https://www.reddit.com/r/golang/comments/12em87q/how_to_run_periodic_tasks/
+/*
+package main
+
+import (
+ "fmt"
+ "time"
+)
+
+func main() {
+ ticker := time.NewTicker(time.Second)
+ defer ticker.Stop()
+ done := make(chan bool)
+ go func() {
+ time.Sleep(10 * time.Second)
+ done <- true
+ }()
+ for {
+ select {
+ case <-done:
+ fmt.Println("Done!")
+ return
+ case t := <-ticker.C:
+ fmt.Println("Current time: ", t)
+ }
+ }
+}
+*/