summaryrefslogtreecommitdiff
path: root/tab.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-01-17 23:54:19 -0600
committerJeff Carr <[email protected]>2024-01-17 23:54:19 -0600
commitb25f15ea7803e172204432082740d081e5f19f81 (patch)
tree025146f42287e7b5d91850366f7fccf49d8ced9b /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.go117
1 files changed, 117 insertions, 0 deletions
diff --git a/tab.go b/tab.go
new file mode 100644
index 0000000..2307e6b
--- /dev/null
+++ b/tab.go
@@ -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
+}