diff options
Diffstat (limited to 'toolkit/andlabs/tab.go')
| -rw-r--r-- | toolkit/andlabs/tab.go | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/toolkit/andlabs/tab.go b/toolkit/andlabs/tab.go new file mode 100644 index 0000000..c068022 --- /dev/null +++ b/toolkit/andlabs/tab.go @@ -0,0 +1,143 @@ +package toolkit + +import ( + "log" + "time" + + "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 *Toolkit) AddTab(name string) *Toolkit { + var w *ui.Window + var newt *Toolkit + + log.Println("gui.Toolbox.AddTab() sleep 3") + + w = t.uiWindow + if (w == nil) { + log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window") + return nil + } + + if (t.uiTab == nil) { + // this means you have to make a new tab + log.Println("gui.Toolbox.NewTab() GOOD. This should be the first tab:", name) + newt = newTab(w, name) + t.uiTab = newt.uiTab + } else { + log.Println("gui.Toolbox.NewTab() GOOD. This should be an additional tab:", name) + newt = t.appendTab(name) + // this means you have to append a tab + } + log.Println("t:") + t.Dump() + log.Println("newt:") + newt.Dump() + + return newt +} + +func (t *Toolkit) SetTabBox(box *ui.Box) { + var tab *ui.Tab + + log.Println("wit/gui/toolkit SetTabBox()") + t.Dump() + if (t.uiTab == nil) { + log.Println("wit/gui/toolkit SetTabBox() got uiTab == nil") + panic("fucknuts") + return + } + if (t.uiBox == nil) { + log.Println("wit/gui/toolkit SetTabBox() got uiBox == nil. Appending a new tab here") + tab = t.uiTab + tab.Append(t.Name, box) + tabSetMargined(tab) + return + } else { + log.Println("wit/gui/toolkit SetTabBox() got uiBox != nil. Appending the box to the existing box strechy = true") + t.uiBox.Append(box, true) // strechy == true + t.uiBox2 = box + // t.uiBox.Append(box, false) // strechy == false + return + } + +} + +// 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++ { + tab.SetMargined(i, true) + } +} + +func newTab(w *ui.Window, name string) *Toolkit { + log.Println("gui.Toolbox.NewTab() ADD", name) + var t Toolkit + + if (w == nil) { + log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window") + log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window") + log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window") + time.Sleep(1 * time.Second) + return nil + } + log.Println("gui.Toolbox.AddTab() START name =", name) + // time.Sleep(2 * time.Second) + tab := ui.NewTab() + w.SetMargined(true) + + hbox := ui.NewHorizontalBox() // this makes everything go along the horizon + // hbox := ui.NewVerticalBox() + hbox.SetPadded(true) + tab.Append(name, hbox) + w.SetChild(tab) + + t.uiWindow = w + t.uiTab = tab + t.uiBox = hbox + // tabSetMargined(newNode.uiTab) + return &t +} + +func (t *Toolkit) appendTab(name string) *Toolkit { + log.Println("gui.Toolbox.NewTab() ADD", name) + var newT Toolkit + + if (t.uiWindow == nil) { + log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window") + log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window") + log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window") + time.Sleep(1 * time.Second) + return nil + } + log.Println("gui.Toolbox.AddTab() START name =", name) + + hbox := ui.NewHorizontalBox() // this makes everything go along the horizon + // hbox := ui.NewVerticalBox() + hbox.SetPadded(true) + t.uiTab.Append(name, hbox) + // w.SetChild(tab) + + newT.uiWindow = t.uiWindow + newT.uiTab = t.uiTab + newT.uiBox = hbox + // tabSetMargined(newNode.uiTab) + return &newT +} |
