new-gui/toolkit/andlabs/tab.go

183 lines
4.5 KiB
Go
Raw Normal View History

package main
import (
"git.wit.org/wit/gui/toolkit"
"github.com/andlabs/ui"
_ "github.com/andlabs/ui/winmanifest"
)
/*
This adds a tab
andlabs/ui is goofy in the sense that you have to determine
if the ui.Window already has a tab in it. If it does, then
you need to add this tab and not run SetChild() on the window
or instead it replaces the existing tab with the new one
I work around this by always sending a Toolkit that is a tab
once there is one. If you send a Window here, it will replace
any existing tabs rather than adding a new one
*/
func (t *andlabsT) newTab(name string) *andlabsT {
// var w *ui.Window
var newt *andlabsT
log(debugToolkit, "gui.toolkit.AddTab()")
if (t.uiWindow == nil) {
log(debugToolkit, "gui.Toolkit.UiWindow == nil. I can't add a toolbar without window")
return nil
}
if (t.uiTab == nil) {
// this means you have to make a new tab
log(debugToolkit, "gui.toolkit.NewTab() GOOD. This should be the first tab:", name)
newt = rawTab(t.uiWindow, name)
t.uiTab = newt.uiTab
} else {
// this means you have to append a tab
log(debugToolkit, "gui.toolkit.NewTab() GOOD. This should be an additional tab:", name)
newt = t.appendTab(name)
}
newt.Name = name
log(debugToolkit, "t:")
t.Dump(debugToolkit)
log(debugToolkit, "newt:")
newt.Dump(debugToolkit)
return newt
}
// This sets _all_ the tabs to Margin = true
//
// TODO: do proper tab tracking (will be complicated). low priority
func tabSetMargined(tab *ui.Tab) {
c := tab.NumPages()
for i := 0; i < c; i++ {
log(debugToolkit, "SetMargined", i, margin)
tab.SetMargined(i, margin)
}
}
func rawTab(w *ui.Window, name string) *andlabsT {
var newt andlabsT
log(debugToolkit, "gui.toolkit.NewTab() ADD", name)
if (w == nil) {
log(debugToolkit, "gui.toolkit.NewTab() node.UiWindow == nil. I can't add a tab without a window")
log(debugToolkit, "gui.toolkit.NewTab() node.UiWindow == nil. I can't add a tab without a window")
log(debugToolkit, "gui.toolkit.NewTab() node.UiWindow == nil. I can't add a tab without a window")
sleep(1)
return nil
}
log(debugToolkit, "gui.toolkit.AddTab() START name =", name)
tab := ui.NewTab()
w.SetMargined(margin)
hbox := ui.NewHorizontalBox() // this makes everything go along the horizon
hbox.SetPadded(padded)
tab.Append(name, hbox)
tabSetMargined(tab) // TODO: run this in the right place(?)
w.SetChild(tab)
newt.uiWindow = w
newt.uiTab = tab
newt.uiBox = hbox
return &newt
}
func (t *andlabsT) appendTab(name string) *andlabsT {
var newT andlabsT
log(debugToolkit, "gui.toolkit.NewTab() ADD", name)
if (t.uiTab == nil) {
log(debugToolkit, "gui.Toolkit.UiWindow == nil. I can't add a widget without a place to put it")
panic("should never have happened. wit/gui/toolkit has ui.Tab == nil")
}
log(debugToolkit, "gui.toolkit.AddTab() START name =", name)
var hbox *ui.Box
if (defaultBehavior) {
hbox = ui.NewHorizontalBox()
} else {
if (bookshelf) {
hbox = ui.NewHorizontalBox()
} else {
hbox = ui.NewVerticalBox()
}
}
hbox.SetPadded(padded)
t.uiTab.Append(name, hbox)
newT.uiWindow = t.uiWindow
newT.uiTab = t.uiTab
newT.uiBox = hbox
return &newT
}
func newTab(parentW *toolkit.Widget, w *toolkit.Widget) {
var newt *andlabsT
log(debugToolkit, "gui.andlabs.NewTab()", w.Name)
t := mapToolkits[parentW]
if (t == nil) {
log(debugToolkit, "go.andlabs.NewTab() toolkit struct == nil. name=", parentW.Name, w.Name)
return
}
newt = t.newTab(w.Name)
mapWidgetsToolkits(w, newt)
}
Squashed commit of the following: commit 448abc843e2241bab6c399f7a836dccba1defc18 Author: Jeff Carr <jcarr@wit.com> Date: Sun Mar 12 08:35:28 2023 -0500 this should probably be a new release now Signed-off-by: Jeff Carr <jcarr@wit.com> commit a4064f7a6c5ac67437768aa2bc67c75dafc91c4c Author: Jeff Carr <jcarr@wit.com> Date: Sat Mar 11 03:18:23 2023 -0600 able to work on add 'Box' and play with 'Image' Signed-off-by: Jeff Carr <jcarr@wit.com> commit 6e59573d85e82ecb005805f50711dddc2df50480 Author: Jeff Carr <jcarr@wit.com> Date: Sat Mar 11 03:04:34 2023 -0600 rearrange widget debugging Signed-off-by: Jeff Carr <jcarr@wit.com> commit e0570de75c6eb1b4f49e541d9ef5d83ae4434d3d Author: Jeff Carr <jcarr@wit.com> Date: Sat Mar 11 02:29:20 2023 -0600 debugging is lots smarter Signed-off-by: Jeff Carr <jcarr@wit.com> commit ece32a1e43d91cd197d0a8497ad2f034c46126e1 Author: Jeff Carr <jcarr@wit.com> Date: Fri Mar 10 21:38:23 2023 -0600 first pass on a node delete Signed-off-by: Jeff Carr <jcarr@wit.com> commit c91cb0eddb0f73f8dea9b21a16cd76c7e2c19a33 Author: Jeff Carr <jcarr@wit.com> Date: Fri Mar 10 21:06:29 2023 -0600 can recreate window list Signed-off-by: Jeff Carr <jcarr@wit.com> commit 470f9dc26aefd3626b319264fe151aa48d4d5377 Author: Jeff Carr <jcarr@wit.com> Date: Fri Mar 10 12:07:34 2023 -0600 attempt to ressurect mouse in the console plugin Signed-off-by: Jeff Carr <jcarr@wit.com> commit 747bb53e06dda458cc8cd77b665f4d9d07f5e925 Author: Jeff Carr <jcarr@wit.com> Date: Fri Mar 10 10:47:14 2023 -0600 jesus. gocui actually builds and works again as a plugin it didn't take too much to change it Signed-off-by: Jeff Carr <jcarr@wit.com> commit 9283c65c8e9b8d2630b251ad952b6b52caddb307 Author: Jeff Carr <jcarr@wit.com> Date: Fri Mar 10 07:26:53 2023 -0600 show/hide/etc for window widgets Signed-off-by: Jeff Carr <jcarr@wit.com> commit 5724cd7ffd8595ae049a7c9c21cb2f1a993c4b76 Author: Jeff Carr <jcarr@wit.com> Date: Fri Mar 10 06:40:36 2023 -0600 compiles and runs Signed-off-by: Jeff Carr <jcarr@wit.com> commit 44a5e69ce17cb506adfe24ca72cc86caa9ebcc70 Author: Jeff Carr <jcarr@wit.com> Date: Fri Mar 10 05:57:15 2023 -0600 more debugging improvements Signed-off-by: Jeff Carr <jcarr@wit.com> commit b86f145f0252e7545b2e7fa78e1d5960cacb7bad Author: Jeff Carr <jcarr@wit.com> Date: Fri Mar 10 03:42:32 2023 -0600 set margin on tab's works Signed-off-by: Jeff Carr <jcarr@wit.com> commit d2218c08cf44acd5f017a8faa1439ee6d2fd46d5 Author: Jeff Carr <jcarr@wit.com> Date: Thu Mar 9 16:26:21 2023 -0600 ignore all *.so files Signed-off-by: Jeff Carr <jcarr@wit.com> commit e21934fff3cfea30b04df01bf0714f6927aa78f4 Author: Jeff Carr <jcarr@wit.com> Date: Thu Mar 9 16:25:15 2023 -0600 can't embed the toolkit/*.so files here Signed-off-by: Jeff Carr <jcarr@wit.com> commit f1e6c5fc9c8ca36db3ad6109d64612b6850fa856 Author: Jeff Carr <jcarr@wit.com> Date: Thu Mar 9 16:21:14 2023 -0600 andlabs group widget has Show() and Hide() Signed-off-by: Jeff Carr <jcarr@wit.com> commit e8487504aa76ca99c4891b777585a428fda0ef62 Author: Jeff Carr <jcarr@wit.com> Date: Thu Mar 9 16:07:56 2023 -0600 pass the node id into the plugin to use in channels Signed-off-by: Jeff Carr <jcarr@wit.com> commit 3667940a77af4e3855facb9247771d595477302f Author: Jeff Carr <jcarr@wit.com> Date: Thu Mar 9 14:20:21 2023 -0600 fix SetText() on Label Signed-off-by: Jeff Carr <jcarr@wit.com> commit 311d6be66db84b63fb7124df64e2e9be0f0b76a4 Author: Jeff Carr <jcarr@wit.com> Date: Thu Mar 9 14:06:46 2023 -0600 still compiles and runs Signed-off-by: Jeff Carr <jcarr@wit.com> commit ee4e9b21ef59a97f902c6dae2a57ac7b3063fe3b Author: Jeff Carr <jcarr@wit.com> Date: Thu Mar 9 11:02:34 2023 -0600 compiles Signed-off-by: Jeff Carr <jcarr@wit.com> Signed-off-by: Jeff Carr <jcarr@wit.com>
2023-03-12 08:47:16 -05:00
func doTab(p *toolkit.Widget, c *toolkit.Widget) {
if broken(c) {
return
}
if (c.Action == "New") {
newTab(p, c)
return
}
ct := mapToolkits[c]
if (ct == nil) {
log(debugError, "Trying to do something on a widget that doesn't work or doesn't exist or something", c)
return
}
if ct.broken() {
log(debugError, "Tab() ct.broken", ct)
return
}
if (ct.uiTab == nil) {
log(debugError, "Tab() uiTab == nil", ct)
return
}
log(debugChange, "Going to attempt:", c.Action)
switch c.Action {
case "Enable":
ct.uiTab.Enable()
case "Disable":
ct.uiTab.Disable()
case "Show":
ct.uiTab.Show()
case "Hide":
ct.uiTab.Hide()
case "Get":
c.I = ct.uiTab.NumPages()
case "Add":
log(true, "how do I add a tab here in doTab()?")
dump(p, c, true)
case "SetMargin":
i := ct.uiTab.NumPages()
log(true, "tab.NumPages() =", i)
for i > 0 {
i -= 1
log(true, "uiTab.SetMargined(true) for i =", i)
ct.uiTab.SetMargined(i, c.B)
}
default:
log(debugError, "Can't do", c.Action, "to a Tab")
}
}