package main import ( // "github.com/awesome-gocui/gocui" "git.wit.org/wit/gui/toolkit" ) /* // find the start (w,h) for child a inside a box widget func (w *cuiWidget) setBoxWH() { p := w.parent // the parent must be a box widget // update parent gocuiSize p.realWidth = 0 p.realHeight = 0 for _, child := range p.children { p.realWidth += child.realWidth p.realHeight += child.realHeight } // compute child offset w.startW = p.startW w.startH = p.startH for _, child := range p.children { if (p.horizontal) { log("BOX IS HORIZONTAL (w,h)", w.startW, w.startH) log("BOX IS HORIZONTAL (w,h)", w.startW, w.startH) log("BOX IS HORIZONTAL (w,h)", w.startW, w.startH) w.startW += child.realWidth } else { log("BOX IS VERTICAL (w,h)", w.startW, w.startH) log("BOX IS VERTICAL (w,h)", w.startW, w.startH) log("BOX IS VERTICAL (w,h)", w.startW, w.startH) w.startH += child.realHeight } if child == w { return } } return } */ // find the start (w,h) for child a inside a Group widget func (w *cuiWidget) getGroupWH() { p := w.parent // the parent must be a group widget // update parent gocuiSize p.realWidth = 0 p.realHeight = 0 p.realHeight += me.buttonPadding // pad height for the group label for _, child := range p.children { p.realWidth += child.realWidth p.realHeight += child.realHeight } // compute child offset w.startW = p.startW w.startH = p.startH for _, child := range p.children { w.startH += child.realHeight if child == w { return } } return } func (w *cuiWidget) drawBox() { if (w == nil) { return } if (me.rootNode == nil) { return } p := w.parent if (p == nil) { log(logInfo, "redoBox()", w.id, "parent == nil") return } switch w.widgetType { case toolkit.Window: // draw only one thing for _, child := range w.children { child.drawBox() return } case toolkit.Tab: // draw only one thing for _, child := range w.children { child.drawBox() return } case toolkit.Grid: w.startW = p.startW w.startH = p.startH w.drawGrid() w.showWidgetPlacement(logNow, "drawBox:") case toolkit.Box: w.startW = p.startW w.startH = p.startH w.nextW = p.startW w.nextH = p.startH var maxW int var maxH int for _, child := range w.children { child.drawBox() if (w.horizontal) { log("BOX IS HORIZONTAL") // expand based on the child width w.startW += child.realWidth } else { log("BOX IS VERTICAL") // expand based on the child height w.startH += child.realHeight } if (maxW < child.realWidth) { maxW = child.realWidth } if (maxH < child.realHeight) { maxH = child.realHeight } } w.realWidth = maxW w.realHeight = maxH w.showWidgetPlacement(logNow, "drawBox:") case toolkit.Group: w.startW = p.startW w.startH = p.startH w.nextW = p.startW w.nextH = p.startH w.gocuiSize.startW = w.startW w.gocuiSize.startH = w.startH w.realWidth = w.gocuiSize.width w.realHeight = w.gocuiSize.height w.setWH() w.startW = p.startW + 4 w.startH = p.startH + 3 var maxW int var maxH int for _, child := range w.children { child.drawBox() // reset nextW to straight down w.startH += child.realHeight if (maxW < child.realWidth) { maxW = child.realWidth } if (maxH < child.realHeight) { maxH = child.realHeight } } w.realWidth += maxW w.realHeight += maxH w.showWidgetPlacement(logNow, "drawBox:") default: w.startW = p.startW w.startH = p.startH w.gocuiSize.startW = w.startW w.gocuiSize.startH = w.startH w.setWH() w.showWidgetPlacement(logNow, "drawBox:") } } func (w *cuiWidget) setWH() { w.gocuiSize.w0 = w.gocuiSize.startW w.gocuiSize.h0 = w.gocuiSize.startH w.gocuiSize.w1 = w.gocuiSize.w0 + w.gocuiSize.width w.gocuiSize.h1 = w.gocuiSize.h0 + w.gocuiSize.height } func (w *cuiWidget) moveTo(leftW int, topH int) { if (w.isFake) { return } w.gocuiSize.startW = leftW w.gocuiSize.startH = topH w.setWH() w.showWidgetPlacement(logNow, "moveTo()") } func (w *cuiWidget) drawGrid() { w.showWidgetPlacement(logNow, "gridBounds:") var wCount int = 0 var hCount int = 0 for _, child := range w.children { // increment for the next child w.nextW = w.startW + wCount * 20 w.nextH = w.startH + hCount * 2 // child.drawBox() // set the child's realWidth, and grid offset child.parentH = hCount child.parentW = wCount if (w.widths[wCount] < child.realWidth) { w.widths[wCount] = child.realWidth } if (w.heights[hCount] < child.realHeight) { w.heights[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 } } // reset the size of the whole grid w.realWidth = 0 w.realHeight = 0 for _, val := range w.widths { w.realWidth += val } for _, val := range w.heights { w.realHeight += val } for _, child := range w.children { child.showWidgetPlacement(logVerbose, "gridBounds:") var totalW, totalH int for i, val := range w.widths { if (i < child.parentW) { log(logVerbose, "gridBounds() (w, widths[])", i, val) totalW += w.widths[i] } } for i, h := range w.heights { if (i < child.parentH) { totalH += h } } // the new corner to move the child to realW := w.nextW + totalW realH := w.nextH + totalH log(logNow, "gridBounds()", child.id, "parent (W,H) =", child.parentW, child.parentH, "total (W,H) =", totalW, totalH, "real (W,H) =", realW, realH) w.startW = realW w.startH = realH child.drawBox() child.showWidgetPlacement(logInfo, "gridBounds:") log(logInfo) } // w.updateLogicalSizes() w.showWidgetPlacement(logNow, "gridBounds:") }