From 8429f76b551ebeb04277f0ae6e5fa68e8f173364 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Tue, 4 Apr 2023 10:38:21 -0500 Subject: [PATCH] gocui: grid resize Signed-off-by: Jeff Carr --- cmds/buttonplugin/main.go | 9 +++++ toolkit/gocui/click.go | 69 +++++++++++++++++++++++++++++++++------ toolkit/gocui/common.go | 4 +++ toolkit/gocui/place.go | 61 +++------------------------------- 4 files changed, 77 insertions(+), 66 deletions(-) diff --git a/cmds/buttonplugin/main.go b/cmds/buttonplugin/main.go index d1b0489..aca8707 100644 --- a/cmds/buttonplugin/main.go +++ b/cmds/buttonplugin/main.go @@ -104,6 +104,15 @@ func buttonWindow() { }) }) + g.NewButton("NewButton(more2 d)", func () { + log.Println("new foobar 2. Adding button 'foobar 3'") + name := "d" + strconv.Itoa(counter) + counter += 1 + more2.NewButton(name, func () { + log.Println("Got all the way to main() name =", name) + }) + }) + g.NewButton("NewGroup()", func () { log.Println("new foobar 2. Adding button 'foobar 3'") name := "neat " + strconv.Itoa(counter) diff --git a/toolkit/gocui/click.go b/toolkit/gocui/click.go index 41b8780..2c24f3e 100644 --- a/toolkit/gocui/click.go +++ b/toolkit/gocui/click.go @@ -11,22 +11,54 @@ import ( ) func (w *cuiWidget) gridBounds() { + w.showWidgetPlacement(logNow, "gridBounds:") + p := w.parent + + /* for a := 0; a < w.x; a++ { for b := 0; b < w.y; b++ { - p := w.parent log(logNow, "gridBounds() (w,h)", a, b, "logical(W,H)", w.logicalW[a], w.logicalH[b], "p.next(W,H)", p.nextW, p.nextH) } log("\n") } + */ + var wCount int = 0 + var hCount int = 0 + for _, child := range w.children { + // increment for the next child + w.nextW = p.nextW + wCount * 20 + w.nextH = p.nextH + hCount * 2 + child.redoBox(true) + + // set the child's realWidth, and grid offset + child.parentH = hCount + child.parentW = wCount + if (w.logicalW[wCount] < child.realWidth) { + w.logicalW[wCount] = child.realWidth + } + if (w.logicalH[hCount] < child.realHeight) { + w.logicalH[hCount] = child.realHeight + } + log(logNow, "redoBox(GRID) (w,h count)", wCount, hCount, "(X,Y)", w.x, w.y, w.name) + child.showWidgetPlacement(logNow, "grid:") + + if ((wCount + 1) < w.y) { + wCount += 1 + } else { + wCount = 0 + hCount += 1 + } + } + for _, child := range w.children { - child.showWidgetPlacement(logNow, "gridBounds:") + child.showWidgetPlacement(logVerbose, "gridBounds:") var totalW, totalH int for i, val := range w.logicalW { if (i < child.parentW) { - log(logNow, "gridBounds() (w, logicalW[])", i, val) + log(logVerbose, "gridBounds() (w, logicalW[])", i, val) totalW += w.logicalW[i] } } @@ -35,9 +67,21 @@ func (w *cuiWidget) gridBounds() { totalH += h } } - log(logNow, "gridBounds()", child.id, "parent (W,H) =", child.parentW, child.parentH, - "total (W,H) =", totalW, totalH, child.name) + + // the new corner to move the child to + realW := w.nextW + totalW + realH := w.nextH + totalH + + + log(logInfo, "gridBounds()", child.id, "parent (W,H) =", child.parentW, child.parentH, + "total (W,H) =", totalW, totalH, + "real (W,H) =", realW, realH) + child.moveTo(realW, realH) + child.showWidgetPlacement(logInfo, "gridBounds:") + log(logInfo) } + w.updateLogicalSizes() + w.showWidgetPlacement(logNow, "gridBounds:") } func (w *cuiWidget) doWidgetClick() { @@ -55,8 +99,16 @@ func (w *cuiWidget) doWidgetClick() { w.toggleTree() case toolkit.Grid: w.gridBounds() - // w.redoBox(true) + for _, child := range w.children { + child.showWidgetPlacement(logNow, "gridBounds:") + if (child.v == nil) { + child.drawView() + } else { + child.deleteView() + } + } // w.toggleTree() + // w.redoBox(true) case toolkit.Box: // w.showWidgetPlacement(logNow, "drawTree()") if (w.horizontal) { @@ -67,8 +119,6 @@ func (w *cuiWidget) doWidgetClick() { w.redoBox(true) w.toggleTree() default: - // w.textResize() - // something } } @@ -91,7 +141,7 @@ func (w *cuiWidget) drawTree(draw bool) { } w.showWidgetPlacement(logNow, "drawTree()") if (draw) { - w.textResize() + // w.textResize() w.drawView() } else { w.deleteView() @@ -188,7 +238,6 @@ func ctrlDown(g *gocui.Gui, v *gocui.View) error { me.ctrlDown.realSize.w1 = found.logicalSize.w1 me.ctrlDown.realSize.h0 = found.logicalSize.h0 me.ctrlDown.realSize.h1 = found.logicalSize.h1 - // me.ctrlDown.textResize() if (me.ctrlDown.v == nil) { me.ctrlDown.text = found.text diff --git a/toolkit/gocui/common.go b/toolkit/gocui/common.go index 6d0da27..cfb177b 100644 --- a/toolkit/gocui/common.go +++ b/toolkit/gocui/common.go @@ -20,6 +20,10 @@ func setupWidget(a *toolkit.Action) *cuiWidget { w.width = a.Width w.height = a.Height + t := len(w.text) + w.realWidth = t + me.buttonPadding + w.realHeight = me.defaultHeight + w.widgetType = a.WidgetType w.id = a.WidgetId // set the name used by gocui to the id diff --git a/toolkit/gocui/place.go b/toolkit/gocui/place.go index 4a4d102..35c0980 100644 --- a/toolkit/gocui/place.go +++ b/toolkit/gocui/place.go @@ -61,8 +61,6 @@ func (w *cuiWidget) redoBox(draw bool) { return } - t := len(w.text) - w.visable = true switch w.widgetType { case toolkit.Window: for _, child := range w.children { @@ -73,42 +71,9 @@ func (w *cuiWidget) redoBox(draw bool) { child.redoBox(draw) } case toolkit.Grid: - log("redoBox GRID", p.nextW, p.nextH, p.name) - log("redoBox GRID", p.nextW, p.nextH, p.name) - log("redoBox GRID", w.nextW, w.nextH, w.name, w.text) - // hmm - w.nextW = p.nextW w.nextH = p.nextH - - var wCount int = 0 - var hCount int = 0 - for _, child := range w.children { - // increment for the next child - w.nextW = p.nextW + wCount * 20 - w.nextH = p.nextH + hCount * 2 - child.redoBox(draw) - - // set the child's realWidth, and grid offset - child.parentH = hCount - child.parentW = wCount - if (w.logicalW[wCount] < child.realWidth) { - w.logicalW[wCount] = child.realWidth - } - if (w.logicalH[hCount] < child.realHeight) { - w.logicalH[hCount] = child.realHeight - } - log(logNow, "redoBox(GRID) (w,h count)", wCount, hCount, "(X,Y)", w.x, w.y, w.name) - child.showWidgetPlacement(logNow, "grid:") - - if ((wCount + 1) < w.y) { - wCount += 1 - } else { - wCount = 0 - hCount += 1 - } - } - w.showWidgetPlacement(logNow, "grid:") + w.gridBounds() case toolkit.Box: w.logicalSize.w0 = p.nextW w.logicalSize.h0 = p.nextH @@ -139,18 +104,7 @@ func (w *cuiWidget) redoBox(draw bool) { } w.showWidgetPlacement(logNow, "box:") case toolkit.Group: - w.realWidth = t + me.buttonPadding - w.realHeight = me.defaultHeight - - w.realSize.w0 = p.nextW - w.realSize.h0 = p.nextH - w.realSize.w1 = w.realSize.w0 + w.realWidth - w.realSize.h1 = w.realHeight - - w.logicalSize.w0 = w.realSize.w0 - w.logicalSize.h0 = w.realSize.h0 - w.logicalSize.w1 = w.realSize.w1 - w.logicalSize.h1 = w.realSize.h1 + w.moveTo(p.nextW, p.nextH) w.nextW = p.nextW + me.groupPadding w.nextH = p.nextH + me.buttonPadding @@ -165,18 +119,13 @@ func (w *cuiWidget) redoBox(draw bool) { // p.nextH = w.nextH w.showWidgetPlacement(logNow, "group:") default: - w.boxedPlace(p.nextW, p.nextH) + w.moveTo(p.nextW, p.nextH) w.nextW = w.realSize.w1 w.nextH = w.realSize.h1 } } -func (w *cuiWidget) boxedPlace(leftW int, topH int) { - t := len(w.text) - - w.realWidth = t + me.buttonPadding - w.realHeight = me.defaultHeight - +func (w *cuiWidget) moveTo(leftW int, topH int) { w.realSize.w0 = leftW w.realSize.h0 = topH w.realSize.w1 = leftW + w.realWidth @@ -187,7 +136,7 @@ func (w *cuiWidget) boxedPlace(leftW int, topH int) { w.logicalSize.w1 = w.realSize.w1 w.logicalSize.h1 = w.realSize.h1 - w.showWidgetPlacement(logNow, "bP widget") + w.showWidgetPlacement(logNow, "moveTo()") } func (w *cuiWidget) updateLogicalSizes() {