// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main import ( "errors" "fmt" "strconv" "github.com/awesome-gocui/gocui" log "go.wit.com/log" "go.wit.com/widget" ) // display's the text of the widget in gocui // deletes the old view if it exists and recreates it func (tk *guiWidget) drawView() { var err error log.Log(INFO, "drawView() START", tk.node.WidgetType, tk.String()) if me.baseGui == nil { log.Log(ERROR, "drawView() ERROR: me.baseGui == nil", tk) return } if tk.cuiName == "" { log.Log(ERROR, "drawView() tk.cuiName was not set for widget", tk) tk.cuiName = strconv.Itoa(tk.node.WidgetId) + " TK" } log.Log(INFO, "drawView() labelN =", tk.labelN) // this deletes the button from gocui me.baseGui.DeleteView(tk.cuiName) tk.v = nil a := tk.gocuiSize.w0 b := tk.gocuiSize.h0 c := tk.gocuiSize.w1 d := tk.gocuiSize.h1 // this is all terrible. This sets the title. kinda if tk.node.WidgetType == widget.Window { tk.textResize() tk.full.w0 = tk.force.w0 tk.full.h0 = tk.force.h0 // for windows, make it the full size a = tk.full.w0 b = tk.full.h0 c = tk.full.w0 + tk.gocuiSize.Width() d = tk.full.h0 + tk.gocuiSize.Height() } else { if tk.internal { // do nothing } else { tk.textResize() // resize gocui frame to the widget text } a = tk.gocuiSize.w0 b = tk.gocuiSize.h0 c = tk.gocuiSize.w1 d = tk.gocuiSize.h1 } tk.v, err = me.baseGui.SetView(tk.cuiName, a, b, c, d, 0) if err == nil { tk.dumpWidget("drawView() err") log.Log(ERROR, "drawView() internal plugin error err = nil") return } if !errors.Is(err, gocui.ErrUnknownView) { tk.dumpWidget("drawView() err") log.Log(ERROR, "drawView() internal plugin error error.IS()", err) return } // this actually sends the text to display to gocui tk.v.Wrap = true tk.v.Frame = tk.frame tk.v.Clear() fmt.Fprint(tk.v, tk.labelN) // if you don't do this here, it will be black & white only if tk.color != nil { tk.v.FrameColor = tk.color.frame tk.v.FgColor = tk.color.fg tk.v.BgColor = tk.color.bg tk.v.SelFgColor = tk.color.selFg tk.v.SelBgColor = tk.color.selBg } log.Log(INFO, "drawView() END") } func (w *guiWidget) DrawAt(offsetW, offsetH int) { w.setColor(&colorActiveW) w.placeWidgets(offsetW, offsetH) // compute the sizes & places for each widget // w.dumpWidget(fmt.Sprintf("DrawAt(%d,%d)", offsetW, offsetH)) } func (w *guiWidget) simpleDrawAt(offsetW, offsetH int) { w.setColor(&colorActiveW) w.dumpWidget("simpleDrawAt()") } /* var toggle bool = true 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.dumpWidget("in drawTree()") if draw { // w.textResize() w.Show() } else { w.Hide() } for _, child := range w.children { child.drawTree(draw) } } func (w *guiWidget) Show() { if w.isFake { // don't display fake widgets return } if w.Hidden() { // recursively checks if the parent is hidden // never show hidden widgets return } w.drawView() }