diff options
| author | Jeff Carr <[email protected]> | 2023-04-03 10:26:47 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2023-04-03 10:26:47 -0500 |
| commit | 4b6207743b90968d6b822032a4355e43b6ce6da9 (patch) | |
| tree | 2cb9f13d5e95f14e165f8e41e8484320b7454177 /toolkit/gocui/click.go | |
| parent | 0320ebe4bb49ea80761d77af80fa208157ffdb89 (diff) | |
gocui: working towards correct layout
make a gocui widget binary tree
more debugging cleanups
sample button app displays in gocui
geometry logic closer to correct
improvements in gocui layout
continued attempts to clean up tabs
dump binary tree
moving towards proper chan callback()
deprecate Widget.Name
Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'toolkit/gocui/click.go')
| -rw-r--r-- | toolkit/gocui/click.go | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/toolkit/gocui/click.go b/toolkit/gocui/click.go new file mode 100644 index 0000000..9dc1a42 --- /dev/null +++ b/toolkit/gocui/click.go @@ -0,0 +1,165 @@ +package main + +import ( + "fmt" + "errors" + "strconv" + "strings" + + "github.com/awesome-gocui/gocui" + "git.wit.org/wit/gui/toolkit" +) + +func (w *cuiWidget) doWidgetClick() { + switch w.widgetType { + case toolkit.Root: + me.rootNode.redoTabs(true) + // me.rootNode.redoFake(true) + case toolkit.Flag: + me.rootNode.redoColor(true) + case toolkit.Window: + me.rootNode.redoTabs(true) + w.redoBox(true) + w.toggleTree() + me.rootNode.redoColor(true) + case toolkit.Tab: + me.rootNode.redoTabs(true) + w.redoBox(true) + w.toggleTree() + me.rootNode.redoColor(true) + case toolkit.Box: + w.showWidgetPlacement(logNow, "drawTree()") + if (w.horizontal) { + log("BOX IS HORIZONTAL", w.nextW, w.nextH, w.name) + } else { + log("BOX IS VERTICAL", w.nextW, w.nextH, w.name) + } + // w.redoBox(true) + default: + // w.textResize() + // something + } +} + +var toggle bool = true +func (w *cuiWidget) toggleTree() { + if (toggle) { + w.drawTree(toggle) + toggle = false + } else { + w.hideWidgets() + toggle = true + } +} + + +// display the widgets in the binary tree +func (w *cuiWidget) drawTree(draw bool) { + if (w == nil) { + return + } + w.showWidgetPlacement(logNow, "drawTree()") + if (draw) { + w.textResize() + w.drawView() + } else { + me.baseGui.DeleteView(w.cuiName) + w.v = nil + } + + for _, child := range w.children { + child.drawTree(draw) + } +} + +func click(g *gocui.Gui, v *gocui.View) error { + var l string + var err error + + log(logNow, "click() START", v.Name()) + i, err := strconv.Atoi(v.Name()) + if (err != nil) { + log(logNow, "click() Can't find widget. error =", err) + } else { + log(logNow, "click() ok v.Name() =", v.Name()) + w := findWidget(i, me.rootNode) + if (w == nil) { + log(logError, "click() CANT FIND VIEW in binary tree. v.Name =", v.Name()) + return nil + } + log(logNow, "click() Found widget =", w.id, w.name, ",", w.text) + w.doWidgetClick() + return nil + } + + if _, err := g.SetCurrentView(v.Name()); err != nil { + return err + } + + _, cy := v.Cursor() + if l, err = v.Line(cy); err != nil { + l = "" + } + + maxX, maxY := g.Size() + if v, err := g.SetView("msg", maxX/2-10, maxY/2, maxX/2+10, maxY/2+2, 0); err == nil || errors.Is(err, gocui.ErrUnknownView) { + v.Clear() + v.SelBgColor = gocui.ColorCyan + v.SelFgColor = gocui.ColorBlack + fmt.Fprintln(v, l) + } + + // this seems to delete the button(?) + // g.SetViewOnBottom(v.Name()) + log(logNow, "click() END") + return nil +} + +// display the widgets in the binary tree + +func ctrlDown(g *gocui.Gui, v *gocui.View) error { + var widgets []*cuiWidget + var f func (widget *cuiWidget) + w, h := g.MousePosition() + + f = func(widget *cuiWidget) { + if ((widget.logicalSize.w0 < w) && (w < widget.logicalSize.w1)) { + widgets = append(widgets, widget) + } + + for _, child := range widget.children { + f(child) + } + } + f(me.rootNode) + var t string + for i, widget := range widgets { + log(logNow, "ctrlDown() FOUND widget", i, widget.name) + t += widget.cuiName + " " + widget.name + "\n" + // widget.showWidgetPlacement(logNow, "drawTree()") + } + t = strings.TrimSpace(t) + if (me.ctrlDown == nil) { + setupCtrlDownWidget() + } + me.ctrlDown.text = t + me.ctrlDown.realSize.w0 = w + me.ctrlDown.realSize.h0 = h + me.ctrlDown.textResize() + me.ctrlDown.drawView() + + /* + v, err := g.SetView("ctrlDown", maxX/2-10, maxY/2, maxX/2+10, maxY/2+2, 0) + if (err != nil) { + log(logError, "ctrlDown() g.SetView() error:", err) + return + } + v.Clear() + v.SelBgColor = gocui.ColorCyan + v.SelFgColor = gocui.ColorBlack + fmt.Fprintln(v, l) + */ + + log(logNow, "ctrlDown()", w, h) + return nil +} |
