summaryrefslogtreecommitdiff
path: root/draw.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-02-05 03:09:41 -0600
committerJeff Carr <[email protected]>2024-02-05 03:09:41 -0600
commita907a4418a1f1d027b288b1bbd91a43b103f29f9 (patch)
tree2fca47d404d84ad831995f0172a0cf3d4e6e0afd /draw.go
parent07ddc4e44d6acacc7f253c8bd9da7f7248cafa94 (diff)
move code blocks around
Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'draw.go')
-rw-r--r--draw.go76
1 files changed, 76 insertions, 0 deletions
diff --git a/draw.go b/draw.go
index 6e7304c..0e485d6 100644
--- a/draw.go
+++ b/draw.go
@@ -1,5 +1,14 @@
package main
+import (
+ "errors"
+ "fmt"
+ "strconv"
+
+ "github.com/awesome-gocui/gocui"
+ log "go.wit.com/log"
+)
+
var toggle bool = true
func (w *guiWidget) DrawAt(offsetW, offsetH int) {
@@ -36,3 +45,70 @@ func (w *guiWidget) drawTree(draw bool) {
child.drawTree(draw)
}
}
+
+// display's the text of the widget in gocui
+// create or recreate the gocui widget visible
+// will create a new gocui view if there isn't one or if it has been moved
+// deletes the old view if it exists and recreates it
+func (w *guiWidget) recreateView() {
+ var err error
+ log.Log(INFO, "recreateView() START", w.WidgetType, w.String())
+ if me.baseGui == nil {
+ log.Log(ERROR, "recreateView() ERROR: me.baseGui == nil", w)
+ return
+ }
+
+ if w.cuiName == "" {
+ log.Log(ERROR, "recreateView() w.cuiName was not set for widget", w)
+ w.cuiName = strconv.Itoa(w.node.WidgetId) + " TK"
+ }
+ log.Log(INFO, "recreateView() labelN =", w.labelN)
+
+ // this deletes the button from gocui
+ me.baseGui.DeleteView(w.cuiName)
+ w.v = nil
+
+ w.textResize()
+ a := w.gocuiSize.w0
+ b := w.gocuiSize.h0
+ c := w.gocuiSize.w1
+ d := w.gocuiSize.h1
+
+ w.v, err = me.baseGui.SetView(w.cuiName, a, b, c, d, 0)
+ if err == nil {
+ w.showWidgetPlacement("recreateView()")
+ log.Log(ERROR, "recreateView() internal plugin error err = nil")
+ return
+ }
+ if !errors.Is(err, gocui.ErrUnknownView) {
+ w.showWidgetPlacement("recreateView()")
+ log.Log(ERROR, "recreateView() internal plugin error error.IS()", err)
+ return
+ }
+
+ // this sets up the keybinding for the name of the window
+ // does this really need to be done? I think we probably already
+ // know everything about where all the widgets are so we could bypass
+ // the gocui package and just handle all the mouse events internally here (?)
+ // for now, the w.v.Name is a string "1", "2", "3", etc from the widgetId
+
+ // set the binding for this gocui view now that it has been created
+ // gocui handles overlaps of views so it will run on the view that is clicked on
+ me.baseGui.SetKeybinding(w.v.Name(), gocui.MouseLeft, gocui.ModNone, click)
+
+ // this actually sends the text to display to gocui
+ w.v.Wrap = true
+ w.v.Frame = w.frame
+ w.v.Clear()
+ fmt.Fprint(w.v, w.labelN)
+
+ // if you don't do this here, it will be black & white only
+ if w.color != nil {
+ w.v.FrameColor = w.color.frame
+ w.v.FgColor = w.color.fg
+ w.v.BgColor = w.color.bg
+ w.v.SelFgColor = w.color.selFg
+ w.v.SelBgColor = w.color.selBg
+ }
+ log.Log(INFO, "recreateView() END")
+}