diff --git a/args.go b/args.go index a9c43cb..b737d4b 100644 --- a/args.go +++ b/args.go @@ -3,9 +3,14 @@ package gui import ( arg "github.com/alexflint/go-arg" - newlog "go.wit.com/log" + "go.wit.com/log" ) +var GUI log.LogFlag +var NODE log.LogFlag +var PLUG log.LogFlag +var INFO log.LogFlag + var argGui ArgsGui // This struct can be used with the go-arg package @@ -14,17 +19,41 @@ type ArgsGui struct { GuiVerbose bool `arg:"--gui-verbose" help:"enable all logging"` } -func init() { - arg.Register(&argGui) - - newlog.Register("gui", "debugGui", &debugGui) - - for _, s := range newlog.ListFlags() { - newlog.Info("go.wit.com/gui/gui ListFlags() returned:", s) - } -} - // returns the toolkit func ArgToolkit() string { return argGui.GuiPlugin } + +func init() { + arg.Register(&argGui) + + log.Register("gui", "debugGui", &debugGui) + + INFO.B = false + INFO.Name = "INFO" + INFO.Subsystem = "gui" + INFO.Desc = "Enable log.Info()" + INFO.Register() + + GUI.B = false + GUI.Name = "GUI" + GUI.Subsystem = "gui" + GUI.Desc = "basic GUI debugging" + GUI.Register() + + NODE.B = false + NODE.Name = "NODE" + NODE.Subsystem = "gui" + NODE.Desc = "basic NODE debugging" + NODE.Register() + + PLUG.B = false + PLUG.Name = "PLUG" + PLUG.Subsystem = "gui" + PLUG.Desc = "basic PLUG debugging" + PLUG.Register() + + for _, s := range log.ListFlags() { + log.Info("go.wit.com/gui/gui ListFlags() returned:", s) + } +} diff --git a/debug.go b/debug.go index b65cf9f..c84c8ca 100644 --- a/debug.go +++ b/debug.go @@ -4,7 +4,10 @@ package gui // A function dump out the binary tree import ( + "errors" "strconv" + + "go.wit.com/log" "go.wit.com/gui/gui/toolkit" ) @@ -29,12 +32,6 @@ func SetDebug (s bool) { debugGui = s debugTabs = s - logNow = s - logInfo = s - logWarn = s - logError = s - logVerbose = s - SetFlag("Node", s) SetFlag("Tabs", s) SetFlag("Dump", s) @@ -68,7 +65,7 @@ func SetFlag (s string, b bool) { case "Show": // ShowDebugValues() // print them here? default: - log(debugGui, "Can't set unknown flag", s) + log.Log(GUI, "Can't set unknown flag", s) } a := new(toolkit.Action) @@ -82,20 +79,19 @@ func SetFlag (s string, b bool) { func ShowDebugValues() { // The order here should match the order in the GUI // TODO: get the order from the node binary tree - log(true, "Debug =", debugGui) - log(true, "DebugError =", debugError) - log(true, "DebugChange =", debugChange) - log(true, "DebugDump =", debugDump) - log(true, "DebugTabs =", debugTabs) - log(true, "DebugPlugin =", debugPlugin) - log(true, "DebugNode =", debugNode) + log.Log(true, "Debug =", debugGui) + log.Log(true, "DebugError =", debugError) + log.Log(true, "DebugChange =", debugChange) + log.Log(true, "DebugDump =", debugDump) + log.Log(true, "DebugTabs =", debugTabs) + log.Log(true, "DebugPlugin =", debugPlugin) + log.Log(true, "DebugNode =", debugNode) SetFlag("Show", true) } func (n *Node) Dump() { b := true - // log("Dump() dump =", b) Indent(b, "NODE DUMP START") Indent(b, "id = ", n.id) Indent(b, "Name = ", n.Name) @@ -129,7 +125,7 @@ func (n *Node) dumpWidget(b bool) string { var info, d string if (n == nil) { - log(debugError, "dumpWidget() node == nil") + log.Error(errors.New("dumpWidget() node == nil")) return "" } info = n.WidgetType.String() @@ -159,32 +155,32 @@ func (n *Node) ListChildren(dump bool) { if (n.parent == nil) { return } - log(debugNode, "\t\t\tparent =",n.parent.id) + log.Log(NODE, "\t\t\tparent =",n.parent.id) if (listChildrenParent != nil) { - log(debugNode, "\t\t\tlistChildrenParent =",listChildrenParent.id) + log.Log(NODE, "\t\t\tlistChildrenParent =",listChildrenParent.id) if (listChildrenParent.id != n.parent.id) { - log(true, "parent =",n.parent.id, n.parent.Name) - log(true, "listChildrenParent =",listChildrenParent.id, listChildrenParent.Name) - log(true, listChildrenParent.id, "!=", n.parent.id) - exit("parent.child does not match child.parent") + log.Log(true, "parent =",n.parent.id, n.parent.Name) + log.Log(true, "listChildrenParent =",listChildrenParent.id, listChildrenParent.Name) + log.Log(true, listChildrenParent.id, "!=", n.parent.id) + log.Exit("parent.child does not match child.parent") } } - log(debugNode, "\t\t", n.id, "has no children") + log.Log(NODE, "\t\t", n.id, "has no children") return } for _, child := range n.children { if (child.parent != nil) { - log(debugNode, "\t\t\tparent =",child.parent.id) + log.Log(NODE, "\t\t\tparent =",child.parent.id) } else { - log(debugGui, "\t\t\tno parent") + log.Log(GUI, "\t\t\tno parent") // memory corruption? non-threadsafe access? // can all binary tree changes to Node.parent & Node.child be forced into a singular goroutine? panic("something is wrong with the wit golang gui logic and the binary tree is broken. child has no parent") } if (child.children == nil) { - log(debugNode, "\t\t", child.id, "has no children") + log.Log(NODE, "\t\t", child.id, "has no children") } else { - log(debugNode, "\t\t\tHas children:", child.children) + log.Log(NODE, "\t\t\tHas children:", child.children) } listChildrenParent = n listChildrenDepth += 1 @@ -194,3 +190,19 @@ func (n *Node) ListChildren(dump bool) { } return } + +// b bool, print if true +func logindent(b bool, depth int, format string, a ...any) { + var tabs string + for i := 0; i < depth; i++ { + tabs = tabs + format + } + + // newFormat := tabs + strconv.Itoa(depth) + " " + format + newFormat := tabs + format + + // array prepend(). Why isn't this a standard function. It should be: + // a.prepend(debugGui, newFormat) + a = append([]any{b, newFormat}, a...) + log.Log(b, a...) +} diff --git a/grid.go b/grid.go index 30f2751..e4f3e08 100644 --- a/grid.go +++ b/grid.go @@ -1,6 +1,7 @@ package gui import ( + "go.wit.com/log" "go.wit.com/gui/gui/toolkit" ) @@ -73,7 +74,7 @@ func (n *Node) At(w int, h int) *Node { n.gridIncrement() if (n.NextW != w) || (n.NextH != h) { - log(logError, "At() (W,H)", w, h, " was moved to avoid a collision (W,H) =", n.NextW, n.NextH) + log.Warn("At() (W,H)", w, h, " was moved to avoid a collision (W,H) =", n.NextW, n.NextH) } return n } diff --git a/log.go b/log.go deleted file mode 100644 index c472317..0000000 --- a/log.go +++ /dev/null @@ -1,43 +0,0 @@ -package gui - -import ( - witlog "go.wit.com/log" -) - -// 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 log interface{} - -func log(b bool, a ...any) { - // witlog.Where = "wit/gui" - witlog.Log(b, a...) -} - -func sleep(a ...any) { - witlog.Sleep(a...) -} - -func exit(a ...any) { - witlog.Exit(a...) -} - -// b bool, print if true -func logindent(b bool, depth int, format string, a ...any) { - var tabs string - for i := 0; i < depth; i++ { - tabs = tabs + format - } - - // newFormat := tabs + strconv.Itoa(depth) + " " + format - newFormat := tabs + format - - // array prepend(). Why isn't this a standard function. It should be: - // a.prepend(debugGui, newFormat) - a = append([]any{b, newFormat}, a...) - witlog.Log(b, a...) -} diff --git a/log/log.go b/log/log.go deleted file mode 100644 index e728fa2..0000000 --- a/log/log.go +++ /dev/null @@ -1,148 +0,0 @@ -package witlog -// -// version v1.2 -// -// I like things to be easy. -// -// this means all the log settings are in one place. it should allow -// things to be over-ridden externally to the library -// but still allow command line --args to pass debugging settings -// -// I also have a generic sleep() and exit() in here because it's simple -// -// Usage: -// -// log("something", foo, bar) -// var DEBUG bool = true -// log(DEBUG, "something else", someOtherVariable) # if DEBUG == false, return doing nothing -// - -import ( - "io" - "os" - "runtime" - "runtime/pprof" - golog "log" - "fmt" - "time" - "reflect" - // "net" -) - -// 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 LogSleep bool = false - -var LOGOFF bool = false // turn this off, all logging stops -var debugToolkit bool = false // does spew stuff? - -var Where string = "gui/log" - -var externalLog func(...any) - -type Spewt struct { - a bool -} - - -/* - sleep() # you know what this does? sleeps for 1 second. yep. dump. easy. - sleep(.1) # you know what this does? yes, it sleeps for 1/10th of a second -*/ -func Sleep(a ...any) { - if (a == nil) { - time.Sleep(time.Second) - return - } - - Log(LogSleep, "sleep", a[0]) - - switch a[0].(type) { - case int: - time.Sleep(time.Duration(a[0].(int)) * time.Second) - case float64: - time.Sleep(time.Duration(a[0].(float64) * 1000) * time.Millisecond) - default: - Log("sleep a[0], type = ", a[0], reflect.TypeOf(a[0])) - } -} - -/* - exit() # yep. exits. I guess everything must be fine - exit(3) # I guess 3 it is then - exit("dont like apples") # ok. I'll make a note of that -*/ -func Exit(a ...any) { - Log(LogError, "exit", a) - //if (a) { - // os.Exit(a) - //} - os.Exit(0) -} - -/* - I've spent, am spending, too much time thinking about 'logging'. 'log', 'logrus', 'zap', whatever. - I'm not twitter. i don't give a fuck about how many nanoseconds it takes to log. Anyway, this - implementation is probably faster than all of those because you just set one bool to FALSE - and it all stops. - Sometimes I need to capture to stdout, sometimes stdout can't - work because it doesn't exist for the user. This whole thing is a PITA. Then it's spread - over 8 million references in every .go file. I'm tapping out and putting - it in one place. here it is. Also, this makes having debug levels really fucking easy. - You can define whatever level of logging you want from anywhere (command line) etc. - - log() # doesn't do anything - log(stuff) # sends it to whatever log you define in a single place. here is the place -*/ - -func Log(a ...any) { - if (LOGOFF) { - return - } - - if (a == nil) { - return - } - var tbool bool - if (reflect.TypeOf(a[0]) == reflect.TypeOf(tbool)) { - if (a[0] == false) { - return - } - a[0] = Where - } - - golog.Println(a...) - if (externalLog == nil) { - // golog.Println(a...) - } else { - externalLog(fmt.Sprint(a...)) - } -} - -func loggo() { - pprof.Lookup("goroutine").WriteTo(os.Stdout, 1) - golog.Println("runtime.NumGoroutine() = ", runtime.NumGoroutine()) -} - -func logindent(depth int, format string, a ...interface{}) { - var tabs string - for i := 0; i < depth; i++ { - tabs = tabs + format - } - - // newFormat := tabs + strconv.Itoa(depth) + " " + format - newFormat := tabs + format - Log(debugToolkit, newFormat, a) -} - -func SetOutput(w io.Writer) { - golog.SetOutput(w) -} - -func SetToolkitOutput(newLog func(...any)) { - externalLog = newLog -} diff --git a/log/structs.go b/log/structs.go deleted file mode 100644 index b5d849c..0000000 --- a/log/structs.go +++ /dev/null @@ -1,13 +0,0 @@ -package witlog - -import ( -) - -// -// Attempt to switch logging to syslog on linux -// - -// This struct can be used with the go-arg package -type LogArgs struct { - Log []string `arg:"--log" help:"Where to log [syslog,stdout]"` -} diff --git a/main.go b/main.go index b059268..36705e5 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package gui import ( "os" + "go.wit.com/log" "go.wit.com/gui/gui/toolkit" ) @@ -15,7 +16,7 @@ const Xaxis = 0 // stack things horizontally const Yaxis = 1 // stack things vertically func init() { - log(true, "init() has been run") + log.Log(true, "init() has been run") me.counter = 0 me.prefix = "wit" @@ -36,28 +37,29 @@ func init() { } func watchCallback() { - log(logInfo, "watchCallback() START") + log.Info("watchCallback() START") for { - log(logInfo, "watchCallback() restarted select for toolkit user events") + log.Info("watchCallback() restarted select for toolkit user events") select { case a := <-me.guiChan: if (a.ActionType == toolkit.UserQuit) { - log(logInfo, "doUserEvent() User sent Quit()") + log.Info("doUserEvent() User sent Quit()") me.rootNode.doCustom() - exit("wit/gui toolkit.UserQuit") + log.Exit("wit/gui toolkit.UserQuit") break } if (a.ActionType == toolkit.EnableDebug) { - log(logInfo, "doUserEvent() Enable Debugging Window") + log.Warn("doUserEvent() Enable Debugging Window") + log.Warn("doUserEvent() TODO: not implemented") // DebugWindow() break } n := me.rootNode.FindId(a.WidgetId) if (n == nil) { - log(logError, "watchCallback() UNKNOWN widget id =", a.WidgetId, a.Name) + log.Warn("watchCallback() UNKNOWN widget id =", a.WidgetId, a.Name) } else { - log(logInfo, "watchCallback() FOUND widget id =", n.id, n.Name) + log.Info("watchCallback() FOUND widget id =", n.id, n.Name) n.doUserEvent(a) } // this maybe a good idea? @@ -68,49 +70,49 @@ func watchCallback() { } func (n *Node) doCustom() { - log(logInfo, "doUserEvent() widget =", n.id, n.Name, n.WidgetType, n.B) + log.Info("doUserEvent() widget =", n.id, n.Name, n.WidgetType, n.B) if (n.Custom == nil) { - log(debugError, "Custom() = nil. SKIPPING") + log.Warn("Custom() = nil. SKIPPING") return } go n.Custom() } func (n *Node) doUserEvent(a toolkit.Action) { - log(logInfo, "doUserEvent() node =", n.id, n.Name) + log.Info("doUserEvent() node =", n.id, n.Name) switch n.WidgetType { case toolkit.Checkbox: n.B = a.B - log(logInfo, "doUserEvent() node =", n.id, n.Name, "set to:", n.B) + log.Info("doUserEvent() node =", n.id, n.Name, "set to:", n.B) n.doCustom() case toolkit.Button: - log(logInfo, "doUserEvent() node =", n.id, n.Name, "button clicked") + log.Info("doUserEvent() node =", n.id, n.Name, "button clicked") n.doCustom() case toolkit.Combobox: n.S = a.S - log(logInfo, "doUserEvent() node =", n.id, n.Name, "set to:", n.S) + log.Info("doUserEvent() node =", n.id, n.Name, "set to:", n.S) n.doCustom() case toolkit.Dropdown: n.S = a.S - log(logInfo, "doUserEvent() node =", n.id, n.Name, "set to:", n.S) + log.Info("doUserEvent() node =", n.id, n.Name, "set to:", n.S) n.doCustom() case toolkit.Textbox: n.S = a.S - log(logInfo, "doUserEvent() node =", n.id, n.Name, "set to:", n.S) + log.Info("doUserEvent() node =", n.id, n.Name, "set to:", n.S) n.doCustom() case toolkit.Spinner: n.I = a.I - log(logInfo, "doUserEvent() node =", n.id, n.Name, "set to:", n.I) + log.Info("doUserEvent() node =", n.id, n.Name, "set to:", n.I) n.doCustom() case toolkit.Slider: n.I = a.I - log(logInfo, "doUserEvent() node =", n.id, n.Name, "set to:", n.I) + log.Info("doUserEvent() node =", n.id, n.Name, "set to:", n.I) n.doCustom() case toolkit.Window: - log(logInfo, "doUserEvent() node =", n.id, n.Name, "window closed") + log.Info("doUserEvent() node =", n.id, n.Name, "window closed") n.doCustom() default: - log(logInfo, "doUserEvent() type =", n.WidgetType) + log.Info("doUserEvent() type =", n.WidgetType) } } @@ -125,14 +127,14 @@ func New() *Node { // try to load andlabs, if that doesn't work, fall back to the console func (n *Node) Default() *Node { if (argGui.GuiPlugin != "") { - log(logError, "New.Default() try toolkit =", argGui.GuiPlugin) + log.Warn("New.Default() try toolkit =", argGui.GuiPlugin) return n.LoadToolkit(argGui.GuiPlugin) } // if DISPLAY isn't set, return since gtk can't load // TODO: figure out how to check what to do in macos and mswindows if (os.Getenv("DISPLAY") == "") { if (n.LoadToolkit("gocui") == nil) { - log(logError, "New() failed to load gocui") + log.Warn("New() failed to load gocui") } return n } @@ -145,17 +147,17 @@ func (n *Node) Default() *Node { // The window is destroyed but the application does not quit func (n *Node) StandardClose() { - log(debugGui, "wit/gui Standard Window Close. name =", n.Name) - log(debugGui, "wit/gui Standard Window Close. n.Custom exit =", n.Custom) + log.Log(GUI, "wit/gui Standard Window Close. name =", n.Name) + log.Log(GUI, "wit/gui Standard Window Close. n.Custom exit =", n.Custom) } // The window is destroyed and the application exits // TODO: properly exit the plugin since Quit() doesn't do it func StandardExit() { - log(true, "wit/gui Standard Window Exit. running os.Exit()") - log(true, "StandardExit() attempt to exit each toolkit plugin") + log.Log(true, "wit/gui Standard Window Exit. running os.Exit()") + log.Log(true, "StandardExit() attempt to exit each toolkit plugin") for i, plug := range allPlugins { - log(true, "NewButton()", i, plug) + log.Log(true, "NewButton()", i, plug) } - exit(0) + log.Exit(0) } diff --git a/node.go b/node.go index d863f13..14a1227 100644 --- a/node.go +++ b/node.go @@ -1,6 +1,9 @@ package gui -import "go.wit.com/gui/gui/toolkit" +import ( + "go.wit.com/log" + "go.wit.com/gui/gui/toolkit" +) /* generic function to create a new node on the binary tree @@ -30,7 +33,7 @@ func addNode(title string) *Node { n.Name = title n.Text = title n.id = me.counter - log(debugNode, "addNode = widget setid =", n.id) + log.Log(NODE, "addNode = widget setid =", n.id) me.counter += 1 return n @@ -42,12 +45,12 @@ func (n *Node) Parent() *Node { func (n *Node) Delete(d *Node) { for i, child := range n.children { - log(debugNode, "\t", i, child.id, child.Name) + log.Log(NODE, "\t", i, child.id, child.Name) if (child.id == d.id) { - log(debugNode, "\t\t Deleting this") + log.Log(NODE, "\t\t Deleting this") n.children = append(n.children[:i], n.children[i+1:]...) return } } - log(debugError, "did not find node to delete", d.id, d.Name) + log.Warn("did not find node to delete", d.id, d.Name) } diff --git a/plugin.go b/plugin.go index fc27b81..5e1ac9d 100644 --- a/plugin.go +++ b/plugin.go @@ -10,6 +10,7 @@ import ( "embed" "plugin" + "go.wit.com/log" "go.wit.com/gui/gui/toolkit" ) @@ -50,12 +51,12 @@ var allPlugins []*aplug // loads and initializes a toolkit (andlabs/ui, gocui, etc) // attempts to locate the .so file func initPlugin(name string) *aplug { - log(logInfo, "initPlugin() START") + log.Log(PLUG, "initPlugin() START") for _, aplug := range allPlugins { - log(debugGui, "initPlugin() already loaded toolkit plugin =", aplug.name) + log.Log(PLUG, "initPlugin() already loaded toolkit plugin =", aplug.name) if (aplug.name == name) { - log(debugError, "initPlugin() SKIPPING", name, "as you can't load it twice") + log.Warn("initPlugin() SKIPPING", name, "as you can't load it twice") return nil } } @@ -71,13 +72,13 @@ func getPluginChannel(p *aplug, funcName string) func() chan toolkit.Action { test, err = p.plug.Lookup(funcName) if err != nil { - log(debugGui, "DID NOT FIND: name =", test, "err =", err) + log.Error(err, "DID NOT FIND: name =", test) return nil } newfunc, ok = test.(func() chan toolkit.Action) if !ok { - log(debugGui, "function name =", funcName, "names didn't map correctly. Fix the plugin name =", p.name) + log.Log(PLUG, "function name =", funcName, "names didn't map correctly. Fix the plugin name =", p.name) return nil } return newfunc @@ -90,13 +91,13 @@ func sendCallback(p *aplug, funcName string) func(chan toolkit.Action) { test, err = p.plug.Lookup(funcName) if err != nil { - log(debugGui, "DID NOT FIND: name =", test, "err =", err) + log.Error(err, "DID NOT FIND: name =", test) return nil } newfunc, ok = test.(func(chan toolkit.Action)) if !ok { - log(debugGui, "function name =", funcName, "names didn't map correctly. Fix the plugin name =", p.name) + log.Log(PLUG, "function name =", funcName, "names didn't map correctly. Fix the plugin name =", p.name) return nil } return newfunc @@ -120,7 +121,7 @@ func searchPaths(name string) *aplug { pfile, err = me.resFS.ReadFile(filename) if (err == nil) { filename = "/tmp/" + name + ".so" - log(logError, "write out file here", name, filename, len(pfile)) + log.Error(err, "write out file here", name, filename, len(pfile)) f, _ := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE, 0600) f.Write(pfile) f.Close() @@ -129,7 +130,7 @@ func searchPaths(name string) *aplug { return p } } else { - log(logError, filename, "was not embedded in the binary. Error:", err) + log.Error(err, filename, "was not embedded in the binary") } // attempt to write out the file from the internal resource @@ -141,7 +142,7 @@ func searchPaths(name string) *aplug { homeDir, err := os.UserHomeDir() if err != nil { - log(logError, "searchPaths() error. exiting here?") + log.Error(err, "searchPaths() error. exiting here?") } else { filename = homeDir + "/go/src/go.wit.com/gui/toolkits/" + name + ".so" p = initToolkit(name, filename) @@ -152,7 +153,7 @@ func searchPaths(name string) *aplug { homeDir, err = os.UserHomeDir() if err != nil { - log(logError, "searchPaths() error. exiting here?") + log.Error(err, "searchPaths() error. exiting here?") } else { filename = homeDir + "/go/src/go.wit.com/toolkits/" + name + ".so" p = initToolkit(name, filename) @@ -180,18 +181,18 @@ func searchPaths(name string) *aplug { func initToolkit(name string, filename string) *aplug { if _, err := os.Stat(filename); err != nil { if os.IsNotExist(err) { - log(true, "missing plugin", name, "as filename", filename) + log.Log(true, "missing plugin", name, "as filename", filename) return nil } } - log(true, "Found plugin", name, "as filename", filename) + log.Log(true, "Found plugin", name, "as filename", filename) plug, err := plugin.Open(filename) if err != nil { - log(debugError, "plugin FAILED =", filename, err) + log.Error(err, "plugin FAILED =", filename) return nil } - log(debugPlugin, "initToolkit() loading plugin =", filename) + log.Log(PLUG, "initToolkit() loading plugin =", filename) var newPlug *aplug newPlug = new(aplug) @@ -214,12 +215,12 @@ func initToolkit(name string, filename string) *aplug { // set the communication to the plugins newPlug.pluginChan = newPlug.PluginChannel() if (newPlug.pluginChan == nil) { - log(debugError, "initToolkit() ERROR PluginChannel() returned nil for plugin:", newPlug.name, filename) + log.Warn("initToolkit() ERROR PluginChannel() returned nil for plugin:", newPlug.name, filename) return nil } newPlug.Callback(me.guiChan) - log(debugPlugin, "initToolkit() END", newPlug.name, filename) + log.Log(PLUG, "initToolkit() END", newPlug.name, filename) return newPlug } @@ -255,16 +256,16 @@ func newAction(n *Node, atype toolkit.ActionType) *toolkit.Action { // sends the action/event to each toolkit via a golang plugin channel func sendAction(a *toolkit.Action) { for _, aplug := range allPlugins { - log(debugPlugin, "Action() aplug =", aplug.name, "Action type=", a.ActionType) + log.Log(PLUG, "Action() aplug =", aplug.name, "Action type=", a.ActionType) if (aplug.pluginChan == nil) { - log(logInfo, "Action() retrieving the aplug.PluginChannel()", aplug.name) + log.Info("Action() retrieving the aplug.PluginChannel()", aplug.name) aplug.pluginChan = aplug.PluginChannel() - log(logInfo, "Action() retrieved", aplug.pluginChan) + log.Info("Action() retrieved", aplug.pluginChan) } - log(logInfo, "Action() SEND to pluginChan", aplug.name) + log.Info("Action() SEND to pluginChan", aplug.name) aplug.pluginChan <- *a // added during debugging. might be a good idea in general for a tactile experience - sleep(.02) // this delay makes it so SetText() works on initial widget creation + log.Sleep(.02) // this delay makes it so SetText() works on initial widget creation } } @@ -275,15 +276,16 @@ func (n *Node) InitEmbed(resFS embed.FS) *Node { func (n *Node) LoadToolkitEmbed(name string, b []byte) *Node { for _, aplug := range allPlugins { - log(logInfo, "LoadToolkitEmbed() already loaded toolkit plugin =", aplug.name) + log.Info("LoadToolkitEmbed() already loaded toolkit plugin =", aplug.name) if (aplug.name == name) { - log(logError, "LoadToolkitEmbed() SKIPPING", name, "as you can't load it twice") + log.Warn("LoadToolkitEmbed() SKIPPING", name, "as you can't load it twice") return n } } f, err := os.CreateTemp("", "sample." + name + ".so") if (err != nil) { + log.Error(err, "LoadToolkitEmbed() SKIPPING", name, "as you can't load it twice") return n } defer os.Remove(f.Name()) @@ -291,25 +293,25 @@ func (n *Node) LoadToolkitEmbed(name string, b []byte) *Node { p := initToolkit(name, f.Name()) if (p == nil) { - log(logError, "LoadToolkitEmbed() embedded go file failed", name) + log.Warn("LoadToolkitEmbed() embedded go file failed", name) } return n } func (n *Node) ListToolkits() { for _, aplug := range allPlugins { - log(logNow, "ListToolkits() already loaded toolkit plugin =", aplug.name) + log.Log(PLUG, "ListToolkits() already loaded toolkit plugin =", aplug.name) } } func (n *Node) LoadToolkit(name string) *Node { - log(logInfo, "LoadToolkit() START for name =", name) + log.Log(PLUG, "LoadToolkit() START for name =", name) plug := initPlugin(name) if (plug == nil) { return n } - log(logInfo, "LoadToolkit() sending InitToolkit action to the plugin channel") + log.Log(PLUG, "LoadToolkit() sending InitToolkit action to the plugin channel") var a toolkit.Action a.ActionType = toolkit.InitToolkit plug.pluginChan <- a @@ -317,16 +319,16 @@ func (n *Node) LoadToolkit(name string) *Node { // TODO: find a new way to do this that is locking, safe and accurate me.rootNode.redraw(plug) - log(logInfo, "LoadToolkit() END for name =", name) + log.Log(PLUG, "LoadToolkit() END for name =", name) return n } func (n *Node) CloseToolkit(name string) bool { - log(logInfo, "CloseToolkit() for name =", name) + log.Log(PLUG, "CloseToolkit() for name =", name) for _, plug := range allPlugins { - log(debugGui, "CloseToolkit() found", plug.name) + log.Log(PLUG, "CloseToolkit() found", plug.name) if (plug.name == name) { - log(debugNow, "CloseToolkit() sending close", name) + log.Log(PLUG, "CloseToolkit() sending close", name) var a toolkit.Action a.ActionType = toolkit.CloseToolkit plug.pluginChan <- a diff --git a/redraw.go b/redraw.go index 638b26a..3e7ff22 100644 --- a/redraw.go +++ b/redraw.go @@ -1,6 +1,7 @@ package gui import ( + "go.wit.com/log" "go.wit.com/gui/gui/toolkit" ) @@ -20,7 +21,7 @@ func (n *Node) redraw(p *aplug) { } func (n *Node) redo(plug *aplug) { - log(logNow, "redo()", plug.name, n.id, n.WidgetType, n.Name) + log.Info("redo()", plug.name, n.id, n.WidgetType, n.Name) var a *toolkit.Action a = new(toolkit.Action) diff --git a/slider.go b/slider.go index 22e97ef..9b41e22 100644 --- a/slider.go +++ b/slider.go @@ -1,6 +1,7 @@ package gui import ( + "go.wit.com/log" "go.wit.com/gui/gui/toolkit" ) @@ -8,7 +9,7 @@ func (parent *Node) NewSlider(name string, x int, y int) *Node { newNode := parent.newNode(name, toolkit.Slider) newNode.Custom = func() { - log(debugGui, "even newer clicker() name in NewSlider name =", name) + log.Log(GUI, "even newer clicker() name in NewSlider name =", name) } newNode.X = x diff --git a/spinner.go b/spinner.go index 2d080da..797ef4e 100644 --- a/spinner.go +++ b/spinner.go @@ -1,6 +1,7 @@ package gui import ( + "go.wit.com/log" "go.wit.com/gui/gui/toolkit" ) @@ -8,7 +9,7 @@ func (parent *Node) NewSpinner(name string, x int, y int) *Node { newNode := parent.newNode(name, toolkit.Spinner) newNode.Custom = func() { - log(debugChange, "default NewSpinner() change", name) + log.Info("default NewSpinner() change", name) } newNode.X = x diff --git a/tab.go b/tab.go index 463944e..b202f6b 100644 --- a/tab.go +++ b/tab.go @@ -1,6 +1,8 @@ package gui import ( + "go.wit.com/log" + "go.wit.com/gui/gui/toolkit" ) @@ -12,16 +14,16 @@ func (n *Node) NewTab(text string) *Node { if (n.WidgetType != toolkit.Window) { // figure out what the actual window is - log(logError, "NewTab() is being requested on something that isn't a Window. node =", n) + log.Warn("NewTab() is being requested on something that isn't a Window. node =", n) if (n.parent == nil) { // TODO: find a window. any window. never give up. never die. - log(logError, "NewTab() TODO: make a window here", n) + log.Warn("NewTab() TODO: make a window here", n) panic("NewTab did not get passed a window") } - log(logError, "NewTab() parent =", n.parent) + log.Warn("NewTab() parent =", n.parent) if (n.parent.WidgetType == toolkit.Root) { // also broken - log(logError, "NewTab() TODO: make or find a window here", n) + log.Warn("NewTab() TODO: make or find a window here", n) panic("NewTab() did not get passed a window") } // go up the binary tree until we find a window widget to add a tab too diff --git a/textbox.go b/textbox.go index d772636..f4b156a 100644 --- a/textbox.go +++ b/textbox.go @@ -1,6 +1,8 @@ package gui import ( + "go.wit.com/log" + "go.wit.com/gui/gui/toolkit" ) @@ -8,7 +10,7 @@ func (parent *Node) NewTextbox(name string) *Node { newNode := parent.newNode(name, toolkit.Textbox) newNode.Custom = func() { - log(debugGui, "NewTextbox changed =", name) + log.Log(GUI, "NewTextbox changed =", name) } a := newAction(newNode, toolkit.Add) @@ -22,7 +24,7 @@ func (parent *Node) NewEntryLine(name string) *Node { newNode.X = 1 newNode.Custom = func() { - log(debugGui, "NewTextbox changed =", name) + log.Log(GUI, "NewTextbox changed =", name) } a := newAction(newNode, toolkit.Add) diff --git a/watchdog.go b/watchdog.go index e80861f..a57005c 100644 --- a/watchdog.go +++ b/watchdog.go @@ -2,6 +2,8 @@ package gui import ( "time" + + "go.wit.com/log" ) var watchtime time.Duration = 100 // in tenths of seconds @@ -16,43 +18,8 @@ var watchtime time.Duration = 100 // in tenths of seconds func Watchdog() { var i = 1 for { - log(logInfo, "gui.Watchdog() is alive. give me something to do.", i) - if (me.rootNode == nil) { - log(logInfo, "me.rootNode == nil", i) - } else { - if (logVerbose) { - me.rootNode.ListChildren(true) - } - } + log.Verbose("gui.Watchdog() is alive. give me something to do.", i) i += 1 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) - } - } -} -*/ diff --git a/window.go b/window.go index 7512317..9a0c849 100644 --- a/window.go +++ b/window.go @@ -1,6 +1,7 @@ package gui import ( + "go.wit.com/log" "go.wit.com/gui/gui/toolkit" ) @@ -13,7 +14,7 @@ func (parent *Node) NewWindow(title string) *Node { newNode = parent.newNode(title, toolkit.Window) newNode.Custom = StandardExit - log(logInfo, "NewWindow()", title) + log.Info("NewWindow()", title) a := newAction(newNode, toolkit.Add) sendAction(a)