118 lines
3.1 KiB
Go
118 lines
3.1 KiB
Go
package main
|
|
|
|
import (
|
|
"go.wit.com/log"
|
|
"go.wit.com/widget"
|
|
|
|
"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
|
|
}
|