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

View File

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

View File

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

View File

@ -7,6 +7,8 @@ package main
import ( import (
"errors" "errors"
"github.com/awesome-gocui/gocui" "github.com/awesome-gocui/gocui"
"go.wit.com/log"
) )
// This initializes the gocui package // This initializes the gocui package
@ -47,21 +49,21 @@ func gocuiMain() {
func gocuiEvent(g *gocui.Gui) error { func gocuiEvent(g *gocui.Gui) error {
maxX, maxY := g.Size() maxX, maxY := g.Size()
mx, my := g.MousePosition() 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 { if _, err := g.View("msg"); msgMouseDown && err == nil {
moveMsg(g) moveMsg(g)
} }
if widgetView, _ := g.View("msg"); widgetView == nil { 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") makeOutputWidget(g, "this is a create before a mouse click")
if (me.logStdout != nil) { if (me.logStdout != nil) {
// setOutput(me.logStdout) // setOutput(me.logStdout)
} }
} else { } else {
log(logInfo, "output widget already exists", maxX, maxY, mx, my) log.Log(INFO, "output widget already exists", maxX, maxY, mx, my)
} }
mouseMove(g) mouseMove(g)
log(logVerbose, "handleEvent() END ", maxX, maxY, mx, my, msgMouseDown) log.Log(INFO, "handleEvent() END ", maxX, maxY, mx, my, msgMouseDown)
return nil 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? // 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 v := SetView("global", 5, 10, 5, 10, 0) // x0, x1, y1, y2, overlap
if (v == nil) { if (v == nil) {
log(logError, "setFrame() global failed") log.Log(ERROR, "setFrame() global failed")
} }
v.Frame = b 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 { func SetView(name string, x0, y0, x1, y1 int, overlaps byte) *gocui.View {
if (me.baseGui == nil) { if (me.baseGui == nil) {
log(logError, "SetView() ERROR: me.baseGui == nil") log.Log(ERROR, "SetView() ERROR: me.baseGui == nil")
return nil return nil
} }
v, err := me.baseGui.SetView(name, x0, y0, x1, y1, overlaps) v, err := me.baseGui.SetView(name, x0, y0, x1, y1, overlaps)
if err != nil { if err != nil {
if !errors.Is(err, gocui.ErrUnknownView) { 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 return nil
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -5,6 +5,8 @@ import (
"fmt" "fmt"
"github.com/awesome-gocui/gocui" "github.com/awesome-gocui/gocui"
"go.wit.com/log"
"go.wit.com/gui/widget" "go.wit.com/gui/widget"
) )
@ -24,7 +26,7 @@ func showMsg(g *gocui.Gui, v *gocui.View) error {
var l string var l string
var err error 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 { if _, err := g.SetCurrentView(v.Name()); err != nil {
return err return err
} }
@ -62,9 +64,9 @@ func makeOutputWidget(g *gocui.Gui, stringFromMouseClick string) *gocui.View {
} }
v, err := g.View("msg") v, err := g.View("msg")
if (v == nil) { 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 { } 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) // 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) v, err = g.SetView("msg", maxX-32, maxY/2, maxX/2+outputW, maxY/2+outputH, 0)
if errors.Is(err, gocui.ErrUnknownView) { 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) { if (err != nil) {
log(true, "makeoutputwindow() create output window failed", err) log.Log(NOW, "makeoutputwindow() create output window failed", err)
return nil return nil
} }
if (v == 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 return nil
} else { } else {
me.logStdout.tk.v = v me.logStdout.tk.v = v

View File

@ -15,6 +15,8 @@ import (
"sync" "sync"
"strings" "strings"
"github.com/awesome-gocui/gocui" "github.com/awesome-gocui/gocui"
"go.wit.com/log"
) )
// It's probably a terrible idea to call this 'me' // 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 { func Set(ptr interface{}, tag string) error {
if reflect.TypeOf(ptr).Kind() != reflect.Ptr { 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") 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) // log("setField() Can't set value", field, defaultVal)
return fmt.Errorf("Can't set value\n") return fmt.Errorf("Can't set value\n")
} else { } else {
log(true, "setField() Can set value", name, defaultVal) log.Log(NOW, "setField() Can set value", name, defaultVal)
} }
switch field.Kind() { switch field.Kind() {

View File

@ -4,6 +4,8 @@ package main
import ( import (
"strings" "strings"
"go.wit.com/log"
"go.wit.com/gui/widget" "go.wit.com/gui/widget"
) )
@ -76,7 +78,7 @@ func redoWindows(nextW int, nextH int) {
sizeW := w.Width() + me.WindowPadW sizeW := w.Width() + me.WindowPadW
sizeH := w.Height() sizeH := w.Height()
nextW += sizeW 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 { if n.hasTabs {
n.redoTabs(me.TabW, me.TabH) n.redoTabs(me.TabW, me.TabH)
@ -103,7 +105,7 @@ func (p *node) redoTabs(nextW int, nextH int) {
sizeW := w.Width() + me.TabPadW sizeW := w.Width() + me.TabPadW
sizeH := w.Height() 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 nextW += sizeW
} }
} }

View File

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

View File

@ -2,6 +2,8 @@ package main
import ( import (
"strconv" "strconv"
"go.wit.com/log"
"go.wit.com/gui/widget" "go.wit.com/gui/widget"
) )
@ -16,7 +18,7 @@ func initWidget(n *node) *guiWidget {
w.cuiName = strconv.Itoa(n.WidgetId) w.cuiName = strconv.Itoa(n.WidgetId)
if n.WidgetType == widget.Root { 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 n.WidgetId = 0
me.rootNode = n me.rootNode = n
return w return w

View File

@ -5,7 +5,7 @@ package main
*/ */
import ( import (
"go.wit.com/log" log "go.wit.com/log"
) )
var NOW log.LogFlag 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=