diff options
Diffstat (limited to 'treeDraw.go')
| -rw-r--r-- | treeDraw.go | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/treeDraw.go b/treeDraw.go new file mode 100644 index 0000000..5b92d9e --- /dev/null +++ b/treeDraw.go @@ -0,0 +1,112 @@ +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) { + w.setColor(&colorActiveW) + w.placeWidgets(offsetW, offsetH) // compute the sizes & places for each widget + w.active = false + w.showWidgets() +} + +func (w *guiWidget) toggleTree() { + if toggle { + w.drawTree(toggle) + toggle = false + } else { + w.hideWidgets() + toggle = true + } +} + +// display the widgets in the binary tree +func (w *guiWidget) drawTree(draw bool) { + if w == nil { + return + } + w.showWidgetPlacement("drawTree()") + if draw { + // w.textResize() + w.Show() + } else { + w.Hide() + } + + for _, child := range w.children { + child.drawTree(draw) + } +} + +// display's the text of the widget in gocui +// deletes the old view if it exists and recreates it +func (w *guiWidget) drawView() { + var err error + log.Log(INFO, "drawView() START", w.WidgetType, w.String()) + if me.baseGui == nil { + log.Log(ERROR, "drawView() ERROR: me.baseGui == nil", w) + return + } + + if w.cuiName == "" { + log.Log(ERROR, "drawView() w.cuiName was not set for widget", w) + w.cuiName = strconv.Itoa(w.node.WidgetId) + " TK" + } + log.Log(INFO, "drawView() 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("drawView()") + log.Log(ERROR, "drawView() internal plugin error err = nil") + return + } + if !errors.Is(err, gocui.ErrUnknownView) { + w.showWidgetPlacement("drawView()") + log.Log(ERROR, "drawView() 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, "drawView() END") +} |
