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/democui/view.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/democui/view.go')
| -rw-r--r-- | toolkit/democui/view.go | 349 |
1 files changed, 0 insertions, 349 deletions
diff --git a/toolkit/democui/view.go b/toolkit/democui/view.go deleted file mode 100644 index 5ff44ad..0000000 --- a/toolkit/democui/view.go +++ /dev/null @@ -1,349 +0,0 @@ -package main - -import ( - "fmt" - "errors" - "strconv" - - "github.com/awesome-gocui/gocui" - "git.wit.org/wit/gui/toolkit" -) - -var adjusted bool = false - -// expands the logical size of the parents -func (w *cuiWidget) setParentLogical(p *cuiWidget) { - if (w.visable) { - // expand the parent logicalsize to include the widget realSize - if (p.logicalSize.w0 > w.realSize.w0) { - p.logicalSize.w0 = w.realSize.w0 - adjusted = true - } - if (p.logicalSize.h0 > w.realSize.h0) { - p.logicalSize.h0 = w.realSize.h0 - adjusted = true - } - if (p.logicalSize.w1 < w.realSize.w1) { - p.logicalSize.w1 = w.realSize.w1 - adjusted = true - } - if (p.logicalSize.h1 < w.realSize.h1) { - p.logicalSize.h1 = w.realSize.h1 - adjusted = true - } - } else { - // expand the parent logicalsize to include the widget logicalsize - if (p.logicalSize.w0 > w.logicalSize.w0) { - p.logicalSize.w0 = w.logicalSize.w0 - adjusted = true - } - if (p.logicalSize.h0 > w.logicalSize.h0) { - p.logicalSize.h0 = w.logicalSize.h0 - adjusted = true - } - if (p.logicalSize.w1 < w.logicalSize.w1) { - p.logicalSize.w1 = w.logicalSize.w1 - adjusted = true - } - if (p.logicalSize.h1 < w.logicalSize.h1) { - p.logicalSize.h1 = w.logicalSize.h1 - adjusted = true - } - } - if (w.visable) { - // adjust the widget realSize to the top left corner of the logicalsize - if (w.logicalSize.w0 > w.realSize.w0) { - w.realSize.w0 = w.logicalSize.w0 - w.realSize.w1 = w.realSize.w0 + w.realWidth - adjusted = true - } - if (w.logicalSize.h0 > w.realSize.h0) { - w.realSize.h0 = w.logicalSize.h0 - w.realSize.h1 = w.realSize.h0 + w.realHeight - adjusted = true - } - } - w.showWidgetPlacement(logNow, "setParentLogical() widget") - p.showWidgetPlacement(logNow, "setParentLogical() parent") - if (w.id == 0) || (p.id == 0) { - // stop resizing when you hit the root widget - return - } - // pass the logical resizing up - pP := me.widgets[p.parentId] - if (pP != nil) { - p.setParentLogical(pP) - } -} - -var fakeStartWidth int = 80 -var fakeStartHeight int = 0 -func (w *cuiWidget) setFake() { - if (w.visable) { - return - } - // setup fake labels for non-visable things off screen - w.realWidth = me.defaultWidth - w.realHeight = me.defaultHeight - w.realSize.w0 = fakeStartWidth - w.realSize.h0 = fakeStartHeight - w.realSize.w1 = w.realSize.w0 + me.defaultWidth - w.realSize.h1 = w.realSize.h0 + me.defaultHeight - fakeStartHeight += 2 - w.showWidgetPlacement(logNow, "setFake()") -} - -func drawView(w *cuiWidget) *gocui.View { - var newName string = "" - newName = strconv.Itoa(w.id) - if (me.baseGui == nil) { - log(logError, "drawView() me.baseGui == nil") - return nil - } - - a := w.realSize.w0 - b := w.realSize.h0 - c := w.realSize.w1 - d := w.realSize.h1 - v, err := me.baseGui.SetView(newName, a, b, c, d, 0) - if err == nil { - log(logError, "drawView() internal plugin error err = nil") - return nil - } - if !errors.Is(err, gocui.ErrUnknownView) { - log(logError, "drawView() internal plugin error error.IS()", err) - return nil - } - w.v = v - - return v -} - -func boxedPlace(w *cuiWidget) { - t := len(w.name) - if (w.id == 0) { - w.realWidth = 0 - w.realHeight = 0 - return - } - p := me.widgets[w.parentId] - if (p == nil) { - log(logError, "ERRRRRRRRRRRORRRRRRRRRRRRR: parentId widget == nil") - return - } - - switch p.widgetType { - case toolkit.Box: - w.realWidth = t + 3 - w.realHeight = me.defaultHeight - w.realSize.w0 = p.nextX - w.realSize.h0 = p.nextY - w.realSize.w1 = p.nextX + w.realWidth - w.realSize.h1 = p.nextY + w.realHeight - - w.logicalSize.w0 = p.nextX - w.logicalSize.h0 = p.nextY - w.logicalSize.w1 = p.nextX + w.realWidth - w.logicalSize.h1 = p.nextY + w.realHeight - - w.nextX = p.nextX - w.nextY = p.nextY - if (w.horizontal) { - log(logNow, "PARENT BOX IS HORIZONTAL") - p.nextX += w.realWidth - } else { - log(logNow, "PARENT BOX IS VERTICAL") - p.nextY += w.realHeight - } - case toolkit.Group: - w.realWidth = t + 3 - w.realHeight = me.defaultHeight - - w.realSize.w0 = p.nextX - w.realSize.h0 = p.nextY - w.realSize.w1 = p.nextX + w.realWidth - w.realSize.h1 = p.nextY + w.realHeight - - w.logicalSize.w0 = p.nextX - w.logicalSize.h0 = p.nextY - w.logicalSize.w1 = p.nextX + w.realWidth - w.logicalSize.h1 = p.nextY + w.realHeight - - w.nextX = w.logicalSize.w0 + 3 // default group padding - w.nextY = w.logicalSize.h1 - - // increment parent - p.nextY += w.realHeight - default: - w.realWidth = t + 3 - w.realHeight = me.defaultHeight - w.realSize.w0 = p.nextX - w.realSize.h0 = p.nextY - w.realSize.w1 = w.realSize.w0 + w.realWidth - w.realSize.h1 = w.realSize.h0 + w.realHeight - - // increment parent - p.nextY += w.realHeight - } - p.showWidgetPlacement(logNow, "bP parent") - w.showWidgetPlacement(logNow, "bP widget") -} - -func findPlace(w *cuiWidget, a *toolkit.Action) { - t := len(w.name) - w.visable = true - switch w.widgetType { - case toolkit.Root: - w.visable = false - w.setFake() - w.showWidgetPlacement(logNow, "Root:") - case toolkit.Flag: - w.visable = false - w.setFake() - w.showWidgetPlacement(logNow, "Flag:") - case toolkit.Window: - w.realWidth = t + 3 - w.realHeight = me.defaultHeight - - w.realSize.w0 = me.nextW - w.realSize.h0 = 0 - w.realSize.w1 = w.realSize.w0 + w.realWidth - w.realSize.h1 = w.realHeight - - w.logicalSize.w0 = me.nextW - w.logicalSize.h0 = 0 - w.logicalSize.w1 = w.logicalSize.w0 + w.realWidth - w.logicalSize.h1 = w.realHeight - - w.nextX = w.logicalSize.w0 + t // default group padding - w.nextY = w.logicalSize.h1 - - me.nextW += w.realWidth - w.showWidgetPlacement(logNow, "window:") - case toolkit.Tab: - w.realWidth = t + 3 - w.realHeight = me.defaultHeight - - w.realSize.w0 = me.nextW - w.realSize.h0 = 0 - w.realSize.w1 = w.realSize.w0 + w.realWidth - w.realSize.h1 = w.realHeight - - w.logicalSize.w0 = me.nextW - w.logicalSize.h0 = 0 - w.logicalSize.w1 = w.logicalSize.w0 + w.realWidth - w.logicalSize.h1 = w.realHeight - - w.nextX = w.logicalSize.w0 + t // default group padding - w.nextY = w.logicalSize.h1 - me.nextW += w.realWidth - w.showWidgetPlacement(logNow, "tab:") - case toolkit.Grid: - p := me.widgets[w.parentId] - w.horizontal = a.B - w.visable = false - w.setFake() - - if (p == nil) { - log(logError, "ERRRRRRRRRRRORRRRRRRRRRRRR: parentId widget == nil") - return - } - w.logicalSize.w0 = p.nextX - w.logicalSize.h0 = p.nextY - w.logicalSize.w1 = p.nextX - w.logicalSize.h1 = p.nextY - - w.nextX = p.nextX - w.nextY = p.nextY - w.showWidgetPlacement(logNow, "grid:") - case toolkit.Box: - p := me.widgets[w.parentId] - w.horizontal = a.B - w.visable = false - w.setFake() - - if (p == nil) { - log(logError, "ERRRRRRRRRRRORRRRRRRRRRRRR: parentId widget == nil") - return - } - w.logicalSize.w0 = p.nextX - w.logicalSize.h0 = p.nextY - w.logicalSize.w1 = p.nextX - w.logicalSize.h1 = p.nextY - - w.nextX = p.nextX - w.nextY = p.nextY - w.showWidgetPlacement(logNow, "box:") - case toolkit.Group: - p := me.widgets[w.parentId] - w.horizontal = a.B - w.visable = false - w.setFake() - - if (p == nil) { - log(logError, "ERRRRRRRRRRRORRRRRRRRRRRRR: parentId widget == nil") - return - } - w.logicalSize.w0 = p.nextX - w.logicalSize.h0 = p.nextY - w.logicalSize.w1 = p.nextX - w.logicalSize.h1 = p.nextY - - w.nextX = p.nextX - w.nextY = p.nextY - w.showWidgetPlacement(logNow, "group:") - default: - boxedPlace(w) - } -} - -func place(w *cuiWidget, a *toolkit.Action) { - log(logInfo, "place() START") - findPlace(w, a) - v := drawView(w) - if (v == nil) { - log(logError, "place() drawView(w) returned nil") - return - } - me.baseGui.SetKeybinding(v.Name(), gocui.MouseLeft, gocui.ModNone, click) - - v.Wrap = true - fmt.Fprintln(v, " " + w.name) - - w.SetDefaultWidgetColor() - - log(logInfo, "place() END") - return -} - -func (w *cuiWidget) drawView() { - var err error - if (me.baseGui == nil) { - log(logError, "drawView() me.baseGui == nil") - return - } - - a := w.realSize.w0 - b := w.realSize.h0 - c := w.realSize.w1 - d := w.realSize.h1 - - var newName string = "" - newName = strconv.Itoa(w.id) - w.v, err = me.baseGui.SetView(newName, a, b, c, d, 0) - if err == nil { - log(logError, "drawView() internal plugin error err = nil") - return - } - if !errors.Is(err, gocui.ErrUnknownView) { - log(logError, "drawView() internal plugin error error.IS()", err) - return - } - - me.baseGui.SetKeybinding(w.v.Name(), gocui.MouseLeft, gocui.ModNone, click) - - w.v.Wrap = true - fmt.Fprintln(w.v, " " + w.text) - - w.SetDefaultWidgetColor() -} |
