use "go.wit.com/log"

Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
Jeff Carr 2024-01-08 20:52:10 -06:00
parent 2a9724d7a8
commit 3c2da3f096
21 changed files with 230 additions and 156 deletions

View File

@ -13,3 +13,14 @@ objdump:
log:
reset
tail -f /tmp/witgui.* /tmp/guilogfile
cleanbuild:
go build -v -x -buildmode=plugin -o ../nocui.so
check-git-clean:
@git diff-index --quiet HEAD -- || (echo "Git repository is dirty, please commit your changes first"; exit 1)
redomod:
rm -f go.*
GO111MODULE= go mod init
GO111MODULE= go mod tidy

View File

@ -1,6 +1,7 @@
package main
import (
log "go.wit.com/log"
"go.wit.com/gui/widget"
)
@ -19,7 +20,7 @@ func (n *node) setFake() {
fakeStartHeight = me.TabH
fakeStartWidth += me.FakeW
}
if (logInfo) {
if (true) {
n.showView()
}
}
@ -27,10 +28,10 @@ func (n *node) setFake() {
// set the widget start width & height
func (n *node) addWidget() {
nw := n.tk
log(logInfo, "setStartWH() w.id =", n.WidgetId, "n.name", n.Name)
log.Log(INFO, "setStartWH() w.id =", n.WidgetId, "n.name", n.Name)
switch n.WidgetType {
case widget.Root:
log(logInfo, "setStartWH() rootNode w.id =", n.WidgetId, "w.name", n.Name)
log.Log(INFO, "setStartWH() rootNode w.id =", n.WidgetId, "w.name", n.Name)
nw.color = &colorRoot
n.setFake()
return
@ -74,5 +75,5 @@ func (n *node) addWidget() {
}
*/
}
n.showWidgetPlacement(logInfo, "addWidget()")
n.showWidgetPlacement(true, "addWidget()")
}

32
gocui/args.go Normal file
View File

@ -0,0 +1,32 @@
package main
/*
this enables command line options from other packages like 'gui' and 'log'
*/
import (
log "go.wit.com/log"
)
var outputS []string
var NOW log.LogFlag
var INFO log.LogFlag
var SPEW log.LogFlag
var WARN log.LogFlag
var ERROR log.LogFlag
func init() {
full := "toolkit/nocui"
short := "nocui"
NOW.NewFlag( "NOW", true, full, short, "temp debugging stuff")
INFO.NewFlag("INFO", false, full, short, "normal debugging stuff")
WARN.NewFlag("WARN", true, full, short, "bad things")
SPEW.NewFlag("SPEW", false, full, short, "spew stuff")
ERROR.NewFlag("ERROR", false, full, short, "toolkit errors")
}

View File

@ -3,6 +3,7 @@ package main
import (
"fmt"
"github.com/awesome-gocui/gocui"
"go.wit.com/log"
"go.wit.com/gui/widget"
)
@ -25,7 +26,7 @@ func unsetCurrent(n *node) {
// of the current widgets if that widget is supposed
// to be in current display
func (n *node) updateCurrent() {
log(true, "updateCurrent()", n.Name)
log.Log(NOW, "updateCurrent()", n.Name)
if n.WidgetType == widget.Tab {
if n.IsCurrent() {
// n.tk.color = &colorActiveT
@ -83,18 +84,18 @@ func setCurrentTab(n *node) {
w.isCurrent = true
p := n.parent.tk
p.isCurrent = true
log(true, "setCurrent()", n.Name)
log.Log(NOW, "setCurrent()", n.Name)
}
func (n *node) doWidgetClick() {
switch n.WidgetType {
case widget.Root:
// THIS IS THE BEGINING OF THE LAYOUT
log(true, "doWidgetClick()", n.Name)
log.Log(NOW, "doWidgetClick()", n.Name)
redoWindows(0,0)
case widget.Flag:
log(true, "doWidgetClick() FLAG widget name =", n.Name)
log(true, "doWidgetClick() if this is the dropdown menu, handle it here?")
log.Log(NOW, "doWidgetClick() FLAG widget name =", n.Name)
log.Log(NOW, "doWidgetClick() if this is the dropdown menu, handle it here?")
case widget.Window:
if (me.currentWindow == n) {
return
@ -111,7 +112,7 @@ func (n *node) doWidgetClick() {
n.redoTabs(me.TabW, me.TabH)
for _, child := range n.children {
if (child.currentTab == true) {
log(true, "FOUND CURRENT TAB", child.Name)
log.Log(NOW, "FOUND CURRENT TAB", child.Name)
setCurrentTab(child)
child.placeWidgets(me.RawW, me.RawH)
child.showWidgets()
@ -166,16 +167,16 @@ func (n *node) doWidgetClick() {
case widget.Box:
// w.showWidgetPlacement(logNow, "drawTree()")
if (n.horizontal) {
log(true, "BOX IS HORIZONTAL", n.Name)
log.Log(NOW, "BOX IS HORIZONTAL", n.Name)
} else {
log(true, "BOX IS VERTICAL", n.Name)
log.Log(NOW, "BOX IS VERTICAL", n.Name)
}
// n.placeWidgets()
n.toggleTree()
case widget.Button:
n.doUserEvent()
case widget.Dropdown:
log(true, "do the dropdown here")
log.Log(NOW, "do the dropdown here")
if (me.ddview == nil) {
me.ddview = addDropdown()
tk := me.ddview.tk
@ -198,7 +199,7 @@ func (n *node) doWidgetClick() {
me.ddview.SetVisible(true)
return
}
log(true, "doWidgetClick() visible =", me.ddview.Visible())
log.Log(NOW, "doWidgetClick() visible =", me.ddview.Visible())
if (me.ddview.Visible()) {
me.ddview.SetVisible(false)
me.baseGui.DeleteView("ddview")
@ -206,17 +207,17 @@ func (n *node) doWidgetClick() {
} else {
var dnsList string
for i, s := range n.vals {
log(logNow, "AddText()", n.Name, i, s)
log.Log(NOW, "AddText()", n.Name, i, s)
dnsList += s + "\n"
}
me.ddNode = n
log(logNow, "new dns list should be set to:", dnsList)
log.Log(NOW, "new dns list should be set to:", dnsList)
me.ddview.Text = dnsList
me.ddview.SetText(dnsList)
me.ddview.SetVisible(true)
}
for i, s := range n.vals {
log(logNow, "AddText()", n.Name, i, s)
log.Log(NOW, "AddText()", n.Name, i, s)
}
default:
}
@ -240,7 +241,7 @@ func (n *node) drawTree(draw bool) {
if (w == nil) {
return
}
n.showWidgetPlacement(logNow, "drawTree()")
n.showWidgetPlacement(true, "drawTree()")
if (draw) {
// w.textResize()
n.showView()
@ -257,27 +258,27 @@ func click(g *gocui.Gui, v *gocui.View) error {
// var l string
// var err error
log(logVerbose, "click() START", v.Name())
log.Log(INFO, "click() START", v.Name())
// n := me.rootNode.findWidgetName(v.Name())
n := findUnderMouse()
if (n != nil) {
log(logNow, "click() Found widget =", n.WidgetId, n.Name, ",", n.Text)
log.Log(NOW, "click() Found widget =", n.WidgetId, n.Name, ",", n.Text)
if (n.Name == "DropBox") {
log(logNow, "click() this is the dropdown menu. set a flag here what did I click? where is the mouse?")
log(logNow, "click() set a global dropdown clicked flag=true here")
log.Log(NOW, "click() this is the dropdown menu. set a flag here what did I click? where is the mouse?")
log.Log(NOW, "click() set a global dropdown clicked flag=true here")
me.ddClicked = true
}
n.doWidgetClick()
} else {
log(logNow, "click() could not find node name =", v.Name())
log.Log(NOW, "click() could not find node name =", v.Name())
}
if _, err := g.SetCurrentView(v.Name()); err != nil {
log(logNow, "click() END err =", err)
log.Log(NOW, "click() END err =", err)
return err
}
log(logVerbose, "click() END")
log.Log(NOW, "click() END")
return nil
}
@ -299,14 +300,14 @@ func findUnderMouse() *node {
}
}
if (n == me.ddview) {
log(true, "findUnderMouse() found ddview")
log.Log(NOW, "findUnderMouse() found ddview")
if n.Visible() {
log(true, "findUnderMouse() and ddview is visable. hide it here. TODO: find highlighted row")
log.Log(NOW, "findUnderMouse() and ddview is visable. hide it here. TODO: find highlighted row")
found = n
// find the actual value here and set the dropdown widget
me.baseGui.DeleteView("ddview")
} else {
log(true, "findUnderMouse() I was lying, actually it's not found")
log.Log(NOW, "findUnderMouse() I was lying, actually it's not found")
}
}
@ -319,7 +320,7 @@ func findUnderMouse() *node {
// TODO: pop up menu with a list of them
for _, n := range widgets {
//log(logNow, "ctrlDown() FOUND widget", widget.id, widget.name)
n.showWidgetPlacement(logNow, "findUnderMouse() FOUND")
n.showWidgetPlacement(true, "findUnderMouse() FOUND")
}
return found
}
@ -351,6 +352,6 @@ func ctrlDown(g *gocui.Gui, v *gocui.View) error {
} else {
me.ctrlDown.showView()
}
me.ctrlDown.showWidgetPlacement(logNow, "ctrlDown:")
me.ctrlDown.showWidgetPlacement(true, "ctrlDown:")
return nil
}

View File

@ -3,6 +3,8 @@ package main
import (
"math/rand"
"github.com/awesome-gocui/gocui"
"go.wit.com/log"
)
//w.v.SelBgColor = gocui.ColorCyan
@ -73,10 +75,10 @@ func (n *node) setColor(newColor *colorT) {
return
}
if (tk.color == nil) {
log(true, "Set the node to color = nil")
log.Log(NOW, "Set the node to color = nil")
tk.color = &colorNone
}
log(true, "Set the node to color =", tk.color.name)
log.Log(NOW, "Set the node to color =", tk.color.name)
n.recreateView()
}
@ -87,7 +89,7 @@ func (n *node) setDefaultWidgetColor() {
func (n *node) setDefaultHighlight() {
w := n.tk
if (w.v == nil) {
log(logError, "SetColor() failed on view == nil")
log.Log(ERROR, "SetColor() failed on view == nil")
return
}
w.v.SelBgColor = gocui.ColorGreen
@ -97,7 +99,7 @@ func (n *node) setDefaultHighlight() {
func randColor() gocui.Attribute {
colors := []string{"Green", "#FFAA55", "Yellow", "Blue", "Red", "Black", "White"}
i := rand.Intn(len(colors))
log(true, "randColor() i =", i)
log.Log(NOW, "randColor() i =", i)
return gocui.GetColor(colors[i])
}
@ -107,7 +109,7 @@ func (n *node) redoColor(draw bool) {
return
}
sleep(.05)
log.Sleep(.05)
n.setDefaultHighlight()
n.setDefaultWidgetColor()

View File

@ -2,6 +2,7 @@ package main
import (
"fmt"
"go.wit.com/log"
"go.wit.com/gui/widget"
)
@ -10,7 +11,7 @@ func (n *node) dumpTree(draw bool) {
if (w == nil) {
return
}
n.showWidgetPlacement(logNow, "dumpTree()")
n.showWidgetPlacement(true, "dumpTree()")
for _, child := range n.children {
child.dumpTree(draw)
@ -19,7 +20,7 @@ func (n *node) dumpTree(draw bool) {
func (n *node) showWidgetPlacement(b bool, s string) {
if (n == nil) {
log(logError, "WTF w == nil")
log.Log(ERROR, "WTF w == nil")
return
}
w := n.tk
@ -27,7 +28,7 @@ func (n *node) showWidgetPlacement(b bool, s string) {
var s1 string
var pId int
if (n.parent == nil) {
log(logVerbose, "showWidgetPlacement() parent == nil", n.WidgetId, w.cuiName)
log.Log(INFO, "showWidgetPlacement() parent == nil", n.WidgetId, w.cuiName)
pId = 0
} else {
pId = n.parent.WidgetId
@ -46,11 +47,11 @@ func (n *node) showWidgetPlacement(b bool, s string) {
}
}
tmp := "." + n.Name + "."
log(b, s1, s, n.WidgetType, ",", tmp) // , "text=", w.text)
log.Log(INFO, s1, s, n.WidgetType, ",", tmp) // , "text=", w.text)
}
func (n *node) dumpWidget(pad string) {
log(true, "node:", pad, n.WidgetId, "At(", n.AtW, n.AtH, ") ,", n.WidgetType, ", n.Name =", n.Name, ", n.Text =", n.Text)
log.Log(NOW, "node:", pad, n.WidgetId, "At(", n.AtW, n.AtH, ") ,", n.WidgetType, ", n.Name =", n.Name, ", n.Text =", n.Text)
}
func (n *node) listWidgets() {

View File

@ -7,6 +7,8 @@ package main
import (
"errors"
"github.com/awesome-gocui/gocui"
"go.wit.com/log"
)
// This initializes the gocui package
@ -47,21 +49,21 @@ func gocuiMain() {
func gocuiEvent(g *gocui.Gui) error {
maxX, maxY := g.Size()
mx, my := g.MousePosition()
log(logVerbose, "handleEvent() START", maxX, maxY, mx, my, msgMouseDown)
log.Log(NOW, "handleEvent() START", maxX, maxY, mx, my, msgMouseDown)
if _, err := g.View("msg"); msgMouseDown && err == nil {
moveMsg(g)
}
if widgetView, _ := g.View("msg"); widgetView == nil {
log(logNow, "handleEvent() create output widget now", maxX, maxY, mx, my)
log.Log(NOW, "handleEvent() create output widget now", maxX, maxY, mx, my)
makeOutputWidget(g, "this is a create before a mouse click")
if (me.logStdout != nil) {
// setOutput(me.logStdout)
}
} else {
log(logInfo, "output widget already exists", maxX, maxY, mx, my)
log.Log(INFO, "output widget already exists", maxX, maxY, mx, my)
}
mouseMove(g)
log(logVerbose, "handleEvent() END ", maxX, maxY, mx, my, msgMouseDown)
log.Log(INFO, "handleEvent() END ", maxX, maxY, mx, my, msgMouseDown)
return nil
}
@ -74,7 +76,7 @@ func setFrame(b bool) {
// what is this do? I made it just 2 lines for now. Is this useful for something?
v := SetView("global", 5, 10, 5, 10, 0) // x0, x1, y1, y2, overlap
if (v == nil) {
log(logError, "setFrame() global failed")
log.Log(ERROR, "setFrame() global failed")
}
v.Frame = b
}
@ -85,14 +87,14 @@ func quit(g *gocui.Gui, v *gocui.View) error {
func SetView(name string, x0, y0, x1, y1 int, overlaps byte) *gocui.View {
if (me.baseGui == nil) {
log(logError, "SetView() ERROR: me.baseGui == nil")
log.Log(ERROR, "SetView() ERROR: me.baseGui == nil")
return nil
}
v, err := me.baseGui.SetView(name, x0, y0, x1, y1, overlaps)
if err != nil {
if !errors.Is(err, gocui.ErrUnknownView) {
log(logError, "SetView() global failed on name =", name)
log.Log(ERROR, "SetView() global failed on name =", name)
}
return nil
}

View File

@ -5,8 +5,9 @@
package main
import (
"os"
"github.com/awesome-gocui/gocui"
"go.wit.com/log"
"go.wit.com/gui/widget"
)
@ -117,12 +118,13 @@ func addDebugKeys(g *gocui.Gui) {
// log to output window
g.SetKeybinding("", 'o', gocui.ModNone,
func(g *gocui.Gui, v *gocui.View) error {
log.Log(ERROR, "TODO: re-implement this")
if me.logStdout.Visible() {
me.logStdout.SetVisible(false)
setOutput(os.Stdout)
// setOutput(os.Stdout)
} else {
me.logStdout.SetVisible(true)
setOutput(me.logStdout.tk)
// setOutput(me.logStdout.tk)
}
return nil
})
@ -145,23 +147,11 @@ func addDebugKeys(g *gocui.Gui) {
a.B = true
a.ActionType = widget.EnableDebug
callback <- a
logInfo = true
logVerbose = true
} else {
logInfo = false
logVerbose = false
}
return nil
})
g.SetKeybinding("", gocui.KeyCtrlV, gocui.ModNone,
func(g *gocui.Gui, v *gocui.View) error {
if (logVerbose) {
logInfo = false
logVerbose = false
} else {
logInfo = true
logVerbose = true
}
return nil
})

View File

@ -6,24 +6,26 @@ package main
import (
"os"
"go.wit.com/log"
"go.wit.com/gui/widget"
)
// sets defaults and establishes communication
// to this toolkit from the wit/gui golang package
func init() {
log(logInfo, "Init() of awesome-gocui")
log.Log(INFO, "Init() of awesome-gocui")
// init the config struct default values
Set(&me, "default")
pluginChan = make(chan widget.Action)
log(logNow, "Init() start pluginChan")
log.Log(NOW, "Init() start pluginChan")
go catchActionChannel()
sleep(.1) // probably not needed, but in here for now under development
log.Sleep(.1) // probably not needed, but in here for now under development
go main()
sleep(.1) // probably not needed, but in here for now under development
log.Sleep(.1) // probably not needed, but in here for now under development
}
/*
@ -33,17 +35,17 @@ recieves requests from the program to do things like:
* etc..
*/
func catchActionChannel() {
log(logInfo, "catchActionChannel() START")
log.Log(INFO, "catchActionChannel() START")
for {
log(logInfo, "catchActionChannel() infinite for() loop restarted select on channel")
log.Log(INFO, "catchActionChannel() infinite for() loop restarted select on channel")
select {
case a := <-pluginChan:
if (me.baseGui == nil) {
// something went wrong initializing the gocui
log(logError,"ERROR: console did not initialize")
log.Log(ERROR, "ERROR: console did not initialize")
continue
}
log(logInfo, "catchActionChannel()", a.WidgetId, a.ActionType, a.WidgetType, a.Name)
log.Log(INFO, "catchActionChannel()", a.WidgetId, a.ActionType, a.WidgetType, a.Name)
action(&a)
}
}
@ -51,23 +53,23 @@ func catchActionChannel() {
func Exit() {
// TODO: what should actually happen here?
log(true, "Exit() here. doing standardExit()")
log.Log(NOW, "Exit() here. doing standardExit()")
standardExit()
}
func standardExit() {
log(true, "standardExit() doing baseGui.Close()")
log.Log(NOW, "standardExit() doing baseGui.Close()")
me.baseGui.Close()
log(true, "standardExit() doing outf.Close()")
log.Log(NOW, "standardExit() doing outf.Close()")
outf.Close()
// log(true, "standardExit() setOutput(os.Stdout)")
// setOutput(os.Stdout)
log(true, "standardExit() send back Quit()")
log.Log(NOW, "standardExit() send back Quit()")
go sendBackQuit() // don't stall here in case the
// induces a delay in case the callback channel is broken
sleep(1)
log(true, "standardExit() exit()")
exit()
log.Sleep(1)
log.Log(NOW, "standardExit() exit()")
os.Exit(0)
}
func sendBackQuit() {
// send 'Quit' back to the program (?)
@ -80,11 +82,12 @@ var outf *os.File
func main() {
var err error
log(logInfo, "main() start Init()")
log.Log(INFO, "main() start Init()")
outf, err = os.OpenFile("/tmp/witgui.log", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666)
if err != nil {
exit("error opening file: %v", err)
log.Error(err, "error opening file: %v")
os.Exit(0)
}
os.Stdout = outf
defer outf.Close()
@ -96,6 +99,6 @@ func main() {
os.Stderr = ferr
gocuiMain()
log(true, "MouseMain() closed")
log.Log(NOW, "MouseMain() closed")
standardExit()
}

View File

@ -8,6 +8,8 @@ import (
"errors"
"fmt"
"github.com/awesome-gocui/gocui"
"go.wit.com/log"
)
// this function uses the mouse position to highlight & unhighlight things
@ -24,7 +26,7 @@ func mouseMove(g *gocui.Gui) {
func msgDown(g *gocui.Gui, v *gocui.View) error {
initialMouseX, initialMouseY = g.MousePosition()
log(true, "msgDown() X,Y", initialMouseX, initialMouseY)
log.Log(NOW, "msgDown() X,Y", initialMouseX, initialMouseY)
if vx, vy, _, _, err := g.ViewPosition("msg"); err == nil {
xOffset = initialMouseX - vx
yOffset = initialMouseY - vy
@ -35,7 +37,7 @@ func msgDown(g *gocui.Gui, v *gocui.View) error {
func hideDDview() error {
w, h := me.baseGui.MousePosition()
log(true, "hide dropdown menu() view msgMouseDown (w,h) =", w, h)
log.Log(NOW, "hide dropdown menu() view msgMouseDown (w,h) =", w, h)
if (me.ddview == nil) {
return gocui.ErrUnknownView
}
@ -48,7 +50,7 @@ func hideDDview() error {
func showDDview() error {
w, h := me.baseGui.MousePosition()
log(true, "show dropdown menu() view msgMouseDown (w,h) =", w, h)
log.Log(NOW, "show dropdown menu() view msgMouseDown (w,h) =", w, h)
if (me.ddview == nil) {
return gocui.ErrUnknownView
}
@ -61,23 +63,23 @@ func showDDview() error {
func mouseUp(g *gocui.Gui, v *gocui.View) error {
w, h := g.MousePosition()
log(true, "mouseUp() view msgMouseDown (check here for dropdown menu click) (w,h) =", w, h)
log.Log(NOW, "mouseUp() view msgMouseDown (check here for dropdown menu click) (w,h) =", w, h)
if (me.ddClicked) {
me.ddClicked = false
log(true, "mouseUp() ddview is the thing that was clicked", w, h)
log(true, "mouseUp() find out what the string is here", w, h, me.ddview.tk.gocuiSize.h1)
log.Log(NOW, "mouseUp() ddview is the thing that was clicked", w, h)
log.Log(NOW, "mouseUp() find out what the string is here", w, h, me.ddview.tk.gocuiSize.h1)
var newZone string = ""
if (me.ddNode != nil) {
value := h - me.ddview.tk.gocuiSize.h0 - 1
log(true, "mouseUp() me.ddview.tk.gocuiSize.h1 =", me.ddview.tk.gocuiSize.h1)
log(true, "mouseUp() me.ddNode.vals =", me.ddNode.vals)
log.Log(NOW, "mouseUp() me.ddview.tk.gocuiSize.h1 =", me.ddview.tk.gocuiSize.h1)
log.Log(NOW, "mouseUp() me.ddNode.vals =", me.ddNode.vals)
valsLen := len(me.ddNode.vals)
log(true, "mouseUp() value =", value, "valsLen =", valsLen)
log(true, "mouseUp() me.ddNode.vals =", me.ddNode.vals)
log.Log(NOW, "mouseUp() value =", value, "valsLen =", valsLen)
log.Log(NOW, "mouseUp() me.ddNode.vals =", me.ddNode.vals)
if ((value >= 0) && (value < valsLen)) {
newZone = me.ddNode.vals[value]
log(true, "mouseUp() value =", value, "newZone =", newZone)
log.Log(NOW, "mouseUp() value =", value, "newZone =", newZone)
}
}
hideDDview()
@ -124,10 +126,10 @@ func mouseDown(g *gocui.Gui, v *gocui.View) error {
msg := fmt.Sprintf("Mouse really down at: %d,%d", mx, my) + "foobar"
if (test == me.ddview) {
if (me.ddview.Visible()) {
log(true, "hide DDview() Mouse really down at:", mx, my)
log.Log(NOW, "hide DDview() Mouse really down at:", mx, my)
hideDDview()
} else {
log(true, "show DDview() Mouse really down at:", mx, my)
log.Log(NOW, "show DDview() Mouse really down at:", mx, my)
showDDview()
}
return nil
@ -138,7 +140,7 @@ func mouseDown(g *gocui.Gui, v *gocui.View) error {
} else if x+len(msg)+1 > maxX-1 {
x = maxX - 1 - len(msg) - 1
}
log(true, "mouseDown() about to write out message to 'globalDown' view. msg =", msg)
log.Log(NOW, "mouseDown() about to write out message to 'globalDown' view. msg =", msg)
if v, err := g.SetView("globalDown", x, my-1, x+len(msg)+1, my+1, 0); err != nil {
if !errors.Is(err, gocui.ErrUnknownView) {
return err

View File

@ -2,6 +2,8 @@ package main
import (
"strings"
"go.wit.com/log"
"go.wit.com/gui/widget"
)
@ -9,7 +11,7 @@ func (n *node) placeBox(startW int, startH int) {
if (n.WidgetType != widget.Box) {
return
}
n.showWidgetPlacement(logNow, "boxS()")
n.showWidgetPlacement(true, "boxS()")
newW := startW
newH := startH
@ -20,11 +22,11 @@ func (n *node) placeBox(startW int, startH int) {
w := newR.w1 - newR.w0
h := newR.h1 - newR.h0
if (n.horizontal) {
log(logNow, "BOX IS HORIZONTAL", n.Name, "newWH()", newW, newH, "child()", w, h, child.Name)
log.Log(NOW, "BOX IS HORIZONTAL", n.Name, "newWH()", newW, newH, "child()", w, h, child.Name)
// expand based on the child width
newW += w
} else {
log(logNow, "BOX IS VERTICAL ", n.Name, "newWH()", newW, newH, "child()", w, h, child.Name)
log.Log(NOW, "BOX IS VERTICAL ", n.Name, "newWH()", newW, newH, "child()", w, h, child.Name)
// expand based on the child height
newH += h
}
@ -33,7 +35,7 @@ func (n *node) placeBox(startW int, startH int) {
// just compute this every time?
// newR := n.realGocuiSize()
n.showWidgetPlacement(logNow, "boxE()")
n.showWidgetPlacement(true, "boxE()")
}
func (n *node) placeWidgets(startW int, startH int) {
@ -62,7 +64,7 @@ func (n *node) placeWidgets(startW int, startH int) {
case widget.Group:
// move the group to the parent's next location
n.gocuiSetWH(startW, startH)
n.showWidgetPlacement(logNow, "group()")
n.showWidgetPlacement(true, "group()")
newW := startW + me.GroupPadW
newH := startH + 3 // normal hight of the group label
@ -84,7 +86,7 @@ func (n *node) placeWidgets(startW int, startH int) {
func (n *node) placeGrid(startW int, startH int) {
w := n.tk
n.showWidgetPlacement(logInfo, "grid0:")
n.showWidgetPlacement(true, "grid0:")
if (n.WidgetType != widget.Grid) {
return
}
@ -103,12 +105,12 @@ func (n *node) placeGrid(startW int, startH int) {
w.heights[child.AtH] = childH
}
// child.showWidgetPlacement(logInfo, "grid: ")
log(logVerbose, "placeGrid:", child.Name, "child()", childW, childH, "At()", child.AtW, child.AtH)
log.Log(INFO, "placeGrid:", child.Name, "child()", childW, childH, "At()", child.AtW, child.AtH)
}
// find the width and height offset of the grid for AtW,AtH
for _, child := range n.children {
child.showWidgetPlacement(logInfo, "grid1:")
child.showWidgetPlacement(true, "grid1:")
var totalW, totalH int
for i, w := range w.widths {
@ -126,11 +128,11 @@ func (n *node) placeGrid(startW int, startH int) {
newW := startW + totalW
newH := startH + totalH
log(logVerbose, "placeGrid:", child.Name, "new()", newW, newH, "At()", child.AtW, child.AtH)
log.Log(INFO, "placeGrid:", child.Name, "new()", newW, newH, "At()", child.AtW, child.AtH)
child.placeWidgets(newW, newH)
child.showWidgetPlacement(logInfo, "grid2:")
child.showWidgetPlacement(true, "grid2:")
}
n.showWidgetPlacement(logInfo, "grid3:")
n.showWidgetPlacement(true, "grid3:")
}
// computes the real, actual size of all the gocli objects in a widget

View File

@ -3,11 +3,12 @@ package main
import (
// if you include more than just this import
// then your plugin might be doing something un-ideal (just a guess from 2023/02/27)
"go.wit.com/log"
"go.wit.com/gui/widget"
)
func action(a *widget.Action) {
log(logInfo, "action() START", a.WidgetId, a.ActionType, a.WidgetType, a.Name)
log.Log(INFO, "action() START", a.WidgetId, a.ActionType, a.WidgetType, a.Name)
n := me.rootNode.findWidgetId(a.WidgetId)
var w *guiWidget
if (n != nil) {
@ -22,7 +23,7 @@ func action(a *widget.Action) {
} else {
// this is done to protect the plugin being 'refreshed' with the
// widget binary tree. TODO: find a way to keep them in sync
log(logError, "action() Add ignored for already defined widget",
log.Log(ERROR, "action() Add ignored for already defined widget",
a.WidgetId, a.ActionType, a.WidgetType, a.Name)
}
case widget.Show:
@ -33,12 +34,12 @@ func action(a *widget.Action) {
}
case widget.Set:
if a.WidgetType == widget.Flag {
log(logNow, "TODO: set flag here", a.ActionType, a.WidgetType, a.Name)
log(logNow, "TODO: n.WidgetType =", n.WidgetType, "n.Name =", a.Name)
log.Log(NOW, "TODO: set flag here", a.ActionType, a.WidgetType, a.Name)
log.Log(NOW, "TODO: n.WidgetType =", n.WidgetType, "n.Name =", a.Name)
} else {
if (a.A == nil) {
log(logError, "TODO: Set here. a == nil id =", a.WidgetId, "type =", a.WidgetType, "Name =", a.Name)
log(logError, "TODO: Set here. id =", a.WidgetId, "n.Name =", n.Name)
log.Log(ERROR, "TODO: Set here. a == nil id =", a.WidgetId, "type =", a.WidgetType, "Name =", a.Name)
log.Log(ERROR, "TODO: Set here. id =", a.WidgetId, "n.Name =", n.Name)
} else {
n.Set(a.A)
}
@ -48,38 +49,38 @@ func action(a *widget.Action) {
case widget.AddText:
n.AddText(a.S)
case widget.Move:
log(logNow, "attempt to move() =", a.ActionType, a.WidgetType, a.Name)
log.Log(NOW, "attempt to move() =", a.ActionType, a.WidgetType, a.Name)
case widget.CloseToolkit:
log(logNow, "attempting to close the plugin and release stdout and stderr")
log.Log(NOW, "attempting to close the plugin and release stdout and stderr")
standardExit()
case widget.Enable:
if n.Visible() {
// widget was already shown
} else {
log(logInfo, "Setting Visable to true", a.Name)
log.Log(INFO, "Setting Visable to true", a.Name)
n.SetVisible(true)
}
case widget.Disable:
if n.Visible() {
log(logInfo, "Setting Visable to false", a.Name)
log.Log(INFO, "Setting Visable to false", a.Name)
n.SetVisible(false)
} else {
// widget was already hidden
}
default:
log(logError, "action() ActionType =", a.ActionType, "WidgetType =", a.WidgetType, "Name =", a.Name)
log.Log(ERROR, "action() ActionType =", a.ActionType, "WidgetType =", a.WidgetType, "Name =", a.Name)
}
log(logInfo, "action() END")
log.Log(INFO, "action() END")
}
func (n *node) AddText(text string) {
if (n == nil) {
log(logNow, "widget is nil")
log.Log(NOW, "widget is nil")
return
}
n.vals = append(n.vals, text)
for i, s := range n.vals {
log(logNow, "AddText()", n.Name, i, s)
log.Log(NOW, "AddText()", n.Name, i, s)
}
n.SetText(text)
}
@ -87,7 +88,7 @@ func (n *node) AddText(text string) {
func (n *node) SetText(text string) {
var changed bool = false
if (n == nil) {
log(logNow, "widget is nil")
log.Log(NOW, "widget is nil")
return
}
if (n.Text != text) {
@ -111,7 +112,7 @@ func (n *node) SetText(text string) {
func (n *node) Set(val any) {
// w := n.tk
log(logInfo, "Set() value =", val)
log.Log(INFO, "Set() value =", val)
switch v := val.(type) {
case bool:
@ -122,6 +123,6 @@ func (n *node) Set(val any) {
case int:
n.I = val.(int)
default:
log(logError, "Set() unknown type =", val, v)
log.Log(ERROR, "Set() unknown type =", val, v)
}
}

View File

@ -5,6 +5,8 @@ import (
"fmt"
"github.com/awesome-gocui/gocui"
"go.wit.com/log"
"go.wit.com/gui/widget"
)
@ -24,7 +26,7 @@ func showMsg(g *gocui.Gui, v *gocui.View) error {
var l string
var err error
log(true, "showMsg() v.name =", v.Name())
log.Log(NOW, "showMsg() v.name =", v.Name())
if _, err := g.SetCurrentView(v.Name()); err != nil {
return err
}
@ -62,9 +64,9 @@ func makeOutputWidget(g *gocui.Gui, stringFromMouseClick string) *gocui.View {
}
v, err := g.View("msg")
if (v == nil) {
log(true, "makeoutputwindow() this is supposed to happen. v == nil", err)
log.Log(NOW, "makeoutputwindow() this is supposed to happen. v == nil", err)
} else {
log(true, "makeoutputwindow() msg != nil. WTF now? err =", err)
log.Log(NOW, "makeoutputwindow() msg != nil. WTF now? err =", err)
}
// help, err := g.SetView("help", maxX-32, 0, maxX-1, 13, 0)
@ -72,16 +74,16 @@ func makeOutputWidget(g *gocui.Gui, stringFromMouseClick string) *gocui.View {
v, err = g.SetView("msg", maxX-32, maxY/2, maxX/2+outputW, maxY/2+outputH, 0)
if errors.Is(err, gocui.ErrUnknownView) {
log(true, "makeoutputwindow() this is supposed to happen?", err)
log.Log(NOW, "makeoutputwindow() this is supposed to happen?", err)
}
if (err != nil) {
log(true, "makeoutputwindow() create output window failed", err)
log.Log(NOW, "makeoutputwindow() create output window failed", err)
return nil
}
if (v == nil) {
log(true, "makeoutputwindow() msg == nil. WTF now? err =", err)
log.Log(NOW, "makeoutputwindow() msg == nil. WTF now? err =", err)
return nil
} else {
me.logStdout.tk.v = v

View File

@ -15,6 +15,8 @@ import (
"sync"
"strings"
"github.com/awesome-gocui/gocui"
"go.wit.com/log"
)
// It's probably a terrible idea to call this 'me'
@ -181,7 +183,7 @@ func (w *guiWidget) Write(p []byte) (n int, err error) {
func Set(ptr interface{}, tag string) error {
if reflect.TypeOf(ptr).Kind() != reflect.Ptr {
log(logError, "Set() Not a pointer", ptr, "with tag =", tag)
log.Log(ERROR, "Set() Not a pointer", ptr, "with tag =", tag)
return fmt.Errorf("Not a pointer")
}
@ -203,7 +205,7 @@ func setField(field reflect.Value, defaultVal string, name string) error {
// log("setField() Can't set value", field, defaultVal)
return fmt.Errorf("Can't set value\n")
} else {
log(true, "setField() Can set value", name, defaultVal)
log.Log(NOW, "setField() Can set value", name, defaultVal)
}
switch field.Kind() {

View File

@ -4,6 +4,8 @@ package main
import (
"strings"
"go.wit.com/log"
"go.wit.com/gui/widget"
)
@ -76,7 +78,7 @@ func redoWindows(nextW int, nextH int) {
sizeW := w.Width() + me.WindowPadW
sizeH := w.Height()
nextW += sizeW
log(logNow, "redoWindows() start nextW,H =", nextW, nextH, "gocuiSize.W,H =", sizeW, sizeH, n.Name)
log.Log(NOW, "redoWindows() start nextW,H =", nextW, nextH, "gocuiSize.W,H =", sizeW, sizeH, n.Name)
if n.hasTabs {
n.redoTabs(me.TabW, me.TabH)
@ -103,7 +105,7 @@ func (p *node) redoTabs(nextW int, nextH int) {
sizeW := w.Width() + me.TabPadW
sizeH := w.Height()
log(logNow, "redoTabs() start nextW,H =", nextW, nextH, "gocuiSize.W,H =", sizeW, sizeH, n.Name)
log.Log(NOW, "redoTabs() start nextW,H =", nextW, nextH, "gocuiSize.W,H =", sizeW, sizeH, n.Name)
nextW += sizeW
}
}

View File

@ -8,6 +8,8 @@ import (
"strings"
"github.com/awesome-gocui/gocui"
"go.wit.com/log"
"go.wit.com/gui/widget"
)
@ -26,7 +28,7 @@ func (n *node) textResize() bool {
var changed bool = false
for i, s := range splitLines(n.Text) {
log(logInfo, "textResize() len =", len(s), i, s)
log.Log(INFO, "textResize() len =", len(s), i, s)
if (width < len(s)) {
width = len(s)
}
@ -41,7 +43,7 @@ func (n *node) textResize() bool {
changed = true
}
if (changed) {
n.showWidgetPlacement(logNow, "textResize() changed")
n.showWidgetPlacement(true, "textResize() changed")
}
return changed
}
@ -57,7 +59,7 @@ func (n *node) showView() {
w := n.tk
if (w.cuiName == "") {
log(logError, "showView() w.cuiName was not set for widget", w)
log.Log(ERROR, "showView() w.cuiName was not set for widget", w)
w.cuiName = strconv.Itoa(n.WidgetId)
}
@ -66,15 +68,15 @@ func (n *node) showView() {
n.recreateView()
}
x0, y0, x1, y1, err := me.baseGui.ViewPosition(w.cuiName)
log(logInfo, "showView() w.v already defined for widget", n.Name, err)
log.Log(INFO, "showView() w.v already defined for widget", n.Name, err)
// n.smartGocuiSize()
changed := n.textResize()
if (changed) {
log(logNow, "showView() textResize() changed. Should recreateView here wId =", w.cuiName)
log.Log(NOW, "showView() textResize() changed. Should recreateView here wId =", w.cuiName)
} else {
log(logNow, "showView() Clear() and Fprint() here wId =", w.cuiName)
log.Log(NOW, "showView() Clear() and Fprint() here wId =", w.cuiName)
w.v.Clear()
fmt.Fprint(w.v, n.Text)
n.SetVisible(false)
@ -89,17 +91,17 @@ func (n *node) showView() {
return
}
if (y0 != w.gocuiSize.h0) {
log(logError, "showView() start hight mismatch id=", w.cuiName, "gocui h vs computed h =", w.gocuiSize.h0, y0)
log.Log(ERROR, "showView() start hight mismatch id=", w.cuiName, "gocui h vs computed h =", w.gocuiSize.h0, y0)
n.recreateView()
return
}
if (x1 != w.gocuiSize.w1) {
log(logError, "showView() too wide", w.cuiName, "w,w", w.gocuiSize.w1, x1)
log.Log(ERROR, "showView() too wide", w.cuiName, "w,w", w.gocuiSize.w1, x1)
n.recreateView()
return
}
if (y1 != w.gocuiSize.h1) {
log(logError, "showView() too high", w.cuiName, "h,h", w.gocuiSize.h1, y1)
log.Log(ERROR, "showView() too high", w.cuiName, "h,h", w.gocuiSize.h1, y1)
n.recreateView()
return
}
@ -112,9 +114,9 @@ func (n *node) showView() {
func (n *node) recreateView() {
var err error
w := n.tk
log(logError, "recreateView() START", n.WidgetType, n.Name)
log.Log(ERROR, "recreateView() START", n.WidgetType, n.Name)
if (me.baseGui == nil) {
log(logError, "recreateView() ERROR: me.baseGui == nil", w)
log.Log(ERROR, "recreateView() ERROR: me.baseGui == nil", w)
return
}
@ -123,10 +125,10 @@ func (n *node) recreateView() {
w.v = nil
if (n.Name == "CLOUDFLARE_EMAIL") {
n.showWidgetPlacement(logNow, "n.Name=" + n.Name + " n.Text=" + n.Text + " " + w.cuiName)
n.showWidgetPlacement(true, "n.Name=" + n.Name + " n.Text=" + n.Text + " " + w.cuiName)
n.dumpWidget("jwc")
n.textResize()
n.showWidgetPlacement(logNow, "n.Name=" + n.Name + " n.Text=" + n.Text + " " + w.cuiName)
n.showWidgetPlacement(true, "n.Name=" + n.Name + " n.Text=" + n.Text + " " + w.cuiName)
}
a := w.gocuiSize.w0
@ -136,13 +138,13 @@ func (n *node) recreateView() {
w.v, err = me.baseGui.SetView(w.cuiName, a, b, c, d, 0)
if err == nil {
n.showWidgetPlacement(logError, "recreateView()")
log(logError, "recreateView() internal plugin error err = nil")
n.showWidgetPlacement(true, "recreateView()")
log.Log(ERROR, "recreateView() internal plugin error err = nil")
return
}
if !errors.Is(err, gocui.ErrUnknownView) {
n.showWidgetPlacement(logError, "recreateView()")
log(logError, "recreateView() internal plugin error error.IS()", err)
n.showWidgetPlacement(true, "recreateView()")
log.Log(ERROR, "recreateView() internal plugin error error.IS()", err)
return
}
@ -161,7 +163,7 @@ func (n *node) recreateView() {
w.v.Frame = w.frame
w.v.Clear()
fmt.Fprint(w.v, n.Text)
// n.showWidgetPlacement(logNow, "n.Name=" + n.Name + " n.Text=" + n.Text + " " + w.cuiName)
// n.showWidgetPlacement(true, "n.Name=" + n.Name + " n.Text=" + n.Text + " " + w.cuiName)
// n.dumpWidget("jwc 2")
// if you don't do this here, it will be black & white only
@ -173,10 +175,10 @@ func (n *node) recreateView() {
w.v.SelBgColor = w.color.selBg
}
if (n.Name == "CLOUDFLARE_EMAIL") {
n.showWidgetPlacement(logNow, "n.Name=" + n.Name + " n.Text=" + n.Text + " " + w.cuiName)
n.showWidgetPlacement(true, "n.Name=" + n.Name + " n.Text=" + n.Text + " " + w.cuiName)
n.dumpTree(true)
}
log(logError, "recreateView() END")
log.Log(ERROR, "recreateView() END")
}
func (n *node) hideWidgets() {
@ -210,7 +212,7 @@ func (n *node) showFake() {
w := n.tk
if (w.isFake) {
n.setFake()
n.showWidgetPlacement(logNow, "showFake:")
n.showWidgetPlacement(true, "showFake:")
n.showView()
}
for _, child := range n.children {
@ -223,7 +225,7 @@ func (n *node) showWidgets() {
if (w.isFake) {
// don't display by default
} else {
n.showWidgetPlacement(logInfo, "current:")
n.showWidgetPlacement(true, "current:")
n.showView()
}
for _, child := range n.children {

View File

@ -2,6 +2,8 @@ package main
import (
"strconv"
"go.wit.com/log"
"go.wit.com/gui/widget"
)
@ -16,7 +18,7 @@ func initWidget(n *node) *guiWidget {
w.cuiName = strconv.Itoa(n.WidgetId)
if n.WidgetType == widget.Root {
log(logInfo, "setupWidget() FOUND ROOT w.id =", n.WidgetId)
log.Log(INFO, "setupWidget() FOUND ROOT w.id =", n.WidgetId)
n.WidgetId = 0
me.rootNode = n
return w

View File

@ -5,7 +5,7 @@ package main
*/
import (
"go.wit.com/log"
log "go.wit.com/log"
)
var NOW log.LogFlag

10
nocui/go.mod Normal file
View File

@ -0,0 +1,10 @@
module go.wit.com/gui/toolkits/nocui
go 1.21.4
require (
go.wit.com/gui/widget v0.0.0-20240105185907-84aafa536a93
go.wit.com/log v0.4.2
)
require go.wit.com/spew v0.0.0-20240101141411-c7b8e91573c9 // indirect

6
nocui/go.sum Normal file
View File

@ -0,0 +1,6 @@
go.wit.com/gui/widget v0.0.0-20240105185907-84aafa536a93 h1:zCzaHvXJJ/rWXmDc/v79VvM6W2lxxzJGfnW2lHCv3Ho=
go.wit.com/gui/widget v0.0.0-20240105185907-84aafa536a93/go.mod h1:A6/FaiFQtAHTjgo7c4FrokXe6bXX1Cowo35b2Lgi31E=
go.wit.com/log v0.4.2 h1:oYCOD7qCY0A+LsrQXPv5ETtVyD8AhIHgvNBMdly9hy0=
go.wit.com/log v0.4.2/go.mod h1:EZLvivLZpMoXl5AUBArH0zsIgr+c+WyNXm14BCF+sdw=
go.wit.com/spew v0.0.0-20240101141411-c7b8e91573c9 h1:UEX2EzLQPzLTfy/kUFQD7OXtvKn8wk/+jpDOkbl4ff4=
go.wit.com/spew v0.0.0-20240101141411-c7b8e91573c9/go.mod h1:qBpgJXThMMT15vym7/E4Ur9y8oOo2nP7t2RP52QHUNw=