summaryrefslogtreecommitdiff
path: root/toolkit/gocui/place.go
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/gocui/place.go')
-rw-r--r--toolkit/gocui/place.go221
1 files changed, 221 insertions, 0 deletions
diff --git a/toolkit/gocui/place.go b/toolkit/gocui/place.go
new file mode 100644
index 0000000..905ebed
--- /dev/null
+++ b/toolkit/gocui/place.go
@@ -0,0 +1,221 @@
+package main
+
+import (
+// "github.com/awesome-gocui/gocui"
+ "git.wit.org/wit/gui/toolkit"
+)
+
+var fakeStartWidth int = 80
+var fakeStartHeight int = 0
+func (w *cuiWidget) setFake() {
+ if (w.visable) {
+ return
+ }
+ t := len(w.name)
+ // setup fake labels for non-visable things off screen
+ w.realWidth = t + 2
+ w.realHeight = me.defaultHeight
+ w.realSize.w0 = fakeStartWidth
+ w.realSize.h0 = fakeStartHeight
+ w.realSize.w1 = w.realSize.w0 + w.realWidth
+ w.realSize.h1 = w.realSize.h0 + w.realHeight
+ fakeStartHeight += 3
+ if (fakeStartHeight > 24) {
+ fakeStartHeight = 0
+ fakeStartWidth += 20
+ }
+ w.showWidgetPlacement(logNow, "setFake()")
+}
+
+func findPlace(w *cuiWidget) {
+ w.visable = true
+ switch w.widgetType {
+ case toolkit.Root:
+ w.visable = false
+ w.setFake()
+ case toolkit.Flag:
+ w.visable = false
+ w.setFake()
+ case toolkit.Grid:
+ w.visable = false
+ w.setFake()
+ case toolkit.Box:
+ w.visable = false
+ w.setFake()
+ default:
+ w.redoBox(true)
+ }
+}
+
+func (w *cuiWidget) redoBox(draw bool) {
+ if (w == nil) {
+ return
+ }
+ if (me.rootNode == nil) {
+ return
+ }
+ p := w.parent
+ if (p == nil) {
+ log(logInfo, "redoBox()", w.id, "parent == nil")
+ return
+ }
+
+ t := len(w.text)
+ w.visable = true
+ switch w.widgetType {
+ case toolkit.Window:
+ for _, child := range w.children {
+ child.redoBox(draw)
+ }
+ case toolkit.Tab:
+ for _, child := range w.children {
+ child.redoBox(draw)
+ }
+ case toolkit.Grid:
+ // hmm
+ w.logicalSize.w0 = p.nextW
+ w.logicalSize.h0 = p.nextH
+ w.logicalSize.w1 = p.nextW
+ w.logicalSize.h1 = p.nextH
+
+ w.nextW = p.nextW
+ w.nextH = p.nextH
+
+ var wCount, hCount int
+ var b bool = true
+ for _, child := range w.children {
+ child.redoBox(draw)
+ if (b) {
+ wCount += 1
+ b = false
+ } else {
+ wCount = 0
+ w.nextH += 1
+ b = true
+ }
+ w.nextW = p.nextW + wCount * 20
+ w.nextH = p.nextH + hCount * 4
+ log(logInfo, "redoBox(GRID) (w,h count)", wCount, hCount, "(X,Y)", w.x, w.y, w.name)
+ }
+ w.showWidgetPlacement(logNow, "grid:")
+ case toolkit.Box:
+ w.logicalSize.w0 = p.nextW
+ w.logicalSize.h0 = p.nextH
+ w.logicalSize.w1 = p.nextW
+ w.logicalSize.h1 = p.nextH
+
+ w.nextW = p.nextW
+ w.nextH = p.nextH
+ for _, child := range w.children {
+ child.redoBox(draw)
+ if (w.horizontal) {
+ log("BOX IS HORIZONTAL", p.nextW, p.nextW, p.name)
+ log("BOX IS HORIZONTAL", w.nextW, w.nextH, w.name)
+ log("BOX IS HORIZONTAL")
+ // expand based on the child width
+ w.nextW = child.nextW + me.horizontalPadding
+ // reset height to parent
+ w.nextH = p.nextH
+ } else {
+ log("BOX IS VERTICAL", p.nextW, p.nextW, p.name)
+ log("BOX IS VERTICAL", w.nextW, w.nextH, w.name)
+ log("BOX IS VERTICAL")
+ // go straight down
+ w.nextW = p.nextW
+ // expand based on the child height
+ w.nextH = child.nextH
+ }
+ }
+ 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.nextW = p.nextW + me.groupPadding
+ w.nextH = p.nextH + me.buttonPadding
+ for _, child := range w.children {
+ child.redoBox(draw)
+ // reset nextW to straight down
+ w.nextW = p.nextW + 4
+ w.nextH = child.nextH
+ }
+ // expand the height of the parent now that the group is done
+ // p.nextW = w.nextW
+ // p.nextH = w.nextH
+ w.showWidgetPlacement(logNow, "group:")
+ default:
+ w.realWidth = t + 3
+ w.realHeight = me.defaultHeight
+ w.realSize.w0 = p.nextW
+ w.realSize.h0 = p.nextH
+ w.realSize.w1 = p.nextW + w.realWidth
+ w.realSize.h1 = p.nextH + w.realHeight
+
+ w.logicalSize.w0 = p.nextW
+ w.logicalSize.h0 = p.nextH
+ w.logicalSize.w1 = p.nextW + w.realWidth
+ w.logicalSize.h1 = p.nextH + w.realHeight
+
+ w.nextW = w.realSize.w1
+ w.nextH = w.realSize.h1
+ }
+}
+
+func (w *cuiWidget) boxedPlace() {
+ t := len(w.name)
+ if (w.id == 0) {
+ w.realWidth = 0
+ w.realHeight = 0
+ return
+ }
+ p := w.parent
+ if (p == nil) {
+ log(logError, "boxedPlace() parentId widget == nil")
+ return
+ }
+
+ w.realWidth = t + 3
+ w.realHeight = me.defaultHeight
+ w.realSize.w0 = p.nextW
+ w.realSize.h0 = p.nextH
+ w.realSize.w1 = p.nextW + w.realWidth
+ w.realSize.h1 = p.nextH + w.realHeight
+
+ w.logicalSize.w0 = p.nextW
+ w.logicalSize.h0 = p.nextH
+ w.logicalSize.w1 = p.nextW + w.realWidth
+ w.logicalSize.h1 = p.nextH + w.realHeight
+
+ w.nextW = w.realSize.w1
+ w.nextH = w.realSize.h1
+
+ w.showWidgetPlacement(logNow, "bP widget")
+}
+
+func (w *cuiWidget) updateLogicalSizes() {
+ for _, child := range w.children {
+ child.updateLogicalSizes()
+ if (w.logicalSize.w0 > child.logicalSize.w0) {
+ w.logicalSize.w0 = child.logicalSize.w0
+ }
+ if (w.logicalSize.w1 < child.logicalSize.w1) {
+ w.logicalSize.w1 = child.logicalSize.w1
+ }
+ if (w.logicalSize.h0 > child.logicalSize.h0) {
+ w.logicalSize.h0 = child.logicalSize.h0
+ }
+ if (w.logicalSize.h1 < child.logicalSize.h1) {
+ w.logicalSize.h1 = child.logicalSize.h1
+ }
+ }
+}