diff options
Diffstat (limited to 'showStdout.go')
| -rw-r--r-- | showStdout.go | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/showStdout.go b/showStdout.go new file mode 100644 index 0000000..c628f4a --- /dev/null +++ b/showStdout.go @@ -0,0 +1,98 @@ +package main + +import ( + "errors" + "fmt" + + "github.com/awesome-gocui/gocui" + + "go.wit.com/lib/widget" + "go.wit.com/log" +) + +var outputW int = 180 +var outputH int = 24 + +func moveMsg(g *gocui.Gui) { + mx, my := g.MousePosition() + if !movingMsg && (mx != initialMouseX || my != initialMouseY) { + movingMsg = true + } + g.SetView("msg", mx-xOffset, my-yOffset, mx-xOffset+outputW, my-yOffset+outputH+me.FramePadH, 0) + g.SetViewOnBottom("msg") +} + +func showMsg(g *gocui.Gui, v *gocui.View) error { + var l string + var err error + + log.Log(NOW, "showMsg() v.name =", v.Name()) + if _, err := g.SetCurrentView(v.Name()); err != nil { + return err + } + + _, cy := v.Cursor() + if l, err = v.Line(cy); err != nil { + l = "" + } + + makeOutputWidget(g, l) + return nil +} + +func makeOutputWidget(g *gocui.Gui, stringFromMouseClick string) *gocui.View { + maxX, maxY := g.Size() + + if me.rootNode == nil { + // keep skipping this until the binary tree is initialized + return nil + } + + if me.logStdout == nil { + a := new(widget.Action) + a.ProgName = "stdout" + a.WidgetType = widget.Stdout + a.WidgetId = -3 + a.ParentId = 0 + n := addNode(a) + me.logStdout = n + me.logStdout.tk.gocuiSize.w0 = maxX - 32 + me.logStdout.tk.gocuiSize.h0 = maxY / 2 + me.logStdout.tk.gocuiSize.w1 = me.logStdout.tk.gocuiSize.w0 + outputW + me.logStdout.tk.gocuiSize.h1 = me.logStdout.tk.gocuiSize.h0 + outputH + } + v, err := g.View("msg") + if v == nil { + log.Log(NOW, "makeoutputwindow() this is supposed to happen. v == nil", err) + } else { + log.Log(NOW, "makeoutputwindow() msg != nil. WTF now? err =", err) + } + + // help, err := g.SetView("help", maxX-32, 0, maxX-1, 13, 0) + // v, err = g.SetView("msg", 3, 3, 30, 30, 0) + + v, err = g.SetView("msg", maxX-32, maxY/2, maxX/2+outputW, maxY/2+outputH, 0) + if errors.Is(err, gocui.ErrUnknownView) { + log.Log(NOW, "makeoutputwindow() this is supposed to happen?", err) + } + + if err != nil { + log.Log(NOW, "makeoutputwindow() create output window failed", err) + return nil + } + + if v == nil { + log.Log(NOW, "makeoutputwindow() msg == nil. WTF now? err =", err) + return nil + } else { + me.logStdout.tk.v = v + } + + v.Clear() + v.SelBgColor = gocui.ColorCyan + v.SelFgColor = gocui.ColorBlack + fmt.Fprintln(v, "figure out how to capture STDOUT to here\n"+stringFromMouseClick) + g.SetViewOnBottom("msg") + // g.SetViewOnBottom(v.Name()) + return v +} |
