diff options
| author | Jeff Carr <[email protected]> | 2024-01-17 23:54:19 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2024-01-17 23:54:19 -0600 |
| commit | b25f15ea7803e172204432082740d081e5f19f81 (patch) | |
| tree | 025146f42287e7b5d91850366f7fccf49d8ced9b /tab.go | |
the golang way. everything in it's own repov0.0.1
Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'tab.go')
| -rw-r--r-- | tab.go | 117 |
1 files changed, 117 insertions, 0 deletions
@@ -0,0 +1,117 @@ +package main + +import ( + "go.wit.com/lib/widget" + "go.wit.com/log" + + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/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 (p *node) newTab(n *node) { + var newt *guiWidget + + if p == nil { + log.Log(ERROR, "newTab() p == nil. how the fuck does this happen?", n.WidgetId, n.ParentId) + } + if p.WidgetType != widget.Window { + log.Log(ERROR, "newTab() uiWindow == nil. I can't add a toolbar without window", n.WidgetId, n.ParentId) + return + } + t := p.tk + + log.Log(TOOLKIT, "newTab() START", n.WidgetId, n.ParentId) + + if t.uiTab == nil { + // this means you have to make a new tab + log.Log(TOOLKIT, "newTab() GOOD. This should be the first tab:", n.WidgetId, n.ParentId) + newt = rawTab(t.uiWindow, widget.GetString(n.value)) + t.uiTab = newt.uiTab + } else { + // this means you have to append a tab + log.Log(TOOLKIT, "newTab() GOOD. This should be an additional tab:", n.WidgetId, n.ParentId) + if n.WidgetType == widget.Tab { + // andlabs doesn't have multiple tab widgets so make a fake one? + // this makes a guiWidget internal structure with the parent values + newt = new(guiWidget) + newt.uiWindow = t.uiWindow + newt.uiTab = t.uiTab + } else { + newt = t.appendTab(widget.GetString(n.value)) + } + } + + n.tk = newt +} + +// This sets _all_ the tabs to Margin = true +// +// TODO: do proper tab tracking (will be complicated). low priority +func tabSetMargined(tab *ui.Tab, b bool) { + c := tab.NumPages() + for i := 0; i < c; i++ { + log.Log(TOOLKIT, "SetMargined", i, b) + tab.SetMargined(i, b) + } +} + +func rawTab(w *ui.Window, name string) *guiWidget { + var newt guiWidget + log.Log(TOOLKIT, "rawTab() START", name) + + if w == nil { + log.Log(ERROR, "UiWindow == nil. I can't add a tab without a window") + log.Log(ERROR, "UiWindow == nil. I can't add a tab without a window") + log.Log(ERROR, "UiWindow == nil. I can't add a tab without a window") + // sleep(1) + return nil + } + + tab := ui.NewTab() + w.SetChild(tab) + newt.uiTab = tab + newt.uiControl = tab + log.Log(TOOLKIT, "rawTab() END", name) + return &newt +} + +func (t *guiWidget) appendTab(name string) *guiWidget { + var newT guiWidget + log.Log(TOOLKIT, "appendTab() ADD", name) + + if t.uiTab == nil { + log.Log(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.Log(TOOLKIT, "appendTab() 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 +} |
