// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main import ( "fmt" "go.wit.com/toolkits/tree" "go.wit.com/widget" ) func (tk *guiWidget) redrawWindow(w int, h int) { if tk.node.WidgetType != widget.Window { return } // pin the window to (w,h) tk.gocuiSize.w0 = w tk.gocuiSize.h0 = h tk.force.w0 = w tk.force.w1 = w tk.force.h0 = h tk.force.h1 = h tk.setFullSize() // might make the green box the right size tk.frame = false tk.hasTabs = false tk.DrawAt(w, h) tk.setColor(&colorActiveW) // sets the window to Green BG tk.placeWidgets(w, h) // compute the sizes & places for each widget // this is a test. this should not be needed tk.full.w0 = tk.force.w0 tk.full.h0 = tk.force.h0 tk.setFullSize() me.baseGui.SetView(tk.cuiName, tk.gocuiSize.w0, tk.gocuiSize.h0, tk.gocuiSize.w1, tk.gocuiSize.h1, 0) tk.Show() tk.showWidgets() if tk.windowFrame == nil { tk.addWindowFrameTK(0 - tk.node.WidgetId) tk.windowFrame.node.State.Label = "windowFrame" tk.windowFrame.makeTK([]string{"windowFrame"}) } // tk.windowFrame.MoveToOffset(w, h+2) r := tk.getFullSize() tk.windowFrame.gocuiSize.w0 = tk.force.w0 tk.windowFrame.gocuiSize.w1 = r.w1 + 1 tk.windowFrame.gocuiSize.h0 = tk.force.h0 + 2 tk.windowFrame.gocuiSize.h1 = r.h1 + 1 tk.windowFrame.full.w0 = tk.force.w0 tk.windowFrame.full.w1 = r.w1 + 1 tk.windowFrame.full.h0 = tk.force.h0 + 2 tk.windowFrame.full.h1 = r.h1 + 1 // tk.windowFrame.drawView() tk.windowFrame.Hide() tk.windowFrame.Show() me.baseGui.SetViewBeneath(tk.windowFrame.cuiName, tk.cuiName, 1) me.baseGui.SetView(tk.windowFrame.cuiName, tk.windowFrame.full.w0, tk.windowFrame.full.h0, tk.windowFrame.full.w1, tk.windowFrame.full.h1, 0) tk.hideWidgets() tk.showWidgets() // tk.windowFrame.drawView() } // re-draws the buttons for each of the windows func redoWindows(nextW int, nextH int) { for _, win := range findWindows() { win.dumpWidget(fmt.Sprintf("redoWindowsS (%d,%d)", nextW, nextH)) win.redrawWindow(nextW, nextH) win.dumpWidget(fmt.Sprintf("redoWindowsE (%d,%d)", nextW, nextH)) // increment the width for the next window nextW += 40 nextH += 10 } } func (tk *guiWidget) addWindowFrameTK(wId int) { n := tk.addWindowFrame(wId) tk.windowFrame = n.TK.(*guiWidget) } func (win *guiWidget) addWindowFrame(wId int) *tree.Node { n := new(tree.Node) n.WidgetType = widget.Flag n.WidgetId = wId n.ParentId = 0 // store the internal toolkit information tk := new(guiWidget) tk.frame = true tk.labelN = "windowFrame text" tk.internal = true tk.node = n if tk.node.Parent == nil { tk.node.Parent = me.treeRoot } // copy the data from the action message tk.node.State.Label = "windowFrame" // set the name used by gocui to the id tk.cuiName = fmt.Sprintf("%d DR", wId) tk.color = &colorGroup // add this new widget on the binary tree tk.parent = win if tk.parent == nil { panic("addDropdown() didn't get treeRoot guiWidget") } else { tk.parent.children = append(tk.parent.children, tk) } n.TK = tk return n }